From cad0c9e601f4ec7b0773ebc38b3415a82ba00a1d Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Mon, 18 Mar 2019 23:36:59 +0300 Subject: [PATCH 01/44] skpm --- arrows.sketchplugin/Contents/Sketch/links.js | 125 +- arrows.sketchplugin/Contents/Sketch/script.js | 1646 +---------------- 2 files changed, 8 insertions(+), 1763 deletions(-) diff --git a/arrows.sketchplugin/Contents/Sketch/links.js b/arrows.sketchplugin/Contents/Sketch/links.js index aa00d24..361a785 100644 --- a/arrows.sketchplugin/Contents/Sketch/links.js +++ b/arrows.sketchplugin/Contents/Sketch/links.js @@ -1,126 +1,5 @@ -var that = this; -function __skpm_run (key, context) { - that.context = context; - -var exports = -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // create a fake namespace object -/******/ // mode & 1: value is a module id, require it -/******/ // mode & 2: merge all properties of value into the ns -/******/ // mode & 4: return value when already ns object -/******/ // mode & 8|1: behave like require -/******/ __webpack_require__.t = function(value, mode) { -/******/ if(mode & 1) value = __webpack_require__(value); -/******/ if(mode & 8) return value; -/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; -/******/ var ns = Object.create(null); -/******/ __webpack_require__.r(ns); -/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); -/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); -/******/ return ns; -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = "./src/links.js"); -/******/ }) -/************************************************************************/ -/******/ ({ - -/***/ "./src/links.js": +var that=this;function __skpm_run(t,n){that.context=n;var e=function(t){var n={};function e(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,e),o.l=!0,o.exports}return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{enumerable:!0,get:r})},e.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},e.t=function(t,n){if(1&n&&(t=e(t)),8&n)return t;if(4&n&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(e.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&n&&"string"!=typeof t)for(var o in t)e.d(r,o,function(n){return t[n]}.bind(null,o));return r},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},e.p="",e(e.s="./src/links.js")}({"./src/links.js": /*!**********************!*\ !*** ./src/links.js ***! \**********************/ -/*! exports provided: default, getLibrary, joinCommunity */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLibrary", function() { return getLibrary; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "joinCommunity", function() { return joinCommunity; }); -/* harmony default export */ __webpack_exports__["default"] = (function (context) {}); -function getLibrary(context) { - NSWorkspace.sharedWorkspace().openURL(NSURL.URLWithString("https://github.com/faridsabitov/Sketch-Interactions")); -} -function joinCommunity(context) { - NSWorkspace.sharedWorkspace().openURL(NSURL.URLWithString("https://spectrum.chat/sketch-arrows")); -} - -/***/ }) - -/******/ }); - if (key === 'default' && typeof exports === 'function') { - exports(context); - } else { - exports[key](context); - } -} -that['getLibrary'] = __skpm_run.bind(this, 'getLibrary'); -that['onRun'] = __skpm_run.bind(this, 'default'); -that['joinCommunity'] = __skpm_run.bind(this, 'joinCommunity') - -//# sourceMappingURL=links.js.map \ No newline at end of file +/*! exports provided: default, getLibrary, joinCommunity */function(t,n,e){"use strict";function r(t){NSWorkspace.sharedWorkspace().openURL(NSURL.URLWithString("https://github.com/faridsabitov/Sketch-Interactions"))}function o(t){NSWorkspace.sharedWorkspace().openURL(NSURL.URLWithString("https://spectrum.chat/sketch-arrows"))}e.r(n),e.d(n,"getLibrary",function(){return r}),e.d(n,"joinCommunity",function(){return o}),n.default=function(t){}}});"default"===t&&"function"==typeof e?e(n):e[t](n)}that.getLibrary=__skpm_run.bind(this,"getLibrary"),that.onRun=__skpm_run.bind(this,"default"),that.joinCommunity=__skpm_run.bind(this,"joinCommunity"); \ No newline at end of file diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index 599e1f9..a41f045 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -1,1655 +1,21 @@ -var that = this; -function __skpm_run (key, context) { - that.context = context; - -var exports = -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // create a fake namespace object -/******/ // mode & 1: value is a module id, require it -/******/ // mode & 2: merge all properties of value into the ns -/******/ // mode & 4: return value when already ns object -/******/ // mode & 8|1: behave like require -/******/ __webpack_require__.t = function(value, mode) { -/******/ if(mode & 1) value = __webpack_require__(value); -/******/ if(mode & 8) return value; -/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; -/******/ var ns = Object.create(null); -/******/ __webpack_require__.r(ns); -/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); -/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); -/******/ return ns; -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = "./src/script.js"); -/******/ }) -/************************************************************************/ -/******/ ({ - -/***/ "./src/script.js": +var that=this;function __skpm_run(e,t){that.context=t;var r=function(e){var t={};function r(o){if(t[o])return t[o].exports;var a=t[o]={i:o,l:!1,exports:{}};return e[o].call(a.exports,a,a.exports,r),a.l=!0,a.exports}return r.m=e,r.c=t,r.d=function(e,t,o){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(r.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)r.d(o,a,function(t){return e[t]}.bind(null,a));return o},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s="./src/script.js")}({"./src/script.js": /*!***********************!*\ !*** ./src/script.js ***! \***********************/ -/*! exports provided: default, createDefaultArrow, createAutoArrow, createRightArrow, createDownArrow, createLeftArrow, createUpArrow, updateSelectedArrows, updateArtboardArrows, updateAllArrows, deleteAllArrows, deleteArtboardArrows, deleteSelectedArrows, settings, onLayersMoved, panel */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createDefaultArrow", function() { return createDefaultArrow; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createAutoArrow", function() { return createAutoArrow; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createRightArrow", function() { return createRightArrow; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createDownArrow", function() { return createDownArrow; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createLeftArrow", function() { return createLeftArrow; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createUpArrow", function() { return createUpArrow; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateSelectedArrows", function() { return updateSelectedArrows; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateArtboardArrows", function() { return updateArtboardArrows; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAllArrows", function() { return updateAllArrows; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteAllArrows", function() { return deleteAllArrows; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteArtboardArrows", function() { return deleteArtboardArrows; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteSelectedArrows", function() { return deleteSelectedArrows; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "settings", function() { return settings; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "onLayersMoved", function() { return onLayersMoved; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "panel", function() { return panel; }); -/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); -/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); - // const { toArray } = require('util') -// -// Variables -// - -var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); - -var SharedStyle = __webpack_require__(/*! sketch/dom */ "sketch/dom").SharedStyle; - -var pluginKey = "flowArrows"; -var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); -var docData = context.document.documentData(); -var pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); // TODO: Need to refactor - -var currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards - -var newConnectionsData = getConnectionsData(); // Settings - -var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); - -var arrowDirectionSetting; - -if (Settings.settingForKey("arrowDirection")) { - arrowDirectionSetting = Settings.settingForKey('arrowDirection'); -} else { - arrowDirectionSetting = "Auto"; -} // -// Create Connection Function -// - - -/* harmony default export */ __webpack_exports__["default"] = (function (context) {}); -function createDefaultArrow(context) { - start(context, null); -} -function createAutoArrow(context) { - start(context, "Auto"); -} -function createRightArrow(context) { - start(context, "Right"); -} -function createDownArrow(context) { - start(context, "Down"); -} -function createLeftArrow(context) { - start(context, "Left"); -} -function createUpArrow(context) { - start(context, "Up"); -} // -// Plugin Commands -// - -function updateSelectedArrows(context) { - var selection = context.selection; - - if (selection.count() > 1) { - // Need to find source object by ID first - // let sourceObjectID = getSourceObjectFromSelection(selection) - var currentConnectionsData = newConnectionsData; - - for (var g = 0; g < selection.count(); g++) { - if (selection[g].objectID() != selection[0].objectID()) { - // Then need to create or update connection arrow with each selection - var connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData); - - if (connectionIndex != null) { - updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, connectionIndex); - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Current connection is updated 🚀"); - } else { - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is no connection between selected layers on the plugin data"); - } - } - } - - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); - } else { - // When user didn't select anything - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Please select more than two layers"); - } -} -function updateArtboardArrows(context) { - // TODO: Need to show amount of updated arrows and deleted ones - var selection = context.selection; - var connections = getConnectionsData(); - var firstObjectArtboard; - var secondObjectArtboard; - - if (connections.length > 0) { - // We have connections in database - var updateArrowsCounter = connections.length; - - for (var i = 0; i < updateArrowsCounter; i++) { - // Need to check if the element is selected globally or from the artboard - firstObjectArtboard = document.getLayerWithID(connections[i].firstObject); - firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID(); - secondObjectArtboard = document.getLayerWithID(connections[i].secondObject); - secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID(); - - if (selection.count() == 1 && selection[0].class() == "MSArtboardGroup") { - // Need to go through each connection and update arrow position for specific artboard - if (firstObjectArtboard == selection[0].objectID()) { - if (secondObjectArtboard == selection[0].objectID()) { - updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, i); - } else { - newConnectionsData.push(connections[i]); - } - } else { - // If not just saving it - newConnectionsData.push(connections[i]); - } - } - } - - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows are updated 🚀"); - } else { - // We don't have any connections to update - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is nothing to update"); - } -} -function updateAllArrows(context) { - // TODO - // TODO: Need to show amount of updated arrows and deleted ones - var currentConnectionsData = newConnectionsData; - - if (currentConnectionsData.length > 0) { - // We have connections in database - var updateArrowsCounter = currentConnectionsData.length; - - for (var i = 0; i < updateArrowsCounter; i++) { - // Need to go through each connection and update arrow position without artboards - // Need to check if current object don't have the parrent - updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, i); - } - - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows are updated 🚀"); - } else { - // We don't have any connections to update - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is nothing to update"); - } -} -function deleteAllArrows(context) { - if (newConnectionsData.length > 0) { - // We have connections in database - for (var i = 0; i < newConnectionsData.length; i++) { - // Need to go through each connection and update arrow position - deleteLine(newConnectionsData[i].line); - } - - context.command.setValue_forKey_onLayer_forPluginIdentifier(null, "arrowConnections", docData, pluginKey); - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows are deleted"); - } else { - // We don't have any connections to update - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is nothing to delete"); - } -} -function deleteArtboardArrows(context) { - var selection = context.selection; - var firstObject, secondObject; // Need to delete all the arrows only from selected artboard - - if (selection.count() == 1 && selection[0].class() == "MSArtboardGroup") { - var connections = getConnectionsData(); - - if (connections.length > 0) { - // We have connections in database - var updateArrowsCounter = connections.length; - - for (var i = 0; i < updateArrowsCounter; i++) { - // Need to go through each connection and check if it placed on selected artboard - firstObject = document.getLayerWithID(connections[i].firstObject); - secondObject = document.getLayerWithID(connections[i].secondObject); - - if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()) { - if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()) { - deleteLine(connections[i].line); - newConnectionsData = deleteConnectionFromData(i); - } - } - } - - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows from selected artboard are deleted"); - } else { - // We don't have any connections to update - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is nothing to delete"); - } - } else { - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Please select one artboard"); - } -} -function deleteSelectedArrows(context) { - var selection = context.selection; - var firstObject, secondObject; // Need to delete all the arrows only from selected artboard - - if (selection.count() == 2) { - for (var g = 0; g < selection.count(); g++) { - if (selection[g].objectID() != selection[0].objectID()) { - // It will never check 3rd connection - var connections = getConnectionsData(); - var connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections); - - if (connectionIndex != null) { - // We have connections in database - deleteLine(connections[connectionIndex].line); - newConnectionsData = deleteConnectionFromData(connectionIndex); - var updateArrowsCounter = connections.length; - - for (var i = 0; i < updateArrowsCounter; i++) { - // Need to go through each connection and check if it placed on selected artboard - firstObject = document.getLayerWithID(connections[i].firstObject); - secondObject = document.getLayerWithID(connections[i].secondObject); - - if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()) { - if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()) { - deleteLine(connections[i].line); - newConnectionsData = deleteConnectionFromData(i); - } - } - } - - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows from selected layers are deleted ✌️"); - } - } - } - } else { - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Select two layers, please 🧐"); - } -} -function settings(context) { - var alert = COSAlertWindow.new(); - var viewWidth = 300; - var viewHeight = 450; // Alert window settings - - alert = alertSetup(alert, viewWidth, viewHeight); - var view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight)); - alert.addAccessoryView(view); // Label: Arrow Style - - var arrowStyleLabel = alertLabel("Arrow Style", true, -1, viewHeight - 40, 280, 40); - view.addSubview(arrowStyleLabel); // Select: Arrow Style - - var arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20)); - setActiveStyleSetting(arrowStylingField); - view.addSubview(arrowStylingField); // Label: Arrow Style Info - - var arrowStyleInfoLabel = alertLabel("Add layer style to your document that will contain $arrow name and you will be able to specify it here ", false, -1, viewHeight - 80, 300, 40); - view.addSubview(arrowStyleInfoLabel); // Label: Arrow Type - - var arrowTypeLabel = alertLabel("Arrow Type", true, -1, viewHeight - 130, 280, 40); - view.addSubview(arrowTypeLabel); // Select: Arrow Type - - var arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20)); - setActiveTypeSetting(arrowTypeField); - view.addSubview(arrowTypeField); // Label: Arrow Type Info - - var arrowTypeInfoLabel = alertLabel("Select one of the arrow types. Angled is used by default", false, -1, viewHeight - 170, 300, 40); - view.addSubview(arrowTypeInfoLabel); // Label: Arrow Spacing - - var arrowSpacingLabel = alertLabel("Arrow Spacing", true, -1, viewHeight - 200, 330, 20); - view.addSubview(arrowSpacingLabel); // Label: Arrow Spacing PX - - var arrowSpacingPxLabel = alertLabel("px", true, 90, viewHeight - 220, 330, 20); - view.addSubview(arrowSpacingPxLabel); // Input: Arrow Spacing - - var arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20)); - var formatter = NSNumberFormatter.alloc().init().autorelease(); - arrowSpacingField.setStringValue(String(Settings.settingForKey("arrowSpacing"))); - arrowSpacingField.setFormatter(formatter); - view.addSubview(arrowSpacingField); // Stepper: Arrow Spacing - - var arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20)); - arrowSpacingStepper.setMaxValue(1000); - arrowSpacingStepper.setMinValue(0); - arrowSpacingStepper.setValueWraps(false); - arrowSpacingStepper.setAutorepeat(true); - arrowSpacingStepper.setCOSJSTargetFunction(function (sender) { - var value = 0 + sender.integerValue(); - arrowSpacingField.setStringValue(String(value)); - }); - view.addSubview(arrowSpacingStepper); // view.addSubview(formatter) - // Label: Auto Spacing Info - - var arrowSpacingInfoLabel = alertLabel("The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature ", false, -1, viewHeight - 285, 300, 60); - view.addSubview(arrowSpacingInfoLabel); // Label: Other Settings - - var otherSettingsLabel = alertLabel("Other Settings", true, -1, viewHeight - 330, 280, 40); - view.addSubview(otherSettingsLabel); // Checkbox: Auto-Align - - var checkbox = alertCheckbox("Second layer auto-align", false, -1, viewHeight - 340, 260, 40); - view.addSubview(checkbox); // Label: Auto-Align Info - - var autoAlignInfoLabel = alertLabel("Align the second layer for 5px misalignment with the first one", false, -1, viewHeight - 370, 280, 40); - view.addSubview(autoAlignInfoLabel); // Label: Plugin Info - - var pluginInfoLabel = alertLabel("Made by @faridSabitov with the support of EPAM.com ❤️", true, -1, viewHeight - 420, 280, 40); - view.addSubview(pluginInfoLabel); // Need to check if style is still available - // Show modal and get the results - - var modalResponse = alert.runModal(); - - if (modalResponse == NSAlertFirstButtonReturn) { - // When user clicks on "Update Settings" - // Need to save all this results into the Plugin Settings - context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), "arrowStyle", docData, pluginKey); - Settings.setSettingForKey("arrowType", alert.views()[0].subviews()[4].title()); - Settings.setSettingForKey("arrowSpacing", alert.views()[0].subviews()[8].intValue()); - Settings.setSettingForKey("autoAlign", alert.views()[0].subviews()[12].state()); - UI.message("Settings are updated 🚀"); - } -} -function onLayersMoved(context) { - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Please select more than two layers"); - var action = context.actionContext; -} -function panel(context) { - var ControlBar; - ControlBar = NSPanel.alloc().init(); - ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask); // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1)); - - ControlBar.setTitleVisibility(NSWindowTitleHidden); - ControlBar.setTitlebarAppearsTransparent(true); - ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false); - ControlBar.setMovableByWindowBackground(true); - ControlBar.setHasShadow(true); - ControlBar.setLevel(NSFloatingWindowLevel); // contentView.addSubview(closeButton) - - ControlBar.center(); - ControlBar.makeKeyAndOrderFront(nil); // getImage = function(size, name){ - // var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false; - // suffix = (isRetinaDisplay)? "@2x": "", - // imageURL = NSURL.fileURLWithPath(self.pluginResources + "/icons/" + name + suffix + ".png"), - // image = NSImage.alloc().initWithContentsOfURL(imageURL); - // return image - // }, - // addButton = function(rect, name, callAction){ - // var button = NSButton.alloc().initWithFrame(rect), - // image = getImage(rect.size, name); - // button.setImage(image); - // button.setBordered(false); - // button.sizeToFit(); - // button.setButtonType(NSMomentaryChangeButton); - // button.setCOSJSTargetFunction(callAction); - // button.setAction("callAction:"); - // return button; - // }, - // addImage = function(rect, name){ - // var view = NSImageView.alloc().initWithFrame(rect), - // image = getImage(rect.size, name); - // view.setImage(image); - // return view; - // }, - // closeButton = addButton( NSMakeRect(20, 10, 30, 30), "close-control", - // function(sender){ - // coscript.setShouldKeepAround(false); - // threadDictionary.removeObjectForKey(identifier); - // ControlBar.close(); - // }), -} // -// Functions -// - -function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, connectionIndex) { - // There might be a situation, when user deleted current group or current group stays on another artboard => In that case need to create another group - // Need to check if we have the layers with such IDs - var firstObject = document.getLayerWithID(firstObjectID); - var secondObject = document.getLayerWithID(secondObjectID); // Need to delete data first, because we will have a new line - - deleteLine(lineID); - newConnectionsData = deleteConnectionFromData(connectionIndex); - - if (firstObject && secondObject) { - // If we have all the objects, we can recreate the line - createArrow(firstObjectID, secondObjectID, style, type, direction); - } -} - -function createArrow(firstObjectID, secondObjectID, style, type, direction) { - // Process of creating new connection - var localDirection, localStyle, localType; - - if (direction == "Auto") { - // If direction is auto, we need to specify direction ourselves - localDirection = getDirection(firstObjectID, secondObjectID); - } else { - localDirection = direction; - } - - if (type == null) { - localType = Settings.settingForKey("arrowType"); - } else { - localType = type; - } // log(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)) - - - localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)); - - if (style != null) { - // if we updating connection with previously created objects - if (getLayerStyles(style) != null && style != "Default Style") { - localStyle = style; - } else { - localStyle = "Default Style"; - } - } else { - // We don't have any data from the plugin data - if (context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)) { - localStyle = context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey); - } else { - localStyle = "Default Style"; - } - } - - updateSpacing(firstObjectID, secondObjectID, localDirection); - autoAlignLayer(firstObjectID, secondObjectID, localDirection); - var currentGroup = checkForArrowGroup(); - var line = drawLine(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentGroup); - addToArrowsGroup(line, currentGroup); // if(localStyle != "Default Style"){ - // localStyle = localStyle[0].name() - // } - // Storage for current connection - - var connection = { - firstObject: firstObjectID, - secondObject: secondObjectID, - style: localStyle, - type: localType, - direction: localDirection, - line: line.objectID() // Need to save this data to the global array - - }; - newConnectionsData.push(connection); -} - -function checkForArrowGroup() { - var currentGroup = null; // Checking all the groups that we have - - for (var i = 0; i < currentParentGroup.layers().count(); i++) { - if (currentParentGroup.layers()[i].name() == "Arrows") { - // If we already have "Arrow" group we need to save it's folder - currentGroup = currentParentGroup.layers()[i]; - refactorLines(currentGroup); - } - } - - return currentGroup; -} - -function getDirection(firstObjectID, secondObjectID) { - // Get direction from the source object - var firstObject = document.getLayerWithID(firstObjectID); - var secondObject = document.getLayerWithID(secondObjectID); - var firstObjectMidX = firstObject.frame.x + firstObject.frame.width / 2; - var firstObjectMidY = firstObject.frame.y + firstObject.frame.height / 2; - var secondObjectMidX = secondObject.frame.x + secondObject.frame.width / 2; - var secondObjectMidY = secondObject.frame.y + secondObject.frame.height / 2; - var diffX = firstObjectMidX - secondObjectMidX; - var diffY = firstObjectMidY - secondObjectMidY; - var absDiffX = Math.abs(diffX); - var absDiffY = Math.abs(diffY); - var direction; - - if (secondObjectMidX > firstObjectMidX) { - // Right Half - if (secondObjectMidY > firstObjectMidY) { - // Bottom quarter - if (diffX > diffY) { - direction = "Down"; - } else { - direction = "Right"; - } - } else { - // Top quarter - if (absDiffX > absDiffY) { - direction = "Right"; - } else { - direction = "Up"; - } - } - } else { - // Left Half - if (secondObjectMidY > firstObjectMidY) { - // Bottom quarter - if (absDiffX > absDiffY) { - direction = "Left"; - } else { - direction = "Down"; - } - } else { - // Top quarter - if (diffX > diffY) { - direction = "Left"; - } else { - direction = "Up"; - } - } - } - - return direction; -} - -function drawLine(firstObjectID, secondObjectID, style, type, direction, currentGroup) { - var firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, middlePosX, middlePosY, diffX, diffY, line; - var firstObject = document.getLayerWithID(firstObjectID); - var secondObject = document.getLayerWithID(secondObjectID); - var firstObjectAbsPos = firstObject.frame.changeBasis({ - from: firstObject.parent, - to: currentParentGroup - }); - var secondObjectAbsPos = secondObject.frame.changeBasis({ - from: secondObject.parent, - to: currentParentGroup - }); - - if (currentGroup) { - //if we already have a group, need to specify the difference - diffX = currentGroup.frame().x(); - diffY = currentGroup.frame().y(); - } else { - diffX = 0; - diffY = 0; - } // Drawing a line - - - var path = NSBezierPath.bezierPath(); - - if (type == "Angled" || type == null) { - // Based on direction, we need to specify connection points - if (direction == "Up") { - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; - firstLayerPosY = firstObjectAbsPos.y - diffY; // Second Layer Position End Point Position - - secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; - secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height - diffY; // Middle Points - - middlePosX = (firstLayerPosX + secondLayerPosX) / 2; - middlePosY = (firstLayerPosY + secondLayerPosY) / 2; // Connecting points - - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - if (direction == "Right") { - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width - diffX; - firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position - - secondLayerPosX = secondObjectAbsPos.x - diffX; - secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points - - middlePosX = (firstLayerPosX + secondLayerPosX) / 2; - middlePosY = (firstLayerPosY + secondLayerPosY) / 2; // Connecting points - - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - if (direction == "Down") { - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; - firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height - diffY; // Second Layer Position End Point Position - - secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; - secondLayerPosY = secondObjectAbsPos.y - diffY; // Middle Points - - middlePosX = (firstLayerPosX + secondLayerPosX) / 2; - middlePosY = (firstLayerPosY + secondLayerPosY) / 2; // Connecting points - - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - if (direction == "Left") { - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x - diffX; - firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position - - secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width - diffX; - secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points - - middlePosX = (firstLayerPosX + secondLayerPosX) / 2; - middlePosY = (firstLayerPosY + secondLayerPosY) / 2; // Connecting points - - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } //TODO: Provide a separate file with all the stylings - // Painting the line - - - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); // Making middle points rounded - - var points = line.layers().firstObject().points(); - points[1].cornerRadius = 20; - points[2].cornerRadius = 20; // Providing Settings for the arrow - - line.setName("Arrow"); - } - - if (type == "Straight") { - // Based on direction, we need to specify connection points - if (direction == "Up") { - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; - firstLayerPosY = firstObjectAbsPos.y - diffY; // Second Layer Position End Point Position - - secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; - secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height - diffY; // Middle Points - - middlePosX = (firstLayerPosX + secondLayerPosX) / 2; - middlePosY = (firstLayerPosY + secondLayerPosY) / 2; // Connecting points - - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - if (direction == "Right") { - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width - diffX; - firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position - - secondLayerPosX = secondObjectAbsPos.x - diffX; - secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points - - middlePosX = (firstLayerPosX + secondLayerPosX) / 2; - middlePosY = (firstLayerPosY + secondLayerPosY) / 2; // Connecting points - - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - if (direction == "Down") { - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; - firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height - diffY; // Second Layer Position End Point Position - - secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; - secondLayerPosY = secondObjectAbsPos.y - diffY; // Middle Points - - middlePosX = (firstLayerPosX + secondLayerPosX) / 2; - middlePosY = (firstLayerPosY + secondLayerPosY) / 2; // Connecting points - - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - if (direction == "Left") { - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x - diffX; - firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position - - secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width - diffX; - secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points - - middlePosX = (firstLayerPosX + secondLayerPosX) / 2; - middlePosY = (firstLayerPosY + secondLayerPosY) / 2; // Connecting points - - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } // Painting the line - - - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); // Providing Settings for the arrow - - line.setName("Arrow"); - } - - if (type == "Curved") { - // Based on direction, we need to specify connection points - if (direction == "Up") { - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; - firstLayerPosY = firstObjectAbsPos.y - diffY; // Second Layer Position End Point Position - - secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; - secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height - diffY; // Middle Points - - middlePosX = (firstLayerPosX + secondLayerPosX) / 2; - middlePosY = (firstLayerPosY + secondLayerPosY) / 2; // Connecting points - - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line - - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - - var _points = line.layers().firstObject().points(); - - _points[0].curveMode = _points[1].curveMode = 4; - _points[0].hasCurveFrom = _points[1].hasCurveTo = true; - - if (firstLayerPosX < secondLayerPosX) { - _points[0].curveFrom = { - x: 0, - y: 0.5 - }; - _points[0].curveTo = { - x: -0.5, - y: 1 - }; - _points[1].curveFrom = { - x: 1, - y: 1 - }; - _points[1].curveTo = { - x: 1, - y: 0.5 - }; - } else { - _points[0].curveFrom = { - x: 1, - y: 0.5 - }; - _points[0].curveTo = { - x: -0.5, - y: 1 - }; - _points[1].curveFrom = { - x: 1, - y: 1 - }; - _points[1].curveTo = { - x: 0, - y: 0.5 - }; - } - } - - if (direction == "Right") { - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width - diffX; - firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position - - secondLayerPosX = secondObjectAbsPos.x - diffX; - secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points - - middlePosX = (firstLayerPosX + secondLayerPosX) / 2; - middlePosY = (firstLayerPosY + secondLayerPosY) / 2; // Connecting points - - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line - - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - - var _points2 = line.layers().firstObject().points(); - - _points2[0].curveMode = _points2[1].curveMode = 4; - _points2[0].hasCurveFrom = _points2[1].hasCurveTo = true; - - if (firstLayerPosY < secondLayerPosY) { - _points2[0].curveFrom = { - x: 0.5, - y: 0 - }; - _points2[0].curveTo = { - x: -0.5, - y: 1 - }; - _points2[1].curveFrom = { - x: 1, - y: 1 - }; - _points2[1].curveTo = { - x: 0.5, - y: 1 - }; - } else { - _points2[0].curveFrom = { - x: 0.5, - y: 1 - }; - _points2[0].curveTo = { - x: -0.5, - y: 1 - }; - _points2[1].curveFrom = { - x: 1, - y: 1 - }; - _points2[1].curveTo = { - x: 0.5, - y: 0 - }; - } - } - - if (direction == "Down") { - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; - firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height - diffY; // Second Layer Position End Point Position - - secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; - secondLayerPosY = secondObjectAbsPos.y - diffY; // Middle Points - - middlePosX = (firstLayerPosX + secondLayerPosX) / 2; - middlePosY = (firstLayerPosY + secondLayerPosY) / 2; // Connecting points - - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line - - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - - var _points3 = line.layers().firstObject().points(); - - _points3[0].curveMode = _points3[1].curveMode = 4; - _points3[0].hasCurveFrom = _points3[1].hasCurveTo = true; - - if (firstLayerPosX < secondLayerPosX) { - _points3[0].curveFrom = { - x: 0, - y: 0.5 - }; - _points3[0].curveTo = { - x: -0.5, - y: 1 - }; - _points3[1].curveFrom = { - x: 1, - y: 1 - }; - _points3[1].curveTo = { - x: 1, - y: 0.5 - }; - } else { - _points3[0].curveFrom = { - x: 1, - y: 0.5 - }; - _points3[0].curveTo = { - x: -0.5, - y: 1 - }; - _points3[1].curveFrom = { - x: 1, - y: 1 - }; - _points3[1].curveTo = { - x: 0, - y: 0.5 - }; - } - } - - if (direction == "Left") { - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x - diffX; - firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position - - secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width - diffX; - secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points - - middlePosX = (firstLayerPosX + secondLayerPosX) / 2; - middlePosY = (firstLayerPosY + secondLayerPosY) / 2; // Connecting points - - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line - - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - - var _points4 = line.layers().firstObject().points(); - - _points4[0].curveMode = _points4[1].curveMode = 4; - _points4[0].hasCurveFrom = _points4[1].hasCurveTo = true; - - if (firstLayerPosY < secondLayerPosY) { - _points4[0].curveFrom = { - x: 0.5, - y: 0 - }; - _points4[0].curveTo = { - x: -0.5, - y: 1 - }; - _points4[1].curveFrom = { - x: 1, - y: 1 - }; - _points4[1].curveTo = { - x: 0.5, - y: 1 - }; - } else { - _points4[0].curveFrom = { - x: 0.5, - y: 1 - }; - _points4[0].curveTo = { - x: -0.5, - y: 1 - }; - _points4[1].curveFrom = { - x: 1, - y: 1 - }; - _points4[1].curveTo = { - x: 0.5, - y: 0 - }; - } - } // Providing Settings for the arrow - - - line.setName("Arrows"); - } // Style Start - - - if (style == null) { - // that means we are creating new arrow - if (context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)) { - // if we have specified options - // TODO: Need to refactor here. Local Style is not used at all - var _style = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)); - - if (_style[0] == null) { - // Default Arrow Style - var border = line.style().addStylePartOfType(1); - border.color = MSColor.colorWithRGBADictionary({ - r: 0.89, - g: 0.89, - b: 0.89, - a: 1 - }); - border.thickness = 2; - line.style().endMarkerType = 2; - } else { - line.sharedStyle = _style[0]; - } - } else { - // Default Arrow Style - var _border = line.style().addStylePartOfType(1); - - _border.color = MSColor.colorWithRGBADictionary({ - r: 0.89, - g: 0.89, - b: 0.89, - a: 1 - }); - _border.thickness = 2; - line.style().endMarkerType = 2; - } - } else { - // arrow style already provided - if (style == "Default Style") { - // Default Arrow Style - var _border2 = line.style().addStylePartOfType(1); - - _border2.color = MSColor.colorWithRGBADictionary({ - r: 0.89, - g: 0.89, - b: 0.89, - a: 1 - }); - _border2.thickness = 2; - line.style().endMarkerType = 2; - } else { - // User provided own style - var ownStyle = getLayerStyles(style); - line.sharedStyle = ownStyle[0]; - } - } // Style End - - - return line; -} - -function addToArrowsGroup(line, currentGroup) { - if (currentGroup) { - currentGroup.addLayers([line]); - currentGroup.fixGeometryWithOptions(1); - } else { - // If we don't have a group - var Group = __webpack_require__(/*! sketch/dom */ "sketch/dom").Group; - - var group = new Group({ - parent: currentParentGroup, - name: 'Arrows', - locked: true, - layers: [line] - }); // Moving this group to the bottom of the page - - group.moveToBack(); - currentGroup = checkForArrowGroup(); - currentGroup.fixGeometryWithOptions(1); - } -} - -function getConnectionsData() { - var dataArray = []; - var pluginDataConnections = []; - - if (pluginData) { - pluginDataConnections = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); - - for (var i = 0; i < pluginDataConnections.length; i++) { - dataArray.push(pluginDataConnections[i]); - } - } - - return dataArray; -} - -function findConnectionData(firstObjectID, secondObjectID, data) { - var arrayNumber = null; - firstObjectID = String(firstObjectID); - secondObjectID = String(secondObjectID); - - if (pluginData) { - // If we have database, need to check for connections - for (var y = 0; y < data.length; y++) { - if (firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject) { - // if we found that we have this object in connection database already - if (secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject) { - // if we found that we have this object in connection database already - arrayNumber = y; - } - } - } - } - - return arrayNumber; -} - -function setActiveDirectionSetting(arrowDirectionField) { - var currentDirection = "Auto"; - - if (Settings.settingForKey("arrowDirection")) { - // if there is data in settings - currentDirection = Settings.settingForKey("arrowDirection"); - - if (currentDirection == "Auto") { - arrowDirectionField.addItemWithTitle("Auto"); - arrowDirectionField.lastItem().setState(1); - arrowDirectionField.addItemWithTitle("Right"); - arrowDirectionField.lastItem().setState(0); - arrowDirectionField.addItemWithTitle("Down"); - arrowDirectionField.lastItem().setState(0); - arrowDirectionField.addItemWithTitle("Left"); - arrowDirectionField.lastItem().setState(0); - arrowDirectionField.addItemWithTitle("Up"); - arrowDirectionField.lastItem().setState(0); - } - - if (currentDirection == "Right") { - arrowDirectionField.addItemWithTitle("Right"); - arrowDirectionField.lastItem().setState(1); - arrowDirectionField.addItemWithTitle("Down"); - arrowDirectionField.lastItem().setState(0); - arrowDirectionField.addItemWithTitle("Left"); - arrowDirectionField.lastItem().setState(0); - arrowDirectionField.addItemWithTitle("Up"); - arrowDirectionField.lastItem().setState(0); - arrowDirectionField.addItemWithTitle("Auto"); - arrowDirectionField.lastItem().setState(0); - } - - if (currentDirection == "Down") { - arrowDirectionField.addItemWithTitle("Down"); - arrowDirectionField.lastItem().setState(1); - arrowDirectionField.addItemWithTitle("Left"); - arrowDirectionField.lastItem().setState(0); - arrowDirectionField.addItemWithTitle("Up"); - arrowDirectionField.lastItem().setState(0); - arrowDirectionField.addItemWithTitle("Auto"); - arrowDirectionField.lastItem().setState(0); - arrowDirectionField.addItemWithTitle("Right"); - arrowDirectionField.lastItem().setState(0); - } - - if (currentDirection == "Left") { - arrowDirectionField.addItemWithTitle("Left"); - arrowDirectionField.lastItem().setState(1); - arrowDirectionField.addItemWithTitle("Up"); - arrowDirectionField.lastItem().setState(0); - arrowDirectionField.addItemWithTitle("Auto"); - arrowDirectionField.lastItem().setState(0); - arrowDirectionField.addItemWithTitle("Right"); - arrowDirectionField.lastItem().setState(0); - arrowDirectionField.addItemWithTitle("Down"); - arrowDirectionField.lastItem().setState(0); - } - - if (currentDirection == "Up") { - arrowDirectionField.addItemWithTitle("Up"); - arrowDirectionField.lastItem().setState(1); - arrowDirectionField.addItemWithTitle("Auto"); - arrowDirectionField.lastItem().setState(0); - arrowDirectionField.addItemWithTitle("Right"); - arrowDirectionField.lastItem().setState(0); - arrowDirectionField.addItemWithTitle("Down"); - arrowDirectionField.lastItem().setState(0); - arrowDirectionField.addItemWithTitle("Left"); - arrowDirectionField.lastItem().setState(0); - } - } else { - // Show default - arrowDirectionField.addItemWithTitle("Auto"); - arrowDirectionField.addItemWithTitle("Right"); - arrowDirectionField.addItemWithTitle("Down"); - arrowDirectionField.addItemWithTitle("Left"); - arrowDirectionField.addItemWithTitle("Up"); - } -} - -function setActiveStyleSetting(arrowStylingField) { - var docSettings = context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey); - var styles = getLayerStyles(null); - - if (docSettings) { - // We have info about the settings in the current document - if (docSettings != "Default Style") { - // if user specified own option - arrowStylingField.addItemWithTitle(docSettings); - arrowStylingField.addItemWithTitle("Default Style"); - - for (var i = 0; i < styles.length; i++) { - if (styles[i].name() != docSettings) { - arrowStylingField.addItemWithTitle(styles[i].name()); - } - } - } else { - // Need to show the default first - arrowStylingField.addItemWithTitle("Default Style"); - - for (var _i = 0; _i < styles.length; _i++) { - arrowStylingField.addItemWithTitle(styles[_i].name()); - } - } - } else { - arrowStylingField.addItemWithTitle("Default Style"); - - for (var _i2 = 0; _i2 < styles.length; _i2++) { - arrowStylingField.addItemWithTitle(styles[_i2].name()); - } - } -} - -function setActiveTypeSetting(arrowTypeField) { - var docTypeSettings = Settings.settingForKey("arrowType"); - - if (docTypeSettings) { - // We have info about the settings in the current document - if (docTypeSettings == "Angled") { - arrowTypeField.addItemWithTitle("Angled"); - arrowTypeField.lastItem().setState(1); - arrowTypeField.addItemWithTitle("Curved"); - arrowTypeField.lastItem().setState(0); - arrowTypeField.addItemWithTitle("Straight"); - arrowTypeField.lastItem().setState(0); - } - - if (docTypeSettings == "Curved") { - arrowTypeField.addItemWithTitle("Curved"); - arrowTypeField.lastItem().setState(1); - arrowTypeField.addItemWithTitle("Straight"); - arrowTypeField.lastItem().setState(0); - arrowTypeField.addItemWithTitle("Angled"); - arrowTypeField.lastItem().setState(0); - } - - if (docTypeSettings == "Straight") { - arrowTypeField.addItemWithTitle("Straight"); - arrowTypeField.lastItem().setState(1); - arrowTypeField.addItemWithTitle("Angled"); - arrowTypeField.lastItem().setState(0); - arrowTypeField.addItemWithTitle("Curved"); - arrowTypeField.lastItem().setState(0); - } - } else { - // Show default - arrowTypeField.addItemWithTitle("Angled"); - arrowTypeField.addItemWithTitle("Curved"); - arrowTypeField.addItemWithTitle("Straight"); - } -} - -function deleteConnectionFromData(arrayNumber) { - var newConnections = []; - - if (pluginData) { - // If we have database - var connections = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); - - for (var i = 0; i < connections.length; i++) { - // Updating all connections without deleted one - if (i != arrayNumber) { - newConnections.push(connections[i]); - } - } - } - - return newConnections; -} - -function refactorLines(group) { - // Need to finish - for (var i = 0; i < group.layers().length; i++) {// Here we need to go through each data in our database and delete line if there is no data - } -} - -function deleteLine(lineID) { - var lineObject = document.getLayerWithID(lineID); - var selectedGroup; - - if (lineObject) { - selectedGroup = lineObject.parent; - lineObject.remove(); - - if (selectedGroup.layers.length == 0) { - selectedGroup.remove(); - } - } -} - -function updateSpacing(sourceObjectID, childObjectID, direction) { - var sourceObject = document.getLayerWithID(sourceObjectID); - var childObject = document.getLayerWithID(childObjectID); - - if (Settings.settingForKey("arrowSpacing") && Settings.settingForKey("arrowSpacing") != 0) { - var currentSpacing = Settings.settingForKey("arrowSpacing"); - - if (direction == "Right") { - childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing; - } - - if (direction == "Down") { - childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing; - } - - if (direction == "Left") { - childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing; - } - - if (direction == "Up") { - childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing; - } - } -} - -function autoAlignLayer(sourceObjectID, childObjectID, direction) { - var sourceObject = document.getLayerWithID(sourceObjectID); - var childObject = document.getLayerWithID(childObjectID); - var sourceMidY, childMidY, sourceMidX, childMidX, diff; - - if (Settings.settingForKey("autoAlign")) { - if (Settings.settingForKey("autoAlign") == true) { - // If user turned on Auto-Align settings - if (direction == "Right" || direction == "Left") { - sourceMidY = sourceObject.frame.y + sourceObject.frame.height / 2; - childMidY = childObject.frame.y + childObject.frame.height / 2; - diff = sourceMidY - childMidY; - - if (diff > -6 && diff < 6) { - childObject.frame.y = childObject.frame.y + diff; - } - } - - if (direction == "Down" || direction == "Up") { - sourceMidX = sourceObject.frame.x + sourceObject.frame.width / 2; - childMidX = childObject.frame.x + childObject.frame.width / 2; - diff = sourceMidX - childMidX; - - if (diff > -6 && diff < 6) { - childObject.frame.x = childObject.frame.x + diff; - } - } - } - } -} - -function defineSourceObject(firstObjectID, secondObjectID, direction) { - var firstObject = document.getLayerWithID(firstObjectID); - var secondObject = document.getLayerWithID(secondObjectID); - var sourceObjectID; - - if (direction == "Auto") { - sourceObjectID = firstObject.id; - } - - if (direction == "Right") { - if (firstObject.frame.x <= secondObject.frame.x) { - sourceObjectID = firstObject.id; - } else { - sourceObjectID = secondObject.id; - } - } - - if (direction == "Down") { - if (firstObject.frame.y <= secondObject.frame.y) { - sourceObjectID = firstObject.id; - } else { - sourceObjectID = secondObject.id; - } - } - - if (direction == "Left") { - if (firstObject.frame.x <= secondObject.frame.x) { - sourceObjectID = secondObject.id; - } else { - sourceObjectID = firstObject.id; - } - } - - if (direction == "Up") { - if (firstObject.frame.y <= secondObject.frame.y) { - sourceObjectID = secondObject.id; - } else { - sourceObjectID = firstObject.id; - } - } - - return sourceObjectID; -} - -function getSourceObjectFromSelection(selection, direction) { - var sourceObjectID = selection.firstObject().objectID(); - - if (direction != "Auto") { - for (var g = 0; g < selection.count(); g++) { - sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction); - } - } else { - sourceObjectID = defineSourceObject(sourceObjectID, selection[0].objectID(), direction); - } - - return sourceObjectID; -} - -function confirmationAlert(alert, message) { - // Title - alert.setMessageText("Would you like to delete all the arrows from " + message); // Creating dialog buttons - - alert.addButtonWithTitle("Delete Arrows"); - alert.addButtonWithTitle("Cancel"); // Creating the view - - var viewWidth = 300; - var viewHeight = 40; - var view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight)); - alert.addAccessoryView(view); // Label - - var infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(-1, viewHeight - 40, 330, 40)); - infoLabel.setStringValue("ℹ️ You can select layers, artboards to delete all the arrows from selected one only"); - infoLabel.setSelectable(false); - infoLabel.setDrawsBackground(false); - infoLabel.setBezeled(false); - view.addSubview(infoLabel); - return alert; -} - -function alertSetup(alert, viewWidth, viewHeight) { - // Title - alert.setMessageText("Arrow Plugin Settings"); // Creating dialog buttons - - alert.addButtonWithTitle("Update Settings"); - alert.addButtonWithTitle("Cancel"); - return alert; -} - -function alertLabel(message, state, x, y, width, height) { - var infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height)); - infoLabel.setStringValue(message); - infoLabel.setSelectable(false); - infoLabel.setDrawsBackground(false); - infoLabel.setBezeled(false); - - if (state == false) { - infoLabel.textColor = NSColor.disabledControlTextColor(); - } - - return infoLabel; -} - -function alertCheckbox(message, state, x, y, width, height) { - var checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height)); - checkbox.setButtonType(NSSwitchButton); - checkbox.setBezelStyle(0); - checkbox.setTitle(message); - - if (Settings.settingForKey("autoAlign")) { - var currentState = Settings.settingForKey("autoAlign"); - checkbox.setState(currentState); - } else { - checkbox.setState(state); - } - - return checkbox; -} - -function getLayerStyles(name) { - var allStyles = docData.allLayerStyles(); - var keyword = "$arrow"; - var styles = []; - - if (name == null) { - for (var i = 0; i < allStyles.count(); i++) { - if (allStyles[i].name().includes(keyword)) { - styles.push(allStyles[i]); - } - } - } else { - // Searching only for name - for (var _i3 = 0; _i3 < allStyles.count(); _i3++) { - if (allStyles[_i3].name() == name) { - styles.push(allStyles[_i3]); - } - } - } - - return styles; -} - -function start(context, direction) { - var selection = context.selection; - var localDirection; - - if (direction == null) { - localDirection = arrowDirectionSetting; - } else { - localDirection = direction; - } - - if (selection.count() > 1) { - // Need to find source object by ID first - var sourceObjectID = getSourceObjectFromSelection(selection, direction); - var currentConnectionsData = newConnectionsData; - - for (var g = 0; g < selection.count(); g++) { - if (selection[g].objectID() != sourceObjectID) { - // Then need to create or update connection arrow with each selection - var connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData); - - if (connectionIndex != null) { - // Because this is creating flow, we need to take the direction from user settings - updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, connectionIndex); - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Current connection is updated 🚀"); - } else { - // There is no connection with this two objects in our database - createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection); - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("New connection is created 🚀"); - } - } - } - - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); - } else { - // When user didn't select anything - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Please select more than two layers"); - } -} // { -// "script": "./script.js", -// "name" : "onLayersMoved", -// "handlers" : { -// "actions": { -// "LayersMoved.finish": "onLayersMoved" -// } -// }, -// "identifier" : "onLayersMoved" -// } - -/***/ }), - -/***/ "sketch": +/*! exports provided: default, createDefaultArrow, createAutoArrow, createRightArrow, createDownArrow, createLeftArrow, createUpArrow, updateSelectedArrows, updateArtboardArrows, updateAllArrows, deleteAllArrows, deleteArtboardArrows, deleteSelectedArrows, settings, onLayersMoved, panel */function(e,r,o){"use strict";o.r(r),o.d(r,"createDefaultArrow",function(){return m}),o.d(r,"createAutoArrow",function(){return v}),o.d(r,"createRightArrow",function(){return g}),o.d(r,"createDownArrow",function(){return S}),o.d(r,"createLeftArrow",function(){return w}),o.d(r,"createUpArrow",function(){return p}),o.d(r,"updateSelectedArrows",function(){return b}),o.d(r,"updateArtboardArrows",function(){return P}),o.d(r,"updateAllArrows",function(){return I}),o.d(r,"deleteAllArrows",function(){return T}),o.d(r,"deleteArtboardArrows",function(){return A}),o.d(r,"deleteSelectedArrows",function(){return _}),o.d(r,"settings",function(){return x}),o.d(r,"onLayersMoved",function(){return k}),o.d(r,"panel",function(){return M});var a,n=o(/*! sketch */"sketch"),i=o.n(n),l=o(/*! sketch/ui */"sketch/ui"),s=(o(/*! sketch/dom */"sketch/dom").SharedStyle,"flowArrows"),u=i.a.fromNative(t.document),c=t.document.documentData(),d=t.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections",c,s),h=c.currentPage().currentArtboard()||c.currentPage(),f=N(),y=o(/*! sketch/settings */"sketch/settings");function m(e){V(e,null)}function v(e){V(e,"Auto")}function g(e){V(e,"Right")}function S(e){V(e,"Down")}function w(e){V(e,"Left")}function p(e){V(e,"Up")}function b(e){var t=e.selection;if(t.count()>1){for(var r=f,o=0;o0){for(var n=a.length,l=0;l0){for(var r=t.length,o=0;o0){for(var t=0;t0){for(var n=a.length,l=0;ln?s>i?c>d?"Down":"Right":h>f?"Right":"Up":s>i?h>f?"Left":"Down":c>d?"Left":"Up";return r}(e,r):i,m=null==n?y.settingForKey("arrowType"):n,d=B(t.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle",c,s)),d=null!=a?null!=B(a)&&"Default Style"!=a?a:"Default Style":t.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle",c,s)?t.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle",c,s):"Default Style",function(e,t,r){var o=u.getLayerWithID(e),a=u.getLayerWithID(t);if(y.settingForKey("arrowSpacing")&&0!=y.settingForKey("arrowSpacing")){var n=y.settingForKey("arrowSpacing");"Right"==r&&(a.frame.x=o.frame.x+o.frame.width+n),"Down"==r&&(a.frame.y=o.frame.y+o.frame.height+n),"Left"==r&&(a.frame.x=o.frame.x-a.frame.width-n),"Up"==r&&(a.frame.y=o.frame.y-a.frame.height-n)}}(e,r,l),function(e,t,r){var o,a,n,i,l,s=u.getLayerWithID(e),c=u.getLayerWithID(t);y.settingForKey("autoAlign")&&1==y.settingForKey("autoAlign")&&("Right"!=r&&"Left"!=r||(o=s.frame.y+s.frame.height/2,a=c.frame.y+c.frame.height/2,(l=o-a)>-6&&l<6&&(c.frame.y=c.frame.y+l)),"Down"!=r&&"Up"!=r||(n=s.frame.x+s.frame.width/2,i=c.frame.x+c.frame.width/2,(l=n-i)>-6&&l<6&&(c.frame.x=c.frame.x+l)))}(e,r,l);var v=j(),g=function(e,r,o,a,n,i){var l,d,f,y,m,v,g,S,w,p=u.getLayerWithID(e),b=u.getLayerWithID(r),P=p.frame.changeBasis({from:p.parent,to:h}),I=b.frame.changeBasis({from:b.parent,to:h});i?(g=i.frame().x(),S=i.frame().y()):(g=0,S=0);var T=NSBezierPath.bezierPath();if("Angled"==a||null==a){"Up"==n&&(l=P.x+P.width/2-g,d=P.y-S,f=I.x+I.width/2-g,y=I.y+I.height-S,m=(l+f)/2,v=(d+y)/2,T.moveToPoint(NSMakePoint(l,d)),T.lineToPoint(NSMakePoint(l,v)),T.lineToPoint(NSMakePoint(f,v)),T.lineToPoint(NSMakePoint(f,y))),"Right"==n&&(l=P.x+P.width-g,d=P.y+P.height/2-S,f=I.x-g,y=I.y+I.height/2-S,m=(l+f)/2,v=(d+y)/2,T.moveToPoint(NSMakePoint(l,d)),T.lineToPoint(NSMakePoint(m,d)),T.lineToPoint(NSMakePoint(m,y)),T.lineToPoint(NSMakePoint(f,y))),"Down"==n&&(l=P.x+P.width/2-g,d=P.y+P.height-S,f=I.x+I.width/2-g,y=I.y-S,m=(l+f)/2,v=(d+y)/2,T.moveToPoint(NSMakePoint(l,d)),T.lineToPoint(NSMakePoint(l,v)),T.lineToPoint(NSMakePoint(f,v)),T.lineToPoint(NSMakePoint(f,y))),"Left"==n&&(l=P.x-g,d=P.y+P.height/2-S,f=I.x+I.width-g,y=I.y+I.height/2-S,m=(l+f)/2,v=(d+y)/2,T.moveToPoint(NSMakePoint(l,d)),T.lineToPoint(NSMakePoint(m,d)),T.lineToPoint(NSMakePoint(m,y)),T.lineToPoint(NSMakePoint(f,y)));var A=(w=MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(T))).layers().firstObject().points();A[1].cornerRadius=20,A[2].cornerRadius=20,w.setName("Arrow")}"Straight"==a&&("Up"==n&&(l=P.x+P.width/2-g,d=P.y-S,f=I.x+I.width/2-g,y=I.y+I.height-S,m=(l+f)/2,v=(d+y)/2,T.moveToPoint(NSMakePoint(l,d)),T.lineToPoint(NSMakePoint(f,y))),"Right"==n&&(l=P.x+P.width-g,d=P.y+P.height/2-S,f=I.x-g,y=I.y+I.height/2-S,m=(l+f)/2,v=(d+y)/2,T.moveToPoint(NSMakePoint(l,d)),T.lineToPoint(NSMakePoint(f,y))),"Down"==n&&(l=P.x+P.width/2-g,d=P.y+P.height-S,f=I.x+I.width/2-g,y=I.y-S,m=(l+f)/2,v=(d+y)/2,T.moveToPoint(NSMakePoint(l,d)),T.lineToPoint(NSMakePoint(f,y))),"Left"==n&&(l=P.x-g,d=P.y+P.height/2-S,f=I.x+I.width-g,y=I.y+I.height/2-S,m=(l+f)/2,v=(d+y)/2,T.moveToPoint(NSMakePoint(l,d)),T.lineToPoint(NSMakePoint(f,y))),(w=MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(T))).setName("Arrow"));if("Curved"==a){if("Up"==n){l=P.x+P.width/2-g,d=P.y-S,f=I.x+I.width/2-g,y=I.y+I.height-S,m=(l+f)/2,v=(d+y)/2,T.moveToPoint(NSMakePoint(l,d)),T.lineToPoint(NSMakePoint(f,y));var _=(w=MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(T))).layers().firstObject().points();_[0].curveMode=_[1].curveMode=4,_[0].hasCurveFrom=_[1].hasCurveTo=!0,l1){for(var n=function(e,t){var r=e.firstObject().objectID();if("Auto"!=t)for(var o=0;o Date: Tue, 19 Mar 2019 22:31:28 +0300 Subject: [PATCH 02/44] added ability to add symbols from the library --- arrows.sketchplugin/Contents/Sketch/links.js | 125 +- arrows.sketchplugin/Contents/Sketch/script.js | 1700 ++++++++++++++++- .../Contents/Sketch/script.js.map | 2 +- src/script.js | 101 +- 4 files changed, 1911 insertions(+), 17 deletions(-) diff --git a/arrows.sketchplugin/Contents/Sketch/links.js b/arrows.sketchplugin/Contents/Sketch/links.js index 361a785..aa00d24 100644 --- a/arrows.sketchplugin/Contents/Sketch/links.js +++ b/arrows.sketchplugin/Contents/Sketch/links.js @@ -1,5 +1,126 @@ -var that=this;function __skpm_run(t,n){that.context=n;var e=function(t){var n={};function e(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,e),o.l=!0,o.exports}return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{enumerable:!0,get:r})},e.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},e.t=function(t,n){if(1&n&&(t=e(t)),8&n)return t;if(4&n&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(e.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&n&&"string"!=typeof t)for(var o in t)e.d(r,o,function(n){return t[n]}.bind(null,o));return r},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},e.p="",e(e.s="./src/links.js")}({"./src/links.js": +var that = this; +function __skpm_run (key, context) { + that.context = context; + +var exports = +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = "./src/links.js"); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./src/links.js": /*!**********************!*\ !*** ./src/links.js ***! \**********************/ -/*! exports provided: default, getLibrary, joinCommunity */function(t,n,e){"use strict";function r(t){NSWorkspace.sharedWorkspace().openURL(NSURL.URLWithString("https://github.com/faridsabitov/Sketch-Interactions"))}function o(t){NSWorkspace.sharedWorkspace().openURL(NSURL.URLWithString("https://spectrum.chat/sketch-arrows"))}e.r(n),e.d(n,"getLibrary",function(){return r}),e.d(n,"joinCommunity",function(){return o}),n.default=function(t){}}});"default"===t&&"function"==typeof e?e(n):e[t](n)}that.getLibrary=__skpm_run.bind(this,"getLibrary"),that.onRun=__skpm_run.bind(this,"default"),that.joinCommunity=__skpm_run.bind(this,"joinCommunity"); \ No newline at end of file +/*! exports provided: default, getLibrary, joinCommunity */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLibrary", function() { return getLibrary; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "joinCommunity", function() { return joinCommunity; }); +/* harmony default export */ __webpack_exports__["default"] = (function (context) {}); +function getLibrary(context) { + NSWorkspace.sharedWorkspace().openURL(NSURL.URLWithString("https://github.com/faridsabitov/Sketch-Interactions")); +} +function joinCommunity(context) { + NSWorkspace.sharedWorkspace().openURL(NSURL.URLWithString("https://spectrum.chat/sketch-arrows")); +} + +/***/ }) + +/******/ }); + if (key === 'default' && typeof exports === 'function') { + exports(context); + } else { + exports[key](context); + } +} +that['getLibrary'] = __skpm_run.bind(this, 'getLibrary'); +that['onRun'] = __skpm_run.bind(this, 'default'); +that['joinCommunity'] = __skpm_run.bind(this, 'joinCommunity') + +//# sourceMappingURL=links.js.map \ No newline at end of file diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index a41f045..0b0bec3 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -1,21 +1,1709 @@ -var that=this;function __skpm_run(e,t){that.context=t;var r=function(e){var t={};function r(o){if(t[o])return t[o].exports;var a=t[o]={i:o,l:!1,exports:{}};return e[o].call(a.exports,a,a.exports,r),a.l=!0,a.exports}return r.m=e,r.c=t,r.d=function(e,t,o){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(r.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)r.d(o,a,function(t){return e[t]}.bind(null,a));return o},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s="./src/script.js")}({"./src/script.js": +var that = this; +function __skpm_run (key, context) { + that.context = context; + +var exports = +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = "./src/script.js"); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./src/script.js": /*!***********************!*\ !*** ./src/script.js ***! \***********************/ -/*! exports provided: default, createDefaultArrow, createAutoArrow, createRightArrow, createDownArrow, createLeftArrow, createUpArrow, updateSelectedArrows, updateArtboardArrows, updateAllArrows, deleteAllArrows, deleteArtboardArrows, deleteSelectedArrows, settings, onLayersMoved, panel */function(e,r,o){"use strict";o.r(r),o.d(r,"createDefaultArrow",function(){return m}),o.d(r,"createAutoArrow",function(){return v}),o.d(r,"createRightArrow",function(){return g}),o.d(r,"createDownArrow",function(){return S}),o.d(r,"createLeftArrow",function(){return w}),o.d(r,"createUpArrow",function(){return p}),o.d(r,"updateSelectedArrows",function(){return b}),o.d(r,"updateArtboardArrows",function(){return P}),o.d(r,"updateAllArrows",function(){return I}),o.d(r,"deleteAllArrows",function(){return T}),o.d(r,"deleteArtboardArrows",function(){return A}),o.d(r,"deleteSelectedArrows",function(){return _}),o.d(r,"settings",function(){return x}),o.d(r,"onLayersMoved",function(){return k}),o.d(r,"panel",function(){return M});var a,n=o(/*! sketch */"sketch"),i=o.n(n),l=o(/*! sketch/ui */"sketch/ui"),s=(o(/*! sketch/dom */"sketch/dom").SharedStyle,"flowArrows"),u=i.a.fromNative(t.document),c=t.document.documentData(),d=t.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections",c,s),h=c.currentPage().currentArtboard()||c.currentPage(),f=N(),y=o(/*! sketch/settings */"sketch/settings");function m(e){V(e,null)}function v(e){V(e,"Auto")}function g(e){V(e,"Right")}function S(e){V(e,"Down")}function w(e){V(e,"Left")}function p(e){V(e,"Up")}function b(e){var t=e.selection;if(t.count()>1){for(var r=f,o=0;o0){for(var n=a.length,l=0;l0){for(var r=t.length,o=0;o0){for(var t=0;t0){for(var n=a.length,l=0;ln?s>i?c>d?"Down":"Right":h>f?"Right":"Up":s>i?h>f?"Left":"Down":c>d?"Left":"Up";return r}(e,r):i,m=null==n?y.settingForKey("arrowType"):n,d=B(t.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle",c,s)),d=null!=a?null!=B(a)&&"Default Style"!=a?a:"Default Style":t.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle",c,s)?t.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle",c,s):"Default Style",function(e,t,r){var o=u.getLayerWithID(e),a=u.getLayerWithID(t);if(y.settingForKey("arrowSpacing")&&0!=y.settingForKey("arrowSpacing")){var n=y.settingForKey("arrowSpacing");"Right"==r&&(a.frame.x=o.frame.x+o.frame.width+n),"Down"==r&&(a.frame.y=o.frame.y+o.frame.height+n),"Left"==r&&(a.frame.x=o.frame.x-a.frame.width-n),"Up"==r&&(a.frame.y=o.frame.y-a.frame.height-n)}}(e,r,l),function(e,t,r){var o,a,n,i,l,s=u.getLayerWithID(e),c=u.getLayerWithID(t);y.settingForKey("autoAlign")&&1==y.settingForKey("autoAlign")&&("Right"!=r&&"Left"!=r||(o=s.frame.y+s.frame.height/2,a=c.frame.y+c.frame.height/2,(l=o-a)>-6&&l<6&&(c.frame.y=c.frame.y+l)),"Down"!=r&&"Up"!=r||(n=s.frame.x+s.frame.width/2,i=c.frame.x+c.frame.width/2,(l=n-i)>-6&&l<6&&(c.frame.x=c.frame.x+l)))}(e,r,l);var v=j(),g=function(e,r,o,a,n,i){var l,d,f,y,m,v,g,S,w,p=u.getLayerWithID(e),b=u.getLayerWithID(r),P=p.frame.changeBasis({from:p.parent,to:h}),I=b.frame.changeBasis({from:b.parent,to:h});i?(g=i.frame().x(),S=i.frame().y()):(g=0,S=0);var T=NSBezierPath.bezierPath();if("Angled"==a||null==a){"Up"==n&&(l=P.x+P.width/2-g,d=P.y-S,f=I.x+I.width/2-g,y=I.y+I.height-S,m=(l+f)/2,v=(d+y)/2,T.moveToPoint(NSMakePoint(l,d)),T.lineToPoint(NSMakePoint(l,v)),T.lineToPoint(NSMakePoint(f,v)),T.lineToPoint(NSMakePoint(f,y))),"Right"==n&&(l=P.x+P.width-g,d=P.y+P.height/2-S,f=I.x-g,y=I.y+I.height/2-S,m=(l+f)/2,v=(d+y)/2,T.moveToPoint(NSMakePoint(l,d)),T.lineToPoint(NSMakePoint(m,d)),T.lineToPoint(NSMakePoint(m,y)),T.lineToPoint(NSMakePoint(f,y))),"Down"==n&&(l=P.x+P.width/2-g,d=P.y+P.height-S,f=I.x+I.width/2-g,y=I.y-S,m=(l+f)/2,v=(d+y)/2,T.moveToPoint(NSMakePoint(l,d)),T.lineToPoint(NSMakePoint(l,v)),T.lineToPoint(NSMakePoint(f,v)),T.lineToPoint(NSMakePoint(f,y))),"Left"==n&&(l=P.x-g,d=P.y+P.height/2-S,f=I.x+I.width-g,y=I.y+I.height/2-S,m=(l+f)/2,v=(d+y)/2,T.moveToPoint(NSMakePoint(l,d)),T.lineToPoint(NSMakePoint(m,d)),T.lineToPoint(NSMakePoint(m,y)),T.lineToPoint(NSMakePoint(f,y)));var A=(w=MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(T))).layers().firstObject().points();A[1].cornerRadius=20,A[2].cornerRadius=20,w.setName("Arrow")}"Straight"==a&&("Up"==n&&(l=P.x+P.width/2-g,d=P.y-S,f=I.x+I.width/2-g,y=I.y+I.height-S,m=(l+f)/2,v=(d+y)/2,T.moveToPoint(NSMakePoint(l,d)),T.lineToPoint(NSMakePoint(f,y))),"Right"==n&&(l=P.x+P.width-g,d=P.y+P.height/2-S,f=I.x-g,y=I.y+I.height/2-S,m=(l+f)/2,v=(d+y)/2,T.moveToPoint(NSMakePoint(l,d)),T.lineToPoint(NSMakePoint(f,y))),"Down"==n&&(l=P.x+P.width/2-g,d=P.y+P.height-S,f=I.x+I.width/2-g,y=I.y-S,m=(l+f)/2,v=(d+y)/2,T.moveToPoint(NSMakePoint(l,d)),T.lineToPoint(NSMakePoint(f,y))),"Left"==n&&(l=P.x-g,d=P.y+P.height/2-S,f=I.x+I.width-g,y=I.y+I.height/2-S,m=(l+f)/2,v=(d+y)/2,T.moveToPoint(NSMakePoint(l,d)),T.lineToPoint(NSMakePoint(f,y))),(w=MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(T))).setName("Arrow"));if("Curved"==a){if("Up"==n){l=P.x+P.width/2-g,d=P.y-S,f=I.x+I.width/2-g,y=I.y+I.height-S,m=(l+f)/2,v=(d+y)/2,T.moveToPoint(NSMakePoint(l,d)),T.lineToPoint(NSMakePoint(f,y));var _=(w=MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(T))).layers().firstObject().points();_[0].curveMode=_[1].curveMode=4,_[0].hasCurveFrom=_[1].hasCurveTo=!0,l1){for(var n=function(e,t){var r=e.firstObject().objectID();if("Auto"!=t)for(var o=0;o 1) { + // Need to find source object by ID first + // let sourceObjectID = getSourceObjectFromSelection(selection) + var currentConnectionsData = newConnectionsData; + + for (var g = 0; g < selection.count(); g++) { + if (selection[g].objectID() != selection[0].objectID()) { + // Then need to create or update connection arrow with each selection + var connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData); + + if (connectionIndex != null) { + updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex); + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Current connection is updated 🚀"); + } else { + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is no connection between selected layers on the plugin data"); + } + } + } + + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); + } else { + // When user didn't select anything + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Please select more than two layers"); + } +} +function updateArtboardArrows(context) { + // TODO: Need to show amount of updated arrows and deleted ones + var selection = context.selection; + var connections = getConnectionsData(); + var firstObjectArtboard; + var secondObjectArtboard; + + if (connections.length > 0) { + // We have connections in database + var updateArrowsCounter = connections.length; + + for (var i = 0; i < updateArrowsCounter; i++) { + // Need to check if the element is selected globally or from the artboard + firstObjectArtboard = document.getLayerWithID(connections[i].firstObject); + firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID(); + secondObjectArtboard = document.getLayerWithID(connections[i].secondObject); + secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID(); + + if (selection.count() == 1 && selection[0].class() == "MSArtboardGroup") { + // Need to go through each connection and update arrow position for specific artboard + if (firstObjectArtboard == selection[0].objectID()) { + if (secondObjectArtboard == selection[0].objectID()) { + updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i); + } else { + newConnectionsData.push(connections[i]); + } + } else { + // If not just saving it + newConnectionsData.push(connections[i]); + } + } + } + + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows are updated 🚀"); + } else { + // We don't have any connections to update + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is nothing to update"); + } +} +function updateAllArrows(context) { + // TODO + // TODO: Need to show amount of updated arrows and deleted ones + var currentConnectionsData = newConnectionsData; + + if (currentConnectionsData.length > 0) { + // We have connections in database + var updateArrowsCounter = currentConnectionsData.length; + + for (var i = 0; i < updateArrowsCounter; i++) { + // Need to go through each connection and update arrow position without artboards + // Need to check if current object don't have the parrent + updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i); + } + + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows are updated 🚀"); + } else { + // We don't have any connections to update + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is nothing to update"); + } +} +function deleteAllArrows(context) { + if (newConnectionsData.length > 0) { + // We have connections in database + for (var i = 0; i < newConnectionsData.length; i++) { + // Need to go through each connection and update arrow position + deleteLine(newConnectionsData[i].line); + } + + context.command.setValue_forKey_onLayer_forPluginIdentifier(null, "arrowConnections", docData, pluginKey); + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows are deleted"); + } else { + // We don't have any connections to update + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is nothing to delete"); + } +} +function deleteArtboardArrows(context) { + var selection = context.selection; + var firstObject, secondObject; // Need to delete all the arrows only from selected artboard + + if (selection.count() == 1 && selection[0].class() == "MSArtboardGroup") { + var connections = getConnectionsData(); + + if (connections.length > 0) { + // We have connections in database + var updateArrowsCounter = connections.length; + + for (var i = 0; i < updateArrowsCounter; i++) { + // Need to go through each connection and check if it placed on selected artboard + firstObject = document.getLayerWithID(connections[i].firstObject); + secondObject = document.getLayerWithID(connections[i].secondObject); + + if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()) { + if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()) { + deleteLine(connections[i].line); + newConnectionsData = deleteConnectionFromData(i); + } + } + } + + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows from selected artboard are deleted"); + } else { + // We don't have any connections to update + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is nothing to delete"); + } + } else { + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Please select one artboard"); + } +} +function deleteSelectedArrows(context) { + var selection = context.selection; + var firstObject, secondObject; // Need to delete all the arrows only from selected artboard + + if (selection.count() == 2) { + for (var g = 0; g < selection.count(); g++) { + if (selection[g].objectID() != selection[0].objectID()) { + // It will never check 3rd connection + var connections = getConnectionsData(); + var connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections); + + if (connectionIndex != null) { + // We have connections in database + deleteLine(connections[connectionIndex].line); + newConnectionsData = deleteConnectionFromData(connectionIndex); + var updateArrowsCounter = connections.length; + + for (var i = 0; i < updateArrowsCounter; i++) { + // Need to go through each connection and check if it placed on selected artboard + firstObject = document.getLayerWithID(connections[i].firstObject); + secondObject = document.getLayerWithID(connections[i].secondObject); + + if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()) { + if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()) { + deleteLine(connections[i].line); + newConnectionsData = deleteConnectionFromData(i); + } + } + } + + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows from selected layers are deleted ✌️"); + } + } + } + } else { + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Select two layers, please 🧐"); + } +} +function settings(context) { + var alert = COSAlertWindow.new(); + var viewWidth = 300; + var viewHeight = 450; // Alert window settings + + alert = alertSetup(alert, viewWidth, viewHeight); + var view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight)); + alert.addAccessoryView(view); // Label: Arrow Style + + var arrowStyleLabel = alertLabel("Arrow Style", true, -1, viewHeight - 40, 280, 40); + view.addSubview(arrowStyleLabel); // Select: Arrow Style + + var arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20)); + setActiveStyleSetting(arrowStylingField); + view.addSubview(arrowStylingField); // Label: Arrow Style Info + + var arrowStyleInfoLabel = alertLabel("Add layer style to your document that will contain $arrow name and you will be able to specify it here ", false, -1, viewHeight - 80, 300, 40); + view.addSubview(arrowStyleInfoLabel); // Label: Arrow Type + + var arrowTypeLabel = alertLabel("Arrow Type", true, -1, viewHeight - 130, 280, 40); + view.addSubview(arrowTypeLabel); // Select: Arrow Type + + var arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20)); + setActiveTypeSetting(arrowTypeField); + view.addSubview(arrowTypeField); // Label: Arrow Type Info + + var arrowTypeInfoLabel = alertLabel("Select one of the arrow types. Angled is used by default", false, -1, viewHeight - 170, 300, 40); + view.addSubview(arrowTypeInfoLabel); // Label: Arrow Spacing + + var arrowSpacingLabel = alertLabel("Arrow Spacing", true, -1, viewHeight - 200, 330, 20); + view.addSubview(arrowSpacingLabel); // Label: Arrow Spacing PX + + var arrowSpacingPxLabel = alertLabel("px", true, 90, viewHeight - 220, 330, 20); + view.addSubview(arrowSpacingPxLabel); // Input: Arrow Spacing + + var arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20)); + var formatter = NSNumberFormatter.alloc().init().autorelease(); + arrowSpacingField.setStringValue(String(Settings.settingForKey("arrowSpacing"))); + arrowSpacingField.setFormatter(formatter); + view.addSubview(arrowSpacingField); // Stepper: Arrow Spacing + + var arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20)); + arrowSpacingStepper.setMaxValue(1000); + arrowSpacingStepper.setMinValue(0); + arrowSpacingStepper.setValueWraps(false); + arrowSpacingStepper.setAutorepeat(true); + arrowSpacingStepper.setCOSJSTargetFunction(function (sender) { + var value = 0 + sender.integerValue(); + arrowSpacingField.setStringValue(String(value)); + }); + view.addSubview(arrowSpacingStepper); // view.addSubview(formatter) + // Label: Auto Spacing Info + + var arrowSpacingInfoLabel = alertLabel("The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature ", false, -1, viewHeight - 285, 300, 60); + view.addSubview(arrowSpacingInfoLabel); // Label: Other Settings + + var otherSettingsLabel = alertLabel("Other Settings", true, -1, viewHeight - 330, 280, 40); + view.addSubview(otherSettingsLabel); // Checkbox: Auto-Align + + var checkbox = alertCheckbox("Second layer auto-align", false, -1, viewHeight - 340, 260, 40); + view.addSubview(checkbox); // Label: Auto-Align Info + + var autoAlignInfoLabel = alertLabel("Align the second layer for 5px misalignment with the first one", false, -1, viewHeight - 370, 280, 40); + view.addSubview(autoAlignInfoLabel); // Label: Plugin Info + + var pluginInfoLabel = alertLabel("Made by @faridSabitov with the support of EPAM.com ❤️", true, -1, viewHeight - 420, 280, 40); + view.addSubview(pluginInfoLabel); // Need to check if style is still available + // Show modal and get the results + + var modalResponse = alert.runModal(); + + if (modalResponse == NSAlertFirstButtonReturn) { + // When user clicks on "Update Settings" + // Need to save all this results into the Plugin Settings + context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), "arrowStyle", docData, pluginKey); + Settings.setSettingForKey("arrowType", alert.views()[0].subviews()[4].title()); + Settings.setSettingForKey("arrowSpacing", alert.views()[0].subviews()[8].intValue()); + Settings.setSettingForKey("autoAlign", alert.views()[0].subviews()[12].state()); + UI.message("Settings are updated 🚀"); + } +} +function onLayersMoved(context) { + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Please select more than two layers"); + var action = context.actionContext; +} +function panel(context) { + var ControlBar; + ControlBar = NSPanel.alloc().init(); + ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask); // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1)); + + ControlBar.setTitleVisibility(NSWindowTitleHidden); + ControlBar.setTitlebarAppearsTransparent(true); + ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false); + ControlBar.setMovableByWindowBackground(true); + ControlBar.setHasShadow(true); + ControlBar.setLevel(NSFloatingWindowLevel); // contentView.addSubview(closeButton) + + ControlBar.center(); + ControlBar.makeKeyAndOrderFront(nil); // getImage = function(size, name){ + // var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false; + // suffix = (isRetinaDisplay)? "@2x": "", + // imageURL = NSURL.fileURLWithPath(self.pluginResources + "/icons/" + name + suffix + ".png"), + // image = NSImage.alloc().initWithContentsOfURL(imageURL); + // return image + // }, + // addButton = function(rect, name, callAction){ + // var button = NSButton.alloc().initWithFrame(rect), + // image = getImage(rect.size, name); + // button.setImage(image); + // button.setBordered(false); + // button.sizeToFit(); + // button.setButtonType(NSMomentaryChangeButton); + // button.setCOSJSTargetFunction(callAction); + // button.setAction("callAction:"); + // return button; + // }, + // addImage = function(rect, name){ + // var view = NSImageView.alloc().initWithFrame(rect), + // image = getImage(rect.size, name); + // view.setImage(image); + // return view; + // }, + // closeButton = addButton( NSMakeRect(20, 10, 30, 30), "close-control", + // function(sender){ + // coscript.setShouldKeepAround(false); + // threadDictionary.removeObjectForKey(identifier); + // ControlBar.close(); + // }), +} // +// Functions +// + +function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, connectionIndex) { + // There might be a situation, when user deleted current group or current group stays on another artboard => In that case need to create another group + // Need to check if we have the layers with such IDs + var firstObject = document.getLayerWithID(firstObjectID); + var secondObject = document.getLayerWithID(secondObjectID); // Need to delete data first, because we will have a new line + + deleteLine(lineID); + newConnectionsData = deleteConnectionFromData(connectionIndex); + + if (firstObject && secondObject) { + // If we have all the objects, we can recreate the line + createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID); + } +} + +function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID) { + // Process of creating new connection + var localDirection, localStyle, localType; + + if (direction == "Auto") { + // If direction is auto, we need to specify direction ourselves + localDirection = getDirection(firstObjectID, secondObjectID); + } else { + localDirection = direction; + } + + if (type == null) { + localType = Settings.settingForKey("arrowType"); + } else { + localType = type; + } // log(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)) + + + localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)); + + if (style != null) { + // if we updating connection with previously created objects + if (getLayerStyles(style) != null && style != "Default Style") { + localStyle = style; + } else { + localStyle = "Default Style"; + } + } else { + // We don't have any data from the plugin data + if (context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)) { + localStyle = context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey); + } else { + localStyle = "Default Style"; + } + } + + updateSpacing(firstObjectID, secondObjectID, localDirection); + autoAlignLayer(firstObjectID, secondObjectID, localDirection); + var currentGroup = checkForArrowGroup(); + var line = drawLine(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentGroup); + addToArrowsGroup(line, currentGroup); // if(localStyle != "Default Style"){ + // localStyle = localStyle[0].name() + // } + // Storage for current connection + + var connection = { + firstObject: firstObjectID, + secondObject: secondObjectID, + style: localStyle, + condition: conditionID, + type: localType, + direction: localDirection, + line: line.objectID() // Need to save this data to the global array + + }; + newConnectionsData.push(connection); +} + +function checkForArrowGroup() { + var currentGroup = null; // Checking all the groups that we have + + for (var i = 0; i < currentParentGroup.layers().count(); i++) { + if (currentParentGroup.layers()[i].name() == "Arrows") { + // If we already have "Arrow" group we need to save it's folder + currentGroup = currentParentGroup.layers()[i]; + refactorLines(currentGroup); + } + } + + return currentGroup; +} + +function getDirection(firstObjectID, secondObjectID) { + // Get direction from the source object + var firstObject = document.getLayerWithID(firstObjectID); + var secondObject = document.getLayerWithID(secondObjectID); + var firstObjectMidX = firstObject.frame.x + firstObject.frame.width / 2; + var firstObjectMidY = firstObject.frame.y + firstObject.frame.height / 2; + var secondObjectMidX = secondObject.frame.x + secondObject.frame.width / 2; + var secondObjectMidY = secondObject.frame.y + secondObject.frame.height / 2; + var diffX = firstObjectMidX - secondObjectMidX; + var diffY = firstObjectMidY - secondObjectMidY; + var absDiffX = Math.abs(diffX); + var absDiffY = Math.abs(diffY); + var direction; + + if (secondObjectMidX > firstObjectMidX) { + // Right Half + if (secondObjectMidY > firstObjectMidY) { + // Bottom quarter + if (diffX > diffY) { + direction = "Down"; + } else { + direction = "Right"; + } + } else { + // Top quarter + if (absDiffX > absDiffY) { + direction = "Right"; + } else { + direction = "Up"; + } + } + } else { + // Left Half + if (secondObjectMidY > firstObjectMidY) { + // Bottom quarter + if (absDiffX > absDiffY) { + direction = "Left"; + } else { + direction = "Down"; + } + } else { + // Top quarter + if (diffX > diffY) { + direction = "Left"; + } else { + direction = "Up"; + } + } + } + + return direction; +} + +function drawLine(firstObjectID, secondObjectID, style, type, direction, currentGroup) { + var firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, middlePosX, middlePosY, diffX, diffY, line; + var firstObject = document.getLayerWithID(firstObjectID); + var secondObject = document.getLayerWithID(secondObjectID); + var firstObjectAbsPos = firstObject.frame.changeBasis({ + from: firstObject.parent, + to: currentParentGroup + }); + var secondObjectAbsPos = secondObject.frame.changeBasis({ + from: secondObject.parent, + to: currentParentGroup + }); + + if (currentGroup) { + //if we already have a group, need to specify the difference + diffX = currentGroup.frame().x(); + diffY = currentGroup.frame().y(); + } else { + diffX = 0; + diffY = 0; + } // Drawing a line + + + var path = NSBezierPath.bezierPath(); + + if (type == "Angled" || type == null) { + // Based on direction, we need to specify connection points + if (direction == "Up") { + // First Layer Position Start Point Position + firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; + firstLayerPosY = firstObjectAbsPos.y - diffY; // Second Layer Position End Point Position + + secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; + secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height - diffY; // Middle Points + + middlePosX = (firstLayerPosX + secondLayerPosX) / 2; + middlePosY = (firstLayerPosY + secondLayerPosY) / 2; // Connecting points + + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + if (direction == "Right") { + // First Layer Position Start Point Position + firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width - diffX; + firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position + + secondLayerPosX = secondObjectAbsPos.x - diffX; + secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points + + middlePosX = (firstLayerPosX + secondLayerPosX) / 2; + middlePosY = (firstLayerPosY + secondLayerPosY) / 2; // Connecting points + + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + if (direction == "Down") { + // First Layer Position Start Point Position + firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; + firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height - diffY; // Second Layer Position End Point Position + + secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; + secondLayerPosY = secondObjectAbsPos.y - diffY; // Middle Points + + middlePosX = (firstLayerPosX + secondLayerPosX) / 2; + middlePosY = (firstLayerPosY + secondLayerPosY) / 2; // Connecting points + + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + if (direction == "Left") { + // First Layer Position Start Point Position + firstLayerPosX = firstObjectAbsPos.x - diffX; + firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position + + secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width - diffX; + secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points + + middlePosX = (firstLayerPosX + secondLayerPosX) / 2; + middlePosY = (firstLayerPosY + secondLayerPosY) / 2; // Connecting points + + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } //TODO: Provide a separate file with all the stylings + // Painting the line + + + line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); // Making middle points rounded + + var points = line.layers().firstObject().points(); + points[1].cornerRadius = 20; + points[2].cornerRadius = 20; // Providing Settings for the arrow + + line.setName("Arrow"); + } + + if (type == "Straight") { + // Based on direction, we need to specify connection points + if (direction == "Up") { + // First Layer Position Start Point Position + firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; + firstLayerPosY = firstObjectAbsPos.y - diffY; // Second Layer Position End Point Position + + secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; + secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height - diffY; // Middle Points + + middlePosX = (firstLayerPosX + secondLayerPosX) / 2; + middlePosY = (firstLayerPosY + secondLayerPosY) / 2; // Connecting points + + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + if (direction == "Right") { + // First Layer Position Start Point Position + firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width - diffX; + firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position + + secondLayerPosX = secondObjectAbsPos.x - diffX; + secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points + + middlePosX = (firstLayerPosX + secondLayerPosX) / 2; + middlePosY = (firstLayerPosY + secondLayerPosY) / 2; // Connecting points + + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + if (direction == "Down") { + // First Layer Position Start Point Position + firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; + firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height - diffY; // Second Layer Position End Point Position + + secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; + secondLayerPosY = secondObjectAbsPos.y - diffY; // Middle Points + + middlePosX = (firstLayerPosX + secondLayerPosX) / 2; + middlePosY = (firstLayerPosY + secondLayerPosY) / 2; // Connecting points + + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + if (direction == "Left") { + // First Layer Position Start Point Position + firstLayerPosX = firstObjectAbsPos.x - diffX; + firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position + + secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width - diffX; + secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points + + middlePosX = (firstLayerPosX + secondLayerPosX) / 2; + middlePosY = (firstLayerPosY + secondLayerPosY) / 2; // Connecting points + + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } // Painting the line + + + line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); // Providing Settings for the arrow + + line.setName("Arrow"); + } + + if (type == "Curved") { + // Based on direction, we need to specify connection points + if (direction == "Up") { + // First Layer Position Start Point Position + firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; + firstLayerPosY = firstObjectAbsPos.y - diffY; // Second Layer Position End Point Position + + secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; + secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height - diffY; // Middle Points + + middlePosX = (firstLayerPosX + secondLayerPosX) / 2; + middlePosY = (firstLayerPosY + secondLayerPosY) / 2; // Connecting points + + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line + + line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + + var _points = line.layers().firstObject().points(); + + _points[0].curveMode = _points[1].curveMode = 4; + _points[0].hasCurveFrom = _points[1].hasCurveTo = true; + + if (firstLayerPosX < secondLayerPosX) { + _points[0].curveFrom = { + x: 0, + y: 0.5 + }; + _points[0].curveTo = { + x: -0.5, + y: 1 + }; + _points[1].curveFrom = { + x: 1, + y: 1 + }; + _points[1].curveTo = { + x: 1, + y: 0.5 + }; + } else { + _points[0].curveFrom = { + x: 1, + y: 0.5 + }; + _points[0].curveTo = { + x: -0.5, + y: 1 + }; + _points[1].curveFrom = { + x: 1, + y: 1 + }; + _points[1].curveTo = { + x: 0, + y: 0.5 + }; + } + } + + if (direction == "Right") { + // First Layer Position Start Point Position + firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width - diffX; + firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position + + secondLayerPosX = secondObjectAbsPos.x - diffX; + secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points + + middlePosX = (firstLayerPosX + secondLayerPosX) / 2; + middlePosY = (firstLayerPosY + secondLayerPosY) / 2; // Connecting points + + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line + + line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + + var _points2 = line.layers().firstObject().points(); + + _points2[0].curveMode = _points2[1].curveMode = 4; + _points2[0].hasCurveFrom = _points2[1].hasCurveTo = true; + + if (firstLayerPosY < secondLayerPosY) { + _points2[0].curveFrom = { + x: 0.5, + y: 0 + }; + _points2[0].curveTo = { + x: -0.5, + y: 1 + }; + _points2[1].curveFrom = { + x: 1, + y: 1 + }; + _points2[1].curveTo = { + x: 0.5, + y: 1 + }; + } else { + _points2[0].curveFrom = { + x: 0.5, + y: 1 + }; + _points2[0].curveTo = { + x: -0.5, + y: 1 + }; + _points2[1].curveFrom = { + x: 1, + y: 1 + }; + _points2[1].curveTo = { + x: 0.5, + y: 0 + }; + } + } + + if (direction == "Down") { + // First Layer Position Start Point Position + firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; + firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height - diffY; // Second Layer Position End Point Position + + secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; + secondLayerPosY = secondObjectAbsPos.y - diffY; // Middle Points + + middlePosX = (firstLayerPosX + secondLayerPosX) / 2; + middlePosY = (firstLayerPosY + secondLayerPosY) / 2; // Connecting points + + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line + + line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + + var _points3 = line.layers().firstObject().points(); + + _points3[0].curveMode = _points3[1].curveMode = 4; + _points3[0].hasCurveFrom = _points3[1].hasCurveTo = true; + + if (firstLayerPosX < secondLayerPosX) { + _points3[0].curveFrom = { + x: 0, + y: 0.5 + }; + _points3[0].curveTo = { + x: -0.5, + y: 1 + }; + _points3[1].curveFrom = { + x: 1, + y: 1 + }; + _points3[1].curveTo = { + x: 1, + y: 0.5 + }; + } else { + _points3[0].curveFrom = { + x: 1, + y: 0.5 + }; + _points3[0].curveTo = { + x: -0.5, + y: 1 + }; + _points3[1].curveFrom = { + x: 1, + y: 1 + }; + _points3[1].curveTo = { + x: 0, + y: 0.5 + }; + } + } + + if (direction == "Left") { + // First Layer Position Start Point Position + firstLayerPosX = firstObjectAbsPos.x - diffX; + firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position + + secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width - diffX; + secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points + + middlePosX = (firstLayerPosX + secondLayerPosX) / 2; + middlePosY = (firstLayerPosY + secondLayerPosY) / 2; // Connecting points + + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line + + line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + + var _points4 = line.layers().firstObject().points(); + + _points4[0].curveMode = _points4[1].curveMode = 4; + _points4[0].hasCurveFrom = _points4[1].hasCurveTo = true; + + if (firstLayerPosY < secondLayerPosY) { + _points4[0].curveFrom = { + x: 0.5, + y: 0 + }; + _points4[0].curveTo = { + x: -0.5, + y: 1 + }; + _points4[1].curveFrom = { + x: 1, + y: 1 + }; + _points4[1].curveTo = { + x: 0.5, + y: 1 + }; + } else { + _points4[0].curveFrom = { + x: 0.5, + y: 1 + }; + _points4[0].curveTo = { + x: -0.5, + y: 1 + }; + _points4[1].curveFrom = { + x: 1, + y: 1 + }; + _points4[1].curveTo = { + x: 0.5, + y: 0 + }; + } + } // Providing Settings for the arrow + + + line.setName("Arrows"); + } // Style Start + + + if (style == null) { + // that means we are creating new arrow + if (context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)) { + // if we have specified options + // TODO: Need to refactor here. Local Style is not used at all + var _style = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)); + + if (_style[0] == null) { + // Default Arrow Style + var border = line.style().addStylePartOfType(1); + border.color = MSColor.colorWithRGBADictionary({ + r: 0.89, + g: 0.89, + b: 0.89, + a: 1 + }); + border.thickness = 2; + line.style().endMarkerType = 2; + } else { + line.sharedStyle = _style[0]; + } + } else { + // Default Arrow Style + var _border = line.style().addStylePartOfType(1); + + _border.color = MSColor.colorWithRGBADictionary({ + r: 0.89, + g: 0.89, + b: 0.89, + a: 1 + }); + _border.thickness = 2; + line.style().endMarkerType = 2; + } + } else { + // arrow style already provided + if (style == "Default Style") { + // Default Arrow Style + var _border2 = line.style().addStylePartOfType(1); + + _border2.color = MSColor.colorWithRGBADictionary({ + r: 0.89, + g: 0.89, + b: 0.89, + a: 1 + }); + _border2.thickness = 2; + line.style().endMarkerType = 2; + } else { + // User provided own style + var ownStyle = getLayerStyles(style); + line.sharedStyle = ownStyle[0]; + } + } // Style End + + + return line; +} + +function addToArrowsGroup(line, currentGroup) { + if (currentGroup) { + currentGroup.addLayers([line]); + currentGroup.fixGeometryWithOptions(1); + } else { + // If we don't have a group + var Group = __webpack_require__(/*! sketch/dom */ "sketch/dom").Group; + + var group = new Group({ + parent: currentParentGroup, + name: 'Arrows', + locked: true, + layers: [line] + }); // Moving this group to the bottom of the page + + group.moveToBack(); + currentGroup = checkForArrowGroup(); + currentGroup.fixGeometryWithOptions(1); + } +} + +function getConnectionsData() { + var dataArray = []; + var pluginDataConnections = []; + + if (pluginData) { + pluginDataConnections = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); + + for (var i = 0; i < pluginDataConnections.length; i++) { + dataArray.push(pluginDataConnections[i]); + } + } + + return dataArray; +} + +function findConnectionData(firstObjectID, secondObjectID, data) { + var arrayNumber = null; + firstObjectID = String(firstObjectID); + secondObjectID = String(secondObjectID); + + if (pluginData) { + // If we have database, need to check for connections + for (var y = 0; y < data.length; y++) { + if (firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject) { + // if we found that we have this object in connection database already + if (secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject) { + // if we found that we have this object in connection database already + arrayNumber = y; + } + } + } + } + + return arrayNumber; +} + +function setActiveDirectionSetting(arrowDirectionField) { + var currentDirection = "Auto"; + + if (Settings.settingForKey("arrowDirection")) { + // if there is data in settings + currentDirection = Settings.settingForKey("arrowDirection"); + + if (currentDirection == "Auto") { + arrowDirectionField.addItemWithTitle("Auto"); + arrowDirectionField.lastItem().setState(1); + arrowDirectionField.addItemWithTitle("Right"); + arrowDirectionField.lastItem().setState(0); + arrowDirectionField.addItemWithTitle("Down"); + arrowDirectionField.lastItem().setState(0); + arrowDirectionField.addItemWithTitle("Left"); + arrowDirectionField.lastItem().setState(0); + arrowDirectionField.addItemWithTitle("Up"); + arrowDirectionField.lastItem().setState(0); + } + + if (currentDirection == "Right") { + arrowDirectionField.addItemWithTitle("Right"); + arrowDirectionField.lastItem().setState(1); + arrowDirectionField.addItemWithTitle("Down"); + arrowDirectionField.lastItem().setState(0); + arrowDirectionField.addItemWithTitle("Left"); + arrowDirectionField.lastItem().setState(0); + arrowDirectionField.addItemWithTitle("Up"); + arrowDirectionField.lastItem().setState(0); + arrowDirectionField.addItemWithTitle("Auto"); + arrowDirectionField.lastItem().setState(0); + } + + if (currentDirection == "Down") { + arrowDirectionField.addItemWithTitle("Down"); + arrowDirectionField.lastItem().setState(1); + arrowDirectionField.addItemWithTitle("Left"); + arrowDirectionField.lastItem().setState(0); + arrowDirectionField.addItemWithTitle("Up"); + arrowDirectionField.lastItem().setState(0); + arrowDirectionField.addItemWithTitle("Auto"); + arrowDirectionField.lastItem().setState(0); + arrowDirectionField.addItemWithTitle("Right"); + arrowDirectionField.lastItem().setState(0); + } + + if (currentDirection == "Left") { + arrowDirectionField.addItemWithTitle("Left"); + arrowDirectionField.lastItem().setState(1); + arrowDirectionField.addItemWithTitle("Up"); + arrowDirectionField.lastItem().setState(0); + arrowDirectionField.addItemWithTitle("Auto"); + arrowDirectionField.lastItem().setState(0); + arrowDirectionField.addItemWithTitle("Right"); + arrowDirectionField.lastItem().setState(0); + arrowDirectionField.addItemWithTitle("Down"); + arrowDirectionField.lastItem().setState(0); + } + + if (currentDirection == "Up") { + arrowDirectionField.addItemWithTitle("Up"); + arrowDirectionField.lastItem().setState(1); + arrowDirectionField.addItemWithTitle("Auto"); + arrowDirectionField.lastItem().setState(0); + arrowDirectionField.addItemWithTitle("Right"); + arrowDirectionField.lastItem().setState(0); + arrowDirectionField.addItemWithTitle("Down"); + arrowDirectionField.lastItem().setState(0); + arrowDirectionField.addItemWithTitle("Left"); + arrowDirectionField.lastItem().setState(0); + } + } else { + // Show default + arrowDirectionField.addItemWithTitle("Auto"); + arrowDirectionField.addItemWithTitle("Right"); + arrowDirectionField.addItemWithTitle("Down"); + arrowDirectionField.addItemWithTitle("Left"); + arrowDirectionField.addItemWithTitle("Up"); + } +} + +function setActiveStyleSetting(arrowStylingField) { + var docSettings = context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey); + var styles = getLayerStyles(null); + + if (docSettings) { + // We have info about the settings in the current document + if (docSettings != "Default Style") { + // if user specified own option + arrowStylingField.addItemWithTitle(docSettings); + arrowStylingField.addItemWithTitle("Default Style"); + + for (var i = 0; i < styles.length; i++) { + if (styles[i].name() != docSettings) { + arrowStylingField.addItemWithTitle(styles[i].name()); + } + } + } else { + // Need to show the default first + arrowStylingField.addItemWithTitle("Default Style"); + + for (var _i = 0; _i < styles.length; _i++) { + arrowStylingField.addItemWithTitle(styles[_i].name()); + } + } + } else { + arrowStylingField.addItemWithTitle("Default Style"); + + for (var _i2 = 0; _i2 < styles.length; _i2++) { + arrowStylingField.addItemWithTitle(styles[_i2].name()); + } + } +} + +function setActiveTypeSetting(arrowTypeField) { + var docTypeSettings = Settings.settingForKey("arrowType"); + + if (docTypeSettings) { + // We have info about the settings in the current document + if (docTypeSettings == "Angled") { + arrowTypeField.addItemWithTitle("Angled"); + arrowTypeField.lastItem().setState(1); + arrowTypeField.addItemWithTitle("Curved"); + arrowTypeField.lastItem().setState(0); + arrowTypeField.addItemWithTitle("Straight"); + arrowTypeField.lastItem().setState(0); + } + + if (docTypeSettings == "Curved") { + arrowTypeField.addItemWithTitle("Curved"); + arrowTypeField.lastItem().setState(1); + arrowTypeField.addItemWithTitle("Straight"); + arrowTypeField.lastItem().setState(0); + arrowTypeField.addItemWithTitle("Angled"); + arrowTypeField.lastItem().setState(0); + } + + if (docTypeSettings == "Straight") { + arrowTypeField.addItemWithTitle("Straight"); + arrowTypeField.lastItem().setState(1); + arrowTypeField.addItemWithTitle("Angled"); + arrowTypeField.lastItem().setState(0); + arrowTypeField.addItemWithTitle("Curved"); + arrowTypeField.lastItem().setState(0); + } + } else { + // Show default + arrowTypeField.addItemWithTitle("Angled"); + arrowTypeField.addItemWithTitle("Curved"); + arrowTypeField.addItemWithTitle("Straight"); + } +} + +function deleteConnectionFromData(arrayNumber) { + var newConnections = []; + + if (pluginData) { + // If we have database + var connections = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); + + for (var i = 0; i < connections.length; i++) { + // Updating all connections without deleted one + if (i != arrayNumber) { + newConnections.push(connections[i]); + } + } + } + + return newConnections; +} + +function refactorLines(group) { + // Need to finish + for (var i = 0; i < group.layers().length; i++) {// Here we need to go through each data in our database and delete line if there is no data + } +} + +function deleteLine(lineID) { + var lineObject = document.getLayerWithID(lineID); + var selectedGroup; + + if (lineObject) { + selectedGroup = lineObject.parent; + lineObject.remove(); + + if (selectedGroup.layers.length == 0) { + selectedGroup.remove(); + } + } +} + +function updateSpacing(sourceObjectID, childObjectID, direction) { + var sourceObject = document.getLayerWithID(sourceObjectID); + var childObject = document.getLayerWithID(childObjectID); + + if (Settings.settingForKey("arrowSpacing") && Settings.settingForKey("arrowSpacing") != 0) { + var currentSpacing = Settings.settingForKey("arrowSpacing"); + + if (direction == "Right") { + childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing; + } + + if (direction == "Down") { + childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing; + } + + if (direction == "Left") { + childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing; + } + + if (direction == "Up") { + childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing; + } + } +} + +function autoAlignLayer(sourceObjectID, childObjectID, direction) { + var sourceObject = document.getLayerWithID(sourceObjectID); + var childObject = document.getLayerWithID(childObjectID); + var sourceMidY, childMidY, sourceMidX, childMidX, diff; + + if (Settings.settingForKey("autoAlign")) { + if (Settings.settingForKey("autoAlign") == true) { + // If user turned on Auto-Align settings + if (direction == "Right" || direction == "Left") { + sourceMidY = sourceObject.frame.y + sourceObject.frame.height / 2; + childMidY = childObject.frame.y + childObject.frame.height / 2; + diff = sourceMidY - childMidY; + + if (diff > -6 && diff < 6) { + childObject.frame.y = childObject.frame.y + diff; + } + } + + if (direction == "Down" || direction == "Up") { + sourceMidX = sourceObject.frame.x + sourceObject.frame.width / 2; + childMidX = childObject.frame.x + childObject.frame.width / 2; + diff = sourceMidX - childMidX; + + if (diff > -6 && diff < 6) { + childObject.frame.x = childObject.frame.x + diff; + } + } + } + } +} + +function defineSourceObject(firstObjectID, secondObjectID, direction) { + var firstObject = document.getLayerWithID(firstObjectID); + var secondObject = document.getLayerWithID(secondObjectID); + var sourceObjectID; + + if (direction == "Auto") { + sourceObjectID = firstObject.id; + } + + if (direction == "Right") { + if (firstObject.frame.x <= secondObject.frame.x) { + sourceObjectID = firstObject.id; + } else { + sourceObjectID = secondObject.id; + } + } + + if (direction == "Down") { + if (firstObject.frame.y <= secondObject.frame.y) { + sourceObjectID = firstObject.id; + } else { + sourceObjectID = secondObject.id; + } + } + + if (direction == "Left") { + if (firstObject.frame.x <= secondObject.frame.x) { + sourceObjectID = secondObject.id; + } else { + sourceObjectID = firstObject.id; + } + } + + if (direction == "Up") { + if (firstObject.frame.y <= secondObject.frame.y) { + sourceObjectID = secondObject.id; + } else { + sourceObjectID = firstObject.id; + } + } + + return sourceObjectID; +} + +function getSourceObjectFromSelection(selection, direction) { + var sourceObjectID = selection.firstObject().objectID(); + + if (direction != "Auto") { + for (var g = 0; g < selection.count(); g++) { + sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction); + } + } else { + sourceObjectID = defineSourceObject(sourceObjectID, selection[0].objectID(), direction); + } + + return sourceObjectID; +} + +function confirmationAlert(alert, message) { + // Title + alert.setMessageText("Would you like to delete all the arrows from " + message); // Creating dialog buttons + + alert.addButtonWithTitle("Delete Arrows"); + alert.addButtonWithTitle("Cancel"); // Creating the view + + var viewWidth = 300; + var viewHeight = 40; + var view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight)); + alert.addAccessoryView(view); // Label + + var infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(-1, viewHeight - 40, 330, 40)); + infoLabel.setStringValue("ℹ️ You can select layers, artboards to delete all the arrows from selected one only"); + infoLabel.setSelectable(false); + infoLabel.setDrawsBackground(false); + infoLabel.setBezeled(false); + view.addSubview(infoLabel); + return alert; +} + +function alertSetup(alert, viewWidth, viewHeight) { + // Title + alert.setMessageText("Arrow Plugin Settings"); // Creating dialog buttons + + alert.addButtonWithTitle("Update Settings"); + alert.addButtonWithTitle("Cancel"); + return alert; +} + +function alertLabel(message, state, x, y, width, height) { + var infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height)); + infoLabel.setStringValue(message); + infoLabel.setSelectable(false); + infoLabel.setDrawsBackground(false); + infoLabel.setBezeled(false); + + if (state == false) { + infoLabel.textColor = NSColor.disabledControlTextColor(); + } + + return infoLabel; +} + +function alertCheckbox(message, state, x, y, width, height) { + var checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height)); + checkbox.setButtonType(NSSwitchButton); + checkbox.setBezelStyle(0); + checkbox.setTitle(message); + + if (Settings.settingForKey("autoAlign")) { + var currentState = Settings.settingForKey("autoAlign"); + checkbox.setState(currentState); + } else { + checkbox.setState(state); + } + + return checkbox; +} + +function getLayerStyles(name) { + var allStyles = docData.allLayerStyles(); + var keyword = "$arrow"; + var styles = []; + + if (name == null) { + for (var i = 0; i < allStyles.count(); i++) { + if (allStyles[i].name().includes(keyword)) { + styles.push(allStyles[i]); + } + } + } else { + // Searching only for name + for (var _i3 = 0; _i3 < allStyles.count(); _i3++) { + if (allStyles[_i3].name() == name) { + styles.push(allStyles[_i3]); + } + } + } + + return styles; +} + +function start(context, direction) { + var selection = context.selection; + var localDirection; + + if (direction == null) { + localDirection = arrowDirectionSetting; + } else { + localDirection = direction; + } + + if (selection.count() > 1) { + // Need to find source object by ID first + var sourceObjectID = getSourceObjectFromSelection(selection, direction); + var currentConnectionsData = newConnectionsData; + + for (var g = 0; g < selection.count(); g++) { + if (selection[g].objectID() != sourceObjectID) { + // Then need to create or update connection arrow with each selection + var connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData); + + if (connectionIndex != null) { + // Because this is creating flow, we need to take the direction from user settings + updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex); + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Current connection is updated 🚀"); + } else { + // There is no connection with this two objects in our database + createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, null); + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("New connection is created 🚀"); + } + } + } + + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); + } else { + // When user didn't select anything + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Please select more than two layers"); + } +} // { +// "script": "./script.js", +// "name" : "onLayersMoved", +// "handlers" : { +// "actions": { +// "LayersMoved.finish": "onLayersMoved" +// } +// }, +// "identifier" : "onLayersMoved" +// } +// let sketch = require('sketch') +// let libraries = sortJSON(sketch.getLibraries(),'name') +// log(sketch.getLibraries()) + + +var outputSymbols; +var libraries = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.getLibraries(); // var SymbolMaster = require('sketch/dom').SymbolMaster + +var symbolReferences = libraries[0].getImportableSymbolReferencesForDocument(document); +log(symbolReferences); +var symbolMaster = symbolReferences[0].import(); // console.log(symbolMaster) + +var instance = symbolMaster.createNewInstance(); +console.log(instance); +instance.parent = currentParentGroup; // currentParentGroup.addLayers(instance) +// var sharedStyle = sharedStyleReference.import() + +log(symbolMaster); // for(let g = 0; g < libraries.length; g++) { +// if(libraries[g].id =="A322B40D-E464-42EB-9AEA-28AAD0C7F33D"){ +// // We have the library +// let selectedLibraryPath = NSURL.fileURLWithPath(libraries[g].sketchObject.locationOnDisk().path()) +// log(selectedLibraryPath) +// sketch.Document.open(selectedLibraryPath,(err,library) => { +// if (err) { +// sketch.UI.alert(pluginName,'Unable to open the selected library file.'); +// } +// if (library) { +// var librarySource = library; +// library.close(); +// // let libraryPages = [library.pages[1]] +// var page = document.selectedPage +// librarySource.pages.forEach(function(page){ +// // if (page.id == libraryPages[symbolScopeSelect.indexOfSelectedItem() - 1]) { +// outputSymbols = page.sketchObject.symbols() +// log(page) +// // } +// }); +// } +// }); +// } +// } +// outputSymbols.forEach(function(symbol){ +// log('wdedwed') +// var symbolMaster = (librarySelectValue == 0) ? symbol : importForeignSymbol(symbol,selectedLibrary.sketchObject).symbolMaster(), +// symbolInstance = symbolMaster.newSymbolInstance(); +// symbolInstance.frame().setX(symbolMaster.frame().x()); +// symbolInstance.frame().setY(symbolMaster.frame().y()); +// outputPage.sketchObject.insertLayer_atIndex(symbolInstance,nil); +// }); +// function importForeignSymbol(symbol,library) { +// var objectReference = MSShareableObjectReference.referenceForShareableObject_inLibrary(symbol,library); +// return AppController.sharedInstance().librariesController().importShareableObjectReference_intoDocument(objectReference,data); +// } + +/***/ }), + +/***/ "sketch": /*!*************************!*\ !*** external "sketch" ***! \*************************/ -/*! no static exports found */function(e,t){e.exports=require("sketch")},"sketch/dom": +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = require("sketch"); + +/***/ }), + +/***/ "sketch/dom": /*!*****************************!*\ !*** external "sketch/dom" ***! \*****************************/ -/*! no static exports found */function(e,t){e.exports=require("sketch/dom")},"sketch/settings": +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = require("sketch/dom"); + +/***/ }), + +/***/ "sketch/settings": /*!**********************************!*\ !*** external "sketch/settings" ***! \**********************************/ -/*! no static exports found */function(e,t){e.exports=require("sketch/settings")},"sketch/ui": +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = require("sketch/settings"); + +/***/ }), + +/***/ "sketch/ui": /*!****************************!*\ !*** external "sketch/ui" ***! \****************************/ -/*! no static exports found */function(e,t){e.exports=require("sketch/ui")}});"default"===e&&"function"==typeof r?r(t):r[e](t)}that.createAutoArrow=__skpm_run.bind(this,"createAutoArrow"),that.onRun=__skpm_run.bind(this,"default"),that.createRightArrow=__skpm_run.bind(this,"createRightArrow"),that.createDownArrow=__skpm_run.bind(this,"createDownArrow"),that.createLeftArrow=__skpm_run.bind(this,"createLeftArrow"),that.createUpArrow=__skpm_run.bind(this,"createUpArrow"),that.updateSelectedArrows=__skpm_run.bind(this,"updateSelectedArrows"),that.updateArtboardArrows=__skpm_run.bind(this,"updateArtboardArrows"),that.updateAllArrows=__skpm_run.bind(this,"updateAllArrows"),that.deleteSelectedArrows=__skpm_run.bind(this,"deleteSelectedArrows"),that.deleteArtboardArrows=__skpm_run.bind(this,"deleteArtboardArrows"),that.deleteAllArrows=__skpm_run.bind(this,"deleteAllArrows"),that.settings=__skpm_run.bind(this,"settings"),that.panel=__skpm_run.bind(this,"panel"); \ No newline at end of file +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = require("sketch/ui"); + +/***/ }) + +/******/ }); + if (key === 'default' && typeof exports === 'function') { + exports(context); + } else { + exports[key](context); + } +} +that['createAutoArrow'] = __skpm_run.bind(this, 'createAutoArrow'); +that['onRun'] = __skpm_run.bind(this, 'default'); +that['createRightArrow'] = __skpm_run.bind(this, 'createRightArrow'); +that['createDownArrow'] = __skpm_run.bind(this, 'createDownArrow'); +that['createLeftArrow'] = __skpm_run.bind(this, 'createLeftArrow'); +that['createUpArrow'] = __skpm_run.bind(this, 'createUpArrow'); +that['updateSelectedArrows'] = __skpm_run.bind(this, 'updateSelectedArrows'); +that['updateArtboardArrows'] = __skpm_run.bind(this, 'updateArtboardArrows'); +that['updateAllArrows'] = __skpm_run.bind(this, 'updateAllArrows'); +that['deleteSelectedArrows'] = __skpm_run.bind(this, 'deleteSelectedArrows'); +that['deleteArtboardArrows'] = __skpm_run.bind(this, 'deleteArtboardArrows'); +that['deleteAllArrows'] = __skpm_run.bind(this, 'deleteAllArrows'); +that['settings'] = __skpm_run.bind(this, 'settings'); +that['panel'] = __skpm_run.bind(this, 'panel') + +//# sourceMappingURL=script.js.map \ No newline at end of file diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index 1469e95..01ea965 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","SharedStyle","pluginKey","document","sketch","fromNative","context","docData","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","currentParentGroup","currentPage","currentArtboard","newConnectionsData","getConnectionsData","Settings","arrowDirectionSetting","settingForKey","createDefaultArrow","start","createAutoArrow","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","updateSelectedArrows","selection","count","currentConnectionsData","g","objectID","connectionIndex","findConnectionData","updateArrow","firstObject","secondObject","style","type","direction","line","message","setValue_forKey_onLayer_forPluginIdentifier","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","length","updateArrowsCounter","i","getLayerWithID","sketchObject","parentArtboard","class","push","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","views","subviews","title","setSettingForKey","intValue","state","onLayersMoved","action","actionContext","panel","ControlBar","NSPanel","setStyleMask","NSTitledWindowMask","NSFullSizeContentViewWindowMask","setTitleVisibility","NSWindowTitleHidden","setTitlebarAppearsTransparent","setFrame_display","setMovableByWindowBackground","setHasShadow","setLevel","NSFloatingWindowLevel","center","makeKeyAndOrderFront","nil","firstObjectID","secondObjectID","lineID","createArrow","localDirection","localStyle","localType","getDirection","getLayerStyles","updateSpacing","autoAlignLayer","currentGroup","checkForArrowGroup","drawLine","addToArrowsGroup","connection","layers","name","refactorLines","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","firstLayerPosX","firstLayerPosY","secondLayerPosX","secondLayerPosY","middlePosX","middlePosY","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","sharedStyle","ownStyle","addLayers","fixGeometryWithOptions","Group","group","locked","moveToBack","dataArray","pluginDataConnections","data","arrayNumber","setActiveDirectionSetting","arrowDirectionField","currentDirection","addItemWithTitle","lastItem","setState","docSettings","styles","docTypeSettings","newConnections","lineObject","selectedGroup","remove","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","defineSourceObject","id","getSourceObjectFromSelection","confirmationAlert","setMessageText","addButtonWithTitle","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","allStyles","allLayerStyles","keyword","includes"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch'\n// const { toArray } = require('util')\n\n//\n// Variables\n//\n\nlet UI = require('sketch/ui') \nvar SharedStyle = require('sketch/dom').SharedStyle\n\nconst pluginKey = \"flowArrows\"\nconst document = sketch.fromNative(context.document)\nlet docData = context.document.documentData()\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey) // TODO: Need to refactor\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards\nlet newConnectionsData = getConnectionsData()\n\n// Settings\nvar Settings = require('sketch/settings')\nlet arrowDirectionSetting\n\nif(Settings.settingForKey(\"arrowDirection\")) {\n arrowDirectionSetting = Settings.settingForKey('arrowDirection')\n} else {\n arrowDirectionSetting = \"Auto\"\n}\n \n//\n// Create Connection Function\n//\n\nexport default function(context) {}\nexport function createDefaultArrow(context){start(context, null)}\nexport function createAutoArrow(context){start(context, \"Auto\")}\nexport function createRightArrow(context){start(context, \"Right\")}\nexport function createDownArrow(context){start(context, \"Down\")}\nexport function createLeftArrow(context){start(context, \"Left\")}\nexport function createUpArrow(context){start(context, \"Up\")}\n\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n\n let selection = context.selection\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n // let sourceObjectID = getSourceObjectFromSelection(selection)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, connectionIndex) {\n // There might be a situation, when user deleted current group or current group stays on another artboard => In that case need to create another group\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n\n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction) {\n // Process of creating new connection \n let localDirection, localStyle, localType\n if(direction == \"Auto\"){\n // If direction is auto, we need to specify direction ourselves\n localDirection = getDirection(firstObjectID, secondObjectID)\n } else {\n localDirection = direction\n }\n\n if(type == null){\n localType = Settings.settingForKey(\"arrowType\") \n } else {\n localType = type\n }\n \n // log(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey))\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey))\n \n if(style != null){\n // if we updating connection with previously created objects\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n localStyle = style\n } else {\n localStyle = \"Default Style\"\n }\n } else {\n // We don't have any data from the plugin data\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)){\n localStyle = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)\n } else {\n localStyle = \"Default Style\"\n }\n \n }\n \n \n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n let currentGroup = checkForArrowGroup()\n let line = drawLine(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentGroup)\n addToArrowsGroup(line, currentGroup)\n\n\n // if(localStyle != \"Default Style\"){\n // localStyle = localStyle[0].name()\n // }\n\n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : localStyle,\n type : localType,\n direction: localDirection,\n line : line.objectID()\n }\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForArrowGroup() {\n let currentGroup = null\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == \"Arrows\") {\n // If we already have \"Arrow\" group we need to save it's folder\n currentGroup = currentParentGroup.layers()[i]\n refactorLines(currentGroup)\n } \n }\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n if(diffX > diffY) {\n direction = \"Down\"\n } else {\n direction = \"Right\"\n }\n } else {\n // Top quarter\n if(absDiffX > absDiffY) {\n direction = \"Right\"\n } else {\n direction = \"Up\"\n }\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n if(absDiffX > absDiffY) {\n direction = \"Left\"\n } else {\n direction = \"Down\"\n }\n } else {\n // Top quarter\n if(diffX > diffY) {\n direction = \"Left\"\n } else {\n direction = \"Up\"\n }\n }\n }\n return direction\n}\n\nfunction drawLine(firstObjectID, secondObjectID, style, type, direction, currentGroup){\n let firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, middlePosX, middlePosY, diffX, diffY, line\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n\n if(currentGroup){\n //if we already have a group, need to specify the difference\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n // Drawing a line\n let path = NSBezierPath.bezierPath()\n\n if(type == \"Angled\" || type == null){\n // Based on direction, we need to specify connection points\n \n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n \n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n //TODO: Provide a separate file with all the stylings\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n\n\n // Making middle points rounded\n let points = line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n\n // Providing Settings for the arrow\n line.setName(\"Arrow\")\n }\n\n if(type == \"Straight\"){\n // Based on direction, we need to specify connection points\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n \n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n \n // Providing Settings for the arrow\n line.setName(\"Arrow\")\n }\n\n if(type == \"Curved\"){\n // Based on direction, we need to specify connection points\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Auto\"){\n sourceObjectID = firstObject.id\n }\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n } else {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[0].objectID(), direction)\n }\n \n return sourceObjectID\n}\n\nfunction confirmationAlert(alert, message) {\n // Title\n alert.setMessageText(\"Would you like to delete all the arrows from \"+message)\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Delete Arrows\")\n alert.addButtonWithTitle(\"Cancel\")\n \n // Creating the view\n const viewWidth = 300\n const viewHeight = 40\n \n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n \n // Label\n var infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(-1, viewHeight - 40, 330, 40))\n \n infoLabel.setStringValue(\"ℹ️ You can select layers, artboards to delete all the arrows from selected one only\")\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n \n view.addSubview(infoLabel)\n\n return alert\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) {\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n if(name == null) {\n for(let i = 0; i < allStyles.count(); i++){\n if(allStyles[i].name().includes(keyword)){\n styles.push(allStyles[i]);\n }\n }\n } else {\n // Searching only for name\n for(let i = 0; i < allStyles.count(); i++){\n if(allStyles[i].name() == name){\n styles.push(allStyles[i]);\n }\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction){\n let selection = context.selection\n let localDirection\n if(direction == null){localDirection = arrowDirectionSetting} else {localDirection = direction}\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n if(connectionIndex != null){\n // Because this is creating flow, we need to take the direction from user settings\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection)\n sketch.UI.message(\"New connection is created 🚀\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\n// {\n// \"script\": \"./script.js\",\n// \"name\" : \"onLayersMoved\",\n// \"handlers\" : {\n// \"actions\": {\n// \"LayersMoved.finish\": \"onLayersMoved\"\n// }\n// },\n// \"identifier\" : \"onLayersMoved\"\n// }\n","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","SharedStyle","pluginKey","document","sketch","fromNative","context","docData","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","currentParentGroup","currentPage","currentArtboard","newConnectionsData","getConnectionsData","Settings","arrowDirectionSetting","settingForKey","createDefaultArrow","start","createAutoArrow","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","updateSelectedArrows","selection","count","currentConnectionsData","g","objectID","connectionIndex","findConnectionData","updateArrow","firstObject","secondObject","style","type","direction","line","condition","message","setValue_forKey_onLayer_forPluginIdentifier","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","length","updateArrowsCounter","i","getLayerWithID","sketchObject","parentArtboard","class","push","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","views","subviews","title","setSettingForKey","intValue","state","onLayersMoved","action","actionContext","panel","ControlBar","NSPanel","setStyleMask","NSTitledWindowMask","NSFullSizeContentViewWindowMask","setTitleVisibility","NSWindowTitleHidden","setTitlebarAppearsTransparent","setFrame_display","setMovableByWindowBackground","setHasShadow","setLevel","NSFloatingWindowLevel","center","makeKeyAndOrderFront","nil","firstObjectID","secondObjectID","lineID","conditionID","createArrow","localDirection","localStyle","localType","getDirection","getLayerStyles","updateSpacing","autoAlignLayer","currentGroup","checkForArrowGroup","drawLine","addToArrowsGroup","connection","layers","name","refactorLines","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","firstLayerPosX","firstLayerPosY","secondLayerPosX","secondLayerPosY","middlePosX","middlePosY","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","sharedStyle","ownStyle","addLayers","fixGeometryWithOptions","Group","group","locked","moveToBack","dataArray","pluginDataConnections","data","arrayNumber","setActiveDirectionSetting","arrowDirectionField","currentDirection","addItemWithTitle","lastItem","setState","docSettings","styles","docTypeSettings","newConnections","lineObject","selectedGroup","remove","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","defineSourceObject","id","getSourceObjectFromSelection","confirmationAlert","setMessageText","addButtonWithTitle","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","allStyles","allLayerStyles","keyword","includes","outputSymbols","libraries","getLibraries","symbolReferences","getImportableSymbolReferencesForDocument","log","symbolMaster","import","instance","createNewInstance","console"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch'\n// const { toArray } = require('util')\n\n//\n// Variables\n//\n\nlet UI = require('sketch/ui') \nvar SharedStyle = require('sketch/dom').SharedStyle\n\nconst pluginKey = \"flowArrows\"\nconst document = sketch.fromNative(context.document)\nlet docData = context.document.documentData()\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey) // TODO: Need to refactor\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards\nlet newConnectionsData = getConnectionsData()\n\n// Settings\nvar Settings = require('sketch/settings')\nlet arrowDirectionSetting\n\nif(Settings.settingForKey(\"arrowDirection\")) {\n arrowDirectionSetting = Settings.settingForKey('arrowDirection')\n} else {\n arrowDirectionSetting = \"Auto\"\n}\n \n//\n// Create Connection Function\n//\n\nexport default function(context) {}\nexport function createDefaultArrow(context){start(context, null)}\nexport function createAutoArrow(context){start(context, \"Auto\")}\nexport function createRightArrow(context){start(context, \"Right\")}\nexport function createDownArrow(context){start(context, \"Down\")}\nexport function createLeftArrow(context){start(context, \"Left\")}\nexport function createUpArrow(context){start(context, \"Up\")}\n\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n\n let selection = context.selection\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n // let sourceObjectID = getSourceObjectFromSelection(selection)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, connectionIndex) {\n // There might be a situation, when user deleted current group or current group stays on another artboard => In that case need to create another group\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n\n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID) {\n // Process of creating new connection \n let localDirection, localStyle, localType\n if(direction == \"Auto\"){\n // If direction is auto, we need to specify direction ourselves\n localDirection = getDirection(firstObjectID, secondObjectID)\n } else {\n localDirection = direction\n }\n\n if(type == null){\n localType = Settings.settingForKey(\"arrowType\") \n } else {\n localType = type\n }\n \n // log(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey))\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey))\n \n if(style != null){\n // if we updating connection with previously created objects\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n localStyle = style\n } else {\n localStyle = \"Default Style\"\n }\n } else {\n // We don't have any data from the plugin data\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)){\n localStyle = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)\n } else {\n localStyle = \"Default Style\"\n }\n \n }\n \n \n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n let currentGroup = checkForArrowGroup()\n let line = drawLine(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentGroup)\n addToArrowsGroup(line, currentGroup)\n\n\n // if(localStyle != \"Default Style\"){\n // localStyle = localStyle[0].name()\n // }\n\n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : localStyle,\n condition : conditionID,\n type : localType,\n direction: localDirection,\n line : line.objectID()\n }\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForArrowGroup() {\n let currentGroup = null\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == \"Arrows\") {\n // If we already have \"Arrow\" group we need to save it's folder\n currentGroup = currentParentGroup.layers()[i]\n refactorLines(currentGroup)\n } \n }\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n if(diffX > diffY) {\n direction = \"Down\"\n } else {\n direction = \"Right\"\n }\n } else {\n // Top quarter\n if(absDiffX > absDiffY) {\n direction = \"Right\"\n } else {\n direction = \"Up\"\n }\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n if(absDiffX > absDiffY) {\n direction = \"Left\"\n } else {\n direction = \"Down\"\n }\n } else {\n // Top quarter\n if(diffX > diffY) {\n direction = \"Left\"\n } else {\n direction = \"Up\"\n }\n }\n }\n return direction\n}\n\nfunction drawLine(firstObjectID, secondObjectID, style, type, direction, currentGroup){\n let firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, middlePosX, middlePosY, diffX, diffY, line\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n\n if(currentGroup){\n //if we already have a group, need to specify the difference\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n // Drawing a line\n let path = NSBezierPath.bezierPath()\n\n if(type == \"Angled\" || type == null){\n // Based on direction, we need to specify connection points\n \n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n \n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n //TODO: Provide a separate file with all the stylings\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n\n\n // Making middle points rounded\n let points = line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n\n // Providing Settings for the arrow\n line.setName(\"Arrow\")\n }\n\n if(type == \"Straight\"){\n // Based on direction, we need to specify connection points\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n \n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n \n // Providing Settings for the arrow\n line.setName(\"Arrow\")\n }\n\n if(type == \"Curved\"){\n // Based on direction, we need to specify connection points\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Auto\"){\n sourceObjectID = firstObject.id\n }\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n } else {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[0].objectID(), direction)\n }\n \n return sourceObjectID\n}\n\nfunction confirmationAlert(alert, message) {\n // Title\n alert.setMessageText(\"Would you like to delete all the arrows from \"+message)\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Delete Arrows\")\n alert.addButtonWithTitle(\"Cancel\")\n \n // Creating the view\n const viewWidth = 300\n const viewHeight = 40\n \n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n \n // Label\n var infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(-1, viewHeight - 40, 330, 40))\n \n infoLabel.setStringValue(\"ℹ️ You can select layers, artboards to delete all the arrows from selected one only\")\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n \n view.addSubview(infoLabel)\n\n return alert\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) {\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n if(name == null) {\n for(let i = 0; i < allStyles.count(); i++){\n if(allStyles[i].name().includes(keyword)){\n styles.push(allStyles[i]);\n }\n }\n } else {\n // Searching only for name\n for(let i = 0; i < allStyles.count(); i++){\n if(allStyles[i].name() == name){\n styles.push(allStyles[i]);\n }\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction){\n let selection = context.selection\n let localDirection\n if(direction == null){localDirection = arrowDirectionSetting} else {localDirection = direction}\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n if(connectionIndex != null){\n // Because this is creating flow, we need to take the direction from user settings\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, null)\n sketch.UI.message(\"New connection is created 🚀\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\n// {\n// \"script\": \"./script.js\",\n// \"name\" : \"onLayersMoved\",\n// \"handlers\" : {\n// \"actions\": {\n// \"LayersMoved.finish\": \"onLayersMoved\"\n// }\n// },\n// \"identifier\" : \"onLayersMoved\"\n// }\n\n// let sketch = require('sketch')\n// let libraries = sortJSON(sketch.getLibraries(),'name')\n// log(sketch.getLibraries())\n\nlet outputSymbols\n\nlet libraries = sketch.getLibraries()\n\n// var SymbolMaster = require('sketch/dom').SymbolMaster\n\nvar symbolReferences = libraries[0].getImportableSymbolReferencesForDocument(document)\n\nlog(symbolReferences)\nvar symbolMaster = symbolReferences[0].import()\n\n// console.log(symbolMaster)\n\nvar instance = symbolMaster.createNewInstance()\nconsole.log(instance)\n\n\ninstance.parent = currentParentGroup\n\n// currentParentGroup.addLayers(instance)\n\n// var sharedStyle = sharedStyleReference.import()\n\nlog(symbolMaster)\n\n// for(let g = 0; g < libraries.length; g++) {\n// if(libraries[g].id ==\"A322B40D-E464-42EB-9AEA-28AAD0C7F33D\"){\n// // We have the library\n\n// let selectedLibraryPath = NSURL.fileURLWithPath(libraries[g].sketchObject.locationOnDisk().path())\n\n// log(selectedLibraryPath)\n\n// sketch.Document.open(selectedLibraryPath,(err,library) => {\n// if (err) {\n// sketch.UI.alert(pluginName,'Unable to open the selected library file.');\n// }\n\n// if (library) {\n// var librarySource = library;\n\n// library.close();\n\n// // let libraryPages = [library.pages[1]]\n// var page = document.selectedPage\n// librarySource.pages.forEach(function(page){\n// // if (page.id == libraryPages[symbolScopeSelect.indexOfSelectedItem() - 1]) {\n// outputSymbols = page.sketchObject.symbols()\n// log(page)\n\n// // }\n// });\n \n// }\n// });\n\n\n\n// }\n// }\n\n\n// outputSymbols.forEach(function(symbol){\n// log('wdedwed')\n// var symbolMaster = (librarySelectValue == 0) ? symbol : importForeignSymbol(symbol,selectedLibrary.sketchObject).symbolMaster(),\n// symbolInstance = symbolMaster.newSymbolInstance();\n\n// symbolInstance.frame().setX(symbolMaster.frame().x());\n// symbolInstance.frame().setY(symbolMaster.frame().y());\n\n// outputPage.sketchObject.insertLayer_atIndex(symbolInstance,nil);\n// });\n\n// function importForeignSymbol(symbol,library) {\n// \tvar objectReference = MSShareableObjectReference.referenceForShareableObject_inLibrary(symbol,library);\n\n// \treturn AppController.sharedInstance().librariesController().importShareableObjectReference_intoDocument(objectReference,data);\n// }\n\n","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/src/script.js b/src/script.js index bcd1b52..8e3de17 100644 --- a/src/script.js +++ b/src/script.js @@ -56,7 +56,7 @@ export function updateSelectedArrows(context) { let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData) if(connectionIndex != null){ - updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, connectionIndex) + updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex) sketch.UI.message("Current connection is updated 🚀") } else { sketch.UI.message("There is no connection between selected layers on the plugin data") @@ -93,7 +93,7 @@ export function updateArtboardArrows(context) { if (firstObjectArtboard == selection[0].objectID()){ if (secondObjectArtboard == selection[0].objectID()){ - updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, i) + updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i) } else {newConnectionsData.push(connections[i])} } else { // If not just saving it @@ -118,7 +118,7 @@ export function updateAllArrows(context) { // TODO for (let i = 0; i < updateArrowsCounter; i ++) { // Need to go through each connection and update arrow position without artboards // Need to check if current object don't have the parrent - updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, i) + updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i) } context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey) sketch.UI.message("All arrows are updated 🚀") @@ -383,7 +383,7 @@ export function panel(context) { // Functions // -function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, connectionIndex) { +function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, connectionIndex) { // There might be a situation, when user deleted current group or current group stays on another artboard => In that case need to create another group // Need to check if we have the layers with such IDs let firstObject = document.getLayerWithID(firstObjectID) @@ -395,11 +395,11 @@ function updateArrow(firstObjectID, secondObjectID, style, type, direction, line if(firstObject && secondObject){ // If we have all the objects, we can recreate the line - createArrow(firstObjectID, secondObjectID, style, type, direction) + createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID) } } -function createArrow(firstObjectID, secondObjectID, style, type, direction) { +function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID) { // Process of creating new connection let localDirection, localStyle, localType if(direction == "Auto"){ @@ -452,6 +452,7 @@ function createArrow(firstObjectID, secondObjectID, style, type, direction) { firstObject : firstObjectID, secondObject : secondObjectID, style : localStyle, + condition : conditionID, type : localType, direction: localDirection, line : line.objectID() @@ -1395,11 +1396,11 @@ function start(context, direction){ let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData) if(connectionIndex != null){ // Because this is creating flow, we need to take the direction from user settings - updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, connectionIndex) + updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex) sketch.UI.message("Current connection is updated 🚀") } else { // There is no connection with this two objects in our database - createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection) + createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, null) sketch.UI.message("New connection is created 🚀") } } @@ -1421,3 +1422,87 @@ function start(context, direction){ // }, // "identifier" : "onLayersMoved" // } + +// let sketch = require('sketch') +// let libraries = sortJSON(sketch.getLibraries(),'name') +// log(sketch.getLibraries()) + +let outputSymbols + +let libraries = sketch.getLibraries() + +// var SymbolMaster = require('sketch/dom').SymbolMaster + +var symbolReferences = libraries[0].getImportableSymbolReferencesForDocument(document) + +log(symbolReferences) +var symbolMaster = symbolReferences[0].import() + +// console.log(symbolMaster) + +var instance = symbolMaster.createNewInstance() +console.log(instance) + + +instance.parent = currentParentGroup + +// currentParentGroup.addLayers(instance) + +// var sharedStyle = sharedStyleReference.import() + +log(symbolMaster) + +// for(let g = 0; g < libraries.length; g++) { +// if(libraries[g].id =="A322B40D-E464-42EB-9AEA-28AAD0C7F33D"){ +// // We have the library + +// let selectedLibraryPath = NSURL.fileURLWithPath(libraries[g].sketchObject.locationOnDisk().path()) + +// log(selectedLibraryPath) + +// sketch.Document.open(selectedLibraryPath,(err,library) => { +// if (err) { +// sketch.UI.alert(pluginName,'Unable to open the selected library file.'); +// } + +// if (library) { +// var librarySource = library; + +// library.close(); + +// // let libraryPages = [library.pages[1]] +// var page = document.selectedPage +// librarySource.pages.forEach(function(page){ +// // if (page.id == libraryPages[symbolScopeSelect.indexOfSelectedItem() - 1]) { +// outputSymbols = page.sketchObject.symbols() +// log(page) + +// // } +// }); + +// } +// }); + + + +// } +// } + + +// outputSymbols.forEach(function(symbol){ +// log('wdedwed') +// var symbolMaster = (librarySelectValue == 0) ? symbol : importForeignSymbol(symbol,selectedLibrary.sketchObject).symbolMaster(), +// symbolInstance = symbolMaster.newSymbolInstance(); + +// symbolInstance.frame().setX(symbolMaster.frame().x()); +// symbolInstance.frame().setY(symbolMaster.frame().y()); + +// outputPage.sketchObject.insertLayer_atIndex(symbolInstance,nil); +// }); + +// function importForeignSymbol(symbol,library) { +// var objectReference = MSShareableObjectReference.referenceForShareableObject_inLibrary(symbol,library); + +// return AppController.sharedInstance().librariesController().importShareableObjectReference_intoDocument(objectReference,data); +// } + From dc77c0e09301afa39bcc1aa58d6d2128672a7be5 Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Tue, 19 Mar 2019 23:16:38 +0300 Subject: [PATCH 03/44] addded ability to pass condition ID --- .../Contents/Sketch/manifest.json | 43 +++++- arrows.sketchplugin/Contents/Sketch/script.js | 137 ++++++++++-------- .../Contents/Sketch/script.js.map | 2 +- src/manifest.json | 43 +++++- src/script.js | 129 +++++++---------- 5 files changed, 214 insertions(+), 140 deletions(-) diff --git a/arrows.sketchplugin/Contents/Sketch/manifest.json b/arrows.sketchplugin/Contents/Sketch/manifest.json index 2dbdf99..4184363 100644 --- a/arrows.sketchplugin/Contents/Sketch/manifest.json +++ b/arrows.sketchplugin/Contents/Sketch/manifest.json @@ -57,6 +57,42 @@ "script": "script.js", "handler": "createUpArrow" }, + { + "name": "Arrow to the Right with Condition", + "description": "Select more than one layer, to create a link between first object and others", + "identifier": "createRightArrowWithCondition", + "icon": "icon.png", + "shortcut": "command control shift →", + "script": "script.js", + "handler": "createRightArrowWithCondition" + }, + { + "name": "Arrow to the Bottom with Condition", + "description": "Select more than one layer, to create a link between first object and others", + "identifier": "createDownArrowWithCondition", + "icon": "icon.png", + "shortcut": "command control shift ↓", + "script": "script.js", + "handler": "createDownArrowWithCondition" + }, + { + "name": "Arrow to the Left with Condition", + "description": "Select more than one layer, to create a link between first object and others", + "identifier": "createLeftArrowWithCondition", + "icon": "icon.png", + "shortcut": "command control shift ←", + "script": "script.js", + "handler": "createLeftArrowWithCondition" + }, + { + "name": "Arrow to the Top with Condition", + "description": "Select more than one layer, to create a link between first object and others", + "identifier": "createUpArrowWithCondition", + "icon": "icon.png", + "shortcut": "command control shift ↑", + "script": "script.js", + "handler": "createUpArrowWithCondition" + }, { "name": "Update arrows between selected", "description": "Update connection between selected layers", @@ -153,7 +189,12 @@ "createRightArrow", "createDownArrow", "createLeftArrow", - "createUpArrow" + "createUpArrow", + "-", + "createRightArrowWithCondition", + "createDownArrowWithCondition", + "createLeftArrowWithCondition", + "createUpArrowWithCondition" ] }, { diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index 0b0bec3..7c9f530 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -95,7 +95,7 @@ var exports = /*!***********************!*\ !*** ./src/script.js ***! \***********************/ -/*! exports provided: default, createDefaultArrow, createAutoArrow, createRightArrow, createDownArrow, createLeftArrow, createUpArrow, updateSelectedArrows, updateArtboardArrows, updateAllArrows, deleteAllArrows, deleteArtboardArrows, deleteSelectedArrows, settings, onLayersMoved, panel */ +/*! exports provided: default, createDefaultArrow, createAutoArrow, createRightArrow, createDownArrow, createLeftArrow, createUpArrow, createRightArrowWithCondition, createDownArrowWithCondition, createLeftArrowWithCondition, createUpArrowWithCondition, updateSelectedArrows, updateArtboardArrows, updateAllArrows, deleteAllArrows, deleteArtboardArrows, deleteSelectedArrows, settings, onLayersMoved, panel */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -106,6 +106,10 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createDownArrow", function() { return createDownArrow; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createLeftArrow", function() { return createLeftArrow; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createUpArrow", function() { return createUpArrow; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createRightArrowWithCondition", function() { return createRightArrowWithCondition; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createDownArrowWithCondition", function() { return createDownArrowWithCondition; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createLeftArrowWithCondition", function() { return createLeftArrowWithCondition; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createUpArrowWithCondition", function() { return createUpArrowWithCondition; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateSelectedArrows", function() { return updateSelectedArrows; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateArtboardArrows", function() { return updateArtboardArrows; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAllArrows", function() { return updateAllArrows; }); @@ -156,16 +160,28 @@ function createAutoArrow(context) { start(context, "Auto"); } function createRightArrow(context) { - start(context, "Right"); + start(context, "Right", false); } function createDownArrow(context) { - start(context, "Down"); + start(context, "Down", false); } function createLeftArrow(context) { - start(context, "Left"); + start(context, "Left", false); } function createUpArrow(context) { - start(context, "Up"); + start(context, "Up", false); +} +function createRightArrowWithCondition(context) { + start(context, "Right", true); +} +function createDownArrowWithCondition(context) { + start(context, "Down", true); +} +function createLeftArrowWithCondition(context) { + start(context, "Left", true); +} +function createUpArrowWithCondition(context) { + start(context, "Up", true); } // // Plugin Commands // @@ -1537,7 +1553,7 @@ function getLayerStyles(name) { return styles; } -function start(context, direction) { +function start(context, direction, condition) { var selection = context.selection; var localDirection; @@ -1559,11 +1575,29 @@ function start(context, direction) { if (connectionIndex != null) { // Because this is creating flow, we need to take the direction from user settings - updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex); + if (condition == true) { + var libraryConditionID = getConditionID("Answer YES"); // Need to remake the arrow condition + + if (currentConnectionsData[connectionIndex].condition) { + updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, libraryConditionID, connectionIndex); + } else { + updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex); + } + } else { + updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex); + } + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Current connection is updated 🚀"); } else { // There is no connection with this two objects in our database - createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, null); + if (condition == true) { + var _libraryConditionID = getConditionID("Answer YES"); + + createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, _libraryConditionID); + } else { + createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, null); + } + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("New connection is created 🚀"); } } @@ -1584,59 +1618,36 @@ function start(context, direction) { // }, // "identifier" : "onLayersMoved" // } -// let sketch = require('sketch') -// let libraries = sortJSON(sketch.getLibraries(),'name') -// log(sketch.getLibraries()) - - -var outputSymbols; -var libraries = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.getLibraries(); // var SymbolMaster = require('sketch/dom').SymbolMaster - -var symbolReferences = libraries[0].getImportableSymbolReferencesForDocument(document); -log(symbolReferences); -var symbolMaster = symbolReferences[0].import(); // console.log(symbolMaster) - -var instance = symbolMaster.createNewInstance(); -console.log(instance); -instance.parent = currentParentGroup; // currentParentGroup.addLayers(instance) -// var sharedStyle = sharedStyleReference.import() - -log(symbolMaster); // for(let g = 0; g < libraries.length; g++) { -// if(libraries[g].id =="A322B40D-E464-42EB-9AEA-28AAD0C7F33D"){ -// // We have the library -// let selectedLibraryPath = NSURL.fileURLWithPath(libraries[g].sketchObject.locationOnDisk().path()) -// log(selectedLibraryPath) -// sketch.Document.open(selectedLibraryPath,(err,library) => { -// if (err) { -// sketch.UI.alert(pluginName,'Unable to open the selected library file.'); -// } -// if (library) { -// var librarySource = library; -// library.close(); -// // let libraryPages = [library.pages[1]] -// var page = document.selectedPage -// librarySource.pages.forEach(function(page){ -// // if (page.id == libraryPages[symbolScopeSelect.indexOfSelectedItem() - 1]) { -// outputSymbols = page.sketchObject.symbols() -// log(page) -// // } -// }); -// } -// }); -// } -// } -// outputSymbols.forEach(function(symbol){ -// log('wdedwed') -// var symbolMaster = (librarySelectValue == 0) ? symbol : importForeignSymbol(symbol,selectedLibrary.sketchObject).symbolMaster(), -// symbolInstance = symbolMaster.newSymbolInstance(); -// symbolInstance.frame().setX(symbolMaster.frame().x()); -// symbolInstance.frame().setY(symbolMaster.frame().y()); -// outputPage.sketchObject.insertLayer_atIndex(symbolInstance,nil); -// }); -// function importForeignSymbol(symbol,library) { -// var objectReference = MSShareableObjectReference.referenceForShareableObject_inLibrary(symbol,library); -// return AppController.sharedInstance().librariesController().importShareableObjectReference_intoDocument(objectReference,data); -// } + + +function getConditionID(keyword) { + var libraries = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.getLibraries(); + var conditionID, symbolReferences; // let keyword = "#condition" + // log(libraries.length) + + for (var g = 0; g < libraries.length; g++) { + symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document); + + for (var i = 0; i < symbolReferences.length; i++) { + if (symbolReferences[i].name.includes(keyword)) { + conditionID = symbolReferences[i].id; + } + } + } + + if (conditionID == null) { + UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as "#condition" so it will be added here'); + } // symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document) + // log(symbolReferences) + // var symbolMaster = symbolReferences[0].import() + // var instance = symbolMaster.createNewInstance() + // console.log(instance) + // instance.parent = currentParentGroup + // log(symbolMaster) + + + return conditionID; +} /***/ }), @@ -1697,6 +1708,10 @@ that['createRightArrow'] = __skpm_run.bind(this, 'createRightArrow'); that['createDownArrow'] = __skpm_run.bind(this, 'createDownArrow'); that['createLeftArrow'] = __skpm_run.bind(this, 'createLeftArrow'); that['createUpArrow'] = __skpm_run.bind(this, 'createUpArrow'); +that['createRightArrowWithCondition'] = __skpm_run.bind(this, 'createRightArrowWithCondition'); +that['createDownArrowWithCondition'] = __skpm_run.bind(this, 'createDownArrowWithCondition'); +that['createLeftArrowWithCondition'] = __skpm_run.bind(this, 'createLeftArrowWithCondition'); +that['createUpArrowWithCondition'] = __skpm_run.bind(this, 'createUpArrowWithCondition'); that['updateSelectedArrows'] = __skpm_run.bind(this, 'updateSelectedArrows'); that['updateArtboardArrows'] = __skpm_run.bind(this, 'updateArtboardArrows'); that['updateAllArrows'] = __skpm_run.bind(this, 'updateAllArrows'); diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index 01ea965..246df42 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","SharedStyle","pluginKey","document","sketch","fromNative","context","docData","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","currentParentGroup","currentPage","currentArtboard","newConnectionsData","getConnectionsData","Settings","arrowDirectionSetting","settingForKey","createDefaultArrow","start","createAutoArrow","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","updateSelectedArrows","selection","count","currentConnectionsData","g","objectID","connectionIndex","findConnectionData","updateArrow","firstObject","secondObject","style","type","direction","line","condition","message","setValue_forKey_onLayer_forPluginIdentifier","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","length","updateArrowsCounter","i","getLayerWithID","sketchObject","parentArtboard","class","push","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","views","subviews","title","setSettingForKey","intValue","state","onLayersMoved","action","actionContext","panel","ControlBar","NSPanel","setStyleMask","NSTitledWindowMask","NSFullSizeContentViewWindowMask","setTitleVisibility","NSWindowTitleHidden","setTitlebarAppearsTransparent","setFrame_display","setMovableByWindowBackground","setHasShadow","setLevel","NSFloatingWindowLevel","center","makeKeyAndOrderFront","nil","firstObjectID","secondObjectID","lineID","conditionID","createArrow","localDirection","localStyle","localType","getDirection","getLayerStyles","updateSpacing","autoAlignLayer","currentGroup","checkForArrowGroup","drawLine","addToArrowsGroup","connection","layers","name","refactorLines","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","firstLayerPosX","firstLayerPosY","secondLayerPosX","secondLayerPosY","middlePosX","middlePosY","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","sharedStyle","ownStyle","addLayers","fixGeometryWithOptions","Group","group","locked","moveToBack","dataArray","pluginDataConnections","data","arrayNumber","setActiveDirectionSetting","arrowDirectionField","currentDirection","addItemWithTitle","lastItem","setState","docSettings","styles","docTypeSettings","newConnections","lineObject","selectedGroup","remove","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","defineSourceObject","id","getSourceObjectFromSelection","confirmationAlert","setMessageText","addButtonWithTitle","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","allStyles","allLayerStyles","keyword","includes","outputSymbols","libraries","getLibraries","symbolReferences","getImportableSymbolReferencesForDocument","log","symbolMaster","import","instance","createNewInstance","console"],"mappings":";;;;;;AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;;;;;;;AClFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;CACA;AAEA;AACA;AACA;;AAEA,IAAIA,EAAE,GAAGC,mBAAO,CAAC,4BAAD,CAAhB;;AACA,IAAIC,WAAW,GAAGD,mBAAO,CAAC,8BAAD,CAAP,CAAsBC,WAAxC;;AAEA,IAAMC,SAAS,GAAG,YAAlB;AACA,IAAMC,QAAQ,GAAGC,6CAAM,CAACC,UAAP,CAAkBC,OAAO,CAACH,QAA1B,CAAjB;AACA,IAAII,OAAO,GAAGD,OAAO,CAACH,QAAR,CAAiBK,YAAjB,EAAd;AACA,IAAIC,UAAU,GAAGH,OAAO,CAACI,OAAR,CAAgBC,uCAAhB,CAAwD,kBAAxD,EAA4EJ,OAA5E,EAAqFL,SAArF,CAAjB,C,CAAiH;;AACjH,IAAIU,kBAAkB,GAAGL,OAAO,CAACM,WAAR,GAAsBC,eAAtB,MAA2CP,OAAO,CAACM,WAAR,EAApE,C,CAA0F;;AAC1F,IAAIE,kBAAkB,GAAGC,kBAAkB,EAA3C,C,CAEA;;AACA,IAAIC,QAAQ,GAAGjB,mBAAO,CAAC,wCAAD,CAAtB;;AACA,IAAIkB,qBAAJ;;AAEA,IAAGD,QAAQ,CAACE,aAAT,CAAuB,gBAAvB,CAAH,EAA6C;AAC3CD,uBAAqB,GAAGD,QAAQ,CAACE,aAAT,CAAuB,gBAAvB,CAAxB;AACD,CAFD,MAEO;AACLD,uBAAqB,GAAG,MAAxB;AACD,C,CAED;AACA;AACA;;;AAEe,yEAASZ,OAAT,EAAkB,CAAE;AAC5B,SAASc,kBAAT,CAA4Bd,OAA5B,EAAoC;AAACe,OAAK,CAACf,OAAD,EAAU,IAAV,CAAL;AAAqB;AAC1D,SAASgB,eAAT,CAAyBhB,OAAzB,EAAiC;AAACe,OAAK,CAACf,OAAD,EAAU,MAAV,CAAL;AAAuB;AACzD,SAASiB,gBAAT,CAA0BjB,OAA1B,EAAkC;AAACe,OAAK,CAACf,OAAD,EAAU,OAAV,CAAL;AAAwB;AAC3D,SAASkB,eAAT,CAAyBlB,OAAzB,EAAiC;AAACe,OAAK,CAACf,OAAD,EAAU,MAAV,CAAL;AAAuB;AACzD,SAASmB,eAAT,CAAyBnB,OAAzB,EAAiC;AAACe,OAAK,CAACf,OAAD,EAAU,MAAV,CAAL;AAAuB;AACzD,SAASoB,aAAT,CAAuBpB,OAAvB,EAA+B;AAACe,OAAK,CAACf,OAAD,EAAU,IAAV,CAAL;AAAqB,C,CAE5D;AACA;AACA;;AAEO,SAASqB,oBAAT,CAA8BrB,OAA9B,EAAuC;AAE5C,MAAIsB,SAAS,GAAGtB,OAAO,CAACsB,SAAxB;;AAEA,MAAGA,SAAS,CAACC,KAAV,KAAoB,CAAvB,EAAyB;AACvB;AACA;AACA,QAAIC,sBAAsB,GAAGf,kBAA7B;;AAEA,SAAI,IAAIgB,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGH,SAAS,CAACC,KAAV,EAAnB,EAAsCE,CAAC,EAAvC,EAA2C;AACzC,UAAGH,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,MAA2BJ,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAA9B,EAAsD;AACpD;AACA,YAAIC,eAAe,GAAGC,kBAAkB,CAACN,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAAD,EAA0BJ,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,EAA1B,EAAmDF,sBAAnD,CAAxC;;AAEA,YAAGG,eAAe,IAAI,IAAtB,EAA2B;AACzBE,qBAAW,CAACL,sBAAsB,CAACG,eAAD,CAAtB,CAAwCG,WAAzC,EAAsDN,sBAAsB,CAACG,eAAD,CAAtB,CAAwCI,YAA9F,EAA4GP,sBAAsB,CAACG,eAAD,CAAtB,CAAwCK,KAApJ,EAA2JR,sBAAsB,CAACG,eAAD,CAAtB,CAAwCM,IAAnM,EAAyMT,sBAAsB,CAACG,eAAD,CAAtB,CAAwCO,SAAjP,EAA4PV,sBAAsB,CAACG,eAAD,CAAtB,CAAwCQ,IAApS,EAA0SX,sBAAsB,CAACG,eAAD,CAAtB,CAAwCS,SAAlV,EAA6VT,eAA7V,CAAX;AACA7B,uDAAM,CAACL,EAAP,CAAU4C,OAAV,CAAkB,kCAAlB;AACD,SAHD,MAGO;AACLvC,uDAAM,CAACL,EAAP,CAAU4C,OAAV,CAAkB,mEAAlB;AACD;AACF;AACF;;AACDrC,WAAO,CAACI,OAAR,CAAgBkC,2CAAhB,CAA4D7B,kBAA5D,EAAgF,kBAAhF,EAAoGR,OAApG,EAA6GL,SAA7G;AACD,GAnBD,MAmBO;AACL;AACAE,iDAAM,CAACL,EAAP,CAAU4C,OAAV,CAAkB,oCAAlB;AACD;AACF;AAEM,SAASE,oBAAT,CAA8BvC,OAA9B,EAAuC;AAC5C;AACA,MAAIsB,SAAS,GAAGtB,OAAO,CAACsB,SAAxB;AACA,MAAIkB,WAAW,GAAG9B,kBAAkB,EAApC;AACA,MAAI+B,mBAAJ;AACA,MAAIC,oBAAJ;;AAEA,MAAGF,WAAW,CAACG,MAAZ,GAAqB,CAAxB,EAA0B;AACxB;AACA,QAAMC,mBAAmB,GAAGJ,WAAW,CAACG,MAAxC;;AACA,SAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,mBAApB,EAAyCC,CAAC,EAA1C,EAA+C;AAC7C;AACAJ,yBAAmB,GAAG5C,QAAQ,CAACiD,cAAT,CAAwBN,WAAW,CAACK,CAAD,CAAX,CAAef,WAAvC,CAAtB;AACAW,yBAAmB,GAAGA,mBAAmB,CAACM,YAApB,CAAiCC,cAAjC,GAAkDtB,QAAlD,EAAtB;AAEAgB,0BAAoB,GAAG7C,QAAQ,CAACiD,cAAT,CAAwBN,WAAW,CAACK,CAAD,CAAX,CAAed,YAAvC,CAAvB;AACAW,0BAAoB,GAAGA,oBAAoB,CAACK,YAArB,CAAkCC,cAAlC,GAAmDtB,QAAnD,EAAvB;;AAEA,UAAGJ,SAAS,CAACC,KAAV,MAAqB,CAArB,IAA0BD,SAAS,CAAC,CAAD,CAAT,CAAa2B,KAAb,MAAwB,iBAArD,EAAuE;AACrE;AAEA,YAAIR,mBAAmB,IAAInB,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAA3B,EAAmD;AACjD,cAAIgB,oBAAoB,IAAIpB,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAA5B,EAAoD;AAClDG,uBAAW,CAACW,WAAW,CAACK,CAAD,CAAX,CAAef,WAAhB,EAA6BU,WAAW,CAACK,CAAD,CAAX,CAAed,YAA5C,EAA0DS,WAAW,CAACK,CAAD,CAAX,CAAeb,KAAzE,EAAgFQ,WAAW,CAACK,CAAD,CAAX,CAAeZ,IAA/F,EAAqGO,WAAW,CAACK,CAAD,CAAX,CAAeX,SAApH,EAA+HM,WAAW,CAACK,CAAD,CAAX,CAAeV,IAA9I,EAAoJK,WAAW,CAACK,CAAD,CAAX,CAAeT,SAAnK,EAA8KS,CAA9K,CAAX;AACD,WAFD,MAEO;AAACpC,8BAAkB,CAACyC,IAAnB,CAAwBV,WAAW,CAACK,CAAD,CAAnC;AAAwC;AACjD,SAJD,MAIO;AACL;AACApC,4BAAkB,CAACyC,IAAnB,CAAwBV,WAAW,CAACK,CAAD,CAAnC;AACD;AACF;AACF;;AACD7C,WAAO,CAACI,OAAR,CAAgBkC,2CAAhB,CAA4D7B,kBAA5D,EAAgF,kBAAhF,EAAoGR,OAApG,EAA6GL,SAA7G;AACAE,iDAAM,CAACL,EAAP,CAAU4C,OAAV,CAAkB,2BAAlB;AACD,GA1BD,MA0BO;AACL;AACAvC,iDAAM,CAACL,EAAP,CAAU4C,OAAV,CAAkB,4BAAlB;AACD;AACF;AAEM,SAASc,eAAT,CAAyBnD,OAAzB,EAAkC;AAAE;AACzC;AACA,MAAIwB,sBAAsB,GAAGf,kBAA7B;;AACA,MAAGe,sBAAsB,CAACmB,MAAvB,GAAgC,CAAnC,EAAqC;AACnC;AACA,QAAMC,mBAAmB,GAAGpB,sBAAsB,CAACmB,MAAnD;;AACA,SAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,mBAApB,EAAyCC,CAAC,EAA1C,EAA+C;AAC7C;AACA;AACAhB,iBAAW,CAACL,sBAAsB,CAACqB,CAAD,CAAtB,CAA0Bf,WAA3B,EAAwCN,sBAAsB,CAACqB,CAAD,CAAtB,CAA0Bd,YAAlE,EAAgFP,sBAAsB,CAACqB,CAAD,CAAtB,CAA0Bb,KAA1G,EAAiHR,sBAAsB,CAACqB,CAAD,CAAtB,CAA0BZ,IAA3I,EAAiJT,sBAAsB,CAACqB,CAAD,CAAtB,CAA0BX,SAA3K,EAAsLV,sBAAsB,CAACqB,CAAD,CAAtB,CAA0BV,IAAhN,EAAsNX,sBAAsB,CAACqB,CAAD,CAAtB,CAA0BT,SAAhP,EAA2PS,CAA3P,CAAX;AACD;;AACD7C,WAAO,CAACI,OAAR,CAAgBkC,2CAAhB,CAA4D7B,kBAA5D,EAAgF,kBAAhF,EAAoGR,OAApG,EAA6GL,SAA7G;AACAE,iDAAM,CAACL,EAAP,CAAU4C,OAAV,CAAkB,2BAAlB;AACD,GAVD,MAUO;AACL;AACAvC,iDAAM,CAACL,EAAP,CAAU4C,OAAV,CAAkB,4BAAlB;AACD;AACF;AAEM,SAASe,eAAT,CAAyBpD,OAAzB,EAAkC;AAEvC,MAAGS,kBAAkB,CAACkC,MAAnB,GAA4B,CAA/B,EAAiC;AAC/B;AACA,SAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGpC,kBAAkB,CAACkC,MAAvC,EAA+CE,CAAC,EAAhD,EAAqD;AACnD;AACAQ,gBAAU,CAAC5C,kBAAkB,CAACoC,CAAD,CAAlB,CAAsBV,IAAvB,CAAV;AACD;;AACDnC,WAAO,CAACI,OAAR,CAAgBkC,2CAAhB,CAA4D,IAA5D,EAAkE,kBAAlE,EAAsFrC,OAAtF,EAA+FL,SAA/F;AACAE,iDAAM,CAACL,EAAP,CAAU4C,OAAV,CAAkB,wBAAlB;AACD,GARD,MAQO;AACL;AACAvC,iDAAM,CAACL,EAAP,CAAU4C,OAAV,CAAkB,4BAAlB;AACD;AACF;AAEM,SAASiB,oBAAT,CAA8BtD,OAA9B,EAAuC;AAC5C,MAAIsB,SAAS,GAAGtB,OAAO,CAACsB,SAAxB;AACA,MAAIQ,WAAJ,EAAiBC,YAAjB,CAF4C,CAI5C;;AACA,MAAGT,SAAS,CAACC,KAAV,MAAqB,CAArB,IAA0BD,SAAS,CAAC,CAAD,CAAT,CAAa2B,KAAb,MAAwB,iBAArD,EAAuE;AACrE,QAAIT,WAAW,GAAG9B,kBAAkB,EAApC;;AAEA,QAAG8B,WAAW,CAACG,MAAZ,GAAqB,CAAxB,EAA0B;AACxB;AACA,UAAMC,mBAAmB,GAAGJ,WAAW,CAACG,MAAxC;;AACA,WAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,mBAApB,EAAyCC,CAAC,EAA1C,EAA+C;AAC7C;AACAf,mBAAW,GAAGjC,QAAQ,CAACiD,cAAT,CAAwBN,WAAW,CAACK,CAAD,CAAX,CAAef,WAAvC,CAAd;AACAC,oBAAY,GAAGlC,QAAQ,CAACiD,cAAT,CAAwBN,WAAW,CAACK,CAAD,CAAX,CAAed,YAAvC,CAAf;;AACA,YAAID,WAAW,CAACiB,YAAZ,CAAyBC,cAAzB,GAA0CtB,QAA1C,MAAwDJ,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAA5D,EAAoF;AAClF,cAAIK,YAAY,CAACgB,YAAb,CAA0BC,cAA1B,GAA2CtB,QAA3C,MAAyDJ,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAA7D,EAAqF;AACnF2B,sBAAU,CAACb,WAAW,CAACK,CAAD,CAAX,CAAeV,IAAhB,CAAV;AACA1B,8BAAkB,GAAG8C,wBAAwB,CAACV,CAAD,CAA7C;AACD;AACF;AACF;;AACD7C,aAAO,CAACI,OAAR,CAAgBkC,2CAAhB,CAA4D7B,kBAA5D,EAAgF,kBAAhF,EAAoGR,OAApG,EAA6GL,SAA7G;AACAE,mDAAM,CAACL,EAAP,CAAU4C,OAAV,CAAkB,+CAAlB;AACD,KAhBD,MAgBO;AACL;AACAvC,mDAAM,CAACL,EAAP,CAAU4C,OAAV,CAAkB,4BAAlB;AACD;AACF,GAvBD,MAuBO;AACLvC,iDAAM,CAACL,EAAP,CAAU4C,OAAV,CAAkB,4BAAlB;AACD;AACF;AAEM,SAASmB,oBAAT,CAA8BxD,OAA9B,EAAuC;AAC5C,MAAIsB,SAAS,GAAGtB,OAAO,CAACsB,SAAxB;AACA,MAAIQ,WAAJ,EAAiBC,YAAjB,CAF4C,CAI5C;;AACA,MAAGT,SAAS,CAACC,KAAV,MAAqB,CAAxB,EAA0B;AAExB,SAAI,IAAIE,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGH,SAAS,CAACC,KAAV,EAAnB,EAAsCE,CAAC,EAAvC,EAA2C;AAEzC,UAAGH,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,MAA2BJ,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAA9B,EAAsD;AAAE;AACtD,YAAIc,WAAW,GAAG9B,kBAAkB,EAApC;AAEA,YAAIiB,eAAe,GAAGC,kBAAkB,CAACN,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAAD,EAA0BJ,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,EAA1B,EAAmDc,WAAnD,CAAxC;;AAEA,YAAGb,eAAe,IAAI,IAAtB,EAA2B;AACzB;AACA0B,oBAAU,CAACb,WAAW,CAACb,eAAD,CAAX,CAA6BQ,IAA9B,CAAV;AACA1B,4BAAkB,GAAG8C,wBAAwB,CAAC5B,eAAD,CAA7C;AACA,cAAMiB,mBAAmB,GAAGJ,WAAW,CAACG,MAAxC;;AACA,eAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,mBAApB,EAAyCC,CAAC,EAA1C,EAA+C;AAC7C;AACAf,uBAAW,GAAGjC,QAAQ,CAACiD,cAAT,CAAwBN,WAAW,CAACK,CAAD,CAAX,CAAef,WAAvC,CAAd;AACAC,wBAAY,GAAGlC,QAAQ,CAACiD,cAAT,CAAwBN,WAAW,CAACK,CAAD,CAAX,CAAed,YAAvC,CAAf;;AACA,gBAAGD,WAAW,CAACiB,YAAZ,CAAyBC,cAAzB,GAA0CtB,QAA1C,MAAwDJ,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAA3D,EAAmF;AACjF,kBAAGK,YAAY,CAACgB,YAAb,CAA0BC,cAA1B,GAA2CtB,QAA3C,MAAyDJ,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAA5D,EAAoF;AAClF2B,0BAAU,CAACb,WAAW,CAACK,CAAD,CAAX,CAAeV,IAAhB,CAAV;AACA1B,kCAAkB,GAAG8C,wBAAwB,CAACV,CAAD,CAA7C;AACD;AACF;AACF;;AACD7C,iBAAO,CAACI,OAAR,CAAgBkC,2CAAhB,CAA4D7B,kBAA5D,EAAgF,kBAAhF,EAAoGR,OAApG,EAA6GL,SAA7G;AACAE,uDAAM,CAACL,EAAP,CAAU4C,OAAV,CAAkB,gDAAlB;AACD;AACF;AACF;AACF,GA9BD,MA8BO;AACLvC,iDAAM,CAACL,EAAP,CAAU4C,OAAV,CAAkB,8BAAlB;AACD;AACF;AAEM,SAASoB,QAAT,CAAkBzD,OAAlB,EAA2B;AAChC,MAAI0D,KAAK,GAAGC,cAAc,CAACC,GAAf,EAAZ;AACA,MAAMC,SAAS,GAAG,GAAlB;AACA,MAAMC,UAAU,GAAG,GAAnB,CAHgC,CAKhC;;AACAJ,OAAK,GAAGK,UAAU,CAACL,KAAD,EAAQG,SAAR,EAAmBC,UAAnB,CAAlB;AACA,MAAIE,IAAI,GAAGC,MAAM,CAACC,KAAP,GAAeC,aAAf,CAA6BC,UAAU,CAAC,CAAD,EAAI,CAAJ,EAAOP,SAAP,EAAkBC,UAAlB,CAAvC,CAAX;AACAJ,OAAK,CAACW,gBAAN,CAAuBL,IAAvB,EARgC,CAUhC;;AACA,MAAIM,eAAe,GAAGC,UAAU,CAAC,aAAD,EAAgB,IAAhB,EAAsB,CAAC,CAAvB,EAA0BT,UAAU,GAAC,EAArC,EAAyC,GAAzC,EAA8C,EAA9C,CAAhC;AACAE,MAAI,CAACQ,UAAL,CAAgBF,eAAhB,EAZgC,CAchC;;AACA,MAAIG,iBAAiB,GAAGC,aAAa,CAACR,KAAd,GAAsBC,aAAtB,CAAoCC,UAAU,CAAC,CAAC,CAAF,EAAKN,UAAU,GAAG,EAAlB,EAAsB,GAAtB,EAA2B,EAA3B,CAA9C,CAAxB;AACAa,uBAAqB,CAACF,iBAAD,CAArB;AACAT,MAAI,CAACQ,UAAL,CAAgBC,iBAAhB,EAjBgC,CAmBhC;;AACA,MAAIG,mBAAmB,GAAGL,UAAU,CAAC,yGAAD,EAA4G,KAA5G,EAAmH,CAAC,CAApH,EAAuHT,UAAU,GAAC,EAAlI,EAAsI,GAAtI,EAA2I,EAA3I,CAApC;AACAE,MAAI,CAACQ,UAAL,CAAgBI,mBAAhB,EArBgC,CAwBhC;;AACA,MAAIC,cAAc,GAAGN,UAAU,CAAC,YAAD,EAAe,IAAf,EAAqB,CAAC,CAAtB,EAAyBT,UAAU,GAAC,GAApC,EAAyC,GAAzC,EAA8C,EAA9C,CAA/B;AACAE,MAAI,CAACQ,UAAL,CAAgBK,cAAhB,EA1BgC,CA4BhC;;AACA,MAAIC,cAAc,GAAGJ,aAAa,CAACR,KAAd,GAAsBC,aAAtB,CAAoCC,UAAU,CAAC,CAAC,CAAF,EAAKN,UAAU,GAAG,GAAlB,EAAuB,GAAvB,EAA4B,EAA5B,CAA9C,CAArB;AACAiB,sBAAoB,CAACD,cAAD,CAApB;AACAd,MAAI,CAACQ,UAAL,CAAgBM,cAAhB,EA/BgC,CAiChC;;AACA,MAAIE,kBAAkB,GAAGT,UAAU,CAAC,0DAAD,EAA6D,KAA7D,EAAoE,CAAC,CAArE,EAAwET,UAAU,GAAC,GAAnF,EAAwF,GAAxF,EAA6F,EAA7F,CAAnC;AACAE,MAAI,CAACQ,UAAL,CAAgBQ,kBAAhB,EAnCgC,CAsChC;;AACA,MAAIC,iBAAiB,GAAGV,UAAU,CAAC,eAAD,EAAkB,IAAlB,EAAwB,CAAC,CAAzB,EAA4BT,UAAU,GAAG,GAAzC,EAA8C,GAA9C,EAAmD,EAAnD,CAAlC;AACAE,MAAI,CAACQ,UAAL,CAAgBS,iBAAhB,EAxCgC,CA0ChC;;AACA,MAAIC,mBAAmB,GAAGX,UAAU,CAAC,IAAD,EAAO,IAAP,EAAa,EAAb,EAAiBT,UAAU,GAAG,GAA9B,EAAmC,GAAnC,EAAwC,EAAxC,CAApC;AACAE,MAAI,CAACQ,UAAL,CAAgBU,mBAAhB,EA5CgC,CA8ChC;;AACA,MAAIC,iBAAiB,GAAGC,WAAW,CAAClB,KAAZ,GAAoBC,aAApB,CAAkCC,UAAU,CAAC,CAAC,CAAF,EAAKN,UAAU,GAAG,GAAlB,EAAuB,EAAvB,EAA2B,EAA3B,CAA5C,CAAxB;AACA,MAAIuB,SAAS,GAAGC,iBAAiB,CAACpB,KAAlB,GAA0BqB,IAA1B,GAAiCC,WAAjC,EAAhB;AACAL,mBAAiB,CAACM,cAAlB,CAAiCC,MAAM,CAAC/E,QAAQ,CAACE,aAAT,CAAuB,cAAvB,CAAD,CAAvC;AACAsE,mBAAiB,CAACQ,YAAlB,CAA+BN,SAA/B;AACArB,MAAI,CAACQ,UAAL,CAAgBW,iBAAhB,EAnDgC,CAqDhC;;AACA,MAAIS,mBAAmB,GAAGC,SAAS,CAAC3B,KAAV,GAAkBC,aAAlB,CAAgCC,UAAU,CAAC,EAAD,EAAKN,UAAU,GAAG,GAAlB,EAAuB,EAAvB,EAA2B,EAA3B,CAA1C,CAA1B;AACA8B,qBAAmB,CAACE,WAApB,CAAgC,IAAhC;AACAF,qBAAmB,CAACG,WAApB,CAAgC,CAAhC;AACAH,qBAAmB,CAACI,aAApB,CAAkC,KAAlC;AACAJ,qBAAmB,CAACK,aAApB,CAAkC,IAAlC;AACAL,qBAAmB,CAACM,sBAApB,CAA2C,UAASC,MAAT,EAAgB;AACzD,QAAIC,KAAK,GAAG,IAAID,MAAM,CAACE,YAAP,EAAhB;AACAlB,qBAAiB,CAACM,cAAlB,CAAiCC,MAAM,CAACU,KAAD,CAAvC;AACD,GAHD;AAKApC,MAAI,CAACQ,UAAL,CAAgBoB,mBAAhB,EAhEgC,CAiEhC;AAEA;;AACA,MAAIU,qBAAqB,GAAG/B,UAAU,CAAC,mIAAD,EAAsI,KAAtI,EAA6I,CAAC,CAA9I,EAAiJT,UAAU,GAAC,GAA5J,EAAiK,GAAjK,EAAsK,EAAtK,CAAtC;AACAE,MAAI,CAACQ,UAAL,CAAgB8B,qBAAhB,EArEgC,CAuEhC;;AACA,MAAIC,kBAAkB,GAAGhC,UAAU,CAAC,gBAAD,EAAmB,IAAnB,EAAyB,CAAC,CAA1B,EAA6BT,UAAU,GAAC,GAAxC,EAA6C,GAA7C,EAAkD,EAAlD,CAAnC;AACAE,MAAI,CAACQ,UAAL,CAAgB+B,kBAAhB,EAzEgC,CA2EhC;;AACA,MAAIC,QAAQ,GAAGC,aAAa,CAAC,yBAAD,EAA4B,KAA5B,EAAmC,CAAC,CAApC,EAAuC3C,UAAU,GAAC,GAAlD,EAAuD,GAAvD,EAA4D,EAA5D,CAA5B;AACAE,MAAI,CAACQ,UAAL,CAAgBgC,QAAhB,EA7EgC,CA+EhC;;AACA,MAAIE,kBAAkB,GAAGnC,UAAU,CAAC,gEAAD,EAAmE,KAAnE,EAA0E,CAAC,CAA3E,EAA8ET,UAAU,GAAC,GAAzF,EAA8F,GAA9F,EAAmG,EAAnG,CAAnC;AACAE,MAAI,CAACQ,UAAL,CAAgBkC,kBAAhB,EAjFgC,CAmFhC;;AACA,MAAIC,eAAe,GAAGpC,UAAU,CAAC,uDAAD,EAA0D,IAA1D,EAAgE,CAAC,CAAjE,EAAoET,UAAU,GAAC,GAA/E,EAAoF,GAApF,EAAyF,EAAzF,CAAhC;AACAE,MAAI,CAACQ,UAAL,CAAgBmC,eAAhB,EArFgC,CAwFhC;AAEA;;AACA,MAAIC,aAAa,GAAGlD,KAAK,CAACmD,QAAN,EAApB;;AAEA,MAAGD,aAAa,IAAIE,wBAApB,EAA6C;AAC3C;AACA;AACA9G,WAAO,CAACI,OAAR,CAAgBkC,2CAAhB,CAA4DoB,KAAK,CAACqD,KAAN,GAAc,CAAd,EAAiBC,QAAjB,GAA4B,CAA5B,EAA+BC,KAA/B,EAA5D,EAAoG,YAApG,EAAkHhH,OAAlH,EAA2HL,SAA3H;AACAe,YAAQ,CAACuG,gBAAT,CAA0B,WAA1B,EAAuCxD,KAAK,CAACqD,KAAN,GAAc,CAAd,EAAiBC,QAAjB,GAA4B,CAA5B,EAA+BC,KAA/B,EAAvC;AACAtG,YAAQ,CAACuG,gBAAT,CAA0B,cAA1B,EAA0CxD,KAAK,CAACqD,KAAN,GAAc,CAAd,EAAiBC,QAAjB,GAA4B,CAA5B,EAA+BG,QAA/B,EAA1C;AACAxG,YAAQ,CAACuG,gBAAT,CAA0B,WAA1B,EAAuCxD,KAAK,CAACqD,KAAN,GAAc,CAAd,EAAiBC,QAAjB,GAA4B,EAA5B,EAAgCI,KAAhC,EAAvC;AACA3H,MAAE,CAAC4C,OAAH,CAAW,yBAAX;AACD;AACF;AAEM,SAASgF,aAAT,CAAuBrH,OAAvB,EAAgC;AACrCF,+CAAM,CAACL,EAAP,CAAU4C,OAAV,CAAkB,oCAAlB;AACA,MAAMiF,MAAM,GAAGtH,OAAO,CAACuH,aAAvB;AACD;AAEM,SAASC,KAAT,CAAexH,OAAf,EAAwB;AAC7B,MAAIyH,UAAJ;AACAA,YAAU,GAAGC,OAAO,CAACxD,KAAR,GAAgBqB,IAAhB,EAAb;AACAkC,YAAU,CAACE,YAAX,CAAwBC,kBAAkB,GAAGC,+BAA7C,EAH6B,CAI7B;;AACAJ,YAAU,CAACK,kBAAX,CAA8BC,mBAA9B;AACAN,YAAU,CAACO,6BAAX,CAAyC,IAAzC;AACAP,YAAU,CAACQ,gBAAX,CAA4B7D,UAAU,CAAC,CAAD,EAAI,CAAJ,EAAO,GAAP,EAAY,EAAZ,CAAtC,EAAuD,KAAvD;AACAqD,YAAU,CAACS,4BAAX,CAAwC,IAAxC;AACAT,YAAU,CAACU,YAAX,CAAwB,IAAxB;AACAV,YAAU,CAACW,QAAX,CAAoBC,qBAApB,EAV6B,CAY7B;;AACAZ,YAAU,CAACa,MAAX;AACAb,YAAU,CAACc,oBAAX,CAAgCC,GAAhC,EAd6B,CAgB/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAIC,C,CAED;AACA;AACA;;AAEA,SAAS3G,WAAT,CAAqB4G,aAArB,EAAoCC,cAApC,EAAoD1G,KAApD,EAA2DC,IAA3D,EAAiEC,SAAjE,EAA4EyG,MAA5E,EAAoFC,WAApF,EAAiGjH,eAAjG,EAAkH;AAChH;AACA;AACA,MAAIG,WAAW,GAAGjC,QAAQ,CAACiD,cAAT,CAAwB2F,aAAxB,CAAlB;AACA,MAAI1G,YAAY,GAAGlC,QAAQ,CAACiD,cAAT,CAAwB4F,cAAxB,CAAnB,CAJgH,CAMhH;;AACArF,YAAU,CAACsF,MAAD,CAAV;AACAlI,oBAAkB,GAAG8C,wBAAwB,CAAC5B,eAAD,CAA7C;;AAEA,MAAGG,WAAW,IAAIC,YAAlB,EAA+B;AAC7B;AACA8G,eAAW,CAACJ,aAAD,EAAgBC,cAAhB,EAAgC1G,KAAhC,EAAuCC,IAAvC,EAA6CC,SAA7C,EAAwD0G,WAAxD,CAAX;AACD;AACF;;AAED,SAASC,WAAT,CAAqBJ,aAArB,EAAoCC,cAApC,EAAoD1G,KAApD,EAA2DC,IAA3D,EAAiEC,SAAjE,EAA4E0G,WAA5E,EAAyF;AACvF;AACA,MAAIE,cAAJ,EAAoBC,UAApB,EAAgCC,SAAhC;;AACA,MAAG9G,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACA4G,kBAAc,GAAGG,YAAY,CAACR,aAAD,EAAgBC,cAAhB,CAA7B;AACD,GAHD,MAGO;AACLI,kBAAc,GAAG5G,SAAjB;AACD;;AAED,MAAGD,IAAI,IAAI,IAAX,EAAgB;AACd+G,aAAS,GAAGrI,QAAQ,CAACE,aAAT,CAAuB,WAAvB,CAAZ;AACD,GAFD,MAEO;AACLmI,aAAS,GAAG/G,IAAZ;AACD,GAdsF,CAgBvF;;;AACA8G,YAAU,GAAGG,cAAc,CAAClJ,OAAO,CAACI,OAAR,CAAgBC,uCAAhB,CAAwD,YAAxD,EAAsEJ,OAAtE,EAA+EL,SAA/E,CAAD,CAA3B;;AAEA,MAAGoC,KAAK,IAAI,IAAZ,EAAiB;AACf;AACA,QAAGkH,cAAc,CAAClH,KAAD,CAAd,IAAyB,IAAzB,IAAiCA,KAAK,IAAI,eAA7C,EAA6D;AAC3D+G,gBAAU,GAAG/G,KAAb;AACD,KAFD,MAEO;AACL+G,gBAAU,GAAG,eAAb;AACD;AACF,GAPD,MAOO;AACL;AACA,QAAG/I,OAAO,CAACI,OAAR,CAAgBC,uCAAhB,CAAwD,YAAxD,EAAsEJ,OAAtE,EAA+EL,SAA/E,CAAH,EAA6F;AAC3FmJ,gBAAU,GAAG/I,OAAO,CAACI,OAAR,CAAgBC,uCAAhB,CAAwD,YAAxD,EAAsEJ,OAAtE,EAA+EL,SAA/E,CAAb;AACD,KAFD,MAEO;AACLmJ,gBAAU,GAAG,eAAb;AACD;AAEF;;AAGDI,eAAa,CAACV,aAAD,EAAgBC,cAAhB,EAAgCI,cAAhC,CAAb;AACAM,gBAAc,CAACX,aAAD,EAAgBC,cAAhB,EAAgCI,cAAhC,CAAd;AACA,MAAIO,YAAY,GAAGC,kBAAkB,EAArC;AACA,MAAInH,IAAI,GAAGoH,QAAQ,CAACd,aAAD,EAAgBC,cAAhB,EAAgCK,UAAhC,EAA4CC,SAA5C,EAAuDF,cAAvD,EAAuEO,YAAvE,CAAnB;AACAG,kBAAgB,CAACrH,IAAD,EAAOkH,YAAP,CAAhB,CAzCuF,CA4CvF;AACA;AACA;AAEA;;AACA,MAAII,UAAU,GAAG;AACf3H,eAAW,EAAG2G,aADC;AAEf1G,gBAAY,EAAG2G,cAFA;AAGf1G,SAAK,EAAG+G,UAHO;AAIf3G,aAAS,EAAGwG,WAJG;AAKf3G,QAAI,EAAG+G,SALQ;AAMf9G,aAAS,EAAE4G,cANI;AAOf3G,QAAI,EAAGA,IAAI,CAACT,QAAL,EAPQ,CASjB;;AATiB,GAAjB;AAUAjB,oBAAkB,CAACyC,IAAnB,CAAwBuG,UAAxB;AACD;;AAED,SAASH,kBAAT,GAA8B;AAC5B,MAAID,YAAY,GAAG,IAAnB,CAD4B,CAE5B;;AACA,OAAI,IAAIxG,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGvC,kBAAkB,CAACoJ,MAAnB,GAA4BnI,KAA5B,EAAnB,EAAwDsB,CAAC,EAAzD,EAA4D;AAC1D,QAAGvC,kBAAkB,CAACoJ,MAAnB,GAA4B7G,CAA5B,EAA+B8G,IAA/B,MAAyC,QAA5C,EAAsD;AACpD;AACAN,kBAAY,GAAG/I,kBAAkB,CAACoJ,MAAnB,GAA4B7G,CAA5B,CAAf;AACA+G,mBAAa,CAACP,YAAD,CAAb;AACD;AACF;;AACD,SAAOA,YAAP;AACD;;AAED,SAASJ,YAAT,CAAsBR,aAAtB,EAAqCC,cAArC,EAAoD;AAClD;AACA,MAAM5G,WAAW,GAAGjC,QAAQ,CAACiD,cAAT,CAAwB2F,aAAxB,CAApB;AACA,MAAM1G,YAAY,GAAGlC,QAAQ,CAACiD,cAAT,CAAwB4F,cAAxB,CAArB;AACA,MAAMmB,eAAe,GAAG/H,WAAW,CAACgI,KAAZ,CAAkBC,CAAlB,GAAoBjI,WAAW,CAACgI,KAAZ,CAAkBE,KAAlB,GAAwB,CAApE;AACA,MAAMC,eAAe,GAAGnI,WAAW,CAACgI,KAAZ,CAAkBI,CAAlB,GAAoBpI,WAAW,CAACgI,KAAZ,CAAkBK,MAAlB,GAAyB,CAArE;AACA,MAAMC,gBAAgB,GAAGrI,YAAY,CAAC+H,KAAb,CAAmBC,CAAnB,GAAqBhI,YAAY,CAAC+H,KAAb,CAAmBE,KAAnB,GAAyB,CAAvE;AACA,MAAMK,gBAAgB,GAAGtI,YAAY,CAAC+H,KAAb,CAAmBI,CAAnB,GAAqBnI,YAAY,CAAC+H,KAAb,CAAmBK,MAAnB,GAA0B,CAAxE;AAEA,MAAMG,KAAK,GAAGT,eAAe,GAAGO,gBAAhC;AACA,MAAMG,KAAK,GAAGN,eAAe,GAAGI,gBAAhC;AACA,MAAMG,QAAQ,GAAGC,IAAI,CAACC,GAAL,CAASJ,KAAT,CAAjB;AACA,MAAMK,QAAQ,GAAGF,IAAI,CAACC,GAAL,CAASH,KAAT,CAAjB;AACA,MAAIrI,SAAJ;;AAEA,MAAGkI,gBAAgB,GAAGP,eAAtB,EAAsC;AACpC;AACA,QAAGQ,gBAAgB,GAAGJ,eAAtB,EAAsC;AACpC;AACA,UAAGK,KAAK,GAAGC,KAAX,EAAkB;AAChBrI,iBAAS,GAAG,MAAZ;AACD,OAFD,MAEO;AACLA,iBAAS,GAAG,OAAZ;AACD;AACF,KAPD,MAOO;AACL;AACA,UAAGsI,QAAQ,GAAGG,QAAd,EAAwB;AACtBzI,iBAAS,GAAG,OAAZ;AACD,OAFD,MAEO;AACLA,iBAAS,GAAG,IAAZ;AACD;AACF;AACF,GAjBD,MAiBO;AACL;AACA,QAAGmI,gBAAgB,GAAGJ,eAAtB,EAAsC;AACpC;AACA,UAAGO,QAAQ,GAAGG,QAAd,EAAwB;AACtBzI,iBAAS,GAAG,MAAZ;AACD,OAFD,MAEO;AACLA,iBAAS,GAAG,MAAZ;AACD;AACF,KAPD,MAOO;AACL;AACA,UAAGoI,KAAK,GAAGC,KAAX,EAAkB;AAChBrI,iBAAS,GAAG,MAAZ;AACD,OAFD,MAEO;AACLA,iBAAS,GAAG,IAAZ;AACD;AACF;AACF;;AACD,SAAOA,SAAP;AACD;;AAED,SAASqH,QAAT,CAAkBd,aAAlB,EAAiCC,cAAjC,EAAiD1G,KAAjD,EAAwDC,IAAxD,EAA8DC,SAA9D,EAAyEmH,YAAzE,EAAsF;AACpF,MAAIuB,cAAJ,EAAoBC,cAApB,EAAoCC,eAApC,EAAqDC,eAArD,EAAsEC,UAAtE,EAAkFC,UAAlF,EAA8FX,KAA9F,EAAqGC,KAArG,EAA4GpI,IAA5G;AACA,MAAIL,WAAW,GAAGjC,QAAQ,CAACiD,cAAT,CAAwB2F,aAAxB,CAAlB;AACA,MAAI1G,YAAY,GAAGlC,QAAQ,CAACiD,cAAT,CAAwB4F,cAAxB,CAAnB;AAEA,MAAIwC,iBAAiB,GAAGpJ,WAAW,CAACgI,KAAZ,CAAkBqB,WAAlB,CAA8B;AAACC,QAAI,EAAEtJ,WAAW,CAACuJ,MAAnB;AAA2BC,MAAE,EAAEhL;AAA/B,GAA9B,CAAxB;AACA,MAAIiL,kBAAkB,GAAGxJ,YAAY,CAAC+H,KAAb,CAAmBqB,WAAnB,CAA+B;AAACC,QAAI,EAAErJ,YAAY,CAACsJ,MAApB;AAA4BC,MAAE,EAAEhL;AAAhC,GAA/B,CAAzB;;AAEA,MAAG+I,YAAH,EAAgB;AACd;AACAiB,SAAK,GAAGjB,YAAY,CAACS,KAAb,GAAqBC,CAArB,EAAR;AACAQ,SAAK,GAAGlB,YAAY,CAACS,KAAb,GAAqBI,CAArB,EAAR;AACD,GAJD,MAIO;AACLI,SAAK,GAAG,CAAR;AACAC,SAAK,GAAG,CAAR;AACD,GAfmF,CAiBpF;;;AACA,MAAIiB,IAAI,GAAGC,YAAY,CAACC,UAAb,EAAX;;AAEA,MAAGzJ,IAAI,IAAI,QAAR,IAAoBA,IAAI,IAAI,IAA/B,EAAoC;AAClC;AAEA,QAAGC,SAAS,IAAI,IAAhB,EAAqB;AACnB;AACA0I,oBAAc,GAAGM,iBAAiB,CAACnB,CAAlB,GAAoBmB,iBAAiB,CAAClB,KAAlB,GAAwB,CAA5C,GAA8CM,KAA/D;AACAO,oBAAc,GAAGK,iBAAiB,CAAChB,CAAlB,GAAoBK,KAArC,CAHmB,CAKnB;;AACAO,qBAAe,GAAGS,kBAAkB,CAACxB,CAAnB,GAAqBwB,kBAAkB,CAACvB,KAAnB,GAAyB,CAA9C,GAAgDM,KAAlE;AACAS,qBAAe,GAAGQ,kBAAkB,CAACrB,CAAnB,GAAqBqB,kBAAkB,CAACpB,MAAxC,GAA+CI,KAAjE,CAPmB,CASnB;;AACAS,gBAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD;AACAG,gBAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD,CAXmB,CAanB;;AACAS,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAAChB,cAAD,EAAgBK,UAAhB,CAA5B;AACAO,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBG,UAAjB,CAA5B;AACAO,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B;AACD;;AAED,QAAG7I,SAAS,IAAI,OAAhB,EAAwB;AACtB;AACA0I,oBAAc,GAAGM,iBAAiB,CAACnB,CAAlB,GAAoBmB,iBAAiB,CAAClB,KAAtC,GAA4CM,KAA7D;AACAO,oBAAc,GAAGK,iBAAiB,CAAChB,CAAlB,GAAoBgB,iBAAiB,CAACf,MAAlB,GAAyB,CAA7C,GAA+CI,KAAhE,CAHsB,CAKtB;;AACAO,qBAAe,GAAGS,kBAAkB,CAACxB,CAAnB,GAAqBO,KAAvC;AACAS,qBAAe,GAAGQ,kBAAkB,CAACrB,CAAnB,GAAqBqB,kBAAkB,CAACpB,MAAnB,GAA0B,CAA/C,GAAiDI,KAAnE,CAPsB,CAStB;;AACAS,gBAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD;AACAG,gBAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD,CAXsB,CAatB;;AACAS,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACZ,UAAD,EAAYH,cAAZ,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACZ,UAAD,EAAYD,eAAZ,CAA5B;AACAS,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B;AACD;;AAED,QAAG7I,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACA0I,oBAAc,GAAGM,iBAAiB,CAACnB,CAAlB,GAAoBmB,iBAAiB,CAAClB,KAAlB,GAAwB,CAA5C,GAA8CM,KAA/D;AACAO,oBAAc,GAAGK,iBAAiB,CAAChB,CAAlB,GAAoBgB,iBAAiB,CAACf,MAAtC,GAA6CI,KAA9D,CAHqB,CAKrB;;AACAO,qBAAe,GAAGS,kBAAkB,CAACxB,CAAnB,GAAqBwB,kBAAkB,CAACvB,KAAnB,GAAyB,CAA9C,GAAgDM,KAAlE;AACAS,qBAAe,GAAGQ,kBAAkB,CAACrB,CAAnB,GAAqBK,KAAvC,CAPqB,CASrB;;AACAS,gBAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD;AACAG,gBAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD,CAXqB,CAarB;;AACAS,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAAChB,cAAD,EAAgBK,UAAhB,CAA5B;AACAO,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBG,UAAjB,CAA5B;AACAO,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B;AACD;;AAED,QAAG7I,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACA0I,oBAAc,GAAGM,iBAAiB,CAACnB,CAAlB,GAAoBO,KAArC;AACAO,oBAAc,GAAGK,iBAAiB,CAAChB,CAAlB,GAAoBgB,iBAAiB,CAACf,MAAlB,GAAyB,CAA7C,GAA+CI,KAAhE,CAHqB,CAKrB;;AACAO,qBAAe,GAAGS,kBAAkB,CAACxB,CAAnB,GAAqBwB,kBAAkB,CAACvB,KAAxC,GAA8CM,KAAhE;AACAS,qBAAe,GAAGQ,kBAAkB,CAACrB,CAAnB,GAAqBqB,kBAAkB,CAACpB,MAAnB,GAA0B,CAA/C,GAAiDI,KAAnE,CAPqB,CASrB;;AACAS,gBAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD;AACAG,gBAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD,CAXqB,CAarB;;AACAS,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACZ,UAAD,EAAYH,cAAZ,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACZ,UAAD,EAAYD,eAAZ,CAA5B;AACAS,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B;AACD,KAjFiC,CAmFlC;AAEA;;;AACA5I,QAAI,GAAG2J,YAAY,CAACC,aAAb,CAA2BC,MAAM,CAACC,kBAAP,CAA0BT,IAA1B,CAA3B,CAAP,CAtFkC,CAyFlC;;AACA,QAAIU,MAAM,GAAG/J,IAAI,CAACuH,MAAL,GAAc5H,WAAd,GAA4BoK,MAA5B,EAAb;AACAA,UAAM,CAAC,CAAD,CAAN,CAAUC,YAAV,GAAyB,EAAzB;AACAD,UAAM,CAAC,CAAD,CAAN,CAAUC,YAAV,GAAyB,EAAzB,CA5FkC,CA8FlC;;AACAhK,QAAI,CAACiK,OAAL,CAAa,OAAb;AACD;;AAED,MAAGnK,IAAI,IAAI,UAAX,EAAsB;AACpB;AACA,QAAGC,SAAS,IAAI,IAAhB,EAAqB;AACnB;AACA0I,oBAAc,GAAGM,iBAAiB,CAACnB,CAAlB,GAAoBmB,iBAAiB,CAAClB,KAAlB,GAAwB,CAA5C,GAA8CM,KAA/D;AACAO,oBAAc,GAAGK,iBAAiB,CAAChB,CAAlB,GAAoBK,KAArC,CAHmB,CAKnB;;AACAO,qBAAe,GAAGS,kBAAkB,CAACxB,CAAnB,GAAqBwB,kBAAkB,CAACvB,KAAnB,GAAyB,CAA9C,GAAgDM,KAAlE;AACAS,qBAAe,GAAGQ,kBAAkB,CAACrB,CAAnB,GAAqBqB,kBAAkB,CAACpB,MAAxC,GAA+CI,KAAjE,CAPmB,CASnB;;AACAS,gBAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD;AACAG,gBAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD,CAXmB,CAanB;;AACAS,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B;AACD;;AAED,QAAG7I,SAAS,IAAI,OAAhB,EAAwB;AACtB;AACA0I,oBAAc,GAAGM,iBAAiB,CAACnB,CAAlB,GAAoBmB,iBAAiB,CAAClB,KAAtC,GAA4CM,KAA7D;AACAO,oBAAc,GAAGK,iBAAiB,CAAChB,CAAlB,GAAoBgB,iBAAiB,CAACf,MAAlB,GAAyB,CAA7C,GAA+CI,KAAhE,CAHsB,CAKtB;;AACAO,qBAAe,GAAGS,kBAAkB,CAACxB,CAAnB,GAAqBO,KAAvC;AACAS,qBAAe,GAAGQ,kBAAkB,CAACrB,CAAnB,GAAqBqB,kBAAkB,CAACpB,MAAnB,GAA0B,CAA/C,GAAiDI,KAAnE,CAPsB,CAStB;;AACAS,gBAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD;AACAG,gBAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD,CAXsB,CAatB;;AACAS,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B;AACD;;AAED,QAAG7I,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACA0I,oBAAc,GAAGM,iBAAiB,CAACnB,CAAlB,GAAoBmB,iBAAiB,CAAClB,KAAlB,GAAwB,CAA5C,GAA8CM,KAA/D;AACAO,oBAAc,GAAGK,iBAAiB,CAAChB,CAAlB,GAAoBgB,iBAAiB,CAACf,MAAtC,GAA6CI,KAA9D,CAHqB,CAKrB;;AACAO,qBAAe,GAAGS,kBAAkB,CAACxB,CAAnB,GAAqBwB,kBAAkB,CAACvB,KAAnB,GAAyB,CAA9C,GAAgDM,KAAlE;AACAS,qBAAe,GAAGQ,kBAAkB,CAACrB,CAAnB,GAAqBK,KAAvC,CAPqB,CASrB;;AACAS,gBAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD;AACAG,gBAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD,CAXqB,CAarB;;AACAS,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B;AACD;;AAED,QAAG7I,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACA0I,oBAAc,GAAGM,iBAAiB,CAACnB,CAAlB,GAAoBO,KAArC;AACAO,oBAAc,GAAGK,iBAAiB,CAAChB,CAAlB,GAAoBgB,iBAAiB,CAACf,MAAlB,GAAyB,CAA7C,GAA+CI,KAAhE,CAHqB,CAKrB;;AACAO,qBAAe,GAAGS,kBAAkB,CAACxB,CAAnB,GAAqBwB,kBAAkB,CAACvB,KAAxC,GAA8CM,KAAhE;AACAS,qBAAe,GAAGQ,kBAAkB,CAACrB,CAAnB,GAAqBqB,kBAAkB,CAACpB,MAAnB,GAA0B,CAA/C,GAAiDI,KAAnE,CAPqB,CASrB;;AACAS,gBAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD;AACAG,gBAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD,CAXqB,CAarB;;AACAS,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B;AACD,KAxEmB,CA0EpB;;;AACA5I,QAAI,GAAG2J,YAAY,CAACC,aAAb,CAA2BC,MAAM,CAACC,kBAAP,CAA0BT,IAA1B,CAA3B,CAAP,CA3EoB,CA6EpB;;AACArJ,QAAI,CAACiK,OAAL,CAAa,OAAb;AACD;;AAED,MAAGnK,IAAI,IAAI,QAAX,EAAoB;AAClB;AACA,QAAGC,SAAS,IAAI,IAAhB,EAAqB;AACnB;AACA0I,oBAAc,GAAGM,iBAAiB,CAACnB,CAAlB,GAAoBmB,iBAAiB,CAAClB,KAAlB,GAAwB,CAA5C,GAA8CM,KAA/D;AACAO,oBAAc,GAAGK,iBAAiB,CAAChB,CAAlB,GAAoBK,KAArC,CAHmB,CAKnB;;AACAO,qBAAe,GAAGS,kBAAkB,CAACxB,CAAnB,GAAqBwB,kBAAkB,CAACvB,KAAnB,GAAyB,CAA9C,GAAgDM,KAAlE;AACAS,qBAAe,GAAGQ,kBAAkB,CAACrB,CAAnB,GAAqBqB,kBAAkB,CAACpB,MAAxC,GAA+CI,KAAjE,CAPmB,CASnB;;AACAS,gBAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD;AACAG,gBAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD,CAXmB,CAanB;;AACAS,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B,EAfmB,CAiBnB;;AACA5I,UAAI,GAAG2J,YAAY,CAACC,aAAb,CAA2BC,MAAM,CAACC,kBAAP,CAA0BT,IAA1B,CAA3B,CAAP;;AACA,UAAIU,OAAM,GAAG/J,IAAI,CAACuH,MAAL,GAAc5H,WAAd,GAA4BoK,MAA5B,EAAb;;AAEAA,aAAM,CAAC,CAAD,CAAN,CAAUG,SAAV,GAAsBH,OAAM,CAAC,CAAD,CAAN,CAAUG,SAAV,GAAsB,CAA5C;AACAH,aAAM,CAAC,CAAD,CAAN,CAAUI,YAAV,GAAyBJ,OAAM,CAAC,CAAD,CAAN,CAAUK,UAAV,GAAuB,IAAhD;;AAEA,UAAG3B,cAAc,GAACE,eAAlB,EAAkC;AAChCoB,eAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAOG,WAAC,EAAE;AAAV,SAAtB;AACAgC,eAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAC,GAAL;AAASG,WAAC,EAAC;AAAX,SAApB;AAEAgC,eAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAAtB;AACAgC,eAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAApB;AACD,OAND,MAMO;AACLgC,eAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAOG,WAAC,EAAE;AAAV,SAAtB;AACAgC,eAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAC,GAAL;AAASG,WAAC,EAAC;AAAX,SAApB;AAEAgC,eAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAAtB;AACAgC,eAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAApB;AACD;AACF;;AAED,QAAGhI,SAAS,IAAI,OAAhB,EAAwB;AACtB;AACA0I,oBAAc,GAAGM,iBAAiB,CAACnB,CAAlB,GAAoBmB,iBAAiB,CAAClB,KAAtC,GAA4CM,KAA7D;AACAO,oBAAc,GAAGK,iBAAiB,CAAChB,CAAlB,GAAoBgB,iBAAiB,CAACf,MAAlB,GAAyB,CAA7C,GAA+CI,KAAhE,CAHsB,CAKtB;;AACAO,qBAAe,GAAGS,kBAAkB,CAACxB,CAAnB,GAAqBO,KAAvC;AACAS,qBAAe,GAAGQ,kBAAkB,CAACrB,CAAnB,GAAqBqB,kBAAkB,CAACpB,MAAnB,GAA0B,CAA/C,GAAiDI,KAAnE,CAPsB,CAStB;;AACAS,gBAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD;AACAG,gBAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD,CAXsB,CAatB;;AACAS,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B,EAfsB,CAiBtB;;AACA5I,UAAI,GAAG2J,YAAY,CAACC,aAAb,CAA2BC,MAAM,CAACC,kBAAP,CAA0BT,IAA1B,CAA3B,CAAP;;AACA,UAAIU,QAAM,GAAG/J,IAAI,CAACuH,MAAL,GAAc5H,WAAd,GAA4BoK,MAA5B,EAAb;;AAEAA,cAAM,CAAC,CAAD,CAAN,CAAUG,SAAV,GAAsBH,QAAM,CAAC,CAAD,CAAN,CAAUG,SAAV,GAAsB,CAA5C;AACAH,cAAM,CAAC,CAAD,CAAN,CAAUI,YAAV,GAAyBJ,QAAM,CAAC,CAAD,CAAN,CAAUK,UAAV,GAAuB,IAAhD;;AAEA,UAAG1B,cAAc,GAACE,eAAlB,EAAkC;AAChCmB,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,GAAJ;AAASG,WAAC,EAAE;AAAZ,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAC,GAAL;AAASG,WAAC,EAAC;AAAX,SAApB;AAEAgC,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,GAAJ;AAAQG,WAAC,EAAE;AAAX,SAApB;AACD,OAND,MAMO;AACLgC,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,GAAJ;AAASG,WAAC,EAAE;AAAZ,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAC,GAAL;AAASG,WAAC,EAAC;AAAX,SAApB;AAEAgC,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,GAAJ;AAAQG,WAAC,EAAE;AAAX,SAApB;AACD;AACF;;AAED,QAAGhI,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACA0I,oBAAc,GAAGM,iBAAiB,CAACnB,CAAlB,GAAoBmB,iBAAiB,CAAClB,KAAlB,GAAwB,CAA5C,GAA8CM,KAA/D;AACAO,oBAAc,GAAGK,iBAAiB,CAAChB,CAAlB,GAAoBgB,iBAAiB,CAACf,MAAtC,GAA6CI,KAA9D,CAHqB,CAKrB;;AACAO,qBAAe,GAAGS,kBAAkB,CAACxB,CAAnB,GAAqBwB,kBAAkB,CAACvB,KAAnB,GAAyB,CAA9C,GAAgDM,KAAlE;AACAS,qBAAe,GAAGQ,kBAAkB,CAACrB,CAAnB,GAAqBK,KAAvC,CAPqB,CASrB;;AACAS,gBAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD;AACAG,gBAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD,CAXqB,CAarB;;AACAS,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B,EAfqB,CAiBrB;;AACA5I,UAAI,GAAG2J,YAAY,CAACC,aAAb,CAA2BC,MAAM,CAACC,kBAAP,CAA0BT,IAA1B,CAA3B,CAAP;;AACA,UAAIU,QAAM,GAAG/J,IAAI,CAACuH,MAAL,GAAc5H,WAAd,GAA4BoK,MAA5B,EAAb;;AAEAA,cAAM,CAAC,CAAD,CAAN,CAAUG,SAAV,GAAsBH,QAAM,CAAC,CAAD,CAAN,CAAUG,SAAV,GAAsB,CAA5C;AACAH,cAAM,CAAC,CAAD,CAAN,CAAUI,YAAV,GAAyBJ,QAAM,CAAC,CAAD,CAAN,CAAUK,UAAV,GAAuB,IAAhD;;AAEA,UAAG3B,cAAc,GAACE,eAAlB,EAAkC;AAChCoB,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAOG,WAAC,EAAE;AAAV,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAC,GAAL;AAASG,WAAC,EAAC;AAAX,SAApB;AAEAgC,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAApB;AACD,OAND,MAMO;AACLgC,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAOG,WAAC,EAAE;AAAV,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAC,GAAL;AAASG,WAAC,EAAC;AAAX,SAApB;AAEAgC,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAApB;AACD;AACF;;AAED,QAAGhI,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACA0I,oBAAc,GAAGM,iBAAiB,CAACnB,CAAlB,GAAoBO,KAArC;AACAO,oBAAc,GAAGK,iBAAiB,CAAChB,CAAlB,GAAoBgB,iBAAiB,CAACf,MAAlB,GAAyB,CAA7C,GAA+CI,KAAhE,CAHqB,CAKrB;;AACAO,qBAAe,GAAGS,kBAAkB,CAACxB,CAAnB,GAAqBwB,kBAAkB,CAACvB,KAAxC,GAA8CM,KAAhE;AACAS,qBAAe,GAAGQ,kBAAkB,CAACrB,CAAnB,GAAqBqB,kBAAkB,CAACpB,MAAnB,GAA0B,CAA/C,GAAiDI,KAAnE,CAPqB,CASrB;;AACAS,gBAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD;AACAG,gBAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD,CAXqB,CAarB;;AACAS,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B,EAfqB,CAiBrB;;AACA5I,UAAI,GAAG2J,YAAY,CAACC,aAAb,CAA2BC,MAAM,CAACC,kBAAP,CAA0BT,IAA1B,CAA3B,CAAP;;AACA,UAAIU,QAAM,GAAG/J,IAAI,CAACuH,MAAL,GAAc5H,WAAd,GAA4BoK,MAA5B,EAAb;;AAEAA,cAAM,CAAC,CAAD,CAAN,CAAUG,SAAV,GAAsBH,QAAM,CAAC,CAAD,CAAN,CAAUG,SAAV,GAAsB,CAA5C;AACAH,cAAM,CAAC,CAAD,CAAN,CAAUI,YAAV,GAAyBJ,QAAM,CAAC,CAAD,CAAN,CAAUK,UAAV,GAAuB,IAAhD;;AAEA,UAAG1B,cAAc,GAACE,eAAlB,EAAkC;AAChCmB,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,GAAJ;AAASG,WAAC,EAAE;AAAZ,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAC,GAAL;AAASG,WAAC,EAAC;AAAX,SAApB;AAEAgC,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,GAAJ;AAAQG,WAAC,EAAE;AAAX,SAApB;AACD,OAND,MAMO;AACLgC,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,GAAJ;AAASG,WAAC,EAAE;AAAZ,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAC,GAAL;AAASG,WAAC,EAAC;AAAX,SAApB;AAEAgC,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,GAAJ;AAAQG,WAAC,EAAE;AAAX,SAApB;AACD;AACF,KA5JiB,CA8JlB;;;AACA/H,QAAI,CAACiK,OAAL,CAAa,QAAb;AACD,GAvWmF,CA0WpF;;;AACA,MAAGpK,KAAK,IAAI,IAAZ,EAAiB;AACf;AACA,QAAGhC,OAAO,CAACI,OAAR,CAAgBC,uCAAhB,CAAwD,YAAxD,EAAsEJ,OAAtE,EAA+EL,SAA/E,CAAH,EAA6F;AAE3F;AACA;AACA,UAAIoC,MAAK,GAAGkH,cAAc,CAAClJ,OAAO,CAACI,OAAR,CAAgBC,uCAAhB,CAAwD,YAAxD,EAAsEJ,OAAtE,EAA+EL,SAA/E,CAAD,CAA1B;;AACA,UAAGoC,MAAK,CAAC,CAAD,CAAL,IAAY,IAAf,EAAoB;AAClB;AACA,YAAI0K,MAAM,GAAGvK,IAAI,CAACH,KAAL,GAAa2K,kBAAb,CAAgC,CAAhC,CAAb;AACAD,cAAM,CAACE,KAAP,GAAeC,OAAO,CAACC,uBAAR,CAAgC;AAACC,WAAC,EAAE,IAAJ;AAAUtL,WAAC,EAAE,IAAb;AAAmBuL,WAAC,EAAE,IAAtB;AAA4BC,WAAC,EAAE;AAA/B,SAAhC,CAAf;AACAP,cAAM,CAACQ,SAAP,GAAmB,CAAnB;AACA/K,YAAI,CAACH,KAAL,GAAamL,aAAb,GAA6B,CAA7B;AACD,OAND,MAMO;AACLhL,YAAI,CAACiL,WAAL,GAAmBpL,MAAK,CAAC,CAAD,CAAxB;AACD;AACF,KAdD,MAcO;AACL;AACA,UAAI0K,OAAM,GAAGvK,IAAI,CAACH,KAAL,GAAa2K,kBAAb,CAAgC,CAAhC,CAAb;;AACAD,aAAM,CAACE,KAAP,GAAeC,OAAO,CAACC,uBAAR,CAAgC;AAACC,SAAC,EAAE,IAAJ;AAAUtL,SAAC,EAAE,IAAb;AAAmBuL,SAAC,EAAE,IAAtB;AAA4BC,SAAC,EAAE;AAA/B,OAAhC,CAAf;AACAP,aAAM,CAACQ,SAAP,GAAmB,CAAnB;AACA/K,UAAI,CAACH,KAAL,GAAamL,aAAb,GAA6B,CAA7B;AACD;AACF,GAvBD,MAuBO;AACL;AACA,QAAGnL,KAAK,IAAI,eAAZ,EAA4B;AAC1B;AACA,UAAI0K,QAAM,GAAGvK,IAAI,CAACH,KAAL,GAAa2K,kBAAb,CAAgC,CAAhC,CAAb;;AACAD,cAAM,CAACE,KAAP,GAAeC,OAAO,CAACC,uBAAR,CAAgC;AAACC,SAAC,EAAE,IAAJ;AAAUtL,SAAC,EAAE,IAAb;AAAmBuL,SAAC,EAAE,IAAtB;AAA4BC,SAAC,EAAE;AAA/B,OAAhC,CAAf;AACAP,cAAM,CAACQ,SAAP,GAAmB,CAAnB;AACA/K,UAAI,CAACH,KAAL,GAAamL,aAAb,GAA6B,CAA7B;AACD,KAND,MAMO;AACL;AACA,UAAIE,QAAQ,GAAGnE,cAAc,CAAClH,KAAD,CAA7B;AACAG,UAAI,CAACiL,WAAL,GAAmBC,QAAQ,CAAC,CAAD,CAA3B;AACD;AACF,GA/YmF,CAgZpF;;;AAEA,SAAOlL,IAAP;AACD;;AAED,SAASqH,gBAAT,CAA0BrH,IAA1B,EAAgCkH,YAAhC,EAA6C;AAC3C,MAAGA,YAAH,EAAgB;AACdA,gBAAY,CAACiE,SAAb,CAAuB,CAACnL,IAAD,CAAvB;AACAkH,gBAAY,CAACkE,sBAAb,CAAoC,CAApC;AACD,GAHD,MAGO;AACL;AACA,QAAIC,KAAK,GAAG9N,mBAAO,CAAC,8BAAD,CAAP,CAAsB8N,KAAlC;;AACA,QAAIC,KAAK,GAAG,IAAID,KAAJ,CAAU;AACpBnC,YAAM,EAAE/K,kBADY;AAEpBqJ,UAAI,EAAE,QAFc;AAGpB+D,YAAM,EAAE,IAHY;AAIpBhE,YAAM,EAAE,CAACvH,IAAD;AAJY,KAAV,CAAZ,CAHK,CASL;;AACAsL,SAAK,CAACE,UAAN;AACAtE,gBAAY,GAAGC,kBAAkB,EAAjC;AACAD,gBAAY,CAACkE,sBAAb,CAAoC,CAApC;AACD;AAIF;;AAED,SAAS7M,kBAAT,GAA6B;AAC3B,MAAIkN,SAAS,GAAG,EAAhB;AACA,MAAIC,qBAAqB,GAAG,EAA5B;;AACA,MAAG1N,UAAH,EAAc;AACZ0N,yBAAqB,GAAG7N,OAAO,CAACI,OAAR,CAAgBC,uCAAhB,CAAwD,kBAAxD,EAA4EJ,OAA5E,EAAqFL,SAArF,CAAxB;;AAEA,SAAK,IAAIiD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgL,qBAAqB,CAAClL,MAA1C,EAAkDE,CAAC,EAAnD,EAAwD;AACtD+K,eAAS,CAAC1K,IAAV,CAAe2K,qBAAqB,CAAChL,CAAD,CAApC;AACD;AACF;;AACD,SAAO+K,SAAP;AACD;;AAED,SAAShM,kBAAT,CAA4B6G,aAA5B,EAA2CC,cAA3C,EAA2DoF,IAA3D,EAAgE;AAC9D,MAAIC,WAAW,GAAG,IAAlB;AACAtF,eAAa,GAAG/C,MAAM,CAAC+C,aAAD,CAAtB;AACAC,gBAAc,GAAGhD,MAAM,CAACgD,cAAD,CAAvB;;AAEA,MAAGvI,UAAH,EAAc;AACZ;AAEA,SAAI,IAAI+J,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAG4D,IAAI,CAACnL,MAAxB,EAAgCuH,CAAC,EAAjC,EAAoC;AAElC,UAAGzB,aAAa,IAAIqF,IAAI,CAAC5D,CAAD,CAAJ,CAAQpI,WAAzB,IAAwC2G,aAAa,IAAIqF,IAAI,CAAC5D,CAAD,CAAJ,CAAQnI,YAApE,EAAiF;AAC/E;AACA,YAAG2G,cAAc,IAAIoF,IAAI,CAAC5D,CAAD,CAAJ,CAAQpI,WAA1B,IAAyC4G,cAAc,IAAIoF,IAAI,CAAC5D,CAAD,CAAJ,CAAQnI,YAAtE,EAAmF;AACjF;AACAgM,qBAAW,GAAG7D,CAAd;AACD;AACF;AACF;AACF;;AACD,SAAO6D,WAAP;AACD;;AAED,SAASC,yBAAT,CAAmCC,mBAAnC,EAAuD;AACrD,MAAIC,gBAAgB,GAAG,MAAvB;;AAEA,MAAGvN,QAAQ,CAACE,aAAT,CAAuB,gBAAvB,CAAH,EAA4C;AAC1C;AACAqN,oBAAgB,GAAGvN,QAAQ,CAACE,aAAT,CAAuB,gBAAvB,CAAnB;;AAEA,QAAGqN,gBAAgB,IAAI,MAAvB,EAA8B;AAC5BD,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,OAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,IAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACD;;AAED,QAAGH,gBAAgB,IAAI,OAAvB,EAA+B;AAC7BD,yBAAmB,CAACE,gBAApB,CAAqC,OAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,IAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACD;;AAED,QAAGH,gBAAgB,IAAI,MAAvB,EAA8B;AAC5BD,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,IAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,OAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACD;;AAED,QAAGH,gBAAgB,IAAI,MAAvB,EAA8B;AAC5BD,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,IAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,OAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACD;;AAED,QAAGH,gBAAgB,IAAI,IAAvB,EAA4B;AAC1BD,yBAAmB,CAACE,gBAApB,CAAqC,IAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,OAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACD;AAEF,GArED,MAqEO;AACL;AACAJ,uBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,uBAAmB,CAACE,gBAApB,CAAqC,OAArC;AACAF,uBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,uBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,uBAAmB,CAACE,gBAApB,CAAqC,IAArC;AACD;AACF;;AAED,SAASxJ,qBAAT,CAA+BF,iBAA/B,EAAiD;AAC/C,MAAI6J,WAAW,GAAGtO,OAAO,CAACI,OAAR,CAAgBC,uCAAhB,CAAwD,YAAxD,EAAsEJ,OAAtE,EAA+EL,SAA/E,CAAlB;AACA,MAAI2O,MAAM,GAAGrF,cAAc,CAAC,IAAD,CAA3B;;AAEA,MAAGoF,WAAH,EAAe;AACb;AAEA,QAAGA,WAAW,IAAI,eAAlB,EAAmC;AACjC;AACA7J,uBAAiB,CAAC0J,gBAAlB,CAAmCG,WAAnC;AACA7J,uBAAiB,CAAC0J,gBAAlB,CAAmC,eAAnC;;AACA,WAAI,IAAItL,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAG0L,MAAM,CAAC5L,MAA1B,EAAkCE,CAAC,EAAnC,EAAsC;AACpC,YAAG0L,MAAM,CAAC1L,CAAD,CAAN,CAAU8G,IAAV,MAAoB2E,WAAvB,EAAmC;AACjC7J,2BAAiB,CAAC0J,gBAAlB,CAAmCI,MAAM,CAAC1L,CAAD,CAAN,CAAU8G,IAAV,EAAnC;AACD;AACF;AAEF,KAVD,MAUO;AACL;AACAlF,uBAAiB,CAAC0J,gBAAlB,CAAmC,eAAnC;;AACA,WAAI,IAAItL,EAAC,GAAG,CAAZ,EAAeA,EAAC,GAAG0L,MAAM,CAAC5L,MAA1B,EAAkCE,EAAC,EAAnC,EAAsC;AACpC4B,yBAAiB,CAAC0J,gBAAlB,CAAmCI,MAAM,CAAC1L,EAAD,CAAN,CAAU8G,IAAV,EAAnC;AACD;AACF;AACF,GApBD,MAoBO;AACLlF,qBAAiB,CAAC0J,gBAAlB,CAAmC,eAAnC;;AACA,SAAI,IAAItL,GAAC,GAAG,CAAZ,EAAeA,GAAC,GAAG0L,MAAM,CAAC5L,MAA1B,EAAkCE,GAAC,EAAnC,EAAsC;AACpC4B,uBAAiB,CAAC0J,gBAAlB,CAAmCI,MAAM,CAAC1L,GAAD,CAAN,CAAU8G,IAAV,EAAnC;AACD;AACF;AACF;;AAED,SAAS5E,oBAAT,CAA8BD,cAA9B,EAA6C;AAC3C,MAAI0J,eAAe,GAAG7N,QAAQ,CAACE,aAAT,CAAuB,WAAvB,CAAtB;;AAGA,MAAG2N,eAAH,EAAmB;AACjB;AAEA,QAAGA,eAAe,IAAI,QAAtB,EAA+B;AAC7B1J,oBAAc,CAACqJ,gBAAf,CAAgC,QAAhC;AACArJ,oBAAc,CAACsJ,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACAvJ,oBAAc,CAACqJ,gBAAf,CAAgC,QAAhC;AACArJ,oBAAc,CAACsJ,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACAvJ,oBAAc,CAACqJ,gBAAf,CAAgC,UAAhC;AACArJ,oBAAc,CAACsJ,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACD;;AAED,QAAGG,eAAe,IAAI,QAAtB,EAA+B;AAC7B1J,oBAAc,CAACqJ,gBAAf,CAAgC,QAAhC;AACArJ,oBAAc,CAACsJ,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACAvJ,oBAAc,CAACqJ,gBAAf,CAAgC,UAAhC;AACArJ,oBAAc,CAACsJ,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACAvJ,oBAAc,CAACqJ,gBAAf,CAAgC,QAAhC;AACArJ,oBAAc,CAACsJ,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACD;;AAED,QAAGG,eAAe,IAAI,UAAtB,EAAiC;AAC/B1J,oBAAc,CAACqJ,gBAAf,CAAgC,UAAhC;AACArJ,oBAAc,CAACsJ,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACAvJ,oBAAc,CAACqJ,gBAAf,CAAgC,QAAhC;AACArJ,oBAAc,CAACsJ,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACAvJ,oBAAc,CAACqJ,gBAAf,CAAgC,QAAhC;AACArJ,oBAAc,CAACsJ,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACD;AACF,GA7BD,MA6BO;AACL;AACAvJ,kBAAc,CAACqJ,gBAAf,CAAgC,QAAhC;AACArJ,kBAAc,CAACqJ,gBAAf,CAAgC,QAAhC;AACArJ,kBAAc,CAACqJ,gBAAf,CAAgC,UAAhC;AACD;AAEF;;AAED,SAAS5K,wBAAT,CAAkCwK,WAAlC,EAA8C;AAC5C,MAAIU,cAAc,GAAG,EAArB;;AACA,MAAGtO,UAAH,EAAc;AACZ;AACA,QAAIqC,WAAW,GAAGxC,OAAO,CAACI,OAAR,CAAgBC,uCAAhB,CAAwD,kBAAxD,EAA4EJ,OAA5E,EAAqFL,SAArF,CAAlB;;AAEA,SAAK,IAAIiD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGL,WAAW,CAACG,MAAhC,EAAwCE,CAAC,EAAzC,EAA8C;AAC5C;AACA,UAAGA,CAAC,IAAIkL,WAAR,EAAoB;AAClBU,sBAAc,CAACvL,IAAf,CAAoBV,WAAW,CAACK,CAAD,CAA/B;AACD;AACF;AACF;;AACD,SAAO4L,cAAP;AACD;;AAED,SAAS7E,aAAT,CAAuB6D,KAAvB,EAA6B;AAAE;AAC7B,OAAI,IAAI5K,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAG4K,KAAK,CAAC/D,MAAN,GAAe/G,MAAlC,EAA0CE,CAAC,EAA3C,EAA8C,CAC5C;AACD;AACF;;AAED,SAASQ,UAAT,CAAoBsF,MAApB,EAA2B;AACzB,MAAM+F,UAAU,GAAG7O,QAAQ,CAACiD,cAAT,CAAwB6F,MAAxB,CAAnB;AACA,MAAIgG,aAAJ;;AACA,MAAGD,UAAH,EAAc;AACZC,iBAAa,GAAGD,UAAU,CAACrD,MAA3B;AACAqD,cAAU,CAACE,MAAX;;AACA,QAAGD,aAAa,CAACjF,MAAd,CAAqB/G,MAArB,IAA+B,CAAlC,EAAoC;AAClCgM,mBAAa,CAACC,MAAd;AACD;AACF;AACF;;AAED,SAASzF,aAAT,CAAuB0F,cAAvB,EAAuCC,aAAvC,EAAsD5M,SAAtD,EAAgE;AAC9D,MAAI6M,YAAY,GAAGlP,QAAQ,CAACiD,cAAT,CAAwB+L,cAAxB,CAAnB;AACA,MAAIG,WAAW,GAAGnP,QAAQ,CAACiD,cAAT,CAAwBgM,aAAxB,CAAlB;;AAEA,MAAGnO,QAAQ,CAACE,aAAT,CAAuB,cAAvB,KAA0CF,QAAQ,CAACE,aAAT,CAAuB,cAAvB,KAA0C,CAAvF,EAAyF;AACvF,QAAIoO,cAAc,GAAGtO,QAAQ,CAACE,aAAT,CAAuB,cAAvB,CAArB;;AAEA,QAAGqB,SAAS,IAAI,OAAhB,EAAwB;AACtB8M,iBAAW,CAAClF,KAAZ,CAAkBC,CAAlB,GAAsBgF,YAAY,CAACjF,KAAb,CAAmBC,CAAnB,GAAuBgF,YAAY,CAACjF,KAAb,CAAmBE,KAA1C,GAAkDiF,cAAxE;AACD;;AAED,QAAG/M,SAAS,IAAI,MAAhB,EAAuB;AACrB8M,iBAAW,CAAClF,KAAZ,CAAkBI,CAAlB,GAAsB6E,YAAY,CAACjF,KAAb,CAAmBI,CAAnB,GAAuB6E,YAAY,CAACjF,KAAb,CAAmBK,MAA1C,GAAmD8E,cAAzE;AACD;;AAED,QAAG/M,SAAS,IAAI,MAAhB,EAAuB;AACrB8M,iBAAW,CAAClF,KAAZ,CAAkBC,CAAlB,GAAsBgF,YAAY,CAACjF,KAAb,CAAmBC,CAAnB,GAAuBiF,WAAW,CAAClF,KAAZ,CAAkBE,KAAzC,GAAiDiF,cAAvE;AACD;;AAED,QAAG/M,SAAS,IAAI,IAAhB,EAAqB;AACnB8M,iBAAW,CAAClF,KAAZ,CAAkBI,CAAlB,GAAsB6E,YAAY,CAACjF,KAAb,CAAmBI,CAAnB,GAAuB8E,WAAW,CAAClF,KAAZ,CAAkBK,MAAzC,GAAkD8E,cAAxE;AACD;AACF;AACF;;AAED,SAAS7F,cAAT,CAAwByF,cAAxB,EAAwCC,aAAxC,EAAuD5M,SAAvD,EAAiE;AAC/D,MAAI6M,YAAY,GAAGlP,QAAQ,CAACiD,cAAT,CAAwB+L,cAAxB,CAAnB;AACA,MAAIG,WAAW,GAAGnP,QAAQ,CAACiD,cAAT,CAAwBgM,aAAxB,CAAlB;AACA,MAAII,UAAJ,EAAgBC,SAAhB,EAA2BC,UAA3B,EAAuCC,SAAvC,EAAkDC,IAAlD;;AAEA,MAAG3O,QAAQ,CAACE,aAAT,CAAuB,WAAvB,CAAH,EAAuC;AACrC,QAAGF,QAAQ,CAACE,aAAT,CAAuB,WAAvB,KAAuC,IAA1C,EAA+C;AAC7C;AAEA,UAAGqB,SAAS,IAAI,OAAb,IAAwBA,SAAS,IAAI,MAAxC,EAA+C;AAC7CgN,kBAAU,GAAGH,YAAY,CAACjF,KAAb,CAAmBI,CAAnB,GAAuB6E,YAAY,CAACjF,KAAb,CAAmBK,MAAnB,GAA0B,CAA9D;AACAgF,iBAAS,GAAGH,WAAW,CAAClF,KAAZ,CAAkBI,CAAlB,GAAsB8E,WAAW,CAAClF,KAAZ,CAAkBK,MAAlB,GAAyB,CAA3D;AACAmF,YAAI,GAAGJ,UAAU,GAAGC,SAApB;;AACA,YAAGG,IAAI,GAAG,CAAC,CAAR,IAAaA,IAAI,GAAG,CAAvB,EAAyB;AAACN,qBAAW,CAAClF,KAAZ,CAAkBI,CAAlB,GAAsB8E,WAAW,CAAClF,KAAZ,CAAkBI,CAAlB,GAAsBoF,IAA5C;AAAiD;AAC5E;;AAED,UAAGpN,SAAS,IAAI,MAAb,IAAuBA,SAAS,IAAI,IAAvC,EAA4C;AAC1CkN,kBAAU,GAAGL,YAAY,CAACjF,KAAb,CAAmBC,CAAnB,GAAuBgF,YAAY,CAACjF,KAAb,CAAmBE,KAAnB,GAAyB,CAA7D;AACAqF,iBAAS,GAAGL,WAAW,CAAClF,KAAZ,CAAkBC,CAAlB,GAAsBiF,WAAW,CAAClF,KAAZ,CAAkBE,KAAlB,GAAwB,CAA1D;AACAsF,YAAI,GAAGF,UAAU,GAAGC,SAApB;;AACA,YAAGC,IAAI,GAAG,CAAC,CAAR,IAAaA,IAAI,GAAG,CAAvB,EAAyB;AAACN,qBAAW,CAAClF,KAAZ,CAAkBC,CAAlB,GAAsBiF,WAAW,CAAClF,KAAZ,CAAkBC,CAAlB,GAAsBuF,IAA5C;AAAiD;AAC5E;AACF;AACF;AACF;;AAED,SAASC,kBAAT,CAA4B9G,aAA5B,EAA2CC,cAA3C,EAA2DxG,SAA3D,EAAqE;AACnE,MAAIJ,WAAW,GAAGjC,QAAQ,CAACiD,cAAT,CAAwB2F,aAAxB,CAAlB;AACA,MAAI1G,YAAY,GAAGlC,QAAQ,CAACiD,cAAT,CAAwB4F,cAAxB,CAAnB;AACA,MAAImG,cAAJ;;AAEA,MAAG3M,SAAS,IAAI,MAAhB,EAAuB;AACrB2M,kBAAc,GAAG/M,WAAW,CAAC0N,EAA7B;AACD;;AAED,MAAGtN,SAAS,IAAI,OAAhB,EAAwB;AACtB,QAAGJ,WAAW,CAACgI,KAAZ,CAAkBC,CAAlB,IAAuBhI,YAAY,CAAC+H,KAAb,CAAmBC,CAA7C,EAA+C;AAC7C8E,oBAAc,GAAG/M,WAAW,CAAC0N,EAA7B;AACD,KAFD,MAEO;AACLX,oBAAc,GAAG9M,YAAY,CAACyN,EAA9B;AACD;AACF;;AAED,MAAGtN,SAAS,IAAI,MAAhB,EAAuB;AACrB,QAAGJ,WAAW,CAACgI,KAAZ,CAAkBI,CAAlB,IAAuBnI,YAAY,CAAC+H,KAAb,CAAmBI,CAA7C,EAA+C;AAC7C2E,oBAAc,GAAG/M,WAAW,CAAC0N,EAA7B;AACD,KAFD,MAEO;AACLX,oBAAc,GAAG9M,YAAY,CAACyN,EAA9B;AACD;AACF;;AAED,MAAGtN,SAAS,IAAI,MAAhB,EAAuB;AACrB,QAAGJ,WAAW,CAACgI,KAAZ,CAAkBC,CAAlB,IAAuBhI,YAAY,CAAC+H,KAAb,CAAmBC,CAA7C,EAA+C;AAC7C8E,oBAAc,GAAG9M,YAAY,CAACyN,EAA9B;AACD,KAFD,MAEO;AACLX,oBAAc,GAAG/M,WAAW,CAAC0N,EAA7B;AACD;AACF;;AAED,MAAGtN,SAAS,IAAI,IAAhB,EAAqB;AACnB,QAAGJ,WAAW,CAACgI,KAAZ,CAAkBI,CAAlB,IAAuBnI,YAAY,CAAC+H,KAAb,CAAmBI,CAA7C,EAA+C;AAC7C2E,oBAAc,GAAG9M,YAAY,CAACyN,EAA9B;AACD,KAFD,MAEO;AACLX,oBAAc,GAAG/M,WAAW,CAAC0N,EAA7B;AACD;AACF;;AAED,SAAOX,cAAP;AACD;;AAED,SAASY,4BAAT,CAAsCnO,SAAtC,EAAiDY,SAAjD,EAA2D;AACzD,MAAI2M,cAAc,GAAGvN,SAAS,CAACQ,WAAV,GAAwBJ,QAAxB,EAArB;;AAEA,MAAGQ,SAAS,IAAI,MAAhB,EAAuB;AACrB,SAAI,IAAIT,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGH,SAAS,CAACC,KAAV,EAAnB,EAAsCE,CAAC,EAAvC,EAA2C;AACzCoN,oBAAc,GAAGU,kBAAkB,CAACV,cAAD,EAAiBvN,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,EAAjB,EAA0CQ,SAA1C,CAAnC;AACD;AACF,GAJD,MAIO;AACL2M,kBAAc,GAAGU,kBAAkB,CAACV,cAAD,EAAiBvN,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAAjB,EAA0CQ,SAA1C,CAAnC;AACD;;AAED,SAAO2M,cAAP;AACD;;AAED,SAASa,iBAAT,CAA2BhM,KAA3B,EAAkCrB,OAAlC,EAA2C;AACvC;AACAqB,OAAK,CAACiM,cAAN,CAAqB,kDAAgDtN,OAArE,EAFuC,CAIvC;;AACAqB,OAAK,CAACkM,kBAAN,CAAyB,eAAzB;AACAlM,OAAK,CAACkM,kBAAN,CAAyB,QAAzB,EANuC,CAQvC;;AACA,MAAM/L,SAAS,GAAG,GAAlB;AACA,MAAMC,UAAU,GAAG,EAAnB;AAEA,MAAIE,IAAI,GAAGC,MAAM,CAACC,KAAP,GAAeC,aAAf,CAA6BC,UAAU,CAAC,CAAD,EAAI,CAAJ,EAAOP,SAAP,EAAkBC,UAAlB,CAAvC,CAAX;AACAJ,OAAK,CAACW,gBAAN,CAAuBL,IAAvB,EAbuC,CAevC;;AACA,MAAI6L,SAAS,GAAGzK,WAAW,CAAClB,KAAZ,GAAoBC,aAApB,CAAkCC,UAAU,CAAC,CAAC,CAAF,EAAKN,UAAU,GAAG,EAAlB,EAAsB,GAAtB,EAA2B,EAA3B,CAA5C,CAAhB;AAEA+L,WAAS,CAACpK,cAAV,CAAyB,qFAAzB;AACAoK,WAAS,CAACC,aAAV,CAAwB,KAAxB;AACAD,WAAS,CAACE,kBAAV,CAA6B,KAA7B;AACAF,WAAS,CAACG,UAAV,CAAqB,KAArB;AAEAhM,MAAI,CAACQ,UAAL,CAAgBqL,SAAhB;AAEA,SAAOnM,KAAP;AACH;;AAED,SAASK,UAAT,CAAoBL,KAApB,EAA2BG,SAA3B,EAAsCC,UAAtC,EAAiD;AAC/C;AACAJ,OAAK,CAACiM,cAAN,CAAqB,uBAArB,EAF+C,CAI/C;;AACAjM,OAAK,CAACkM,kBAAN,CAAyB,iBAAzB;AACAlM,OAAK,CAACkM,kBAAN,CAAyB,QAAzB;AAEA,SAAOlM,KAAP;AACD;;AAED,SAASa,UAAT,CAAoBlC,OAApB,EAA6B+E,KAA7B,EAAoC2C,CAApC,EAAuCG,CAAvC,EAA0CF,KAA1C,EAAiDG,MAAjD,EAAwD;AACtD,MAAI0F,SAAS,GAAGzK,WAAW,CAAClB,KAAZ,GAAoBC,aAApB,CAAkCC,UAAU,CAAC2F,CAAD,EAAIG,CAAJ,EAAOF,KAAP,EAAcG,MAAd,CAA5C,CAAhB;AAEA0F,WAAS,CAACpK,cAAV,CAAyBpD,OAAzB;AACAwN,WAAS,CAACC,aAAV,CAAwB,KAAxB;AACAD,WAAS,CAACE,kBAAV,CAA6B,KAA7B;AACAF,WAAS,CAACG,UAAV,CAAqB,KAArB;;AAEA,MAAG5I,KAAK,IAAI,KAAZ,EAAkB;AAChByI,aAAS,CAACI,SAAV,GAAsBC,OAAO,CAACC,wBAAR,EAAtB;AACD;;AAED,SAAON,SAAP;AACD;;AAED,SAASpJ,aAAT,CAAuBpE,OAAvB,EAAgC+E,KAAhC,EAAuC2C,CAAvC,EAA0CG,CAA1C,EAA6CF,KAA7C,EAAoDG,MAApD,EAA2D;AACzD,MAAI3D,QAAQ,GAAG4J,QAAQ,CAAClM,KAAT,GAAiBC,aAAjB,CAA+BC,UAAU,CAAC2F,CAAD,EAAIG,CAAJ,EAAOF,KAAP,EAAcG,MAAd,CAAzC,CAAf;AAEA3D,UAAQ,CAAC6J,aAAT,CAAuBC,cAAvB;AACA9J,UAAQ,CAAC+J,aAAT,CAAuB,CAAvB;AACA/J,UAAQ,CAACgK,QAAT,CAAkBnO,OAAlB;;AACA,MAAG1B,QAAQ,CAACE,aAAT,CAAuB,WAAvB,CAAH,EAAuC;AACrC,QAAI4P,YAAY,GAAG9P,QAAQ,CAACE,aAAT,CAAuB,WAAvB,CAAnB;AACA2F,YAAQ,CAAC6H,QAAT,CAAkBoC,YAAlB;AACD,GAHD,MAGO;AACLjK,YAAQ,CAAC6H,QAAT,CAAkBjH,KAAlB;AACD;;AAED,SAAOZ,QAAP;AACD;;AAED,SAAS0C,cAAT,CAAwBS,IAAxB,EAA8B;AAC5B,MAAI+G,SAAS,GAAGzQ,OAAO,CAAC0Q,cAAR,EAAhB;AACA,MAAIC,OAAO,GAAG,QAAd;AACA,MAAIrC,MAAM,GAAG,EAAb;;AACA,MAAG5E,IAAI,IAAI,IAAX,EAAiB;AACf,SAAI,IAAI9G,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAG6N,SAAS,CAACnP,KAAV,EAAnB,EAAsCsB,CAAC,EAAvC,EAA0C;AACxC,UAAG6N,SAAS,CAAC7N,CAAD,CAAT,CAAa8G,IAAb,GAAoBkH,QAApB,CAA6BD,OAA7B,CAAH,EAAyC;AACvCrC,cAAM,CAACrL,IAAP,CAAYwN,SAAS,CAAC7N,CAAD,CAArB;AACD;AACF;AACF,GAND,MAMO;AACL;AACA,SAAI,IAAIA,GAAC,GAAG,CAAZ,EAAeA,GAAC,GAAG6N,SAAS,CAACnP,KAAV,EAAnB,EAAsCsB,GAAC,EAAvC,EAA0C;AACxC,UAAG6N,SAAS,CAAC7N,GAAD,CAAT,CAAa8G,IAAb,MAAuBA,IAA1B,EAA+B;AAC7B4E,cAAM,CAACrL,IAAP,CAAYwN,SAAS,CAAC7N,GAAD,CAArB;AACD;AACF;AACF;;AACF,SAAO0L,MAAP;AACA;;AAED,SAASxN,KAAT,CAAef,OAAf,EAAwBkC,SAAxB,EAAkC;AAChC,MAAIZ,SAAS,GAAGtB,OAAO,CAACsB,SAAxB;AACA,MAAIwH,cAAJ;;AACA,MAAG5G,SAAS,IAAI,IAAhB,EAAqB;AAAC4G,kBAAc,GAAGlI,qBAAjB;AAAuC,GAA7D,MAAmE;AAACkI,kBAAc,GAAG5G,SAAjB;AAA2B;;AAE/F,MAAGZ,SAAS,CAACC,KAAV,KAAoB,CAAvB,EAAyB;AACvB;AACA,QAAIsN,cAAc,GAAGY,4BAA4B,CAACnO,SAAD,EAAYY,SAAZ,CAAjD;AACA,QAAIV,sBAAsB,GAAGf,kBAA7B;;AAEA,SAAI,IAAIgB,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGH,SAAS,CAACC,KAAV,EAAnB,EAAsCE,CAAC,EAAvC,EAA2C;AACzC,UAAGH,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,MAA2BmN,cAA9B,EAA6C;AAC3C;AACA,YAAIlN,eAAe,GAAGC,kBAAkB,CAACiN,cAAD,EAAiBvN,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,EAAjB,EAA0CF,sBAA1C,CAAxC;;AACA,YAAGG,eAAe,IAAI,IAAtB,EAA2B;AACzB;AACAE,qBAAW,CAACgN,cAAD,EAAiBvN,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,EAAjB,EAA0C,IAA1C,EAAgD,IAAhD,EAAsDoH,cAAtD,EAAsEtH,sBAAsB,CAACG,eAAD,CAAtB,CAAwCQ,IAA9G,EAAoHX,sBAAsB,CAACG,eAAD,CAAtB,CAAwCS,SAA5J,EAAuKT,eAAvK,CAAX;AACA7B,uDAAM,CAACL,EAAP,CAAU4C,OAAV,CAAkB,kCAAlB;AACD,SAJD,MAIO;AACL;AACAwG,qBAAW,CAACgG,cAAD,EAAiBvN,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,EAAjB,EAA0C,IAA1C,EAAgD,IAAhD,EAAsDoH,cAAtD,EAAsE,IAAtE,CAAX;AACAhJ,uDAAM,CAACL,EAAP,CAAU4C,OAAV,CAAkB,8BAAlB;AACD;AACF;AACF;;AACDrC,WAAO,CAACI,OAAR,CAAgBkC,2CAAhB,CAA4D7B,kBAA5D,EAAgF,kBAAhF,EAAoGR,OAApG,EAA6GL,SAA7G;AACD,GArBD,MAqBO;AACL;AACAE,iDAAM,CAACL,EAAP,CAAU4C,OAAV,CAAkB,oCAAlB;AACD;AACF,C,CAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;;AAEA,IAAIyO,aAAJ;AAEA,IAAIC,SAAS,GAAGjR,6CAAM,CAACkR,YAAP,EAAhB,C,CAEA;;AAEA,IAAIC,gBAAgB,GAAGF,SAAS,CAAC,CAAD,CAAT,CAAaG,wCAAb,CAAsDrR,QAAtD,CAAvB;AAEAsR,GAAG,CAACF,gBAAD,CAAH;AACA,IAAIG,YAAY,GAAGH,gBAAgB,CAAC,CAAD,CAAhB,CAAoBI,MAApB,EAAnB,C,CAEA;;AAEA,IAAIC,QAAQ,GAAGF,YAAY,CAACG,iBAAb,EAAf;AACAC,OAAO,CAACL,GAAR,CAAYG,QAAZ;AAGAA,QAAQ,CAACjG,MAAT,GAAkB/K,kBAAlB,C,CAEA;AAEA;;AAEA6Q,GAAG,CAACC,YAAD,CAAH,C,CAEA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAIA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA,I;;;;;;;;;;;ACl+CA,mC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,4C;;;;;;;;;;;ACAA,sC","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch'\n// const { toArray } = require('util')\n\n//\n// Variables\n//\n\nlet UI = require('sketch/ui') \nvar SharedStyle = require('sketch/dom').SharedStyle\n\nconst pluginKey = \"flowArrows\"\nconst document = sketch.fromNative(context.document)\nlet docData = context.document.documentData()\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey) // TODO: Need to refactor\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards\nlet newConnectionsData = getConnectionsData()\n\n// Settings\nvar Settings = require('sketch/settings')\nlet arrowDirectionSetting\n\nif(Settings.settingForKey(\"arrowDirection\")) {\n arrowDirectionSetting = Settings.settingForKey('arrowDirection')\n} else {\n arrowDirectionSetting = \"Auto\"\n}\n \n//\n// Create Connection Function\n//\n\nexport default function(context) {}\nexport function createDefaultArrow(context){start(context, null)}\nexport function createAutoArrow(context){start(context, \"Auto\")}\nexport function createRightArrow(context){start(context, \"Right\")}\nexport function createDownArrow(context){start(context, \"Down\")}\nexport function createLeftArrow(context){start(context, \"Left\")}\nexport function createUpArrow(context){start(context, \"Up\")}\n\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n\n let selection = context.selection\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n // let sourceObjectID = getSourceObjectFromSelection(selection)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, connectionIndex) {\n // There might be a situation, when user deleted current group or current group stays on another artboard => In that case need to create another group\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n\n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID) {\n // Process of creating new connection \n let localDirection, localStyle, localType\n if(direction == \"Auto\"){\n // If direction is auto, we need to specify direction ourselves\n localDirection = getDirection(firstObjectID, secondObjectID)\n } else {\n localDirection = direction\n }\n\n if(type == null){\n localType = Settings.settingForKey(\"arrowType\") \n } else {\n localType = type\n }\n \n // log(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey))\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey))\n \n if(style != null){\n // if we updating connection with previously created objects\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n localStyle = style\n } else {\n localStyle = \"Default Style\"\n }\n } else {\n // We don't have any data from the plugin data\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)){\n localStyle = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)\n } else {\n localStyle = \"Default Style\"\n }\n \n }\n \n \n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n let currentGroup = checkForArrowGroup()\n let line = drawLine(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentGroup)\n addToArrowsGroup(line, currentGroup)\n\n\n // if(localStyle != \"Default Style\"){\n // localStyle = localStyle[0].name()\n // }\n\n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : localStyle,\n condition : conditionID,\n type : localType,\n direction: localDirection,\n line : line.objectID()\n }\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForArrowGroup() {\n let currentGroup = null\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == \"Arrows\") {\n // If we already have \"Arrow\" group we need to save it's folder\n currentGroup = currentParentGroup.layers()[i]\n refactorLines(currentGroup)\n } \n }\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n if(diffX > diffY) {\n direction = \"Down\"\n } else {\n direction = \"Right\"\n }\n } else {\n // Top quarter\n if(absDiffX > absDiffY) {\n direction = \"Right\"\n } else {\n direction = \"Up\"\n }\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n if(absDiffX > absDiffY) {\n direction = \"Left\"\n } else {\n direction = \"Down\"\n }\n } else {\n // Top quarter\n if(diffX > diffY) {\n direction = \"Left\"\n } else {\n direction = \"Up\"\n }\n }\n }\n return direction\n}\n\nfunction drawLine(firstObjectID, secondObjectID, style, type, direction, currentGroup){\n let firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, middlePosX, middlePosY, diffX, diffY, line\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n\n if(currentGroup){\n //if we already have a group, need to specify the difference\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n // Drawing a line\n let path = NSBezierPath.bezierPath()\n\n if(type == \"Angled\" || type == null){\n // Based on direction, we need to specify connection points\n \n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n \n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n //TODO: Provide a separate file with all the stylings\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n\n\n // Making middle points rounded\n let points = line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n\n // Providing Settings for the arrow\n line.setName(\"Arrow\")\n }\n\n if(type == \"Straight\"){\n // Based on direction, we need to specify connection points\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n \n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n \n // Providing Settings for the arrow\n line.setName(\"Arrow\")\n }\n\n if(type == \"Curved\"){\n // Based on direction, we need to specify connection points\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Auto\"){\n sourceObjectID = firstObject.id\n }\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n } else {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[0].objectID(), direction)\n }\n \n return sourceObjectID\n}\n\nfunction confirmationAlert(alert, message) {\n // Title\n alert.setMessageText(\"Would you like to delete all the arrows from \"+message)\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Delete Arrows\")\n alert.addButtonWithTitle(\"Cancel\")\n \n // Creating the view\n const viewWidth = 300\n const viewHeight = 40\n \n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n \n // Label\n var infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(-1, viewHeight - 40, 330, 40))\n \n infoLabel.setStringValue(\"ℹ️ You can select layers, artboards to delete all the arrows from selected one only\")\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n \n view.addSubview(infoLabel)\n\n return alert\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) {\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n if(name == null) {\n for(let i = 0; i < allStyles.count(); i++){\n if(allStyles[i].name().includes(keyword)){\n styles.push(allStyles[i]);\n }\n }\n } else {\n // Searching only for name\n for(let i = 0; i < allStyles.count(); i++){\n if(allStyles[i].name() == name){\n styles.push(allStyles[i]);\n }\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction){\n let selection = context.selection\n let localDirection\n if(direction == null){localDirection = arrowDirectionSetting} else {localDirection = direction}\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n if(connectionIndex != null){\n // Because this is creating flow, we need to take the direction from user settings\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, null)\n sketch.UI.message(\"New connection is created 🚀\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\n// {\n// \"script\": \"./script.js\",\n// \"name\" : \"onLayersMoved\",\n// \"handlers\" : {\n// \"actions\": {\n// \"LayersMoved.finish\": \"onLayersMoved\"\n// }\n// },\n// \"identifier\" : \"onLayersMoved\"\n// }\n\n// let sketch = require('sketch')\n// let libraries = sortJSON(sketch.getLibraries(),'name')\n// log(sketch.getLibraries())\n\nlet outputSymbols\n\nlet libraries = sketch.getLibraries()\n\n// var SymbolMaster = require('sketch/dom').SymbolMaster\n\nvar symbolReferences = libraries[0].getImportableSymbolReferencesForDocument(document)\n\nlog(symbolReferences)\nvar symbolMaster = symbolReferences[0].import()\n\n// console.log(symbolMaster)\n\nvar instance = symbolMaster.createNewInstance()\nconsole.log(instance)\n\n\ninstance.parent = currentParentGroup\n\n// currentParentGroup.addLayers(instance)\n\n// var sharedStyle = sharedStyleReference.import()\n\nlog(symbolMaster)\n\n// for(let g = 0; g < libraries.length; g++) {\n// if(libraries[g].id ==\"A322B40D-E464-42EB-9AEA-28AAD0C7F33D\"){\n// // We have the library\n\n// let selectedLibraryPath = NSURL.fileURLWithPath(libraries[g].sketchObject.locationOnDisk().path())\n\n// log(selectedLibraryPath)\n\n// sketch.Document.open(selectedLibraryPath,(err,library) => {\n// if (err) {\n// sketch.UI.alert(pluginName,'Unable to open the selected library file.');\n// }\n\n// if (library) {\n// var librarySource = library;\n\n// library.close();\n\n// // let libraryPages = [library.pages[1]]\n// var page = document.selectedPage\n// librarySource.pages.forEach(function(page){\n// // if (page.id == libraryPages[symbolScopeSelect.indexOfSelectedItem() - 1]) {\n// outputSymbols = page.sketchObject.symbols()\n// log(page)\n\n// // }\n// });\n \n// }\n// });\n\n\n\n// }\n// }\n\n\n// outputSymbols.forEach(function(symbol){\n// log('wdedwed')\n// var symbolMaster = (librarySelectValue == 0) ? symbol : importForeignSymbol(symbol,selectedLibrary.sketchObject).symbolMaster(),\n// symbolInstance = symbolMaster.newSymbolInstance();\n\n// symbolInstance.frame().setX(symbolMaster.frame().x());\n// symbolInstance.frame().setY(symbolMaster.frame().y());\n\n// outputPage.sketchObject.insertLayer_atIndex(symbolInstance,nil);\n// });\n\n// function importForeignSymbol(symbol,library) {\n// \tvar objectReference = MSShareableObjectReference.referenceForShareableObject_inLibrary(symbol,library);\n\n// \treturn AppController.sharedInstance().librariesController().importShareableObjectReference_intoDocument(objectReference,data);\n// }\n\n","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","SharedStyle","pluginKey","document","sketch","fromNative","context","docData","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","currentParentGroup","currentPage","currentArtboard","newConnectionsData","getConnectionsData","Settings","arrowDirectionSetting","settingForKey","createDefaultArrow","start","createAutoArrow","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","updateSelectedArrows","selection","count","currentConnectionsData","g","objectID","connectionIndex","findConnectionData","updateArrow","firstObject","secondObject","style","type","direction","line","condition","message","setValue_forKey_onLayer_forPluginIdentifier","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","length","updateArrowsCounter","i","getLayerWithID","sketchObject","parentArtboard","class","push","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","views","subviews","title","setSettingForKey","intValue","state","onLayersMoved","action","actionContext","panel","ControlBar","NSPanel","setStyleMask","NSTitledWindowMask","NSFullSizeContentViewWindowMask","setTitleVisibility","NSWindowTitleHidden","setTitlebarAppearsTransparent","setFrame_display","setMovableByWindowBackground","setHasShadow","setLevel","NSFloatingWindowLevel","center","makeKeyAndOrderFront","nil","firstObjectID","secondObjectID","lineID","conditionID","createArrow","localDirection","localStyle","localType","getDirection","getLayerStyles","updateSpacing","autoAlignLayer","currentGroup","checkForArrowGroup","drawLine","addToArrowsGroup","connection","layers","name","refactorLines","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","firstLayerPosX","firstLayerPosY","secondLayerPosX","secondLayerPosY","middlePosX","middlePosY","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","sharedStyle","ownStyle","addLayers","fixGeometryWithOptions","Group","group","locked","moveToBack","dataArray","pluginDataConnections","data","arrayNumber","setActiveDirectionSetting","arrowDirectionField","currentDirection","addItemWithTitle","lastItem","setState","docSettings","styles","docTypeSettings","newConnections","lineObject","selectedGroup","remove","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","defineSourceObject","id","getSourceObjectFromSelection","confirmationAlert","setMessageText","addButtonWithTitle","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","allStyles","allLayerStyles","keyword","includes","libraryConditionID","getConditionID","libraries","getLibraries","symbolReferences","getImportableSymbolReferencesForDocument"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch'\n// const { toArray } = require('util')\n\n//\n// Variables\n//\n\nlet UI = require('sketch/ui') \nvar SharedStyle = require('sketch/dom').SharedStyle\n\nconst pluginKey = \"flowArrows\"\nconst document = sketch.fromNative(context.document)\nlet docData = context.document.documentData()\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey) // TODO: Need to refactor\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards\nlet newConnectionsData = getConnectionsData()\n\n// Settings\nvar Settings = require('sketch/settings')\nlet arrowDirectionSetting\n\nif(Settings.settingForKey(\"arrowDirection\")) {\n arrowDirectionSetting = Settings.settingForKey('arrowDirection')\n} else {\n arrowDirectionSetting = \"Auto\"\n}\n \n//\n// Create Connection Function\n//\n\nexport default function(context) {}\nexport function createDefaultArrow(context){start(context, null)}\nexport function createAutoArrow(context){start(context, \"Auto\")}\nexport function createRightArrow(context){start(context, \"Right\", false)}\nexport function createDownArrow(context){start(context, \"Down\", false)}\nexport function createLeftArrow(context){start(context, \"Left\", false)}\nexport function createUpArrow(context){start(context, \"Up\", false)}\n\nexport function createRightArrowWithCondition(context){start(context, \"Right\", true)}\nexport function createDownArrowWithCondition(context){start(context, \"Down\", true)}\nexport function createLeftArrowWithCondition(context){start(context, \"Left\", true)}\nexport function createUpArrowWithCondition(context){start(context, \"Up\", true)}\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n\n let selection = context.selection\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n // let sourceObjectID = getSourceObjectFromSelection(selection)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, connectionIndex) {\n // There might be a situation, when user deleted current group or current group stays on another artboard => In that case need to create another group\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID) {\n // Process of creating new connection \n let localDirection, localStyle, localType\n if(direction == \"Auto\"){\n // If direction is auto, we need to specify direction ourselves\n localDirection = getDirection(firstObjectID, secondObjectID)\n } else {\n localDirection = direction\n }\n\n if(type == null){\n localType = Settings.settingForKey(\"arrowType\") \n } else {\n localType = type\n }\n \n // log(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey))\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey))\n \n if(style != null){\n // if we updating connection with previously created objects\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n localStyle = style\n } else {\n localStyle = \"Default Style\"\n }\n } else {\n // We don't have any data from the plugin data\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)){\n localStyle = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)\n } else {\n localStyle = \"Default Style\"\n }\n \n }\n \n \n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n let currentGroup = checkForArrowGroup()\n let line = drawLine(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentGroup)\n addToArrowsGroup(line, currentGroup)\n\n\n // if(localStyle != \"Default Style\"){\n // localStyle = localStyle[0].name()\n // }\n\n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : localStyle,\n condition : conditionID,\n type : localType,\n direction: localDirection,\n line : line.objectID()\n }\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForArrowGroup() {\n let currentGroup = null\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == \"Arrows\") {\n // If we already have \"Arrow\" group we need to save it's folder\n currentGroup = currentParentGroup.layers()[i]\n refactorLines(currentGroup)\n } \n }\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n if(diffX > diffY) {\n direction = \"Down\"\n } else {\n direction = \"Right\"\n }\n } else {\n // Top quarter\n if(absDiffX > absDiffY) {\n direction = \"Right\"\n } else {\n direction = \"Up\"\n }\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n if(absDiffX > absDiffY) {\n direction = \"Left\"\n } else {\n direction = \"Down\"\n }\n } else {\n // Top quarter\n if(diffX > diffY) {\n direction = \"Left\"\n } else {\n direction = \"Up\"\n }\n }\n }\n return direction\n}\n\nfunction drawLine(firstObjectID, secondObjectID, style, type, direction, currentGroup){\n let firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, middlePosX, middlePosY, diffX, diffY, line\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n\n if(currentGroup){\n //if we already have a group, need to specify the difference\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n // Drawing a line\n let path = NSBezierPath.bezierPath()\n\n if(type == \"Angled\" || type == null){\n // Based on direction, we need to specify connection points\n \n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n \n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n //TODO: Provide a separate file with all the stylings\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n\n\n // Making middle points rounded\n let points = line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n\n // Providing Settings for the arrow\n line.setName(\"Arrow\")\n }\n\n if(type == \"Straight\"){\n // Based on direction, we need to specify connection points\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n \n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n \n // Providing Settings for the arrow\n line.setName(\"Arrow\")\n }\n\n if(type == \"Curved\"){\n // Based on direction, we need to specify connection points\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Auto\"){\n sourceObjectID = firstObject.id\n }\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n } else {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[0].objectID(), direction)\n }\n \n return sourceObjectID\n}\n\nfunction confirmationAlert(alert, message) {\n // Title\n alert.setMessageText(\"Would you like to delete all the arrows from \"+message)\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Delete Arrows\")\n alert.addButtonWithTitle(\"Cancel\")\n \n // Creating the view\n const viewWidth = 300\n const viewHeight = 40\n \n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n \n // Label\n var infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(-1, viewHeight - 40, 330, 40))\n \n infoLabel.setStringValue(\"ℹ️ You can select layers, artboards to delete all the arrows from selected one only\")\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n \n view.addSubview(infoLabel)\n\n return alert\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) {\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n if(name == null) {\n for(let i = 0; i < allStyles.count(); i++){\n if(allStyles[i].name().includes(keyword)){\n styles.push(allStyles[i]);\n }\n }\n } else {\n // Searching only for name\n for(let i = 0; i < allStyles.count(); i++){\n if(allStyles[i].name() == name){\n styles.push(allStyles[i]);\n }\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, condition){\n let selection = context.selection\n let localDirection\n if(direction == null){localDirection = arrowDirectionSetting} else {localDirection = direction}\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n if(connectionIndex != null){\n // Because this is creating flow, we need to take the direction from user settings\n if(condition == true){\n let libraryConditionID = getConditionID(\"Answer YES\")\n // Need to remake the arrow condition\n if(currentConnectionsData[connectionIndex].condition){\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, libraryConditionID, connectionIndex)\n } else {\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n }\n } else {\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n }\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n // There is no connection with this two objects in our database\n if(condition == true){\n let libraryConditionID = getConditionID(\"Answer YES\")\n createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, libraryConditionID)\n } else {\n createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, null)\n }\n sketch.UI.message(\"New connection is created 🚀\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\n// {\n// \"script\": \"./script.js\",\n// \"name\" : \"onLayersMoved\",\n// \"handlers\" : {\n// \"actions\": {\n// \"LayersMoved.finish\": \"onLayersMoved\"\n// }\n// },\n// \"identifier\" : \"onLayersMoved\"\n// }\n\nfunction getConditionID(keyword){\n let libraries = sketch.getLibraries()\n let conditionID, symbolReferences\n // let keyword = \"#condition\"\n\n // log(libraries.length)\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionID = symbolReferences[i].id \n }\n }\n }\n\n if(conditionID == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n }\n\n // symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n // log(symbolReferences)\n // var symbolMaster = symbolReferences[0].import()\n\n\n // var instance = symbolMaster.createNewInstance()\n // console.log(instance)\n\n\n // instance.parent = currentParentGroup\n // log(symbolMaster)\n\n return conditionID\n}\n\n\n\n\n\n","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/src/manifest.json b/src/manifest.json index d8fbbce..70d3024 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -57,6 +57,42 @@ "script": "./script.js", "handler": "createUpArrow" }, + { + "name": "Arrow to the Right with Condition", + "description": "Select more than one layer, to create a link between first object and others", + "identifier": "createRightArrowWithCondition", + "icon": "icon.png", + "shortcut": "command control shift →", + "script": "./script.js", + "handler": "createRightArrowWithCondition" + }, + { + "name": "Arrow to the Bottom with Condition", + "description": "Select more than one layer, to create a link between first object and others", + "identifier": "createDownArrowWithCondition", + "icon": "icon.png", + "shortcut": "command control shift ↓", + "script": "./script.js", + "handler": "createDownArrowWithCondition" + }, + { + "name": "Arrow to the Left with Condition", + "description": "Select more than one layer, to create a link between first object and others", + "identifier": "createLeftArrowWithCondition", + "icon": "icon.png", + "shortcut": "command control shift ←", + "script": "./script.js", + "handler": "createLeftArrowWithCondition" + }, + { + "name": "Arrow to the Top with Condition", + "description": "Select more than one layer, to create a link between first object and others", + "identifier": "createUpArrowWithCondition", + "icon": "icon.png", + "shortcut": "command control shift ↑", + "script": "./script.js", + "handler": "createUpArrowWithCondition" + }, { "name": "Update arrows between selected", "description": "Update connection between selected layers", @@ -153,7 +189,12 @@ "createRightArrow", "createDownArrow", "createLeftArrow", - "createUpArrow" + "createUpArrow", + "-", + "createRightArrowWithCondition", + "createDownArrowWithCondition", + "createLeftArrowWithCondition", + "createUpArrowWithCondition" ] }, { diff --git a/src/script.js b/src/script.js index 8e3de17..982cb26 100644 --- a/src/script.js +++ b/src/script.js @@ -32,11 +32,15 @@ if(Settings.settingForKey("arrowDirection")) { export default function(context) {} export function createDefaultArrow(context){start(context, null)} export function createAutoArrow(context){start(context, "Auto")} -export function createRightArrow(context){start(context, "Right")} -export function createDownArrow(context){start(context, "Down")} -export function createLeftArrow(context){start(context, "Left")} -export function createUpArrow(context){start(context, "Up")} - +export function createRightArrow(context){start(context, "Right", false)} +export function createDownArrow(context){start(context, "Down", false)} +export function createLeftArrow(context){start(context, "Left", false)} +export function createUpArrow(context){start(context, "Up", false)} + +export function createRightArrowWithCondition(context){start(context, "Right", true)} +export function createDownArrowWithCondition(context){start(context, "Down", true)} +export function createLeftArrowWithCondition(context){start(context, "Left", true)} +export function createUpArrowWithCondition(context){start(context, "Up", true)} // // Plugin Commands // @@ -388,7 +392,7 @@ function updateArrow(firstObjectID, secondObjectID, style, type, direction, line // Need to check if we have the layers with such IDs let firstObject = document.getLayerWithID(firstObjectID) let secondObject = document.getLayerWithID(secondObjectID) - + // Need to delete data first, because we will have a new line deleteLine(lineID) newConnectionsData = deleteConnectionFromData(connectionIndex) @@ -1380,7 +1384,7 @@ function getLayerStyles(name) { return styles } -function start(context, direction){ +function start(context, direction, condition){ let selection = context.selection let localDirection if(direction == null){localDirection = arrowDirectionSetting} else {localDirection = direction} @@ -1396,11 +1400,26 @@ function start(context, direction){ let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData) if(connectionIndex != null){ // Because this is creating flow, we need to take the direction from user settings - updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex) + if(condition == true){ + let libraryConditionID = getConditionID("Answer YES") + // Need to remake the arrow condition + if(currentConnectionsData[connectionIndex].condition){ + updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, libraryConditionID, connectionIndex) + } else { + updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex) + } + } else { + updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex) + } sketch.UI.message("Current connection is updated 🚀") } else { // There is no connection with this two objects in our database - createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, null) + if(condition == true){ + let libraryConditionID = getConditionID("Answer YES") + createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, libraryConditionID) + } else { + createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, null) + } sketch.UI.message("New connection is created 🚀") } } @@ -1423,86 +1442,44 @@ function start(context, direction){ // "identifier" : "onLayersMoved" // } -// let sketch = require('sketch') -// let libraries = sortJSON(sketch.getLibraries(),'name') -// log(sketch.getLibraries()) - -let outputSymbols - -let libraries = sketch.getLibraries() - -// var SymbolMaster = require('sketch/dom').SymbolMaster - -var symbolReferences = libraries[0].getImportableSymbolReferencesForDocument(document) - -log(symbolReferences) -var symbolMaster = symbolReferences[0].import() - -// console.log(symbolMaster) - -var instance = symbolMaster.createNewInstance() -console.log(instance) - +function getConditionID(keyword){ + let libraries = sketch.getLibraries() + let conditionID, symbolReferences + // let keyword = "#condition" -instance.parent = currentParentGroup + // log(libraries.length) -// currentParentGroup.addLayers(instance) + for(let g = 0; g < libraries.length; g++) { + symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document) -// var sharedStyle = sharedStyleReference.import() - -log(symbolMaster) - -// for(let g = 0; g < libraries.length; g++) { -// if(libraries[g].id =="A322B40D-E464-42EB-9AEA-28AAD0C7F33D"){ -// // We have the library - -// let selectedLibraryPath = NSURL.fileURLWithPath(libraries[g].sketchObject.locationOnDisk().path()) - -// log(selectedLibraryPath) - -// sketch.Document.open(selectedLibraryPath,(err,library) => { -// if (err) { -// sketch.UI.alert(pluginName,'Unable to open the selected library file.'); -// } - -// if (library) { -// var librarySource = library; + for(let i = 0; i < symbolReferences.length; i++) { + if(symbolReferences[i].name.includes(keyword)){ + conditionID = symbolReferences[i].id + } + } + } -// library.close(); + if(conditionID == null){ + UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as "#condition" so it will be added here') + } -// // let libraryPages = [library.pages[1]] -// var page = document.selectedPage -// librarySource.pages.forEach(function(page){ -// // if (page.id == libraryPages[symbolScopeSelect.indexOfSelectedItem() - 1]) { -// outputSymbols = page.sketchObject.symbols() -// log(page) + // symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document) -// // } -// }); - -// } -// }); + // log(symbolReferences) + // var symbolMaster = symbolReferences[0].import() + // var instance = symbolMaster.createNewInstance() + // console.log(instance) -// } -// } + // instance.parent = currentParentGroup + // log(symbolMaster) -// outputSymbols.forEach(function(symbol){ -// log('wdedwed') -// var symbolMaster = (librarySelectValue == 0) ? symbol : importForeignSymbol(symbol,selectedLibrary.sketchObject).symbolMaster(), -// symbolInstance = symbolMaster.newSymbolInstance(); + return conditionID +} -// symbolInstance.frame().setX(symbolMaster.frame().x()); -// symbolInstance.frame().setY(symbolMaster.frame().y()); -// outputPage.sketchObject.insertLayer_atIndex(symbolInstance,nil); -// }); -// function importForeignSymbol(symbol,library) { -// var objectReference = MSShareableObjectReference.referenceForShareableObject_inLibrary(symbol,library); -// return AppController.sharedInstance().librariesController().importShareableObjectReference_intoDocument(objectReference,data); -// } From 46ee7c22ba115aa904a1702aefba9855e69fc6a0 Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Tue, 19 Mar 2019 23:38:41 +0300 Subject: [PATCH 04/44] Added symbol on the arrows. Need to place it in the right way --- arrows.sketchplugin/Contents/Sketch/script.js | 56 ++++++++++++++----- .../Contents/Sketch/script.js.map | 2 +- src/script.js | 49 +++++++++++++--- 3 files changed, 83 insertions(+), 24 deletions(-) diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index 7c9f530..e095475 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -549,9 +549,9 @@ function createArrow(firstObjectID, secondObjectID, style, type, direction, cond updateSpacing(firstObjectID, secondObjectID, localDirection); autoAlignLayer(firstObjectID, secondObjectID, localDirection); - var currentGroup = checkForArrowGroup(); - var line = drawLine(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentGroup); - addToArrowsGroup(line, currentGroup); // if(localStyle != "Default Style"){ + var currentArrowsGroup = checkForGroup("Arrows"); + var line = drawLine(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentArrowsGroup, conditionID); + addToArrowsGroup(line, currentArrowsGroup); // if(localStyle != "Default Style"){ // localStyle = localStyle[0].name() // } // Storage for current connection @@ -569,11 +569,11 @@ function createArrow(firstObjectID, secondObjectID, style, type, direction, cond newConnectionsData.push(connection); } -function checkForArrowGroup() { +function checkForGroup(groupName) { var currentGroup = null; // Checking all the groups that we have for (var i = 0; i < currentParentGroup.layers().count(); i++) { - if (currentParentGroup.layers()[i].name() == "Arrows") { + if (currentParentGroup.layers()[i].name() == groupName) { // If we already have "Arrow" group we need to save it's folder currentGroup = currentParentGroup.layers()[i]; refactorLines(currentGroup); @@ -636,7 +636,7 @@ function getDirection(firstObjectID, secondObjectID) { return direction; } -function drawLine(firstObjectID, secondObjectID, style, type, direction, currentGroup) { +function drawLine(firstObjectID, secondObjectID, style, type, direction, currentGroup, conditionID) { var firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, middlePosX, middlePosY, diffX, diffY, line; var firstObject = document.getLayerWithID(firstObjectID); var secondObject = document.getLayerWithID(secondObjectID); @@ -1046,8 +1046,11 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current line.setName("Arrows"); - } // Style Start + } + if (conditionID != null) { + addCondition("Answer YES", x, y); + } if (style == null) { // that means we are creating new arrow @@ -1102,8 +1105,7 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current var ownStyle = getLayerStyles(style); line.sharedStyle = ownStyle[0]; } - } // Style End - + } return line; } @@ -1124,7 +1126,7 @@ function addToArrowsGroup(line, currentGroup) { }); // Moving this group to the bottom of the page group.moveToBack(); - currentGroup = checkForArrowGroup(); + currentGroup = checkForGroup("Arrows"); currentGroup.fixGeometryWithOptions(1); } } @@ -1151,12 +1153,12 @@ function findConnectionData(firstObjectID, secondObjectID, data) { if (pluginData) { // If we have database, need to check for connections - for (var y = 0; y < data.length; y++) { - if (firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject) { + for (var _y = 0; _y < data.length; _y++) { + if (firstObjectID == data[_y].firstObject || firstObjectID == data[_y].secondObject) { // if we found that we have this object in connection database already - if (secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject) { + if (secondObjectID == data[_y].firstObject || secondObjectID == data[_y].secondObject) { // if we found that we have this object in connection database already - arrayNumber = y; + arrayNumber = _y; } } } @@ -1649,6 +1651,32 @@ function getConditionID(keyword) { return conditionID; } +function addCondition(keyword) { + var libraries = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.getLibraries(); + var conditionObject, symbolReferences; // let keyword = "#condition" + // log(libraries.length) + + for (var g = 0; g < libraries.length; g++) { + symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document); + + for (var i = 0; i < symbolReferences.length; i++) { + if (symbolReferences[i].name.includes(keyword)) { + conditionObject = symbolReferences[i]; + } + } + } + + if (conditionObject == null) { + UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as "#condition" so it will be added here'); + } else { + var symbolMaster = conditionObject.import(); + var instance = symbolMaster.createNewInstance(); + instance.parent = currentParentGroup; + } + + return conditionObject; +} + /***/ }), /***/ "sketch": diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index 246df42..029224f 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","SharedStyle","pluginKey","document","sketch","fromNative","context","docData","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","currentParentGroup","currentPage","currentArtboard","newConnectionsData","getConnectionsData","Settings","arrowDirectionSetting","settingForKey","createDefaultArrow","start","createAutoArrow","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","updateSelectedArrows","selection","count","currentConnectionsData","g","objectID","connectionIndex","findConnectionData","updateArrow","firstObject","secondObject","style","type","direction","line","condition","message","setValue_forKey_onLayer_forPluginIdentifier","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","length","updateArrowsCounter","i","getLayerWithID","sketchObject","parentArtboard","class","push","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","views","subviews","title","setSettingForKey","intValue","state","onLayersMoved","action","actionContext","panel","ControlBar","NSPanel","setStyleMask","NSTitledWindowMask","NSFullSizeContentViewWindowMask","setTitleVisibility","NSWindowTitleHidden","setTitlebarAppearsTransparent","setFrame_display","setMovableByWindowBackground","setHasShadow","setLevel","NSFloatingWindowLevel","center","makeKeyAndOrderFront","nil","firstObjectID","secondObjectID","lineID","conditionID","createArrow","localDirection","localStyle","localType","getDirection","getLayerStyles","updateSpacing","autoAlignLayer","currentGroup","checkForArrowGroup","drawLine","addToArrowsGroup","connection","layers","name","refactorLines","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","firstLayerPosX","firstLayerPosY","secondLayerPosX","secondLayerPosY","middlePosX","middlePosY","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","sharedStyle","ownStyle","addLayers","fixGeometryWithOptions","Group","group","locked","moveToBack","dataArray","pluginDataConnections","data","arrayNumber","setActiveDirectionSetting","arrowDirectionField","currentDirection","addItemWithTitle","lastItem","setState","docSettings","styles","docTypeSettings","newConnections","lineObject","selectedGroup","remove","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","defineSourceObject","id","getSourceObjectFromSelection","confirmationAlert","setMessageText","addButtonWithTitle","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","allStyles","allLayerStyles","keyword","includes","libraryConditionID","getConditionID","libraries","getLibraries","symbolReferences","getImportableSymbolReferencesForDocument"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch'\n// const { toArray } = require('util')\n\n//\n// Variables\n//\n\nlet UI = require('sketch/ui') \nvar SharedStyle = require('sketch/dom').SharedStyle\n\nconst pluginKey = \"flowArrows\"\nconst document = sketch.fromNative(context.document)\nlet docData = context.document.documentData()\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey) // TODO: Need to refactor\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards\nlet newConnectionsData = getConnectionsData()\n\n// Settings\nvar Settings = require('sketch/settings')\nlet arrowDirectionSetting\n\nif(Settings.settingForKey(\"arrowDirection\")) {\n arrowDirectionSetting = Settings.settingForKey('arrowDirection')\n} else {\n arrowDirectionSetting = \"Auto\"\n}\n \n//\n// Create Connection Function\n//\n\nexport default function(context) {}\nexport function createDefaultArrow(context){start(context, null)}\nexport function createAutoArrow(context){start(context, \"Auto\")}\nexport function createRightArrow(context){start(context, \"Right\", false)}\nexport function createDownArrow(context){start(context, \"Down\", false)}\nexport function createLeftArrow(context){start(context, \"Left\", false)}\nexport function createUpArrow(context){start(context, \"Up\", false)}\n\nexport function createRightArrowWithCondition(context){start(context, \"Right\", true)}\nexport function createDownArrowWithCondition(context){start(context, \"Down\", true)}\nexport function createLeftArrowWithCondition(context){start(context, \"Left\", true)}\nexport function createUpArrowWithCondition(context){start(context, \"Up\", true)}\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n\n let selection = context.selection\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n // let sourceObjectID = getSourceObjectFromSelection(selection)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, connectionIndex) {\n // There might be a situation, when user deleted current group or current group stays on another artboard => In that case need to create another group\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID) {\n // Process of creating new connection \n let localDirection, localStyle, localType\n if(direction == \"Auto\"){\n // If direction is auto, we need to specify direction ourselves\n localDirection = getDirection(firstObjectID, secondObjectID)\n } else {\n localDirection = direction\n }\n\n if(type == null){\n localType = Settings.settingForKey(\"arrowType\") \n } else {\n localType = type\n }\n \n // log(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey))\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey))\n \n if(style != null){\n // if we updating connection with previously created objects\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n localStyle = style\n } else {\n localStyle = \"Default Style\"\n }\n } else {\n // We don't have any data from the plugin data\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)){\n localStyle = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)\n } else {\n localStyle = \"Default Style\"\n }\n \n }\n \n \n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n let currentGroup = checkForArrowGroup()\n let line = drawLine(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentGroup)\n addToArrowsGroup(line, currentGroup)\n\n\n // if(localStyle != \"Default Style\"){\n // localStyle = localStyle[0].name()\n // }\n\n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : localStyle,\n condition : conditionID,\n type : localType,\n direction: localDirection,\n line : line.objectID()\n }\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForArrowGroup() {\n let currentGroup = null\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == \"Arrows\") {\n // If we already have \"Arrow\" group we need to save it's folder\n currentGroup = currentParentGroup.layers()[i]\n refactorLines(currentGroup)\n } \n }\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n if(diffX > diffY) {\n direction = \"Down\"\n } else {\n direction = \"Right\"\n }\n } else {\n // Top quarter\n if(absDiffX > absDiffY) {\n direction = \"Right\"\n } else {\n direction = \"Up\"\n }\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n if(absDiffX > absDiffY) {\n direction = \"Left\"\n } else {\n direction = \"Down\"\n }\n } else {\n // Top quarter\n if(diffX > diffY) {\n direction = \"Left\"\n } else {\n direction = \"Up\"\n }\n }\n }\n return direction\n}\n\nfunction drawLine(firstObjectID, secondObjectID, style, type, direction, currentGroup){\n let firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, middlePosX, middlePosY, diffX, diffY, line\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n\n if(currentGroup){\n //if we already have a group, need to specify the difference\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n // Drawing a line\n let path = NSBezierPath.bezierPath()\n\n if(type == \"Angled\" || type == null){\n // Based on direction, we need to specify connection points\n \n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n \n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n //TODO: Provide a separate file with all the stylings\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n\n\n // Making middle points rounded\n let points = line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n\n // Providing Settings for the arrow\n line.setName(\"Arrow\")\n }\n\n if(type == \"Straight\"){\n // Based on direction, we need to specify connection points\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n \n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n \n // Providing Settings for the arrow\n line.setName(\"Arrow\")\n }\n\n if(type == \"Curved\"){\n // Based on direction, we need to specify connection points\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Auto\"){\n sourceObjectID = firstObject.id\n }\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n } else {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[0].objectID(), direction)\n }\n \n return sourceObjectID\n}\n\nfunction confirmationAlert(alert, message) {\n // Title\n alert.setMessageText(\"Would you like to delete all the arrows from \"+message)\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Delete Arrows\")\n alert.addButtonWithTitle(\"Cancel\")\n \n // Creating the view\n const viewWidth = 300\n const viewHeight = 40\n \n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n \n // Label\n var infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(-1, viewHeight - 40, 330, 40))\n \n infoLabel.setStringValue(\"ℹ️ You can select layers, artboards to delete all the arrows from selected one only\")\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n \n view.addSubview(infoLabel)\n\n return alert\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) {\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n if(name == null) {\n for(let i = 0; i < allStyles.count(); i++){\n if(allStyles[i].name().includes(keyword)){\n styles.push(allStyles[i]);\n }\n }\n } else {\n // Searching only for name\n for(let i = 0; i < allStyles.count(); i++){\n if(allStyles[i].name() == name){\n styles.push(allStyles[i]);\n }\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, condition){\n let selection = context.selection\n let localDirection\n if(direction == null){localDirection = arrowDirectionSetting} else {localDirection = direction}\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n if(connectionIndex != null){\n // Because this is creating flow, we need to take the direction from user settings\n if(condition == true){\n let libraryConditionID = getConditionID(\"Answer YES\")\n // Need to remake the arrow condition\n if(currentConnectionsData[connectionIndex].condition){\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, libraryConditionID, connectionIndex)\n } else {\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n }\n } else {\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n }\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n // There is no connection with this two objects in our database\n if(condition == true){\n let libraryConditionID = getConditionID(\"Answer YES\")\n createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, libraryConditionID)\n } else {\n createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, null)\n }\n sketch.UI.message(\"New connection is created 🚀\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\n// {\n// \"script\": \"./script.js\",\n// \"name\" : \"onLayersMoved\",\n// \"handlers\" : {\n// \"actions\": {\n// \"LayersMoved.finish\": \"onLayersMoved\"\n// }\n// },\n// \"identifier\" : \"onLayersMoved\"\n// }\n\nfunction getConditionID(keyword){\n let libraries = sketch.getLibraries()\n let conditionID, symbolReferences\n // let keyword = \"#condition\"\n\n // log(libraries.length)\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionID = symbolReferences[i].id \n }\n }\n }\n\n if(conditionID == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n }\n\n // symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n // log(symbolReferences)\n // var symbolMaster = symbolReferences[0].import()\n\n\n // var instance = symbolMaster.createNewInstance()\n // console.log(instance)\n\n\n // instance.parent = currentParentGroup\n // log(symbolMaster)\n\n return conditionID\n}\n\n\n\n\n\n","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","SharedStyle","pluginKey","document","sketch","fromNative","context","docData","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","currentParentGroup","currentPage","currentArtboard","newConnectionsData","getConnectionsData","Settings","arrowDirectionSetting","settingForKey","createDefaultArrow","start","createAutoArrow","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","updateSelectedArrows","selection","count","currentConnectionsData","g","objectID","connectionIndex","findConnectionData","updateArrow","firstObject","secondObject","style","type","direction","line","condition","message","setValue_forKey_onLayer_forPluginIdentifier","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","length","updateArrowsCounter","i","getLayerWithID","sketchObject","parentArtboard","class","push","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","views","subviews","title","setSettingForKey","intValue","state","onLayersMoved","action","actionContext","panel","ControlBar","NSPanel","setStyleMask","NSTitledWindowMask","NSFullSizeContentViewWindowMask","setTitleVisibility","NSWindowTitleHidden","setTitlebarAppearsTransparent","setFrame_display","setMovableByWindowBackground","setHasShadow","setLevel","NSFloatingWindowLevel","center","makeKeyAndOrderFront","nil","firstObjectID","secondObjectID","lineID","conditionID","createArrow","localDirection","localStyle","localType","getDirection","getLayerStyles","updateSpacing","autoAlignLayer","currentArrowsGroup","checkForGroup","drawLine","addToArrowsGroup","connection","groupName","currentGroup","layers","name","refactorLines","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","firstLayerPosX","firstLayerPosY","secondLayerPosX","secondLayerPosY","middlePosX","middlePosY","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","addCondition","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","sharedStyle","ownStyle","addLayers","fixGeometryWithOptions","Group","group","locked","moveToBack","dataArray","pluginDataConnections","data","arrayNumber","setActiveDirectionSetting","arrowDirectionField","currentDirection","addItemWithTitle","lastItem","setState","docSettings","styles","docTypeSettings","newConnections","lineObject","selectedGroup","remove","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","defineSourceObject","id","getSourceObjectFromSelection","confirmationAlert","setMessageText","addButtonWithTitle","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","allStyles","allLayerStyles","keyword","includes","libraryConditionID","getConditionID","libraries","getLibraries","symbolReferences","getImportableSymbolReferencesForDocument","conditionObject","symbolMaster","import","instance","createNewInstance"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch'\n// const { toArray } = require('util')\n\n//\n// Variables\n//\n\nlet UI = require('sketch/ui') \nvar SharedStyle = require('sketch/dom').SharedStyle\n\nconst pluginKey = \"flowArrows\"\nconst document = sketch.fromNative(context.document)\nlet docData = context.document.documentData()\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey) // TODO: Need to refactor\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards\nlet newConnectionsData = getConnectionsData()\n\n// Settings\nvar Settings = require('sketch/settings')\nlet arrowDirectionSetting\n\nif(Settings.settingForKey(\"arrowDirection\")) {\n arrowDirectionSetting = Settings.settingForKey('arrowDirection')\n} else {\n arrowDirectionSetting = \"Auto\"\n}\n \n//\n// Create Connection Function\n//\n\nexport default function(context) {}\nexport function createDefaultArrow(context){start(context, null)}\nexport function createAutoArrow(context){start(context, \"Auto\")}\nexport function createRightArrow(context){start(context, \"Right\", false)}\nexport function createDownArrow(context){start(context, \"Down\", false)}\nexport function createLeftArrow(context){start(context, \"Left\", false)}\nexport function createUpArrow(context){start(context, \"Up\", false)}\n\nexport function createRightArrowWithCondition(context){start(context, \"Right\", true)}\nexport function createDownArrowWithCondition(context){start(context, \"Down\", true)}\nexport function createLeftArrowWithCondition(context){start(context, \"Left\", true)}\nexport function createUpArrowWithCondition(context){start(context, \"Up\", true)}\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n\n let selection = context.selection\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n // let sourceObjectID = getSourceObjectFromSelection(selection)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, connectionIndex) {\n // There might be a situation, when user deleted current group or current group stays on another artboard => In that case need to create another group\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID) {\n // Process of creating new connection \n let localDirection, localStyle, localType\n if(direction == \"Auto\"){\n // If direction is auto, we need to specify direction ourselves\n localDirection = getDirection(firstObjectID, secondObjectID)\n } else {\n localDirection = direction\n }\n\n if(type == null){\n localType = Settings.settingForKey(\"arrowType\") \n } else {\n localType = type\n }\n \n // log(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey))\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey))\n \n if(style != null){\n // if we updating connection with previously created objects\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n localStyle = style\n } else {\n localStyle = \"Default Style\"\n }\n } else {\n // We don't have any data from the plugin data\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)){\n localStyle = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)\n } else {\n localStyle = \"Default Style\"\n }\n \n }\n \n \n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n let currentArrowsGroup = checkForGroup(\"Arrows\")\n let line = drawLine(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentArrowsGroup, conditionID)\n addToArrowsGroup(line, currentArrowsGroup)\n\n\n // if(localStyle != \"Default Style\"){\n // localStyle = localStyle[0].name()\n // }\n\n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : localStyle,\n condition : conditionID,\n type : localType,\n direction: localDirection,\n line : line.objectID()\n }\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForGroup(groupName) {\n let currentGroup = null\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n // If we already have \"Arrow\" group we need to save it's folder\n currentGroup = currentParentGroup.layers()[i]\n refactorLines(currentGroup)\n } \n }\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n if(diffX > diffY) {\n direction = \"Down\"\n } else {\n direction = \"Right\"\n }\n } else {\n // Top quarter\n if(absDiffX > absDiffY) {\n direction = \"Right\"\n } else {\n direction = \"Up\"\n }\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n if(absDiffX > absDiffY) {\n direction = \"Left\"\n } else {\n direction = \"Down\"\n }\n } else {\n // Top quarter\n if(diffX > diffY) {\n direction = \"Left\"\n } else {\n direction = \"Up\"\n }\n }\n }\n return direction\n}\n\nfunction drawLine(firstObjectID, secondObjectID, style, type, direction, currentGroup, conditionID){\n let firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, middlePosX, middlePosY, diffX, diffY, line\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n\n if(currentGroup){\n //if we already have a group, need to specify the difference\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n // Drawing a line\n let path = NSBezierPath.bezierPath()\n\n if(type == \"Angled\" || type == null){\n // Based on direction, we need to specify connection points\n \n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n \n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n //TODO: Provide a separate file with all the stylings\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n\n\n // Making middle points rounded\n let points = line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n\n // Providing Settings for the arrow\n line.setName(\"Arrow\")\n }\n\n if(type == \"Straight\"){\n // Based on direction, we need to specify connection points\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n \n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n \n // Providing Settings for the arrow\n line.setName(\"Arrow\")\n }\n\n if(type == \"Curved\"){\n // Based on direction, we need to specify connection points\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Auto\"){\n sourceObjectID = firstObject.id\n }\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n } else {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[0].objectID(), direction)\n }\n \n return sourceObjectID\n}\n\nfunction confirmationAlert(alert, message) {\n // Title\n alert.setMessageText(\"Would you like to delete all the arrows from \"+message)\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Delete Arrows\")\n alert.addButtonWithTitle(\"Cancel\")\n \n // Creating the view\n const viewWidth = 300\n const viewHeight = 40\n \n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n \n // Label\n var infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(-1, viewHeight - 40, 330, 40))\n \n infoLabel.setStringValue(\"ℹ️ You can select layers, artboards to delete all the arrows from selected one only\")\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n \n view.addSubview(infoLabel)\n\n return alert\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) {\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n if(name == null) {\n for(let i = 0; i < allStyles.count(); i++){\n if(allStyles[i].name().includes(keyword)){\n styles.push(allStyles[i]);\n }\n }\n } else {\n // Searching only for name\n for(let i = 0; i < allStyles.count(); i++){\n if(allStyles[i].name() == name){\n styles.push(allStyles[i]);\n }\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, condition){\n let selection = context.selection\n let localDirection\n if(direction == null){localDirection = arrowDirectionSetting} else {localDirection = direction}\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n if(connectionIndex != null){\n // Because this is creating flow, we need to take the direction from user settings\n if(condition == true){\n let libraryConditionID = getConditionID(\"Answer YES\")\n // Need to remake the arrow condition\n if(currentConnectionsData[connectionIndex].condition){\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, libraryConditionID, connectionIndex)\n } else {\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n }\n } else {\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n }\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n // There is no connection with this two objects in our database\n if(condition == true){\n let libraryConditionID = getConditionID(\"Answer YES\")\n createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, libraryConditionID)\n } else {\n createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, null)\n }\n sketch.UI.message(\"New connection is created 🚀\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\n// {\n// \"script\": \"./script.js\",\n// \"name\" : \"onLayersMoved\",\n// \"handlers\" : {\n// \"actions\": {\n// \"LayersMoved.finish\": \"onLayersMoved\"\n// }\n// },\n// \"identifier\" : \"onLayersMoved\"\n// }\n\nfunction getConditionID(keyword){\n let libraries = sketch.getLibraries()\n let conditionID, symbolReferences\n // let keyword = \"#condition\"\n\n // log(libraries.length)\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionID = symbolReferences[i].id \n }\n }\n }\n\n if(conditionID == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n }\n\n // symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n // log(symbolReferences)\n // var symbolMaster = symbolReferences[0].import()\n\n\n // var instance = symbolMaster.createNewInstance()\n // console.log(instance)\n\n\n // instance.parent = currentParentGroup\n // log(symbolMaster)\n\n return conditionID\n}\n\nfunction addCondition(keyword){\n let libraries = sketch.getLibraries()\n let conditionObject, symbolReferences\n // let keyword = \"#condition\"\n\n // log(libraries.length)\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionObject = symbolReferences[i]\n }\n }\n }\n\n if(conditionObject == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n } else {\n let symbolMaster = conditionObject.import()\n let instance = symbolMaster.createNewInstance()\n instance.parent = currentParentGroup\n }\n\n return conditionObject\n}\n\n\n\n\n\n\n","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/src/script.js b/src/script.js index 982cb26..3e688bd 100644 --- a/src/script.js +++ b/src/script.js @@ -442,9 +442,9 @@ function createArrow(firstObjectID, secondObjectID, style, type, direction, cond updateSpacing(firstObjectID, secondObjectID, localDirection) autoAlignLayer(firstObjectID, secondObjectID, localDirection) - let currentGroup = checkForArrowGroup() - let line = drawLine(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentGroup) - addToArrowsGroup(line, currentGroup) + let currentArrowsGroup = checkForGroup("Arrows") + let line = drawLine(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentArrowsGroup, conditionID) + addToArrowsGroup(line, currentArrowsGroup) // if(localStyle != "Default Style"){ @@ -465,11 +465,11 @@ function createArrow(firstObjectID, secondObjectID, style, type, direction, cond newConnectionsData.push(connection) } -function checkForArrowGroup() { +function checkForGroup(groupName) { let currentGroup = null // Checking all the groups that we have for(let i = 0; i < currentParentGroup.layers().count(); i++){ - if(currentParentGroup.layers()[i].name() == "Arrows") { + if(currentParentGroup.layers()[i].name() == groupName) { // If we already have "Arrow" group we need to save it's folder currentGroup = currentParentGroup.layers()[i] refactorLines(currentGroup) @@ -531,7 +531,7 @@ function getDirection(firstObjectID, secondObjectID){ return direction } -function drawLine(firstObjectID, secondObjectID, style, type, direction, currentGroup){ +function drawLine(firstObjectID, secondObjectID, style, type, direction, currentGroup, conditionID){ let firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, middlePosX, middlePosY, diffX, diffY, line let firstObject = document.getLayerWithID(firstObjectID) let secondObject = document.getLayerWithID(secondObjectID) @@ -892,8 +892,11 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current line.setName("Arrows") } + if(conditionID != null){ + addCondition("Answer YES", x, y) + } + - // Style Start if(style == null){ // that means we are creating new arrow if(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)){ @@ -931,7 +934,6 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current line.sharedStyle = ownStyle[0] } } - // Style End return line } @@ -951,7 +953,7 @@ function addToArrowsGroup(line, currentGroup){ }) // Moving this group to the bottom of the page group.moveToBack() - currentGroup = checkForArrowGroup() + currentGroup = checkForGroup("Arrows") currentGroup.fixGeometryWithOptions(1) } @@ -1479,6 +1481,35 @@ function getConditionID(keyword){ return conditionID } +function addCondition(keyword){ + let libraries = sketch.getLibraries() + let conditionObject, symbolReferences + // let keyword = "#condition" + + // log(libraries.length) + + for(let g = 0; g < libraries.length; g++) { + symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document) + + for(let i = 0; i < symbolReferences.length; i++) { + if(symbolReferences[i].name.includes(keyword)){ + conditionObject = symbolReferences[i] + } + } + } + + if(conditionObject == null){ + UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as "#condition" so it will be added here') + } else { + let symbolMaster = conditionObject.import() + let instance = symbolMaster.createNewInstance() + instance.parent = currentParentGroup + } + + return conditionObject +} + + From b6bba633428de6dd95ca0d8f3846bf1be646209f Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Tue, 19 Mar 2019 23:58:44 +0300 Subject: [PATCH 05/44] added symbol centering --- arrows.sketchplugin/Contents/Sketch/script.js | 200 ++++++----------- .../Contents/Sketch/script.js.map | 2 +- src/script.js | 210 +++++------------- 3 files changed, 132 insertions(+), 280 deletions(-) diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index e095475..226a217 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -659,21 +659,60 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current } // Drawing a line - var path = NSBezierPath.bezierPath(); + var path = NSBezierPath.bezierPath(); // Getting all the positions - if (type == "Angled" || type == null) { - // Based on direction, we need to specify connection points - if (direction == "Up") { - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; - firstLayerPosY = firstObjectAbsPos.y - diffY; // Second Layer Position End Point Position + if (direction == "Up") { + // First Layer Position Start Point Position + firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; + firstLayerPosY = firstObjectAbsPos.y - diffY; // Second Layer Position End Point Position - secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; - secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height - diffY; // Middle Points + secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; + secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height - diffY; // Middle Points + + middlePosX = (firstLayerPosX + secondLayerPosX) / 2; + middlePosY = (firstLayerPosY + secondLayerPosY) / 2; + } + + if (direction == "Right") { + // First Layer Position Start Point Position + firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width - diffX; + firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position - middlePosX = (firstLayerPosX + secondLayerPosX) / 2; - middlePosY = (firstLayerPosY + secondLayerPosY) / 2; // Connecting points + secondLayerPosX = secondObjectAbsPos.x - diffX; + secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points + + middlePosX = (firstLayerPosX + secondLayerPosX) / 2; + middlePosY = (firstLayerPosY + secondLayerPosY) / 2; + } + + if (direction == "Down") { + // First Layer Position Start Point Position + firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; + firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height - diffY; // Second Layer Position End Point Position + + secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; + secondLayerPosY = secondObjectAbsPos.y - diffY; // Middle Points + + middlePosX = (firstLayerPosX + secondLayerPosX) / 2; + middlePosY = (firstLayerPosY + secondLayerPosY) / 2; + } + if (direction == "Left") { + // First Layer Position Start Point Position + firstLayerPosX = firstObjectAbsPos.x - diffX; + firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position + + secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width - diffX; + secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points + + middlePosX = (firstLayerPosX + secondLayerPosX) / 2; + middlePosY = (firstLayerPosY + secondLayerPosY) / 2; + } + + if (type == "Angled" || type == null) { + // Based on direction, we need to specify connection points + if (direction == "Up") { + // Connecting points path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)); path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)); @@ -681,16 +720,7 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current } if (direction == "Right") { - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width - diffX; - firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position - - secondLayerPosX = secondObjectAbsPos.x - diffX; - secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points - - middlePosX = (firstLayerPosX + secondLayerPosX) / 2; - middlePosY = (firstLayerPosY + secondLayerPosY) / 2; // Connecting points - + // Connecting points path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)); path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)); @@ -698,16 +728,7 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current } if (direction == "Down") { - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; - firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height - diffY; // Second Layer Position End Point Position - - secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; - secondLayerPosY = secondObjectAbsPos.y - diffY; // Middle Points - - middlePosX = (firstLayerPosX + secondLayerPosX) / 2; - middlePosY = (firstLayerPosY + secondLayerPosY) / 2; // Connecting points - + // Connecting points path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)); path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)); @@ -715,22 +736,12 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current } if (direction == "Left") { - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x - diffX; - firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position - - secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width - diffX; - secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points - - middlePosX = (firstLayerPosX + secondLayerPosX) / 2; - middlePosY = (firstLayerPosY + secondLayerPosY) / 2; // Connecting points - + // Connecting points path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)); path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)); path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } //TODO: Provide a separate file with all the stylings - // Painting the line + } // Painting the line line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); // Making middle points rounded @@ -745,61 +756,25 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current if (type == "Straight") { // Based on direction, we need to specify connection points if (direction == "Up") { - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; - firstLayerPosY = firstObjectAbsPos.y - diffY; // Second Layer Position End Point Position - - secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; - secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height - diffY; // Middle Points - - middlePosX = (firstLayerPosX + secondLayerPosX) / 2; - middlePosY = (firstLayerPosY + secondLayerPosY) / 2; // Connecting points - + // Connecting points path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); } if (direction == "Right") { - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width - diffX; - firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position - - secondLayerPosX = secondObjectAbsPos.x - diffX; - secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points - - middlePosX = (firstLayerPosX + secondLayerPosX) / 2; - middlePosY = (firstLayerPosY + secondLayerPosY) / 2; // Connecting points - + // Connecting points path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); } if (direction == "Down") { - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; - firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height - diffY; // Second Layer Position End Point Position - - secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; - secondLayerPosY = secondObjectAbsPos.y - diffY; // Middle Points - - middlePosX = (firstLayerPosX + secondLayerPosX) / 2; - middlePosY = (firstLayerPosY + secondLayerPosY) / 2; // Connecting points - + // Connecting points path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); } if (direction == "Left") { - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x - diffX; - firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position - - secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width - diffX; - secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points - - middlePosX = (firstLayerPosX + secondLayerPosX) / 2; - middlePosY = (firstLayerPosY + secondLayerPosY) / 2; // Connecting points - + // Connecting points path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); } // Painting the line @@ -811,18 +786,8 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current } if (type == "Curved") { - // Based on direction, we need to specify connection points if (direction == "Up") { - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; - firstLayerPosY = firstObjectAbsPos.y - diffY; // Second Layer Position End Point Position - - secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; - secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height - diffY; // Middle Points - - middlePosX = (firstLayerPosX + secondLayerPosX) / 2; - middlePosY = (firstLayerPosY + secondLayerPosY) / 2; // Connecting points - + // Connecting points path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line @@ -871,16 +836,7 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current } if (direction == "Right") { - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width - diffX; - firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position - - secondLayerPosX = secondObjectAbsPos.x - diffX; - secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points - - middlePosX = (firstLayerPosX + secondLayerPosX) / 2; - middlePosY = (firstLayerPosY + secondLayerPosY) / 2; // Connecting points - + // Connecting points path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line @@ -929,16 +885,7 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current } if (direction == "Down") { - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; - firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height - diffY; // Second Layer Position End Point Position - - secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; - secondLayerPosY = secondObjectAbsPos.y - diffY; // Middle Points - - middlePosX = (firstLayerPosX + secondLayerPosX) / 2; - middlePosY = (firstLayerPosY + secondLayerPosY) / 2; // Connecting points - + // Connecting points path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line @@ -987,16 +934,7 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current } if (direction == "Left") { - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x - diffX; - firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position - - secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width - diffX; - secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points - - middlePosX = (firstLayerPosX + secondLayerPosX) / 2; - middlePosY = (firstLayerPosY + secondLayerPosY) / 2; // Connecting points - + // Connecting points path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line @@ -1049,7 +987,7 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current } if (conditionID != null) { - addCondition("Answer YES", x, y); + addCondition("Answer YES", middlePosX, middlePosY); } if (style == null) { @@ -1153,12 +1091,12 @@ function findConnectionData(firstObjectID, secondObjectID, data) { if (pluginData) { // If we have database, need to check for connections - for (var _y = 0; _y < data.length; _y++) { - if (firstObjectID == data[_y].firstObject || firstObjectID == data[_y].secondObject) { + for (var y = 0; y < data.length; y++) { + if (firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject) { // if we found that we have this object in connection database already - if (secondObjectID == data[_y].firstObject || secondObjectID == data[_y].secondObject) { + if (secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject) { // if we found that we have this object in connection database already - arrayNumber = _y; + arrayNumber = y; } } } @@ -1651,7 +1589,7 @@ function getConditionID(keyword) { return conditionID; } -function addCondition(keyword) { +function addCondition(keyword, x, y) { var libraries = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.getLibraries(); var conditionObject, symbolReferences; // let keyword = "#condition" // log(libraries.length) @@ -1672,6 +1610,8 @@ function addCondition(keyword) { var symbolMaster = conditionObject.import(); var instance = symbolMaster.createNewInstance(); instance.parent = currentParentGroup; + instance.frame.x = x - instance.frame.width / 2; + instance.frame.y = y - instance.frame.height / 2; } return conditionObject; diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index 029224f..1b016d0 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","SharedStyle","pluginKey","document","sketch","fromNative","context","docData","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","currentParentGroup","currentPage","currentArtboard","newConnectionsData","getConnectionsData","Settings","arrowDirectionSetting","settingForKey","createDefaultArrow","start","createAutoArrow","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","updateSelectedArrows","selection","count","currentConnectionsData","g","objectID","connectionIndex","findConnectionData","updateArrow","firstObject","secondObject","style","type","direction","line","condition","message","setValue_forKey_onLayer_forPluginIdentifier","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","length","updateArrowsCounter","i","getLayerWithID","sketchObject","parentArtboard","class","push","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","views","subviews","title","setSettingForKey","intValue","state","onLayersMoved","action","actionContext","panel","ControlBar","NSPanel","setStyleMask","NSTitledWindowMask","NSFullSizeContentViewWindowMask","setTitleVisibility","NSWindowTitleHidden","setTitlebarAppearsTransparent","setFrame_display","setMovableByWindowBackground","setHasShadow","setLevel","NSFloatingWindowLevel","center","makeKeyAndOrderFront","nil","firstObjectID","secondObjectID","lineID","conditionID","createArrow","localDirection","localStyle","localType","getDirection","getLayerStyles","updateSpacing","autoAlignLayer","currentArrowsGroup","checkForGroup","drawLine","addToArrowsGroup","connection","groupName","currentGroup","layers","name","refactorLines","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","firstLayerPosX","firstLayerPosY","secondLayerPosX","secondLayerPosY","middlePosX","middlePosY","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","addCondition","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","sharedStyle","ownStyle","addLayers","fixGeometryWithOptions","Group","group","locked","moveToBack","dataArray","pluginDataConnections","data","arrayNumber","setActiveDirectionSetting","arrowDirectionField","currentDirection","addItemWithTitle","lastItem","setState","docSettings","styles","docTypeSettings","newConnections","lineObject","selectedGroup","remove","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","defineSourceObject","id","getSourceObjectFromSelection","confirmationAlert","setMessageText","addButtonWithTitle","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","allStyles","allLayerStyles","keyword","includes","libraryConditionID","getConditionID","libraries","getLibraries","symbolReferences","getImportableSymbolReferencesForDocument","conditionObject","symbolMaster","import","instance","createNewInstance"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch'\n// const { toArray } = require('util')\n\n//\n// Variables\n//\n\nlet UI = require('sketch/ui') \nvar SharedStyle = require('sketch/dom').SharedStyle\n\nconst pluginKey = \"flowArrows\"\nconst document = sketch.fromNative(context.document)\nlet docData = context.document.documentData()\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey) // TODO: Need to refactor\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards\nlet newConnectionsData = getConnectionsData()\n\n// Settings\nvar Settings = require('sketch/settings')\nlet arrowDirectionSetting\n\nif(Settings.settingForKey(\"arrowDirection\")) {\n arrowDirectionSetting = Settings.settingForKey('arrowDirection')\n} else {\n arrowDirectionSetting = \"Auto\"\n}\n \n//\n// Create Connection Function\n//\n\nexport default function(context) {}\nexport function createDefaultArrow(context){start(context, null)}\nexport function createAutoArrow(context){start(context, \"Auto\")}\nexport function createRightArrow(context){start(context, \"Right\", false)}\nexport function createDownArrow(context){start(context, \"Down\", false)}\nexport function createLeftArrow(context){start(context, \"Left\", false)}\nexport function createUpArrow(context){start(context, \"Up\", false)}\n\nexport function createRightArrowWithCondition(context){start(context, \"Right\", true)}\nexport function createDownArrowWithCondition(context){start(context, \"Down\", true)}\nexport function createLeftArrowWithCondition(context){start(context, \"Left\", true)}\nexport function createUpArrowWithCondition(context){start(context, \"Up\", true)}\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n\n let selection = context.selection\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n // let sourceObjectID = getSourceObjectFromSelection(selection)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, connectionIndex) {\n // There might be a situation, when user deleted current group or current group stays on another artboard => In that case need to create another group\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID) {\n // Process of creating new connection \n let localDirection, localStyle, localType\n if(direction == \"Auto\"){\n // If direction is auto, we need to specify direction ourselves\n localDirection = getDirection(firstObjectID, secondObjectID)\n } else {\n localDirection = direction\n }\n\n if(type == null){\n localType = Settings.settingForKey(\"arrowType\") \n } else {\n localType = type\n }\n \n // log(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey))\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey))\n \n if(style != null){\n // if we updating connection with previously created objects\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n localStyle = style\n } else {\n localStyle = \"Default Style\"\n }\n } else {\n // We don't have any data from the plugin data\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)){\n localStyle = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)\n } else {\n localStyle = \"Default Style\"\n }\n \n }\n \n \n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n let currentArrowsGroup = checkForGroup(\"Arrows\")\n let line = drawLine(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentArrowsGroup, conditionID)\n addToArrowsGroup(line, currentArrowsGroup)\n\n\n // if(localStyle != \"Default Style\"){\n // localStyle = localStyle[0].name()\n // }\n\n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : localStyle,\n condition : conditionID,\n type : localType,\n direction: localDirection,\n line : line.objectID()\n }\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForGroup(groupName) {\n let currentGroup = null\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n // If we already have \"Arrow\" group we need to save it's folder\n currentGroup = currentParentGroup.layers()[i]\n refactorLines(currentGroup)\n } \n }\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n if(diffX > diffY) {\n direction = \"Down\"\n } else {\n direction = \"Right\"\n }\n } else {\n // Top quarter\n if(absDiffX > absDiffY) {\n direction = \"Right\"\n } else {\n direction = \"Up\"\n }\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n if(absDiffX > absDiffY) {\n direction = \"Left\"\n } else {\n direction = \"Down\"\n }\n } else {\n // Top quarter\n if(diffX > diffY) {\n direction = \"Left\"\n } else {\n direction = \"Up\"\n }\n }\n }\n return direction\n}\n\nfunction drawLine(firstObjectID, secondObjectID, style, type, direction, currentGroup, conditionID){\n let firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, middlePosX, middlePosY, diffX, diffY, line\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n\n if(currentGroup){\n //if we already have a group, need to specify the difference\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n // Drawing a line\n let path = NSBezierPath.bezierPath()\n\n if(type == \"Angled\" || type == null){\n // Based on direction, we need to specify connection points\n \n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n \n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n //TODO: Provide a separate file with all the stylings\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n\n\n // Making middle points rounded\n let points = line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n\n // Providing Settings for the arrow\n line.setName(\"Arrow\")\n }\n\n if(type == \"Straight\"){\n // Based on direction, we need to specify connection points\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n \n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n \n // Providing Settings for the arrow\n line.setName(\"Arrow\")\n }\n\n if(type == \"Curved\"){\n // Based on direction, we need to specify connection points\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Auto\"){\n sourceObjectID = firstObject.id\n }\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n } else {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[0].objectID(), direction)\n }\n \n return sourceObjectID\n}\n\nfunction confirmationAlert(alert, message) {\n // Title\n alert.setMessageText(\"Would you like to delete all the arrows from \"+message)\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Delete Arrows\")\n alert.addButtonWithTitle(\"Cancel\")\n \n // Creating the view\n const viewWidth = 300\n const viewHeight = 40\n \n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n \n // Label\n var infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(-1, viewHeight - 40, 330, 40))\n \n infoLabel.setStringValue(\"ℹ️ You can select layers, artboards to delete all the arrows from selected one only\")\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n \n view.addSubview(infoLabel)\n\n return alert\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) {\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n if(name == null) {\n for(let i = 0; i < allStyles.count(); i++){\n if(allStyles[i].name().includes(keyword)){\n styles.push(allStyles[i]);\n }\n }\n } else {\n // Searching only for name\n for(let i = 0; i < allStyles.count(); i++){\n if(allStyles[i].name() == name){\n styles.push(allStyles[i]);\n }\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, condition){\n let selection = context.selection\n let localDirection\n if(direction == null){localDirection = arrowDirectionSetting} else {localDirection = direction}\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n if(connectionIndex != null){\n // Because this is creating flow, we need to take the direction from user settings\n if(condition == true){\n let libraryConditionID = getConditionID(\"Answer YES\")\n // Need to remake the arrow condition\n if(currentConnectionsData[connectionIndex].condition){\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, libraryConditionID, connectionIndex)\n } else {\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n }\n } else {\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n }\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n // There is no connection with this two objects in our database\n if(condition == true){\n let libraryConditionID = getConditionID(\"Answer YES\")\n createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, libraryConditionID)\n } else {\n createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, null)\n }\n sketch.UI.message(\"New connection is created 🚀\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\n// {\n// \"script\": \"./script.js\",\n// \"name\" : \"onLayersMoved\",\n// \"handlers\" : {\n// \"actions\": {\n// \"LayersMoved.finish\": \"onLayersMoved\"\n// }\n// },\n// \"identifier\" : \"onLayersMoved\"\n// }\n\nfunction getConditionID(keyword){\n let libraries = sketch.getLibraries()\n let conditionID, symbolReferences\n // let keyword = \"#condition\"\n\n // log(libraries.length)\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionID = symbolReferences[i].id \n }\n }\n }\n\n if(conditionID == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n }\n\n // symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n // log(symbolReferences)\n // var symbolMaster = symbolReferences[0].import()\n\n\n // var instance = symbolMaster.createNewInstance()\n // console.log(instance)\n\n\n // instance.parent = currentParentGroup\n // log(symbolMaster)\n\n return conditionID\n}\n\nfunction addCondition(keyword){\n let libraries = sketch.getLibraries()\n let conditionObject, symbolReferences\n // let keyword = \"#condition\"\n\n // log(libraries.length)\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionObject = symbolReferences[i]\n }\n }\n }\n\n if(conditionObject == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n } else {\n let symbolMaster = conditionObject.import()\n let instance = symbolMaster.createNewInstance()\n instance.parent = currentParentGroup\n }\n\n return conditionObject\n}\n\n\n\n\n\n\n","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","SharedStyle","pluginKey","document","sketch","fromNative","context","docData","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","currentParentGroup","currentPage","currentArtboard","newConnectionsData","getConnectionsData","Settings","arrowDirectionSetting","settingForKey","createDefaultArrow","start","createAutoArrow","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","updateSelectedArrows","selection","count","currentConnectionsData","g","objectID","connectionIndex","findConnectionData","updateArrow","firstObject","secondObject","style","type","direction","line","condition","message","setValue_forKey_onLayer_forPluginIdentifier","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","length","updateArrowsCounter","i","getLayerWithID","sketchObject","parentArtboard","class","push","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","views","subviews","title","setSettingForKey","intValue","state","onLayersMoved","action","actionContext","panel","ControlBar","NSPanel","setStyleMask","NSTitledWindowMask","NSFullSizeContentViewWindowMask","setTitleVisibility","NSWindowTitleHidden","setTitlebarAppearsTransparent","setFrame_display","setMovableByWindowBackground","setHasShadow","setLevel","NSFloatingWindowLevel","center","makeKeyAndOrderFront","nil","firstObjectID","secondObjectID","lineID","conditionID","createArrow","localDirection","localStyle","localType","getDirection","getLayerStyles","updateSpacing","autoAlignLayer","currentArrowsGroup","checkForGroup","drawLine","addToArrowsGroup","connection","groupName","currentGroup","layers","name","refactorLines","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","firstLayerPosX","firstLayerPosY","secondLayerPosX","secondLayerPosY","middlePosX","middlePosY","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","addCondition","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","sharedStyle","ownStyle","addLayers","fixGeometryWithOptions","Group","group","locked","moveToBack","dataArray","pluginDataConnections","data","arrayNumber","setActiveDirectionSetting","arrowDirectionField","currentDirection","addItemWithTitle","lastItem","setState","docSettings","styles","docTypeSettings","newConnections","lineObject","selectedGroup","remove","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","defineSourceObject","id","getSourceObjectFromSelection","confirmationAlert","setMessageText","addButtonWithTitle","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","allStyles","allLayerStyles","keyword","includes","libraryConditionID","getConditionID","libraries","getLibraries","symbolReferences","getImportableSymbolReferencesForDocument","conditionObject","symbolMaster","import","instance","createNewInstance"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch'\n// const { toArray } = require('util')\n\n//\n// Variables\n//\n\nlet UI = require('sketch/ui') \nvar SharedStyle = require('sketch/dom').SharedStyle\n\nconst pluginKey = \"flowArrows\"\nconst document = sketch.fromNative(context.document)\nlet docData = context.document.documentData()\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey) // TODO: Need to refactor\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards\nlet newConnectionsData = getConnectionsData()\n\n// Settings\nvar Settings = require('sketch/settings')\nlet arrowDirectionSetting\n\nif(Settings.settingForKey(\"arrowDirection\")) {\n arrowDirectionSetting = Settings.settingForKey('arrowDirection')\n} else {\n arrowDirectionSetting = \"Auto\"\n}\n \n//\n// Create Connection Function\n//\n\nexport default function(context) {}\nexport function createDefaultArrow(context){start(context, null)}\nexport function createAutoArrow(context){start(context, \"Auto\")}\nexport function createRightArrow(context){start(context, \"Right\", false)}\nexport function createDownArrow(context){start(context, \"Down\", false)}\nexport function createLeftArrow(context){start(context, \"Left\", false)}\nexport function createUpArrow(context){start(context, \"Up\", false)}\n\nexport function createRightArrowWithCondition(context){start(context, \"Right\", true)}\nexport function createDownArrowWithCondition(context){start(context, \"Down\", true)}\nexport function createLeftArrowWithCondition(context){start(context, \"Left\", true)}\nexport function createUpArrowWithCondition(context){start(context, \"Up\", true)}\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n\n let selection = context.selection\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n // let sourceObjectID = getSourceObjectFromSelection(selection)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, connectionIndex) {\n // There might be a situation, when user deleted current group or current group stays on another artboard => In that case need to create another group\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID) {\n // Process of creating new connection \n let localDirection, localStyle, localType\n if(direction == \"Auto\"){\n // If direction is auto, we need to specify direction ourselves\n localDirection = getDirection(firstObjectID, secondObjectID)\n } else {\n localDirection = direction\n }\n\n if(type == null){\n localType = Settings.settingForKey(\"arrowType\") \n } else {\n localType = type\n }\n \n // log(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey))\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey))\n \n if(style != null){\n // if we updating connection with previously created objects\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n localStyle = style\n } else {\n localStyle = \"Default Style\"\n }\n } else {\n // We don't have any data from the plugin data\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)){\n localStyle = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)\n } else {\n localStyle = \"Default Style\"\n }\n \n }\n \n \n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n let currentArrowsGroup = checkForGroup(\"Arrows\")\n let line = drawLine(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentArrowsGroup, conditionID)\n addToArrowsGroup(line, currentArrowsGroup)\n\n\n // if(localStyle != \"Default Style\"){\n // localStyle = localStyle[0].name()\n // }\n\n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : localStyle,\n condition : conditionID,\n type : localType,\n direction: localDirection,\n line : line.objectID()\n }\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForGroup(groupName) {\n let currentGroup = null\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n // If we already have \"Arrow\" group we need to save it's folder\n currentGroup = currentParentGroup.layers()[i]\n refactorLines(currentGroup)\n } \n }\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n if(diffX > diffY) {\n direction = \"Down\"\n } else {\n direction = \"Right\"\n }\n } else {\n // Top quarter\n if(absDiffX > absDiffY) {\n direction = \"Right\"\n } else {\n direction = \"Up\"\n }\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n if(absDiffX > absDiffY) {\n direction = \"Left\"\n } else {\n direction = \"Down\"\n }\n } else {\n // Top quarter\n if(diffX > diffY) {\n direction = \"Left\"\n } else {\n direction = \"Up\"\n }\n }\n }\n return direction\n}\n\nfunction drawLine(firstObjectID, secondObjectID, style, type, direction, currentGroup, conditionID){\n let firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, middlePosX, middlePosY, diffX, diffY, line\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n\n if(currentGroup){\n //if we already have a group, need to specify the difference\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n // Drawing a line\n let path = NSBezierPath.bezierPath()\n\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(type == \"Angled\" || type == null){\n // Based on direction, we need to specify connection points\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n\n\n // Making middle points rounded\n let points = line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n\n // Providing Settings for the arrow\n line.setName(\"Arrow\")\n }\n\n if(type == \"Straight\"){\n // Based on direction, we need to specify connection points\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n \n // Providing Settings for the arrow\n line.setName(\"Arrow\")\n }\n\n if(type == \"Curved\"){\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Auto\"){\n sourceObjectID = firstObject.id\n }\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n } else {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[0].objectID(), direction)\n }\n \n return sourceObjectID\n}\n\nfunction confirmationAlert(alert, message) {\n // Title\n alert.setMessageText(\"Would you like to delete all the arrows from \"+message)\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Delete Arrows\")\n alert.addButtonWithTitle(\"Cancel\")\n \n // Creating the view\n const viewWidth = 300\n const viewHeight = 40\n \n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n \n // Label\n var infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(-1, viewHeight - 40, 330, 40))\n \n infoLabel.setStringValue(\"ℹ️ You can select layers, artboards to delete all the arrows from selected one only\")\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n \n view.addSubview(infoLabel)\n\n return alert\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) {\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n if(name == null) {\n for(let i = 0; i < allStyles.count(); i++){\n if(allStyles[i].name().includes(keyword)){\n styles.push(allStyles[i]);\n }\n }\n } else {\n // Searching only for name\n for(let i = 0; i < allStyles.count(); i++){\n if(allStyles[i].name() == name){\n styles.push(allStyles[i]);\n }\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, condition){\n let selection = context.selection\n let localDirection\n if(direction == null){localDirection = arrowDirectionSetting} else {localDirection = direction}\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n if(connectionIndex != null){\n // Because this is creating flow, we need to take the direction from user settings\n if(condition == true){\n let libraryConditionID = getConditionID(\"Answer YES\")\n // Need to remake the arrow condition\n if(currentConnectionsData[connectionIndex].condition){\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, libraryConditionID, connectionIndex)\n } else {\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n }\n } else {\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n }\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n // There is no connection with this two objects in our database\n if(condition == true){\n let libraryConditionID = getConditionID(\"Answer YES\")\n createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, libraryConditionID)\n } else {\n createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, null)\n }\n sketch.UI.message(\"New connection is created 🚀\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\n// {\n// \"script\": \"./script.js\",\n// \"name\" : \"onLayersMoved\",\n// \"handlers\" : {\n// \"actions\": {\n// \"LayersMoved.finish\": \"onLayersMoved\"\n// }\n// },\n// \"identifier\" : \"onLayersMoved\"\n// }\n\nfunction getConditionID(keyword){\n let libraries = sketch.getLibraries()\n let conditionID, symbolReferences\n // let keyword = \"#condition\"\n\n // log(libraries.length)\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionID = symbolReferences[i].id \n }\n }\n }\n\n if(conditionID == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n }\n\n // symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n // log(symbolReferences)\n // var symbolMaster = symbolReferences[0].import()\n\n\n // var instance = symbolMaster.createNewInstance()\n // console.log(instance)\n\n\n // instance.parent = currentParentGroup\n // log(symbolMaster)\n\n return conditionID\n}\n\nfunction addCondition(keyword, x, y){\n let libraries = sketch.getLibraries()\n let conditionObject, symbolReferences\n // let keyword = \"#condition\"\n\n // log(libraries.length)\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionObject = symbolReferences[i]\n }\n }\n }\n\n if(conditionObject == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n } else {\n let symbolMaster = conditionObject.import()\n let instance = symbolMaster.createNewInstance()\n instance.parent = currentParentGroup\n instance.frame.x = x - instance.frame.width / 2 \n instance.frame.y = y - instance.frame.height / 2\n }\n\n return conditionObject\n}\n\n\n\n\n\n\n","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/src/script.js b/src/script.js index 3e688bd..6445fcc 100644 --- a/src/script.js +++ b/src/script.js @@ -551,22 +551,67 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current // Drawing a line let path = NSBezierPath.bezierPath() - if(type == "Angled" || type == null){ - // Based on direction, we need to specify connection points + // Getting all the positions + if(direction == "Up"){ + // First Layer Position Start Point Position + firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX + firstLayerPosY = firstObjectAbsPos.y-diffY + + // Second Layer Position End Point Position + secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX + secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY + + // Middle Points + middlePosX = (firstLayerPosX + secondLayerPosX)/2 + middlePosY = (firstLayerPosY + secondLayerPosY)/2 + } + + if(direction == "Right"){ + // First Layer Position Start Point Position + firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX + firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY + + // Second Layer Position End Point Position + secondLayerPosX = secondObjectAbsPos.x-diffX + secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY - if(direction == "Up"){ - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX - firstLayerPosY = firstObjectAbsPos.y-diffY + // Middle Points + middlePosX = (firstLayerPosX + secondLayerPosX)/2 + middlePosY = (firstLayerPosY + secondLayerPosY)/2 + } - // Second Layer Position End Point Position - secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX - secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY + if(direction == "Down"){ + // First Layer Position Start Point Position + firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX + firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY - // Middle Points - middlePosX = (firstLayerPosX + secondLayerPosX)/2 - middlePosY = (firstLayerPosY + secondLayerPosY)/2 + // Second Layer Position End Point Position + secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX + secondLayerPosY = secondObjectAbsPos.y-diffY + // Middle Points + middlePosX = (firstLayerPosX + secondLayerPosX)/2 + middlePosY = (firstLayerPosY + secondLayerPosY)/2 + } + + if(direction == "Left"){ + // First Layer Position Start Point Position + firstLayerPosX = firstObjectAbsPos.x-diffX + firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY + + // Second Layer Position End Point Position + secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX + secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY + + // Middle Points + middlePosX = (firstLayerPosX + secondLayerPosX)/2 + middlePosY = (firstLayerPosY + secondLayerPosY)/2 + } + + if(type == "Angled" || type == null){ + // Based on direction, we need to specify connection points + + if(direction == "Up"){ // Connecting points path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)) path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY)) @@ -575,18 +620,6 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current } if(direction == "Right"){ - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX - firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY - - // Second Layer Position End Point Position - secondLayerPosX = secondObjectAbsPos.x-diffX - secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY - - // Middle Points - middlePosX = (firstLayerPosX + secondLayerPosX)/2 - middlePosY = (firstLayerPosY + secondLayerPosY)/2 - // Connecting points path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)) path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY)) @@ -595,18 +628,6 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current } if(direction == "Down"){ - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX - firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY - - // Second Layer Position End Point Position - secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX - secondLayerPosY = secondObjectAbsPos.y-diffY - - // Middle Points - middlePosX = (firstLayerPosX + secondLayerPosX)/2 - middlePosY = (firstLayerPosY + secondLayerPosY)/2 - // Connecting points path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)) path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY)) @@ -615,18 +636,6 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current } if(direction == "Left"){ - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x-diffX - firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY - - // Second Layer Position End Point Position - secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX - secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY - - // Middle Points - middlePosX = (firstLayerPosX + secondLayerPosX)/2 - middlePosY = (firstLayerPosY + secondLayerPosY)/2 - // Connecting points path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)) path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY)) @@ -634,8 +643,6 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)) } - //TODO: Provide a separate file with all the stylings - // Painting the line line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) @@ -652,72 +659,24 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current if(type == "Straight"){ // Based on direction, we need to specify connection points if(direction == "Up"){ - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX - firstLayerPosY = firstObjectAbsPos.y-diffY - - // Second Layer Position End Point Position - secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX - secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY - - // Middle Points - middlePosX = (firstLayerPosX + secondLayerPosX)/2 - middlePosY = (firstLayerPosY + secondLayerPosY)/2 - // Connecting points path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)) path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)) } if(direction == "Right"){ - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX - firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY - - // Second Layer Position End Point Position - secondLayerPosX = secondObjectAbsPos.x-diffX - secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY - - // Middle Points - middlePosX = (firstLayerPosX + secondLayerPosX)/2 - middlePosY = (firstLayerPosY + secondLayerPosY)/2 - // Connecting points path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)) path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)) } if(direction == "Down"){ - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX - firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY - - // Second Layer Position End Point Position - secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX - secondLayerPosY = secondObjectAbsPos.y-diffY - - // Middle Points - middlePosX = (firstLayerPosX + secondLayerPosX)/2 - middlePosY = (firstLayerPosY + secondLayerPosY)/2 - // Connecting points path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)) path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)) } if(direction == "Left"){ - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x-diffX - firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY - - // Second Layer Position End Point Position - secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX - secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY - - // Middle Points - middlePosX = (firstLayerPosX + secondLayerPosX)/2 - middlePosY = (firstLayerPosY + secondLayerPosY)/2 - // Connecting points path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)) path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)) @@ -731,20 +690,7 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current } if(type == "Curved"){ - // Based on direction, we need to specify connection points if(direction == "Up"){ - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX - firstLayerPosY = firstObjectAbsPos.y-diffY - - // Second Layer Position End Point Position - secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX - secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY - - // Middle Points - middlePosX = (firstLayerPosX + secondLayerPosX)/2 - middlePosY = (firstLayerPosY + secondLayerPosY)/2 - // Connecting points path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)) path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)) @@ -772,18 +718,6 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current } if(direction == "Right"){ - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX - firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY - - // Second Layer Position End Point Position - secondLayerPosX = secondObjectAbsPos.x-diffX - secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY - - // Middle Points - middlePosX = (firstLayerPosX + secondLayerPosX)/2 - middlePosY = (firstLayerPosY + secondLayerPosY)/2 - // Connecting points path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)) path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)) @@ -811,18 +745,6 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current } if(direction == "Down"){ - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX - firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY - - // Second Layer Position End Point Position - secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX - secondLayerPosY = secondObjectAbsPos.y-diffY - - // Middle Points - middlePosX = (firstLayerPosX + secondLayerPosX)/2 - middlePosY = (firstLayerPosY + secondLayerPosY)/2 - // Connecting points path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)) path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)) @@ -850,18 +772,6 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current } if(direction == "Left"){ - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x-diffX - firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY - - // Second Layer Position End Point Position - secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX - secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY - - // Middle Points - middlePosX = (firstLayerPosX + secondLayerPosX)/2 - middlePosY = (firstLayerPosY + secondLayerPosY)/2 - // Connecting points path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)) path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)) @@ -893,7 +803,7 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current } if(conditionID != null){ - addCondition("Answer YES", x, y) + addCondition("Answer YES", middlePosX, middlePosY) } @@ -1481,7 +1391,7 @@ function getConditionID(keyword){ return conditionID } -function addCondition(keyword){ +function addCondition(keyword, x, y){ let libraries = sketch.getLibraries() let conditionObject, symbolReferences // let keyword = "#condition" @@ -1504,6 +1414,8 @@ function addCondition(keyword){ let symbolMaster = conditionObject.import() let instance = symbolMaster.createNewInstance() instance.parent = currentParentGroup + instance.frame.x = x - instance.frame.width / 2 + instance.frame.y = y - instance.frame.height / 2 } return conditionObject From 41f2ee7711e7163518b356ec84daea243efd80dc Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Wed, 20 Mar 2019 23:27:49 +0300 Subject: [PATCH 06/44] refactoring --- arrows.sketchplugin/Contents/Sketch/script.js | 74 +++++++++---------- .../Contents/Sketch/script.js.map | 2 +- src/script.js | 71 +++++++++--------- 3 files changed, 71 insertions(+), 76 deletions(-) diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index 226a217..456f37f 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -511,7 +511,7 @@ function updateArrow(firstObjectID, secondObjectID, style, type, direction, line } } -function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID) { +function createArrow(firstObjectID, secondObjectID, style, type, direction, condition) { // Process of creating new connection var localDirection, localStyle, localType; @@ -550,7 +550,8 @@ function createArrow(firstObjectID, secondObjectID, style, type, direction, cond updateSpacing(firstObjectID, secondObjectID, localDirection); autoAlignLayer(firstObjectID, secondObjectID, localDirection); var currentArrowsGroup = checkForGroup("Arrows"); - var line = drawLine(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentArrowsGroup, conditionID); + var line = drawLine(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentArrowsGroup, condition); + log(line); addToArrowsGroup(line, currentArrowsGroup); // if(localStyle != "Default Style"){ // localStyle = localStyle[0].name() // } @@ -636,8 +637,9 @@ function getDirection(firstObjectID, secondObjectID) { return direction; } -function drawLine(firstObjectID, secondObjectID, style, type, direction, currentGroup, conditionID) { - var firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, middlePosX, middlePosY, diffX, diffY, line; +function drawLine(firstObjectID, secondObjectID, style, type, direction, currentGroup, condition) { + var firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, middlePosX, middlePosY, diffX, diffY; + var line = []; var firstObject = document.getLayerWithID(firstObjectID); var secondObject = document.getLayerWithID(secondObjectID); var firstObjectAbsPos = firstObject.frame.changeBasis({ @@ -744,13 +746,13 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current } // Painting the line - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); // Making middle points rounded + line[0] = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); // Making middle points rounded - var points = line.layers().firstObject().points(); + var points = line[0].layers().firstObject().points(); points[1].cornerRadius = 20; points[2].cornerRadius = 20; // Providing Settings for the arrow - line.setName("Arrow"); + line[0].setName("Arrow"); } if (type == "Straight") { @@ -780,9 +782,9 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current } // Painting the line - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); // Providing Settings for the arrow + line[0] = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); // Providing Settings for the arrow - line.setName("Arrow"); + line[0].setName("Arrow"); } if (type == "Curved") { @@ -791,9 +793,9 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + line[0] = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - var _points = line.layers().firstObject().points(); + var _points = line[0].layers().firstObject().points(); _points[0].curveMode = _points[1].curveMode = 4; _points[0].hasCurveFrom = _points[1].hasCurveTo = true; @@ -840,9 +842,9 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + line[0] = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - var _points2 = line.layers().firstObject().points(); + var _points2 = line[0].layers().firstObject().points(); _points2[0].curveMode = _points2[1].curveMode = 4; _points2[0].hasCurveFrom = _points2[1].hasCurveTo = true; @@ -889,9 +891,9 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + line[0] = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - var _points3 = line.layers().firstObject().points(); + var _points3 = line[0].layers().firstObject().points(); _points3[0].curveMode = _points3[1].curveMode = 4; _points3[0].hasCurveFrom = _points3[1].hasCurveTo = true; @@ -938,9 +940,9 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + line[0] = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - var _points4 = line.layers().firstObject().points(); + var _points4 = line[0].layers().firstObject().points(); _points4[0].curveMode = _points4[1].curveMode = 4; _points4[0].hasCurveFrom = _points4[1].hasCurveTo = true; @@ -983,11 +985,11 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current } // Providing Settings for the arrow - line.setName("Arrows"); + line[0].setName("Arrows"); } - if (conditionID != null) { - addCondition("Answer YES", middlePosX, middlePosY); + if (condition != false) { + line[1] = addCondition("Answer YES", middlePosX, middlePosY); } if (style == null) { @@ -999,7 +1001,7 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current if (_style[0] == null) { // Default Arrow Style - var border = line.style().addStylePartOfType(1); + var border = line[0].style().addStylePartOfType(1); border.color = MSColor.colorWithRGBADictionary({ r: 0.89, g: 0.89, @@ -1007,13 +1009,13 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current a: 1 }); border.thickness = 2; - line.style().endMarkerType = 2; + line[0].style().endMarkerType = 2; } else { - line.sharedStyle = _style[0]; + line[0].sharedStyle = _style[0]; } } else { // Default Arrow Style - var _border = line.style().addStylePartOfType(1); + var _border = line[0].style().addStylePartOfType(1); _border.color = MSColor.colorWithRGBADictionary({ r: 0.89, @@ -1022,13 +1024,13 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current a: 1 }); _border.thickness = 2; - line.style().endMarkerType = 2; + line[0].style().endMarkerType = 2; } } else { // arrow style already provided if (style == "Default Style") { // Default Arrow Style - var _border2 = line.style().addStylePartOfType(1); + var _border2 = line[0].style().addStylePartOfType(1); _border2.color = MSColor.colorWithRGBADictionary({ r: 0.89, @@ -1037,11 +1039,11 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current a: 1 }); _border2.thickness = 2; - line.style().endMarkerType = 2; + line[0].style().endMarkerType = 2; } else { // User provided own style var ownStyle = getLayerStyles(style); - line.sharedStyle = ownStyle[0]; + line[0].sharedStyle = ownStyle[0]; } } @@ -1516,12 +1518,11 @@ function start(context, direction, condition) { if (connectionIndex != null) { // Because this is creating flow, we need to take the direction from user settings if (condition == true) { - var libraryConditionID = getConditionID("Answer YES"); // Need to remake the arrow condition - + // Need to remake the arrow condition if (currentConnectionsData[connectionIndex].condition) { - updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, libraryConditionID, connectionIndex); - } else { updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex); + } else { + updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, true, connectionIndex); } } else { updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex); @@ -1531,11 +1532,9 @@ function start(context, direction, condition) { } else { // There is no connection with this two objects in our database if (condition == true) { - var _libraryConditionID = getConditionID("Answer YES"); - - createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, _libraryConditionID); + createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, true); } else { - createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, null); + createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, false); } sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("New connection is created 🚀"); @@ -1591,8 +1590,7 @@ function getConditionID(keyword) { function addCondition(keyword, x, y) { var libraries = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.getLibraries(); - var conditionObject, symbolReferences; // let keyword = "#condition" - // log(libraries.length) + var conditionObject, symbolReferences; for (var g = 0; g < libraries.length; g++) { symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document); diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index 1b016d0..8fc7743 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","SharedStyle","pluginKey","document","sketch","fromNative","context","docData","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","currentParentGroup","currentPage","currentArtboard","newConnectionsData","getConnectionsData","Settings","arrowDirectionSetting","settingForKey","createDefaultArrow","start","createAutoArrow","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","updateSelectedArrows","selection","count","currentConnectionsData","g","objectID","connectionIndex","findConnectionData","updateArrow","firstObject","secondObject","style","type","direction","line","condition","message","setValue_forKey_onLayer_forPluginIdentifier","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","length","updateArrowsCounter","i","getLayerWithID","sketchObject","parentArtboard","class","push","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","views","subviews","title","setSettingForKey","intValue","state","onLayersMoved","action","actionContext","panel","ControlBar","NSPanel","setStyleMask","NSTitledWindowMask","NSFullSizeContentViewWindowMask","setTitleVisibility","NSWindowTitleHidden","setTitlebarAppearsTransparent","setFrame_display","setMovableByWindowBackground","setHasShadow","setLevel","NSFloatingWindowLevel","center","makeKeyAndOrderFront","nil","firstObjectID","secondObjectID","lineID","conditionID","createArrow","localDirection","localStyle","localType","getDirection","getLayerStyles","updateSpacing","autoAlignLayer","currentArrowsGroup","checkForGroup","drawLine","addToArrowsGroup","connection","groupName","currentGroup","layers","name","refactorLines","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","firstLayerPosX","firstLayerPosY","secondLayerPosX","secondLayerPosY","middlePosX","middlePosY","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","addCondition","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","sharedStyle","ownStyle","addLayers","fixGeometryWithOptions","Group","group","locked","moveToBack","dataArray","pluginDataConnections","data","arrayNumber","setActiveDirectionSetting","arrowDirectionField","currentDirection","addItemWithTitle","lastItem","setState","docSettings","styles","docTypeSettings","newConnections","lineObject","selectedGroup","remove","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","defineSourceObject","id","getSourceObjectFromSelection","confirmationAlert","setMessageText","addButtonWithTitle","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","allStyles","allLayerStyles","keyword","includes","libraryConditionID","getConditionID","libraries","getLibraries","symbolReferences","getImportableSymbolReferencesForDocument","conditionObject","symbolMaster","import","instance","createNewInstance"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch'\n// const { toArray } = require('util')\n\n//\n// Variables\n//\n\nlet UI = require('sketch/ui') \nvar SharedStyle = require('sketch/dom').SharedStyle\n\nconst pluginKey = \"flowArrows\"\nconst document = sketch.fromNative(context.document)\nlet docData = context.document.documentData()\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey) // TODO: Need to refactor\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards\nlet newConnectionsData = getConnectionsData()\n\n// Settings\nvar Settings = require('sketch/settings')\nlet arrowDirectionSetting\n\nif(Settings.settingForKey(\"arrowDirection\")) {\n arrowDirectionSetting = Settings.settingForKey('arrowDirection')\n} else {\n arrowDirectionSetting = \"Auto\"\n}\n \n//\n// Create Connection Function\n//\n\nexport default function(context) {}\nexport function createDefaultArrow(context){start(context, null)}\nexport function createAutoArrow(context){start(context, \"Auto\")}\nexport function createRightArrow(context){start(context, \"Right\", false)}\nexport function createDownArrow(context){start(context, \"Down\", false)}\nexport function createLeftArrow(context){start(context, \"Left\", false)}\nexport function createUpArrow(context){start(context, \"Up\", false)}\n\nexport function createRightArrowWithCondition(context){start(context, \"Right\", true)}\nexport function createDownArrowWithCondition(context){start(context, \"Down\", true)}\nexport function createLeftArrowWithCondition(context){start(context, \"Left\", true)}\nexport function createUpArrowWithCondition(context){start(context, \"Up\", true)}\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n\n let selection = context.selection\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n // let sourceObjectID = getSourceObjectFromSelection(selection)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, connectionIndex) {\n // There might be a situation, when user deleted current group or current group stays on another artboard => In that case need to create another group\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID) {\n // Process of creating new connection \n let localDirection, localStyle, localType\n if(direction == \"Auto\"){\n // If direction is auto, we need to specify direction ourselves\n localDirection = getDirection(firstObjectID, secondObjectID)\n } else {\n localDirection = direction\n }\n\n if(type == null){\n localType = Settings.settingForKey(\"arrowType\") \n } else {\n localType = type\n }\n \n // log(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey))\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey))\n \n if(style != null){\n // if we updating connection with previously created objects\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n localStyle = style\n } else {\n localStyle = \"Default Style\"\n }\n } else {\n // We don't have any data from the plugin data\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)){\n localStyle = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)\n } else {\n localStyle = \"Default Style\"\n }\n \n }\n \n \n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n let currentArrowsGroup = checkForGroup(\"Arrows\")\n let line = drawLine(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentArrowsGroup, conditionID)\n addToArrowsGroup(line, currentArrowsGroup)\n\n\n // if(localStyle != \"Default Style\"){\n // localStyle = localStyle[0].name()\n // }\n\n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : localStyle,\n condition : conditionID,\n type : localType,\n direction: localDirection,\n line : line.objectID()\n }\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForGroup(groupName) {\n let currentGroup = null\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n // If we already have \"Arrow\" group we need to save it's folder\n currentGroup = currentParentGroup.layers()[i]\n refactorLines(currentGroup)\n } \n }\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n if(diffX > diffY) {\n direction = \"Down\"\n } else {\n direction = \"Right\"\n }\n } else {\n // Top quarter\n if(absDiffX > absDiffY) {\n direction = \"Right\"\n } else {\n direction = \"Up\"\n }\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n if(absDiffX > absDiffY) {\n direction = \"Left\"\n } else {\n direction = \"Down\"\n }\n } else {\n // Top quarter\n if(diffX > diffY) {\n direction = \"Left\"\n } else {\n direction = \"Up\"\n }\n }\n }\n return direction\n}\n\nfunction drawLine(firstObjectID, secondObjectID, style, type, direction, currentGroup, conditionID){\n let firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, middlePosX, middlePosY, diffX, diffY, line\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n\n if(currentGroup){\n //if we already have a group, need to specify the difference\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n // Drawing a line\n let path = NSBezierPath.bezierPath()\n\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(type == \"Angled\" || type == null){\n // Based on direction, we need to specify connection points\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n\n\n // Making middle points rounded\n let points = line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n\n // Providing Settings for the arrow\n line.setName(\"Arrow\")\n }\n\n if(type == \"Straight\"){\n // Based on direction, we need to specify connection points\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n \n // Providing Settings for the arrow\n line.setName(\"Arrow\")\n }\n\n if(type == \"Curved\"){\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Auto\"){\n sourceObjectID = firstObject.id\n }\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n } else {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[0].objectID(), direction)\n }\n \n return sourceObjectID\n}\n\nfunction confirmationAlert(alert, message) {\n // Title\n alert.setMessageText(\"Would you like to delete all the arrows from \"+message)\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Delete Arrows\")\n alert.addButtonWithTitle(\"Cancel\")\n \n // Creating the view\n const viewWidth = 300\n const viewHeight = 40\n \n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n \n // Label\n var infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(-1, viewHeight - 40, 330, 40))\n \n infoLabel.setStringValue(\"ℹ️ You can select layers, artboards to delete all the arrows from selected one only\")\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n \n view.addSubview(infoLabel)\n\n return alert\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) {\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n if(name == null) {\n for(let i = 0; i < allStyles.count(); i++){\n if(allStyles[i].name().includes(keyword)){\n styles.push(allStyles[i]);\n }\n }\n } else {\n // Searching only for name\n for(let i = 0; i < allStyles.count(); i++){\n if(allStyles[i].name() == name){\n styles.push(allStyles[i]);\n }\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, condition){\n let selection = context.selection\n let localDirection\n if(direction == null){localDirection = arrowDirectionSetting} else {localDirection = direction}\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n if(connectionIndex != null){\n // Because this is creating flow, we need to take the direction from user settings\n if(condition == true){\n let libraryConditionID = getConditionID(\"Answer YES\")\n // Need to remake the arrow condition\n if(currentConnectionsData[connectionIndex].condition){\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, libraryConditionID, connectionIndex)\n } else {\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n }\n } else {\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n }\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n // There is no connection with this two objects in our database\n if(condition == true){\n let libraryConditionID = getConditionID(\"Answer YES\")\n createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, libraryConditionID)\n } else {\n createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, null)\n }\n sketch.UI.message(\"New connection is created 🚀\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\n// {\n// \"script\": \"./script.js\",\n// \"name\" : \"onLayersMoved\",\n// \"handlers\" : {\n// \"actions\": {\n// \"LayersMoved.finish\": \"onLayersMoved\"\n// }\n// },\n// \"identifier\" : \"onLayersMoved\"\n// }\n\nfunction getConditionID(keyword){\n let libraries = sketch.getLibraries()\n let conditionID, symbolReferences\n // let keyword = \"#condition\"\n\n // log(libraries.length)\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionID = symbolReferences[i].id \n }\n }\n }\n\n if(conditionID == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n }\n\n // symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n // log(symbolReferences)\n // var symbolMaster = symbolReferences[0].import()\n\n\n // var instance = symbolMaster.createNewInstance()\n // console.log(instance)\n\n\n // instance.parent = currentParentGroup\n // log(symbolMaster)\n\n return conditionID\n}\n\nfunction addCondition(keyword, x, y){\n let libraries = sketch.getLibraries()\n let conditionObject, symbolReferences\n // let keyword = \"#condition\"\n\n // log(libraries.length)\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionObject = symbolReferences[i]\n }\n }\n }\n\n if(conditionObject == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n } else {\n let symbolMaster = conditionObject.import()\n let instance = symbolMaster.createNewInstance()\n instance.parent = currentParentGroup\n instance.frame.x = x - instance.frame.width / 2 \n instance.frame.y = y - instance.frame.height / 2\n }\n\n return conditionObject\n}\n\n\n\n\n\n\n","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","SharedStyle","pluginKey","document","sketch","fromNative","context","docData","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","currentParentGroup","currentPage","currentArtboard","newConnectionsData","getConnectionsData","Settings","arrowDirectionSetting","settingForKey","createDefaultArrow","start","createAutoArrow","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","updateSelectedArrows","selection","count","currentConnectionsData","g","objectID","connectionIndex","findConnectionData","updateArrow","firstObject","secondObject","style","type","direction","line","condition","message","setValue_forKey_onLayer_forPluginIdentifier","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","length","updateArrowsCounter","i","getLayerWithID","sketchObject","parentArtboard","class","push","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","views","subviews","title","setSettingForKey","intValue","state","onLayersMoved","action","actionContext","panel","ControlBar","NSPanel","setStyleMask","NSTitledWindowMask","NSFullSizeContentViewWindowMask","setTitleVisibility","NSWindowTitleHidden","setTitlebarAppearsTransparent","setFrame_display","setMovableByWindowBackground","setHasShadow","setLevel","NSFloatingWindowLevel","center","makeKeyAndOrderFront","nil","firstObjectID","secondObjectID","lineID","conditionID","createArrow","localDirection","localStyle","localType","getDirection","getLayerStyles","updateSpacing","autoAlignLayer","currentArrowsGroup","checkForGroup","drawLine","log","addToArrowsGroup","connection","groupName","currentGroup","layers","name","refactorLines","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","firstLayerPosX","firstLayerPosY","secondLayerPosX","secondLayerPosY","middlePosX","middlePosY","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","addCondition","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","sharedStyle","ownStyle","addLayers","fixGeometryWithOptions","Group","group","locked","moveToBack","dataArray","pluginDataConnections","data","arrayNumber","setActiveDirectionSetting","arrowDirectionField","currentDirection","addItemWithTitle","lastItem","setState","docSettings","styles","docTypeSettings","newConnections","lineObject","selectedGroup","remove","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","defineSourceObject","id","getSourceObjectFromSelection","confirmationAlert","setMessageText","addButtonWithTitle","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","allStyles","allLayerStyles","keyword","includes","getConditionID","libraries","getLibraries","symbolReferences","getImportableSymbolReferencesForDocument","conditionObject","symbolMaster","import","instance","createNewInstance"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch'\n// const { toArray } = require('util')\n\n//\n// Variables\n//\n\nlet UI = require('sketch/ui') \nvar SharedStyle = require('sketch/dom').SharedStyle\n\nconst pluginKey = \"flowArrows\"\nconst document = sketch.fromNative(context.document)\nlet docData = context.document.documentData()\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey) // TODO: Need to refactor\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards\nlet newConnectionsData = getConnectionsData()\n\n// Settings\nvar Settings = require('sketch/settings')\nlet arrowDirectionSetting\n\nif(Settings.settingForKey(\"arrowDirection\")) {\n arrowDirectionSetting = Settings.settingForKey('arrowDirection')\n} else {\n arrowDirectionSetting = \"Auto\"\n}\n \n//\n// Create Connection Function\n//\n\nexport default function(context) {}\nexport function createDefaultArrow(context){start(context, null)}\nexport function createAutoArrow(context){start(context, \"Auto\")}\nexport function createRightArrow(context){start(context, \"Right\", false)}\nexport function createDownArrow(context){start(context, \"Down\", false)}\nexport function createLeftArrow(context){start(context, \"Left\", false)}\nexport function createUpArrow(context){start(context, \"Up\", false)}\n\nexport function createRightArrowWithCondition(context){start(context, \"Right\", true)}\nexport function createDownArrowWithCondition(context){start(context, \"Down\", true)}\nexport function createLeftArrowWithCondition(context){start(context, \"Left\", true)}\nexport function createUpArrowWithCondition(context){start(context, \"Up\", true)}\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n\n let selection = context.selection\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n // let sourceObjectID = getSourceObjectFromSelection(selection)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, connectionIndex) {\n // There might be a situation, when user deleted current group or current group stays on another artboard => In that case need to create another group\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, condition) {\n // Process of creating new connection \n let localDirection, localStyle, localType\n if(direction == \"Auto\"){\n // If direction is auto, we need to specify direction ourselves\n localDirection = getDirection(firstObjectID, secondObjectID)\n } else {\n localDirection = direction\n }\n\n if(type == null){\n localType = Settings.settingForKey(\"arrowType\") \n } else {\n localType = type\n }\n \n // log(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey))\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey))\n \n if(style != null){\n // if we updating connection with previously created objects\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n localStyle = style\n } else {\n localStyle = \"Default Style\"\n }\n } else {\n // We don't have any data from the plugin data\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)){\n localStyle = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)\n } else {\n localStyle = \"Default Style\"\n }\n \n }\n \n \n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n let currentArrowsGroup = checkForGroup(\"Arrows\")\n let line = drawLine(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentArrowsGroup, condition)\n log(line)\n addToArrowsGroup(line, currentArrowsGroup)\n\n\n // if(localStyle != \"Default Style\"){\n // localStyle = localStyle[0].name()\n // }\n\n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : localStyle,\n condition : conditionID,\n type : localType,\n direction: localDirection,\n line : line.objectID()\n }\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForGroup(groupName) {\n let currentGroup = null\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n // If we already have \"Arrow\" group we need to save it's folder\n currentGroup = currentParentGroup.layers()[i]\n refactorLines(currentGroup)\n } \n }\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n if(diffX > diffY) {\n direction = \"Down\"\n } else {\n direction = \"Right\"\n }\n } else {\n // Top quarter\n if(absDiffX > absDiffY) {\n direction = \"Right\"\n } else {\n direction = \"Up\"\n }\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n if(absDiffX > absDiffY) {\n direction = \"Left\"\n } else {\n direction = \"Down\"\n }\n } else {\n // Top quarter\n if(diffX > diffY) {\n direction = \"Left\"\n } else {\n direction = \"Up\"\n }\n }\n }\n return direction\n}\n\nfunction drawLine(firstObjectID, secondObjectID, style, type, direction, currentGroup, condition){\n let firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, middlePosX, middlePosY, diffX, diffY\n let line = []\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n\n if(currentGroup){\n //if we already have a group, need to specify the difference\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n // Drawing a line\n let path = NSBezierPath.bezierPath()\n\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(type == \"Angled\" || type == null){\n // Based on direction, we need to specify connection points\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n line[0] = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n\n\n // Making middle points rounded\n let points = line[0].layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n\n // Providing Settings for the arrow\n line[0].setName(\"Arrow\")\n }\n\n if(type == \"Straight\"){\n // Based on direction, we need to specify connection points\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n line[0] = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n \n // Providing Settings for the arrow\n line[0].setName(\"Arrow\")\n }\n\n if(type == \"Curved\"){\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n line[0] = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line[0].layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Auto\"){\n sourceObjectID = firstObject.id\n }\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n } else {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[0].objectID(), direction)\n }\n \n return sourceObjectID\n}\n\nfunction confirmationAlert(alert, message) {\n // Title\n alert.setMessageText(\"Would you like to delete all the arrows from \"+message)\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Delete Arrows\")\n alert.addButtonWithTitle(\"Cancel\")\n \n // Creating the view\n const viewWidth = 300\n const viewHeight = 40\n \n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n \n // Label\n var infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(-1, viewHeight - 40, 330, 40))\n \n infoLabel.setStringValue(\"ℹ️ You can select layers, artboards to delete all the arrows from selected one only\")\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n \n view.addSubview(infoLabel)\n\n return alert\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) {\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n if(name == null) {\n for(let i = 0; i < allStyles.count(); i++){\n if(allStyles[i].name().includes(keyword)){\n styles.push(allStyles[i]);\n }\n }\n } else {\n // Searching only for name\n for(let i = 0; i < allStyles.count(); i++){\n if(allStyles[i].name() == name){\n styles.push(allStyles[i]);\n }\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, condition){\n let selection = context.selection\n let localDirection\n if(direction == null){localDirection = arrowDirectionSetting} else {localDirection = direction}\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n if(connectionIndex != null){\n // Because this is creating flow, we need to take the direction from user settings\n if(condition == true){\n // Need to remake the arrow condition\n if(currentConnectionsData[connectionIndex].condition){\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n } else {\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, true, connectionIndex)\n }\n } else {\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n }\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n // There is no connection with this two objects in our database\n if(condition == true){\n createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, true)\n } else {\n createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, false)\n }\n sketch.UI.message(\"New connection is created 🚀\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\n// {\n// \"script\": \"./script.js\",\n// \"name\" : \"onLayersMoved\",\n// \"handlers\" : {\n// \"actions\": {\n// \"LayersMoved.finish\": \"onLayersMoved\"\n// }\n// },\n// \"identifier\" : \"onLayersMoved\"\n// }\n\nfunction getConditionID(keyword){\n let libraries = sketch.getLibraries()\n let conditionID, symbolReferences\n // let keyword = \"#condition\"\n\n // log(libraries.length)\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionID = symbolReferences[i].id \n }\n }\n }\n\n if(conditionID == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n }\n\n // symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n // log(symbolReferences)\n // var symbolMaster = symbolReferences[0].import()\n\n\n // var instance = symbolMaster.createNewInstance()\n // console.log(instance)\n\n\n // instance.parent = currentParentGroup\n // log(symbolMaster)\n\n return conditionID\n}\n\nfunction addCondition(keyword, x, y){\n let libraries = sketch.getLibraries()\n let conditionObject, symbolReferences\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionObject = symbolReferences[i]\n }\n }\n }\n\n if(conditionObject == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n } else {\n let symbolMaster = conditionObject.import()\n let instance = symbolMaster.createNewInstance()\n instance.parent = currentParentGroup\n instance.frame.x = x - instance.frame.width / 2 \n instance.frame.y = y - instance.frame.height / 2\n }\n\n return conditionObject\n}\n\n\n\n\n\n\n","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/src/script.js b/src/script.js index 6445fcc..19eacc3 100644 --- a/src/script.js +++ b/src/script.js @@ -403,7 +403,7 @@ function updateArrow(firstObjectID, secondObjectID, style, type, direction, line } } -function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID) { +function createArrow(firstObjectID, secondObjectID, style, type, direction, condition) { // Process of creating new connection let localDirection, localStyle, localType if(direction == "Auto"){ @@ -443,7 +443,8 @@ function createArrow(firstObjectID, secondObjectID, style, type, direction, cond updateSpacing(firstObjectID, secondObjectID, localDirection) autoAlignLayer(firstObjectID, secondObjectID, localDirection) let currentArrowsGroup = checkForGroup("Arrows") - let line = drawLine(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentArrowsGroup, conditionID) + let line = drawLine(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentArrowsGroup, condition) + log(line) addToArrowsGroup(line, currentArrowsGroup) @@ -531,8 +532,9 @@ function getDirection(firstObjectID, secondObjectID){ return direction } -function drawLine(firstObjectID, secondObjectID, style, type, direction, currentGroup, conditionID){ - let firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, middlePosX, middlePosY, diffX, diffY, line +function drawLine(firstObjectID, secondObjectID, style, type, direction, currentGroup, condition){ + let firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, middlePosX, middlePosY, diffX, diffY + let line = [] let firstObject = document.getLayerWithID(firstObjectID) let secondObject = document.getLayerWithID(secondObjectID) @@ -644,16 +646,16 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current } // Painting the line - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) + line[0] = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) // Making middle points rounded - let points = line.layers().firstObject().points() + let points = line[0].layers().firstObject().points() points[1].cornerRadius = 20 points[2].cornerRadius = 20 // Providing Settings for the arrow - line.setName("Arrow") + line[0].setName("Arrow") } if(type == "Straight"){ @@ -683,10 +685,10 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current } // Painting the line - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) + line[0] = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) // Providing Settings for the arrow - line.setName("Arrow") + line[0].setName("Arrow") } if(type == "Curved"){ @@ -696,8 +698,8 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)) // Painting the line - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) - let points = line.layers().firstObject().points() + line[0] = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) + let points = line[0].layers().firstObject().points() points[0].curveMode = points[1].curveMode = 4 points[0].hasCurveFrom = points[1].hasCurveTo = true @@ -723,8 +725,8 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)) // Painting the line - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) - let points = line.layers().firstObject().points() + line[0] = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) + let points = line[0].layers().firstObject().points() points[0].curveMode = points[1].curveMode = 4 points[0].hasCurveFrom = points[1].hasCurveTo = true @@ -750,8 +752,8 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)) // Painting the line - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) - let points = line.layers().firstObject().points() + line[0] = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) + let points = line[0].layers().firstObject().points() points[0].curveMode = points[1].curveMode = 4 points[0].hasCurveFrom = points[1].hasCurveTo = true @@ -777,8 +779,8 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)) // Painting the line - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) - let points = line.layers().firstObject().points() + line[0] = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) + let points = line[0].layers().firstObject().points() points[0].curveMode = points[1].curveMode = 4 points[0].hasCurveFrom = points[1].hasCurveTo = true @@ -799,11 +801,11 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current } // Providing Settings for the arrow - line.setName("Arrows") + line[0].setName("Arrows") } - if(conditionID != null){ - addCondition("Answer YES", middlePosX, middlePosY) + if(condition != false){ + line[1] = addCondition("Answer YES", middlePosX, middlePosY) } @@ -816,32 +818,32 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current let style = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)) if(style[0] == null){ // Default Arrow Style - let border = line.style().addStylePartOfType(1) + let border = line[0].style().addStylePartOfType(1) border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1}) border.thickness = 2 - line.style().endMarkerType = 2 + line[0].style().endMarkerType = 2 } else { - line.sharedStyle = style[0] + line[0].sharedStyle = style[0] } } else { // Default Arrow Style - let border = line.style().addStylePartOfType(1) + let border = line[0].style().addStylePartOfType(1) border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1}) border.thickness = 2 - line.style().endMarkerType = 2 + line[0].style().endMarkerType = 2 } } else { // arrow style already provided if(style == "Default Style"){ // Default Arrow Style - let border = line.style().addStylePartOfType(1) + let border = line[0].style().addStylePartOfType(1) border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1}) border.thickness = 2 - line.style().endMarkerType = 2 + line[0].style().endMarkerType = 2 } else { // User provided own style let ownStyle = getLayerStyles(style) - line.sharedStyle = ownStyle[0] + line[0].sharedStyle = ownStyle[0] } } @@ -1313,12 +1315,11 @@ function start(context, direction, condition){ if(connectionIndex != null){ // Because this is creating flow, we need to take the direction from user settings if(condition == true){ - let libraryConditionID = getConditionID("Answer YES") // Need to remake the arrow condition if(currentConnectionsData[connectionIndex].condition){ - updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, libraryConditionID, connectionIndex) - } else { updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex) + } else { + updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, true, connectionIndex) } } else { updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex) @@ -1327,10 +1328,9 @@ function start(context, direction, condition){ } else { // There is no connection with this two objects in our database if(condition == true){ - let libraryConditionID = getConditionID("Answer YES") - createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, libraryConditionID) + createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, true) } else { - createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, null) + createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, false) } sketch.UI.message("New connection is created 🚀") } @@ -1394,9 +1394,6 @@ function getConditionID(keyword){ function addCondition(keyword, x, y){ let libraries = sketch.getLibraries() let conditionObject, symbolReferences - // let keyword = "#condition" - - // log(libraries.length) for(let g = 0; g < libraries.length; g++) { symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document) From 074ebe1f8b3e94312490694baa7c4d60ba955e49 Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Sun, 31 Mar 2019 22:54:53 +0300 Subject: [PATCH 07/44] refactoring --- arrows.sketchplugin/Contents/Sketch/script.js | 112 ++++++++---------- .../Contents/Sketch/script.js.map | 2 +- src/script.js | 97 +++++++-------- 3 files changed, 94 insertions(+), 117 deletions(-) diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index 456f37f..5d86ccd 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -95,12 +95,11 @@ var exports = /*!***********************!*\ !*** ./src/script.js ***! \***********************/ -/*! exports provided: default, createDefaultArrow, createAutoArrow, createRightArrow, createDownArrow, createLeftArrow, createUpArrow, createRightArrowWithCondition, createDownArrowWithCondition, createLeftArrowWithCondition, createUpArrowWithCondition, updateSelectedArrows, updateArtboardArrows, updateAllArrows, deleteAllArrows, deleteArtboardArrows, deleteSelectedArrows, settings, onLayersMoved, panel */ +/*! exports provided: default, createAutoArrow, createRightArrow, createDownArrow, createLeftArrow, createUpArrow, createRightArrowWithCondition, createDownArrowWithCondition, createLeftArrowWithCondition, createUpArrowWithCondition, updateSelectedArrows, updateArtboardArrows, updateAllArrows, deleteAllArrows, deleteArtboardArrows, deleteSelectedArrows, settings, onLayersMoved, panel */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createDefaultArrow", function() { return createDefaultArrow; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createAutoArrow", function() { return createAutoArrow; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createRightArrow", function() { return createRightArrow; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createDownArrow", function() { return createDownArrow; }); @@ -126,9 +125,8 @@ __webpack_require__.r(__webpack_exports__); // Variables // -var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); +var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); // var SharedStyle = require('sketch/dom').SharedStyle -var SharedStyle = __webpack_require__(/*! sketch/dom */ "sketch/dom").SharedStyle; var pluginKey = "flowArrows"; var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); @@ -139,23 +137,12 @@ var currentParentGroup = docData.currentPage().currentArtboard() || docData.curr var newConnectionsData = getConnectionsData(); // Settings -var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); - -var arrowDirectionSetting; - -if (Settings.settingForKey("arrowDirection")) { - arrowDirectionSetting = Settings.settingForKey('arrowDirection'); -} else { - arrowDirectionSetting = "Auto"; -} // +var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); // // Create Connection Function // /* harmony default export */ __webpack_exports__["default"] = (function (context) {}); -function createDefaultArrow(context) { - start(context, null); -} function createAutoArrow(context) { start(context, "Auto"); } @@ -550,12 +537,17 @@ function createArrow(firstObjectID, secondObjectID, style, type, direction, cond updateSpacing(firstObjectID, secondObjectID, localDirection); autoAlignLayer(firstObjectID, secondObjectID, localDirection); var currentArrowsGroup = checkForGroup("Arrows"); - var line = drawLine(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentArrowsGroup, condition); - log(line); - addToArrowsGroup(line, currentArrowsGroup); // if(localStyle != "Default Style"){ - // localStyle = localStyle[0].name() - // } - // Storage for current connection + var arrow = drawConnection(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentArrowsGroup, condition); + log(arrow); + addToArrowsGroup(arrow.line, currentArrowsGroup); + var conditionID; + + if (arrow.condition.length > 1) { + conditionID = arrow.condition.id; + } else { + conditionID = null; + } // Storage for current connection + var connection = { firstObject: firstObjectID, @@ -564,7 +556,7 @@ function createArrow(firstObjectID, secondObjectID, style, type, direction, cond condition: conditionID, type: localType, direction: localDirection, - line: line.objectID() // Need to save this data to the global array + line: arrow.line.objectID() // Need to save this data to the global array }; newConnectionsData.push(connection); @@ -637,9 +629,12 @@ function getDirection(firstObjectID, secondObjectID) { return direction; } -function drawLine(firstObjectID, secondObjectID, style, type, direction, currentGroup, condition) { +function drawConnection(firstObjectID, secondObjectID, style, type, direction, currentGroup, condition) { var firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, middlePosX, middlePosY, diffX, diffY; - var line = []; + var connection = { + line: [], + condition: [] + }; var firstObject = document.getLayerWithID(firstObjectID); var secondObject = document.getLayerWithID(secondObjectID); var firstObjectAbsPos = firstObject.frame.changeBasis({ @@ -746,13 +741,13 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current } // Painting the line - line[0] = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); // Making middle points rounded + connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); // Making middle points rounded - var points = line[0].layers().firstObject().points(); + var points = connection.line.layers().firstObject().points(); points[1].cornerRadius = 20; points[2].cornerRadius = 20; // Providing Settings for the arrow - line[0].setName("Arrow"); + connection.line.setName("Arrow"); } if (type == "Straight") { @@ -782,9 +777,9 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current } // Painting the line - line[0] = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); // Providing Settings for the arrow + connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); // Providing Settings for the arrow - line[0].setName("Arrow"); + connection.line.setName("Arrow"); } if (type == "Curved") { @@ -793,9 +788,9 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line - line[0] = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - var _points = line[0].layers().firstObject().points(); + var _points = connection.line.layers().firstObject().points(); _points[0].curveMode = _points[1].curveMode = 4; _points[0].hasCurveFrom = _points[1].hasCurveTo = true; @@ -842,9 +837,9 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line - line[0] = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - var _points2 = line[0].layers().firstObject().points(); + var _points2 = connection.line.layers().firstObject().points(); _points2[0].curveMode = _points2[1].curveMode = 4; _points2[0].hasCurveFrom = _points2[1].hasCurveTo = true; @@ -891,9 +886,9 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line - line[0] = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - var _points3 = line[0].layers().firstObject().points(); + var _points3 = connection.line.layers().firstObject().points(); _points3[0].curveMode = _points3[1].curveMode = 4; _points3[0].hasCurveFrom = _points3[1].hasCurveTo = true; @@ -940,9 +935,9 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line - line[0] = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - var _points4 = line[0].layers().firstObject().points(); + var _points4 = connection.line.layers().firstObject().points(); _points4[0].curveMode = _points4[1].curveMode = 4; _points4[0].hasCurveFrom = _points4[1].hasCurveTo = true; @@ -985,11 +980,11 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current } // Providing Settings for the arrow - line[0].setName("Arrows"); + connection.line.setName("Arrows"); } if (condition != false) { - line[1] = addCondition("Answer YES", middlePosX, middlePosY); + connection.condition = addCondition("#con", middlePosX, middlePosY); } if (style == null) { @@ -1001,7 +996,7 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current if (_style[0] == null) { // Default Arrow Style - var border = line[0].style().addStylePartOfType(1); + var border = connection.line.style().addStylePartOfType(1); border.color = MSColor.colorWithRGBADictionary({ r: 0.89, g: 0.89, @@ -1009,13 +1004,13 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current a: 1 }); border.thickness = 2; - line[0].style().endMarkerType = 2; + connection.line.style().endMarkerType = 2; } else { - line[0].sharedStyle = _style[0]; + connection.line.sharedStyle = _style[0]; } } else { // Default Arrow Style - var _border = line[0].style().addStylePartOfType(1); + var _border = connection.line.style().addStylePartOfType(1); _border.color = MSColor.colorWithRGBADictionary({ r: 0.89, @@ -1024,13 +1019,13 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current a: 1 }); _border.thickness = 2; - line[0].style().endMarkerType = 2; + connection.line.style().endMarkerType = 2; } } else { // arrow style already provided if (style == "Default Style") { // Default Arrow Style - var _border2 = line[0].style().addStylePartOfType(1); + var _border2 = connection.line.style().addStylePartOfType(1); _border2.color = MSColor.colorWithRGBADictionary({ r: 0.89, @@ -1039,15 +1034,15 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current a: 1 }); _border2.thickness = 2; - line[0].style().endMarkerType = 2; + connection.line.style().endMarkerType = 2; } else { // User provided own style var ownStyle = getLayerStyles(style); - line[0].sharedStyle = ownStyle[0]; + connection.line.sharedStyle = ownStyle[0]; } } - return line; + return connection; } function addToArrowsGroup(line, currentGroup) { @@ -1405,8 +1400,6 @@ function getSourceObjectFromSelection(selection, direction) { for (var g = 0; g < selection.count(); g++) { sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction); } - } else { - sourceObjectID = defineSourceObject(sourceObjectID, selection[0].objectID(), direction); } return sourceObjectID; @@ -1497,13 +1490,6 @@ function getLayerStyles(name) { function start(context, direction, condition) { var selection = context.selection; - var localDirection; - - if (direction == null) { - localDirection = arrowDirectionSetting; - } else { - localDirection = direction; - } if (selection.count() > 1) { // Need to find source object by ID first @@ -1520,21 +1506,21 @@ function start(context, direction, condition) { if (condition == true) { // Need to remake the arrow condition if (currentConnectionsData[connectionIndex].condition) { - updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex); + updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex); } else { - updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, true, connectionIndex); + updateArrow(sourceObjectID, selection[g].objectID(), null, null, dDirection, currentConnectionsData[connectionIndex].line, true, connectionIndex); } } else { - updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex); + updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex); } sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Current connection is updated 🚀"); } else { // There is no connection with this two objects in our database if (condition == true) { - createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, true); + createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, true); } else { - createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, false); + createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, false); } sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("New connection is created 🚀"); diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index 8fc7743..4800099 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","SharedStyle","pluginKey","document","sketch","fromNative","context","docData","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","currentParentGroup","currentPage","currentArtboard","newConnectionsData","getConnectionsData","Settings","arrowDirectionSetting","settingForKey","createDefaultArrow","start","createAutoArrow","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","updateSelectedArrows","selection","count","currentConnectionsData","g","objectID","connectionIndex","findConnectionData","updateArrow","firstObject","secondObject","style","type","direction","line","condition","message","setValue_forKey_onLayer_forPluginIdentifier","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","length","updateArrowsCounter","i","getLayerWithID","sketchObject","parentArtboard","class","push","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","views","subviews","title","setSettingForKey","intValue","state","onLayersMoved","action","actionContext","panel","ControlBar","NSPanel","setStyleMask","NSTitledWindowMask","NSFullSizeContentViewWindowMask","setTitleVisibility","NSWindowTitleHidden","setTitlebarAppearsTransparent","setFrame_display","setMovableByWindowBackground","setHasShadow","setLevel","NSFloatingWindowLevel","center","makeKeyAndOrderFront","nil","firstObjectID","secondObjectID","lineID","conditionID","createArrow","localDirection","localStyle","localType","getDirection","getLayerStyles","updateSpacing","autoAlignLayer","currentArrowsGroup","checkForGroup","drawLine","log","addToArrowsGroup","connection","groupName","currentGroup","layers","name","refactorLines","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","firstLayerPosX","firstLayerPosY","secondLayerPosX","secondLayerPosY","middlePosX","middlePosY","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","addCondition","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","sharedStyle","ownStyle","addLayers","fixGeometryWithOptions","Group","group","locked","moveToBack","dataArray","pluginDataConnections","data","arrayNumber","setActiveDirectionSetting","arrowDirectionField","currentDirection","addItemWithTitle","lastItem","setState","docSettings","styles","docTypeSettings","newConnections","lineObject","selectedGroup","remove","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","defineSourceObject","id","getSourceObjectFromSelection","confirmationAlert","setMessageText","addButtonWithTitle","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","allStyles","allLayerStyles","keyword","includes","getConditionID","libraries","getLibraries","symbolReferences","getImportableSymbolReferencesForDocument","conditionObject","symbolMaster","import","instance","createNewInstance"],"mappings":";;;;;;AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;;;;;;;AClFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;CACA;AAEA;AACA;AACA;;AAEA,IAAIA,EAAE,GAAGC,mBAAO,CAAC,4BAAD,CAAhB;;AACA,IAAIC,WAAW,GAAGD,mBAAO,CAAC,8BAAD,CAAP,CAAsBC,WAAxC;;AAEA,IAAMC,SAAS,GAAG,YAAlB;AACA,IAAMC,QAAQ,GAAGC,6CAAM,CAACC,UAAP,CAAkBC,OAAO,CAACH,QAA1B,CAAjB;AACA,IAAII,OAAO,GAAGD,OAAO,CAACH,QAAR,CAAiBK,YAAjB,EAAd;AACA,IAAIC,UAAU,GAAGH,OAAO,CAACI,OAAR,CAAgBC,uCAAhB,CAAwD,kBAAxD,EAA4EJ,OAA5E,EAAqFL,SAArF,CAAjB,C,CAAiH;;AACjH,IAAIU,kBAAkB,GAAGL,OAAO,CAACM,WAAR,GAAsBC,eAAtB,MAA2CP,OAAO,CAACM,WAAR,EAApE,C,CAA0F;;AAC1F,IAAIE,kBAAkB,GAAGC,kBAAkB,EAA3C,C,CAEA;;AACA,IAAIC,QAAQ,GAAGjB,mBAAO,CAAC,wCAAD,CAAtB;;AACA,IAAIkB,qBAAJ;;AAEA,IAAGD,QAAQ,CAACE,aAAT,CAAuB,gBAAvB,CAAH,EAA6C;AAC3CD,uBAAqB,GAAGD,QAAQ,CAACE,aAAT,CAAuB,gBAAvB,CAAxB;AACD,CAFD,MAEO;AACLD,uBAAqB,GAAG,MAAxB;AACD,C,CAED;AACA;AACA;;;AAEe,yEAASZ,OAAT,EAAkB,CAAE;AAC5B,SAASc,kBAAT,CAA4Bd,OAA5B,EAAoC;AAACe,OAAK,CAACf,OAAD,EAAU,IAAV,CAAL;AAAqB;AAC1D,SAASgB,eAAT,CAAyBhB,OAAzB,EAAiC;AAACe,OAAK,CAACf,OAAD,EAAU,MAAV,CAAL;AAAuB;AACzD,SAASiB,gBAAT,CAA0BjB,OAA1B,EAAkC;AAACe,OAAK,CAACf,OAAD,EAAU,OAAV,EAAmB,KAAnB,CAAL;AAA+B;AAClE,SAASkB,eAAT,CAAyBlB,OAAzB,EAAiC;AAACe,OAAK,CAACf,OAAD,EAAU,MAAV,EAAkB,KAAlB,CAAL;AAA8B;AAChE,SAASmB,eAAT,CAAyBnB,OAAzB,EAAiC;AAACe,OAAK,CAACf,OAAD,EAAU,MAAV,EAAkB,KAAlB,CAAL;AAA8B;AAChE,SAASoB,aAAT,CAAuBpB,OAAvB,EAA+B;AAACe,OAAK,CAACf,OAAD,EAAU,IAAV,EAAgB,KAAhB,CAAL;AAA4B;AAE5D,SAASqB,6BAAT,CAAuCrB,OAAvC,EAA+C;AAACe,OAAK,CAACf,OAAD,EAAU,OAAV,EAAmB,IAAnB,CAAL;AAA8B;AAC9E,SAASsB,4BAAT,CAAsCtB,OAAtC,EAA8C;AAACe,OAAK,CAACf,OAAD,EAAU,MAAV,EAAkB,IAAlB,CAAL;AAA6B;AAC5E,SAASuB,4BAAT,CAAsCvB,OAAtC,EAA8C;AAACe,OAAK,CAACf,OAAD,EAAU,MAAV,EAAkB,IAAlB,CAAL;AAA6B;AAC5E,SAASwB,0BAAT,CAAoCxB,OAApC,EAA4C;AAACe,OAAK,CAACf,OAAD,EAAU,IAAV,EAAgB,IAAhB,CAAL;AAA2B,C,CAC/E;AACA;AACA;;AAEO,SAASyB,oBAAT,CAA8BzB,OAA9B,EAAuC;AAE5C,MAAI0B,SAAS,GAAG1B,OAAO,CAAC0B,SAAxB;;AAEA,MAAGA,SAAS,CAACC,KAAV,KAAoB,CAAvB,EAAyB;AACvB;AACA;AACA,QAAIC,sBAAsB,GAAGnB,kBAA7B;;AAEA,SAAI,IAAIoB,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGH,SAAS,CAACC,KAAV,EAAnB,EAAsCE,CAAC,EAAvC,EAA2C;AACzC,UAAGH,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,MAA2BJ,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAA9B,EAAsD;AACpD;AACA,YAAIC,eAAe,GAAGC,kBAAkB,CAACN,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAAD,EAA0BJ,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,EAA1B,EAAmDF,sBAAnD,CAAxC;;AAEA,YAAGG,eAAe,IAAI,IAAtB,EAA2B;AACzBE,qBAAW,CAACL,sBAAsB,CAACG,eAAD,CAAtB,CAAwCG,WAAzC,EAAsDN,sBAAsB,CAACG,eAAD,CAAtB,CAAwCI,YAA9F,EAA4GP,sBAAsB,CAACG,eAAD,CAAtB,CAAwCK,KAApJ,EAA2JR,sBAAsB,CAACG,eAAD,CAAtB,CAAwCM,IAAnM,EAAyMT,sBAAsB,CAACG,eAAD,CAAtB,CAAwCO,SAAjP,EAA4PV,sBAAsB,CAACG,eAAD,CAAtB,CAAwCQ,IAApS,EAA0SX,sBAAsB,CAACG,eAAD,CAAtB,CAAwCS,SAAlV,EAA6VT,eAA7V,CAAX;AACAjC,uDAAM,CAACL,EAAP,CAAUgD,OAAV,CAAkB,kCAAlB;AACD,SAHD,MAGO;AACL3C,uDAAM,CAACL,EAAP,CAAUgD,OAAV,CAAkB,mEAAlB;AACD;AACF;AACF;;AACDzC,WAAO,CAACI,OAAR,CAAgBsC,2CAAhB,CAA4DjC,kBAA5D,EAAgF,kBAAhF,EAAoGR,OAApG,EAA6GL,SAA7G;AACD,GAnBD,MAmBO;AACL;AACAE,iDAAM,CAACL,EAAP,CAAUgD,OAAV,CAAkB,oCAAlB;AACD;AACF;AAEM,SAASE,oBAAT,CAA8B3C,OAA9B,EAAuC;AAC5C;AACA,MAAI0B,SAAS,GAAG1B,OAAO,CAAC0B,SAAxB;AACA,MAAIkB,WAAW,GAAGlC,kBAAkB,EAApC;AACA,MAAImC,mBAAJ;AACA,MAAIC,oBAAJ;;AAEA,MAAGF,WAAW,CAACG,MAAZ,GAAqB,CAAxB,EAA0B;AACxB;AACA,QAAMC,mBAAmB,GAAGJ,WAAW,CAACG,MAAxC;;AACA,SAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,mBAApB,EAAyCC,CAAC,EAA1C,EAA+C;AAC7C;AACAJ,yBAAmB,GAAGhD,QAAQ,CAACqD,cAAT,CAAwBN,WAAW,CAACK,CAAD,CAAX,CAAef,WAAvC,CAAtB;AACAW,yBAAmB,GAAGA,mBAAmB,CAACM,YAApB,CAAiCC,cAAjC,GAAkDtB,QAAlD,EAAtB;AAEAgB,0BAAoB,GAAGjD,QAAQ,CAACqD,cAAT,CAAwBN,WAAW,CAACK,CAAD,CAAX,CAAed,YAAvC,CAAvB;AACAW,0BAAoB,GAAGA,oBAAoB,CAACK,YAArB,CAAkCC,cAAlC,GAAmDtB,QAAnD,EAAvB;;AAEA,UAAGJ,SAAS,CAACC,KAAV,MAAqB,CAArB,IAA0BD,SAAS,CAAC,CAAD,CAAT,CAAa2B,KAAb,MAAwB,iBAArD,EAAuE;AACrE;AAEA,YAAIR,mBAAmB,IAAInB,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAA3B,EAAmD;AACjD,cAAIgB,oBAAoB,IAAIpB,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAA5B,EAAoD;AAClDG,uBAAW,CAACW,WAAW,CAACK,CAAD,CAAX,CAAef,WAAhB,EAA6BU,WAAW,CAACK,CAAD,CAAX,CAAed,YAA5C,EAA0DS,WAAW,CAACK,CAAD,CAAX,CAAeb,KAAzE,EAAgFQ,WAAW,CAACK,CAAD,CAAX,CAAeZ,IAA/F,EAAqGO,WAAW,CAACK,CAAD,CAAX,CAAeX,SAApH,EAA+HM,WAAW,CAACK,CAAD,CAAX,CAAeV,IAA9I,EAAoJK,WAAW,CAACK,CAAD,CAAX,CAAeT,SAAnK,EAA8KS,CAA9K,CAAX;AACD,WAFD,MAEO;AAACxC,8BAAkB,CAAC6C,IAAnB,CAAwBV,WAAW,CAACK,CAAD,CAAnC;AAAwC;AACjD,SAJD,MAIO;AACL;AACAxC,4BAAkB,CAAC6C,IAAnB,CAAwBV,WAAW,CAACK,CAAD,CAAnC;AACD;AACF;AACF;;AACDjD,WAAO,CAACI,OAAR,CAAgBsC,2CAAhB,CAA4DjC,kBAA5D,EAAgF,kBAAhF,EAAoGR,OAApG,EAA6GL,SAA7G;AACAE,iDAAM,CAACL,EAAP,CAAUgD,OAAV,CAAkB,2BAAlB;AACD,GA1BD,MA0BO;AACL;AACA3C,iDAAM,CAACL,EAAP,CAAUgD,OAAV,CAAkB,4BAAlB;AACD;AACF;AAEM,SAASc,eAAT,CAAyBvD,OAAzB,EAAkC;AAAE;AACzC;AACA,MAAI4B,sBAAsB,GAAGnB,kBAA7B;;AACA,MAAGmB,sBAAsB,CAACmB,MAAvB,GAAgC,CAAnC,EAAqC;AACnC;AACA,QAAMC,mBAAmB,GAAGpB,sBAAsB,CAACmB,MAAnD;;AACA,SAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,mBAApB,EAAyCC,CAAC,EAA1C,EAA+C;AAC7C;AACA;AACAhB,iBAAW,CAACL,sBAAsB,CAACqB,CAAD,CAAtB,CAA0Bf,WAA3B,EAAwCN,sBAAsB,CAACqB,CAAD,CAAtB,CAA0Bd,YAAlE,EAAgFP,sBAAsB,CAACqB,CAAD,CAAtB,CAA0Bb,KAA1G,EAAiHR,sBAAsB,CAACqB,CAAD,CAAtB,CAA0BZ,IAA3I,EAAiJT,sBAAsB,CAACqB,CAAD,CAAtB,CAA0BX,SAA3K,EAAsLV,sBAAsB,CAACqB,CAAD,CAAtB,CAA0BV,IAAhN,EAAsNX,sBAAsB,CAACqB,CAAD,CAAtB,CAA0BT,SAAhP,EAA2PS,CAA3P,CAAX;AACD;;AACDjD,WAAO,CAACI,OAAR,CAAgBsC,2CAAhB,CAA4DjC,kBAA5D,EAAgF,kBAAhF,EAAoGR,OAApG,EAA6GL,SAA7G;AACAE,iDAAM,CAACL,EAAP,CAAUgD,OAAV,CAAkB,2BAAlB;AACD,GAVD,MAUO;AACL;AACA3C,iDAAM,CAACL,EAAP,CAAUgD,OAAV,CAAkB,4BAAlB;AACD;AACF;AAEM,SAASe,eAAT,CAAyBxD,OAAzB,EAAkC;AAEvC,MAAGS,kBAAkB,CAACsC,MAAnB,GAA4B,CAA/B,EAAiC;AAC/B;AACA,SAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGxC,kBAAkB,CAACsC,MAAvC,EAA+CE,CAAC,EAAhD,EAAqD;AACnD;AACAQ,gBAAU,CAAChD,kBAAkB,CAACwC,CAAD,CAAlB,CAAsBV,IAAvB,CAAV;AACD;;AACDvC,WAAO,CAACI,OAAR,CAAgBsC,2CAAhB,CAA4D,IAA5D,EAAkE,kBAAlE,EAAsFzC,OAAtF,EAA+FL,SAA/F;AACAE,iDAAM,CAACL,EAAP,CAAUgD,OAAV,CAAkB,wBAAlB;AACD,GARD,MAQO;AACL;AACA3C,iDAAM,CAACL,EAAP,CAAUgD,OAAV,CAAkB,4BAAlB;AACD;AACF;AAEM,SAASiB,oBAAT,CAA8B1D,OAA9B,EAAuC;AAC5C,MAAI0B,SAAS,GAAG1B,OAAO,CAAC0B,SAAxB;AACA,MAAIQ,WAAJ,EAAiBC,YAAjB,CAF4C,CAI5C;;AACA,MAAGT,SAAS,CAACC,KAAV,MAAqB,CAArB,IAA0BD,SAAS,CAAC,CAAD,CAAT,CAAa2B,KAAb,MAAwB,iBAArD,EAAuE;AACrE,QAAIT,WAAW,GAAGlC,kBAAkB,EAApC;;AAEA,QAAGkC,WAAW,CAACG,MAAZ,GAAqB,CAAxB,EAA0B;AACxB;AACA,UAAMC,mBAAmB,GAAGJ,WAAW,CAACG,MAAxC;;AACA,WAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,mBAApB,EAAyCC,CAAC,EAA1C,EAA+C;AAC7C;AACAf,mBAAW,GAAGrC,QAAQ,CAACqD,cAAT,CAAwBN,WAAW,CAACK,CAAD,CAAX,CAAef,WAAvC,CAAd;AACAC,oBAAY,GAAGtC,QAAQ,CAACqD,cAAT,CAAwBN,WAAW,CAACK,CAAD,CAAX,CAAed,YAAvC,CAAf;;AACA,YAAID,WAAW,CAACiB,YAAZ,CAAyBC,cAAzB,GAA0CtB,QAA1C,MAAwDJ,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAA5D,EAAoF;AAClF,cAAIK,YAAY,CAACgB,YAAb,CAA0BC,cAA1B,GAA2CtB,QAA3C,MAAyDJ,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAA7D,EAAqF;AACnF2B,sBAAU,CAACb,WAAW,CAACK,CAAD,CAAX,CAAeV,IAAhB,CAAV;AACA9B,8BAAkB,GAAGkD,wBAAwB,CAACV,CAAD,CAA7C;AACD;AACF;AACF;;AACDjD,aAAO,CAACI,OAAR,CAAgBsC,2CAAhB,CAA4DjC,kBAA5D,EAAgF,kBAAhF,EAAoGR,OAApG,EAA6GL,SAA7G;AACAE,mDAAM,CAACL,EAAP,CAAUgD,OAAV,CAAkB,+CAAlB;AACD,KAhBD,MAgBO;AACL;AACA3C,mDAAM,CAACL,EAAP,CAAUgD,OAAV,CAAkB,4BAAlB;AACD;AACF,GAvBD,MAuBO;AACL3C,iDAAM,CAACL,EAAP,CAAUgD,OAAV,CAAkB,4BAAlB;AACD;AACF;AAEM,SAASmB,oBAAT,CAA8B5D,OAA9B,EAAuC;AAC5C,MAAI0B,SAAS,GAAG1B,OAAO,CAAC0B,SAAxB;AACA,MAAIQ,WAAJ,EAAiBC,YAAjB,CAF4C,CAI5C;;AACA,MAAGT,SAAS,CAACC,KAAV,MAAqB,CAAxB,EAA0B;AAExB,SAAI,IAAIE,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGH,SAAS,CAACC,KAAV,EAAnB,EAAsCE,CAAC,EAAvC,EAA2C;AAEzC,UAAGH,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,MAA2BJ,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAA9B,EAAsD;AAAE;AACtD,YAAIc,WAAW,GAAGlC,kBAAkB,EAApC;AAEA,YAAIqB,eAAe,GAAGC,kBAAkB,CAACN,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAAD,EAA0BJ,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,EAA1B,EAAmDc,WAAnD,CAAxC;;AAEA,YAAGb,eAAe,IAAI,IAAtB,EAA2B;AACzB;AACA0B,oBAAU,CAACb,WAAW,CAACb,eAAD,CAAX,CAA6BQ,IAA9B,CAAV;AACA9B,4BAAkB,GAAGkD,wBAAwB,CAAC5B,eAAD,CAA7C;AACA,cAAMiB,mBAAmB,GAAGJ,WAAW,CAACG,MAAxC;;AACA,eAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,mBAApB,EAAyCC,CAAC,EAA1C,EAA+C;AAC7C;AACAf,uBAAW,GAAGrC,QAAQ,CAACqD,cAAT,CAAwBN,WAAW,CAACK,CAAD,CAAX,CAAef,WAAvC,CAAd;AACAC,wBAAY,GAAGtC,QAAQ,CAACqD,cAAT,CAAwBN,WAAW,CAACK,CAAD,CAAX,CAAed,YAAvC,CAAf;;AACA,gBAAGD,WAAW,CAACiB,YAAZ,CAAyBC,cAAzB,GAA0CtB,QAA1C,MAAwDJ,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAA3D,EAAmF;AACjF,kBAAGK,YAAY,CAACgB,YAAb,CAA0BC,cAA1B,GAA2CtB,QAA3C,MAAyDJ,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAA5D,EAAoF;AAClF2B,0BAAU,CAACb,WAAW,CAACK,CAAD,CAAX,CAAeV,IAAhB,CAAV;AACA9B,kCAAkB,GAAGkD,wBAAwB,CAACV,CAAD,CAA7C;AACD;AACF;AACF;;AACDjD,iBAAO,CAACI,OAAR,CAAgBsC,2CAAhB,CAA4DjC,kBAA5D,EAAgF,kBAAhF,EAAoGR,OAApG,EAA6GL,SAA7G;AACAE,uDAAM,CAACL,EAAP,CAAUgD,OAAV,CAAkB,gDAAlB;AACD;AACF;AACF;AACF,GA9BD,MA8BO;AACL3C,iDAAM,CAACL,EAAP,CAAUgD,OAAV,CAAkB,8BAAlB;AACD;AACF;AAEM,SAASoB,QAAT,CAAkB7D,OAAlB,EAA2B;AAChC,MAAI8D,KAAK,GAAGC,cAAc,CAACC,GAAf,EAAZ;AACA,MAAMC,SAAS,GAAG,GAAlB;AACA,MAAMC,UAAU,GAAG,GAAnB,CAHgC,CAKhC;;AACAJ,OAAK,GAAGK,UAAU,CAACL,KAAD,EAAQG,SAAR,EAAmBC,UAAnB,CAAlB;AACA,MAAIE,IAAI,GAAGC,MAAM,CAACC,KAAP,GAAeC,aAAf,CAA6BC,UAAU,CAAC,CAAD,EAAI,CAAJ,EAAOP,SAAP,EAAkBC,UAAlB,CAAvC,CAAX;AACAJ,OAAK,CAACW,gBAAN,CAAuBL,IAAvB,EARgC,CAUhC;;AACA,MAAIM,eAAe,GAAGC,UAAU,CAAC,aAAD,EAAgB,IAAhB,EAAsB,CAAC,CAAvB,EAA0BT,UAAU,GAAC,EAArC,EAAyC,GAAzC,EAA8C,EAA9C,CAAhC;AACAE,MAAI,CAACQ,UAAL,CAAgBF,eAAhB,EAZgC,CAchC;;AACA,MAAIG,iBAAiB,GAAGC,aAAa,CAACR,KAAd,GAAsBC,aAAtB,CAAoCC,UAAU,CAAC,CAAC,CAAF,EAAKN,UAAU,GAAG,EAAlB,EAAsB,GAAtB,EAA2B,EAA3B,CAA9C,CAAxB;AACAa,uBAAqB,CAACF,iBAAD,CAArB;AACAT,MAAI,CAACQ,UAAL,CAAgBC,iBAAhB,EAjBgC,CAmBhC;;AACA,MAAIG,mBAAmB,GAAGL,UAAU,CAAC,yGAAD,EAA4G,KAA5G,EAAmH,CAAC,CAApH,EAAuHT,UAAU,GAAC,EAAlI,EAAsI,GAAtI,EAA2I,EAA3I,CAApC;AACAE,MAAI,CAACQ,UAAL,CAAgBI,mBAAhB,EArBgC,CAwBhC;;AACA,MAAIC,cAAc,GAAGN,UAAU,CAAC,YAAD,EAAe,IAAf,EAAqB,CAAC,CAAtB,EAAyBT,UAAU,GAAC,GAApC,EAAyC,GAAzC,EAA8C,EAA9C,CAA/B;AACAE,MAAI,CAACQ,UAAL,CAAgBK,cAAhB,EA1BgC,CA4BhC;;AACA,MAAIC,cAAc,GAAGJ,aAAa,CAACR,KAAd,GAAsBC,aAAtB,CAAoCC,UAAU,CAAC,CAAC,CAAF,EAAKN,UAAU,GAAG,GAAlB,EAAuB,GAAvB,EAA4B,EAA5B,CAA9C,CAArB;AACAiB,sBAAoB,CAACD,cAAD,CAApB;AACAd,MAAI,CAACQ,UAAL,CAAgBM,cAAhB,EA/BgC,CAiChC;;AACA,MAAIE,kBAAkB,GAAGT,UAAU,CAAC,0DAAD,EAA6D,KAA7D,EAAoE,CAAC,CAArE,EAAwET,UAAU,GAAC,GAAnF,EAAwF,GAAxF,EAA6F,EAA7F,CAAnC;AACAE,MAAI,CAACQ,UAAL,CAAgBQ,kBAAhB,EAnCgC,CAsChC;;AACA,MAAIC,iBAAiB,GAAGV,UAAU,CAAC,eAAD,EAAkB,IAAlB,EAAwB,CAAC,CAAzB,EAA4BT,UAAU,GAAG,GAAzC,EAA8C,GAA9C,EAAmD,EAAnD,CAAlC;AACAE,MAAI,CAACQ,UAAL,CAAgBS,iBAAhB,EAxCgC,CA0ChC;;AACA,MAAIC,mBAAmB,GAAGX,UAAU,CAAC,IAAD,EAAO,IAAP,EAAa,EAAb,EAAiBT,UAAU,GAAG,GAA9B,EAAmC,GAAnC,EAAwC,EAAxC,CAApC;AACAE,MAAI,CAACQ,UAAL,CAAgBU,mBAAhB,EA5CgC,CA8ChC;;AACA,MAAIC,iBAAiB,GAAGC,WAAW,CAAClB,KAAZ,GAAoBC,aAApB,CAAkCC,UAAU,CAAC,CAAC,CAAF,EAAKN,UAAU,GAAG,GAAlB,EAAuB,EAAvB,EAA2B,EAA3B,CAA5C,CAAxB;AACA,MAAIuB,SAAS,GAAGC,iBAAiB,CAACpB,KAAlB,GAA0BqB,IAA1B,GAAiCC,WAAjC,EAAhB;AACAL,mBAAiB,CAACM,cAAlB,CAAiCC,MAAM,CAACnF,QAAQ,CAACE,aAAT,CAAuB,cAAvB,CAAD,CAAvC;AACA0E,mBAAiB,CAACQ,YAAlB,CAA+BN,SAA/B;AACArB,MAAI,CAACQ,UAAL,CAAgBW,iBAAhB,EAnDgC,CAqDhC;;AACA,MAAIS,mBAAmB,GAAGC,SAAS,CAAC3B,KAAV,GAAkBC,aAAlB,CAAgCC,UAAU,CAAC,EAAD,EAAKN,UAAU,GAAG,GAAlB,EAAuB,EAAvB,EAA2B,EAA3B,CAA1C,CAA1B;AACA8B,qBAAmB,CAACE,WAApB,CAAgC,IAAhC;AACAF,qBAAmB,CAACG,WAApB,CAAgC,CAAhC;AACAH,qBAAmB,CAACI,aAApB,CAAkC,KAAlC;AACAJ,qBAAmB,CAACK,aAApB,CAAkC,IAAlC;AACAL,qBAAmB,CAACM,sBAApB,CAA2C,UAASC,MAAT,EAAgB;AACzD,QAAIC,KAAK,GAAG,IAAID,MAAM,CAACE,YAAP,EAAhB;AACAlB,qBAAiB,CAACM,cAAlB,CAAiCC,MAAM,CAACU,KAAD,CAAvC;AACD,GAHD;AAKApC,MAAI,CAACQ,UAAL,CAAgBoB,mBAAhB,EAhEgC,CAiEhC;AAEA;;AACA,MAAIU,qBAAqB,GAAG/B,UAAU,CAAC,mIAAD,EAAsI,KAAtI,EAA6I,CAAC,CAA9I,EAAiJT,UAAU,GAAC,GAA5J,EAAiK,GAAjK,EAAsK,EAAtK,CAAtC;AACAE,MAAI,CAACQ,UAAL,CAAgB8B,qBAAhB,EArEgC,CAuEhC;;AACA,MAAIC,kBAAkB,GAAGhC,UAAU,CAAC,gBAAD,EAAmB,IAAnB,EAAyB,CAAC,CAA1B,EAA6BT,UAAU,GAAC,GAAxC,EAA6C,GAA7C,EAAkD,EAAlD,CAAnC;AACAE,MAAI,CAACQ,UAAL,CAAgB+B,kBAAhB,EAzEgC,CA2EhC;;AACA,MAAIC,QAAQ,GAAGC,aAAa,CAAC,yBAAD,EAA4B,KAA5B,EAAmC,CAAC,CAApC,EAAuC3C,UAAU,GAAC,GAAlD,EAAuD,GAAvD,EAA4D,EAA5D,CAA5B;AACAE,MAAI,CAACQ,UAAL,CAAgBgC,QAAhB,EA7EgC,CA+EhC;;AACA,MAAIE,kBAAkB,GAAGnC,UAAU,CAAC,gEAAD,EAAmE,KAAnE,EAA0E,CAAC,CAA3E,EAA8ET,UAAU,GAAC,GAAzF,EAA8F,GAA9F,EAAmG,EAAnG,CAAnC;AACAE,MAAI,CAACQ,UAAL,CAAgBkC,kBAAhB,EAjFgC,CAmFhC;;AACA,MAAIC,eAAe,GAAGpC,UAAU,CAAC,uDAAD,EAA0D,IAA1D,EAAgE,CAAC,CAAjE,EAAoET,UAAU,GAAC,GAA/E,EAAoF,GAApF,EAAyF,EAAzF,CAAhC;AACAE,MAAI,CAACQ,UAAL,CAAgBmC,eAAhB,EArFgC,CAwFhC;AAEA;;AACA,MAAIC,aAAa,GAAGlD,KAAK,CAACmD,QAAN,EAApB;;AAEA,MAAGD,aAAa,IAAIE,wBAApB,EAA6C;AAC3C;AACA;AACAlH,WAAO,CAACI,OAAR,CAAgBsC,2CAAhB,CAA4DoB,KAAK,CAACqD,KAAN,GAAc,CAAd,EAAiBC,QAAjB,GAA4B,CAA5B,EAA+BC,KAA/B,EAA5D,EAAoG,YAApG,EAAkHpH,OAAlH,EAA2HL,SAA3H;AACAe,YAAQ,CAAC2G,gBAAT,CAA0B,WAA1B,EAAuCxD,KAAK,CAACqD,KAAN,GAAc,CAAd,EAAiBC,QAAjB,GAA4B,CAA5B,EAA+BC,KAA/B,EAAvC;AACA1G,YAAQ,CAAC2G,gBAAT,CAA0B,cAA1B,EAA0CxD,KAAK,CAACqD,KAAN,GAAc,CAAd,EAAiBC,QAAjB,GAA4B,CAA5B,EAA+BG,QAA/B,EAA1C;AACA5G,YAAQ,CAAC2G,gBAAT,CAA0B,WAA1B,EAAuCxD,KAAK,CAACqD,KAAN,GAAc,CAAd,EAAiBC,QAAjB,GAA4B,EAA5B,EAAgCI,KAAhC,EAAvC;AACA/H,MAAE,CAACgD,OAAH,CAAW,yBAAX;AACD;AACF;AAEM,SAASgF,aAAT,CAAuBzH,OAAvB,EAAgC;AACrCF,+CAAM,CAACL,EAAP,CAAUgD,OAAV,CAAkB,oCAAlB;AACA,MAAMiF,MAAM,GAAG1H,OAAO,CAAC2H,aAAvB;AACD;AAEM,SAASC,KAAT,CAAe5H,OAAf,EAAwB;AAC7B,MAAI6H,UAAJ;AACAA,YAAU,GAAGC,OAAO,CAACxD,KAAR,GAAgBqB,IAAhB,EAAb;AACAkC,YAAU,CAACE,YAAX,CAAwBC,kBAAkB,GAAGC,+BAA7C,EAH6B,CAI7B;;AACAJ,YAAU,CAACK,kBAAX,CAA8BC,mBAA9B;AACAN,YAAU,CAACO,6BAAX,CAAyC,IAAzC;AACAP,YAAU,CAACQ,gBAAX,CAA4B7D,UAAU,CAAC,CAAD,EAAI,CAAJ,EAAO,GAAP,EAAY,EAAZ,CAAtC,EAAuD,KAAvD;AACAqD,YAAU,CAACS,4BAAX,CAAwC,IAAxC;AACAT,YAAU,CAACU,YAAX,CAAwB,IAAxB;AACAV,YAAU,CAACW,QAAX,CAAoBC,qBAApB,EAV6B,CAY7B;;AACAZ,YAAU,CAACa,MAAX;AACAb,YAAU,CAACc,oBAAX,CAAgCC,GAAhC,EAd6B,CAgB/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAIC,C,CAED;AACA;AACA;;AAEA,SAAS3G,WAAT,CAAqB4G,aAArB,EAAoCC,cAApC,EAAoD1G,KAApD,EAA2DC,IAA3D,EAAiEC,SAAjE,EAA4EyG,MAA5E,EAAoFC,WAApF,EAAiGjH,eAAjG,EAAkH;AAChH;AACA;AACA,MAAIG,WAAW,GAAGrC,QAAQ,CAACqD,cAAT,CAAwB2F,aAAxB,CAAlB;AACA,MAAI1G,YAAY,GAAGtC,QAAQ,CAACqD,cAAT,CAAwB4F,cAAxB,CAAnB,CAJgH,CAMhH;;AACArF,YAAU,CAACsF,MAAD,CAAV;AACAtI,oBAAkB,GAAGkD,wBAAwB,CAAC5B,eAAD,CAA7C;;AAEA,MAAGG,WAAW,IAAIC,YAAlB,EAA+B;AAC7B;AACA8G,eAAW,CAACJ,aAAD,EAAgBC,cAAhB,EAAgC1G,KAAhC,EAAuCC,IAAvC,EAA6CC,SAA7C,EAAwD0G,WAAxD,CAAX;AACD;AACF;;AAED,SAASC,WAAT,CAAqBJ,aAArB,EAAoCC,cAApC,EAAoD1G,KAApD,EAA2DC,IAA3D,EAAiEC,SAAjE,EAA4EE,SAA5E,EAAuF;AACrF;AACA,MAAI0G,cAAJ,EAAoBC,UAApB,EAAgCC,SAAhC;;AACA,MAAG9G,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACA4G,kBAAc,GAAGG,YAAY,CAACR,aAAD,EAAgBC,cAAhB,CAA7B;AACD,GAHD,MAGO;AACLI,kBAAc,GAAG5G,SAAjB;AACD;;AAED,MAAGD,IAAI,IAAI,IAAX,EAAgB;AACd+G,aAAS,GAAGzI,QAAQ,CAACE,aAAT,CAAuB,WAAvB,CAAZ;AACD,GAFD,MAEO;AACLuI,aAAS,GAAG/G,IAAZ;AACD,GAdoF,CAgBrF;;;AACA8G,YAAU,GAAGG,cAAc,CAACtJ,OAAO,CAACI,OAAR,CAAgBC,uCAAhB,CAAwD,YAAxD,EAAsEJ,OAAtE,EAA+EL,SAA/E,CAAD,CAA3B;;AAEA,MAAGwC,KAAK,IAAI,IAAZ,EAAiB;AACf;AACA,QAAGkH,cAAc,CAAClH,KAAD,CAAd,IAAyB,IAAzB,IAAiCA,KAAK,IAAI,eAA7C,EAA6D;AAC3D+G,gBAAU,GAAG/G,KAAb;AACD,KAFD,MAEO;AACL+G,gBAAU,GAAG,eAAb;AACD;AACF,GAPD,MAOO;AACL;AACA,QAAGnJ,OAAO,CAACI,OAAR,CAAgBC,uCAAhB,CAAwD,YAAxD,EAAsEJ,OAAtE,EAA+EL,SAA/E,CAAH,EAA6F;AAC3FuJ,gBAAU,GAAGnJ,OAAO,CAACI,OAAR,CAAgBC,uCAAhB,CAAwD,YAAxD,EAAsEJ,OAAtE,EAA+EL,SAA/E,CAAb;AACD,KAFD,MAEO;AACLuJ,gBAAU,GAAG,eAAb;AACD;AAEF;;AAGDI,eAAa,CAACV,aAAD,EAAgBC,cAAhB,EAAgCI,cAAhC,CAAb;AACAM,gBAAc,CAACX,aAAD,EAAgBC,cAAhB,EAAgCI,cAAhC,CAAd;AACA,MAAIO,kBAAkB,GAAGC,aAAa,CAAC,QAAD,CAAtC;AACA,MAAInH,IAAI,GAAGoH,QAAQ,CAACd,aAAD,EAAgBC,cAAhB,EAAgCK,UAAhC,EAA4CC,SAA5C,EAAuDF,cAAvD,EAAuEO,kBAAvE,EAA2FjH,SAA3F,CAAnB;AACAoH,KAAG,CAACrH,IAAD,CAAH;AACAsH,kBAAgB,CAACtH,IAAD,EAAOkH,kBAAP,CAAhB,CA1CqF,CA6CrF;AACA;AACA;AAEA;;AACA,MAAIK,UAAU,GAAG;AACf5H,eAAW,EAAG2G,aADC;AAEf1G,gBAAY,EAAG2G,cAFA;AAGf1G,SAAK,EAAG+G,UAHO;AAIf3G,aAAS,EAAGwG,WAJG;AAKf3G,QAAI,EAAG+G,SALQ;AAMf9G,aAAS,EAAE4G,cANI;AAOf3G,QAAI,EAAGA,IAAI,CAACT,QAAL,EAPQ,CASjB;;AATiB,GAAjB;AAUArB,oBAAkB,CAAC6C,IAAnB,CAAwBwG,UAAxB;AACD;;AAED,SAASJ,aAAT,CAAuBK,SAAvB,EAAkC;AAChC,MAAIC,YAAY,GAAG,IAAnB,CADgC,CAEhC;;AACA,OAAI,IAAI/G,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAG3C,kBAAkB,CAAC2J,MAAnB,GAA4BtI,KAA5B,EAAnB,EAAwDsB,CAAC,EAAzD,EAA4D;AAC1D,QAAG3C,kBAAkB,CAAC2J,MAAnB,GAA4BhH,CAA5B,EAA+BiH,IAA/B,MAAyCH,SAA5C,EAAuD;AACrD;AACAC,kBAAY,GAAG1J,kBAAkB,CAAC2J,MAAnB,GAA4BhH,CAA5B,CAAf;AACAkH,mBAAa,CAACH,YAAD,CAAb;AACD;AACF;;AACD,SAAOA,YAAP;AACD;;AAED,SAASX,YAAT,CAAsBR,aAAtB,EAAqCC,cAArC,EAAoD;AAClD;AACA,MAAM5G,WAAW,GAAGrC,QAAQ,CAACqD,cAAT,CAAwB2F,aAAxB,CAApB;AACA,MAAM1G,YAAY,GAAGtC,QAAQ,CAACqD,cAAT,CAAwB4F,cAAxB,CAArB;AACA,MAAMsB,eAAe,GAAGlI,WAAW,CAACmI,KAAZ,CAAkBC,CAAlB,GAAoBpI,WAAW,CAACmI,KAAZ,CAAkBE,KAAlB,GAAwB,CAApE;AACA,MAAMC,eAAe,GAAGtI,WAAW,CAACmI,KAAZ,CAAkBI,CAAlB,GAAoBvI,WAAW,CAACmI,KAAZ,CAAkBK,MAAlB,GAAyB,CAArE;AACA,MAAMC,gBAAgB,GAAGxI,YAAY,CAACkI,KAAb,CAAmBC,CAAnB,GAAqBnI,YAAY,CAACkI,KAAb,CAAmBE,KAAnB,GAAyB,CAAvE;AACA,MAAMK,gBAAgB,GAAGzI,YAAY,CAACkI,KAAb,CAAmBI,CAAnB,GAAqBtI,YAAY,CAACkI,KAAb,CAAmBK,MAAnB,GAA0B,CAAxE;AAEA,MAAMG,KAAK,GAAGT,eAAe,GAAGO,gBAAhC;AACA,MAAMG,KAAK,GAAGN,eAAe,GAAGI,gBAAhC;AACA,MAAMG,QAAQ,GAAGC,IAAI,CAACC,GAAL,CAASJ,KAAT,CAAjB;AACA,MAAMK,QAAQ,GAAGF,IAAI,CAACC,GAAL,CAASH,KAAT,CAAjB;AACA,MAAIxI,SAAJ;;AAEA,MAAGqI,gBAAgB,GAAGP,eAAtB,EAAsC;AACpC;AACA,QAAGQ,gBAAgB,GAAGJ,eAAtB,EAAsC;AACpC;AACA,UAAGK,KAAK,GAAGC,KAAX,EAAkB;AAChBxI,iBAAS,GAAG,MAAZ;AACD,OAFD,MAEO;AACLA,iBAAS,GAAG,OAAZ;AACD;AACF,KAPD,MAOO;AACL;AACA,UAAGyI,QAAQ,GAAGG,QAAd,EAAwB;AACtB5I,iBAAS,GAAG,OAAZ;AACD,OAFD,MAEO;AACLA,iBAAS,GAAG,IAAZ;AACD;AACF;AACF,GAjBD,MAiBO;AACL;AACA,QAAGsI,gBAAgB,GAAGJ,eAAtB,EAAsC;AACpC;AACA,UAAGO,QAAQ,GAAGG,QAAd,EAAwB;AACtB5I,iBAAS,GAAG,MAAZ;AACD,OAFD,MAEO;AACLA,iBAAS,GAAG,MAAZ;AACD;AACF,KAPD,MAOO;AACL;AACA,UAAGuI,KAAK,GAAGC,KAAX,EAAkB;AAChBxI,iBAAS,GAAG,MAAZ;AACD,OAFD,MAEO;AACLA,iBAAS,GAAG,IAAZ;AACD;AACF;AACF;;AACD,SAAOA,SAAP;AACD;;AAED,SAASqH,QAAT,CAAkBd,aAAlB,EAAiCC,cAAjC,EAAiD1G,KAAjD,EAAwDC,IAAxD,EAA8DC,SAA9D,EAAyE0H,YAAzE,EAAuFxH,SAAvF,EAAiG;AAC/F,MAAI2I,cAAJ,EAAoBC,cAApB,EAAoCC,eAApC,EAAqDC,eAArD,EAAsEC,UAAtE,EAAkFC,UAAlF,EAA8FX,KAA9F,EAAqGC,KAArG;AACA,MAAIvI,IAAI,GAAG,EAAX;AACA,MAAIL,WAAW,GAAGrC,QAAQ,CAACqD,cAAT,CAAwB2F,aAAxB,CAAlB;AACA,MAAI1G,YAAY,GAAGtC,QAAQ,CAACqD,cAAT,CAAwB4F,cAAxB,CAAnB;AAEA,MAAI2C,iBAAiB,GAAGvJ,WAAW,CAACmI,KAAZ,CAAkBqB,WAAlB,CAA8B;AAACC,QAAI,EAAEzJ,WAAW,CAAC0J,MAAnB;AAA2BC,MAAE,EAAEvL;AAA/B,GAA9B,CAAxB;AACA,MAAIwL,kBAAkB,GAAG3J,YAAY,CAACkI,KAAb,CAAmBqB,WAAnB,CAA+B;AAACC,QAAI,EAAExJ,YAAY,CAACyJ,MAApB;AAA4BC,MAAE,EAAEvL;AAAhC,GAA/B,CAAzB;;AAEA,MAAG0J,YAAH,EAAgB;AACd;AACAa,SAAK,GAAGb,YAAY,CAACK,KAAb,GAAqBC,CAArB,EAAR;AACAQ,SAAK,GAAGd,YAAY,CAACK,KAAb,GAAqBI,CAArB,EAAR;AACD,GAJD,MAIO;AACLI,SAAK,GAAG,CAAR;AACAC,SAAK,GAAG,CAAR;AACD,GAhB8F,CAkB/F;;;AACA,MAAIiB,IAAI,GAAGC,YAAY,CAACC,UAAb,EAAX,CAnB+F,CAqB/F;;AACA,MAAG3J,SAAS,IAAI,IAAhB,EAAqB;AACnB;AACA6I,kBAAc,GAAGM,iBAAiB,CAACnB,CAAlB,GAAoBmB,iBAAiB,CAAClB,KAAlB,GAAwB,CAA5C,GAA8CM,KAA/D;AACAO,kBAAc,GAAGK,iBAAiB,CAAChB,CAAlB,GAAoBK,KAArC,CAHmB,CAKnB;;AACAO,mBAAe,GAAGS,kBAAkB,CAACxB,CAAnB,GAAqBwB,kBAAkB,CAACvB,KAAnB,GAAyB,CAA9C,GAAgDM,KAAlE;AACAS,mBAAe,GAAGQ,kBAAkB,CAACrB,CAAnB,GAAqBqB,kBAAkB,CAACpB,MAAxC,GAA+CI,KAAjE,CAPmB,CASnB;;AACAS,cAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD;AACAG,cAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD;AACD;;AAED,MAAGhJ,SAAS,IAAI,OAAhB,EAAwB;AACtB;AACA6I,kBAAc,GAAGM,iBAAiB,CAACnB,CAAlB,GAAoBmB,iBAAiB,CAAClB,KAAtC,GAA4CM,KAA7D;AACAO,kBAAc,GAAGK,iBAAiB,CAAChB,CAAlB,GAAoBgB,iBAAiB,CAACf,MAAlB,GAAyB,CAA7C,GAA+CI,KAAhE,CAHsB,CAKtB;;AACAO,mBAAe,GAAGS,kBAAkB,CAACxB,CAAnB,GAAqBO,KAAvC;AACAS,mBAAe,GAAGQ,kBAAkB,CAACrB,CAAnB,GAAqBqB,kBAAkB,CAACpB,MAAnB,GAA0B,CAA/C,GAAiDI,KAAnE,CAPsB,CAStB;;AACAS,cAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD;AACAG,cAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD;AACD;;AAED,MAAGhJ,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACA6I,kBAAc,GAAGM,iBAAiB,CAACnB,CAAlB,GAAoBmB,iBAAiB,CAAClB,KAAlB,GAAwB,CAA5C,GAA8CM,KAA/D;AACAO,kBAAc,GAAGK,iBAAiB,CAAChB,CAAlB,GAAoBgB,iBAAiB,CAACf,MAAtC,GAA6CI,KAA9D,CAHqB,CAKrB;;AACAO,mBAAe,GAAGS,kBAAkB,CAACxB,CAAnB,GAAqBwB,kBAAkB,CAACvB,KAAnB,GAAyB,CAA9C,GAAgDM,KAAlE;AACAS,mBAAe,GAAGQ,kBAAkB,CAACrB,CAAnB,GAAqBK,KAAvC,CAPqB,CASrB;;AACAS,cAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD;AACAG,cAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD;AACD;;AAED,MAAGhJ,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACA6I,kBAAc,GAAGM,iBAAiB,CAACnB,CAAlB,GAAoBO,KAArC;AACAO,kBAAc,GAAGK,iBAAiB,CAAChB,CAAlB,GAAoBgB,iBAAiB,CAACf,MAAlB,GAAyB,CAA7C,GAA+CI,KAAhE,CAHqB,CAKrB;;AACAO,mBAAe,GAAGS,kBAAkB,CAACxB,CAAnB,GAAqBwB,kBAAkB,CAACvB,KAAxC,GAA8CM,KAAhE;AACAS,mBAAe,GAAGQ,kBAAkB,CAACrB,CAAnB,GAAqBqB,kBAAkB,CAACpB,MAAnB,GAA0B,CAA/C,GAAiDI,KAAnE,CAPqB,CASrB;;AACAS,cAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD;AACAG,cAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD;AACD;;AAED,MAAGjJ,IAAI,IAAI,QAAR,IAAoBA,IAAI,IAAI,IAA/B,EAAoC;AAClC;AAEA,QAAGC,SAAS,IAAI,IAAhB,EAAqB;AACnB;AACAyJ,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAAChB,cAAD,EAAgBK,UAAhB,CAA5B;AACAO,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBG,UAAjB,CAA5B;AACAO,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B;AACD;;AAED,QAAGhJ,SAAS,IAAI,OAAhB,EAAwB;AACtB;AACAyJ,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACZ,UAAD,EAAYH,cAAZ,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACZ,UAAD,EAAYD,eAAZ,CAA5B;AACAS,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B;AACD;;AAED,QAAGhJ,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACAyJ,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAAChB,cAAD,EAAgBK,UAAhB,CAA5B;AACAO,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBG,UAAjB,CAA5B;AACAO,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B;AACD;;AAED,QAAGhJ,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACAyJ,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACZ,UAAD,EAAYH,cAAZ,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACZ,UAAD,EAAYD,eAAZ,CAA5B;AACAS,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B;AACD,KAjCiC,CAmClC;;;AACA/I,QAAI,CAAC,CAAD,CAAJ,GAAU8J,YAAY,CAACC,aAAb,CAA2BC,MAAM,CAACC,kBAAP,CAA0BT,IAA1B,CAA3B,CAAV,CApCkC,CAuClC;;AACA,QAAIU,MAAM,GAAGlK,IAAI,CAAC,CAAD,CAAJ,CAAQ0H,MAAR,GAAiB/H,WAAjB,GAA+BuK,MAA/B,EAAb;AACAA,UAAM,CAAC,CAAD,CAAN,CAAUC,YAAV,GAAyB,EAAzB;AACAD,UAAM,CAAC,CAAD,CAAN,CAAUC,YAAV,GAAyB,EAAzB,CA1CkC,CA4ClC;;AACAnK,QAAI,CAAC,CAAD,CAAJ,CAAQoK,OAAR,CAAgB,OAAhB;AACD;;AAED,MAAGtK,IAAI,IAAI,UAAX,EAAsB;AACpB;AACA,QAAGC,SAAS,IAAI,IAAhB,EAAqB;AACnB;AACAyJ,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B;AACD;;AAED,QAAGhJ,SAAS,IAAI,OAAhB,EAAwB;AACtB;AACAyJ,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B;AACD;;AAED,QAAGhJ,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACAyJ,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B;AACD;;AAED,QAAGhJ,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACAyJ,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B;AACD,KAxBmB,CA0BpB;;;AACA/I,QAAI,CAAC,CAAD,CAAJ,GAAU8J,YAAY,CAACC,aAAb,CAA2BC,MAAM,CAACC,kBAAP,CAA0BT,IAA1B,CAA3B,CAAV,CA3BoB,CA6BpB;;AACAxJ,QAAI,CAAC,CAAD,CAAJ,CAAQoK,OAAR,CAAgB,OAAhB;AACD;;AAED,MAAGtK,IAAI,IAAI,QAAX,EAAoB;AAClB,QAAGC,SAAS,IAAI,IAAhB,EAAqB;AACnB;AACAyJ,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B,EAHmB,CAKnB;;AACA/I,UAAI,CAAC,CAAD,CAAJ,GAAU8J,YAAY,CAACC,aAAb,CAA2BC,MAAM,CAACC,kBAAP,CAA0BT,IAA1B,CAA3B,CAAV;;AACA,UAAIU,OAAM,GAAGlK,IAAI,CAAC,CAAD,CAAJ,CAAQ0H,MAAR,GAAiB/H,WAAjB,GAA+BuK,MAA/B,EAAb;;AAEAA,aAAM,CAAC,CAAD,CAAN,CAAUG,SAAV,GAAsBH,OAAM,CAAC,CAAD,CAAN,CAAUG,SAAV,GAAsB,CAA5C;AACAH,aAAM,CAAC,CAAD,CAAN,CAAUI,YAAV,GAAyBJ,OAAM,CAAC,CAAD,CAAN,CAAUK,UAAV,GAAuB,IAAhD;;AAEA,UAAG3B,cAAc,GAACE,eAAlB,EAAkC;AAChCoB,eAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAOG,WAAC,EAAE;AAAV,SAAtB;AACAgC,eAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAC,GAAL;AAASG,WAAC,EAAC;AAAX,SAApB;AAEAgC,eAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAAtB;AACAgC,eAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAApB;AACD,OAND,MAMO;AACLgC,eAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAOG,WAAC,EAAE;AAAV,SAAtB;AACAgC,eAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAC,GAAL;AAASG,WAAC,EAAC;AAAX,SAApB;AAEAgC,eAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAAtB;AACAgC,eAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAApB;AACD;AACF;;AAED,QAAGnI,SAAS,IAAI,OAAhB,EAAwB;AACtB;AACAyJ,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B,EAHsB,CAKtB;;AACA/I,UAAI,CAAC,CAAD,CAAJ,GAAU8J,YAAY,CAACC,aAAb,CAA2BC,MAAM,CAACC,kBAAP,CAA0BT,IAA1B,CAA3B,CAAV;;AACA,UAAIU,QAAM,GAAGlK,IAAI,CAAC,CAAD,CAAJ,CAAQ0H,MAAR,GAAiB/H,WAAjB,GAA+BuK,MAA/B,EAAb;;AAEAA,cAAM,CAAC,CAAD,CAAN,CAAUG,SAAV,GAAsBH,QAAM,CAAC,CAAD,CAAN,CAAUG,SAAV,GAAsB,CAA5C;AACAH,cAAM,CAAC,CAAD,CAAN,CAAUI,YAAV,GAAyBJ,QAAM,CAAC,CAAD,CAAN,CAAUK,UAAV,GAAuB,IAAhD;;AAEA,UAAG1B,cAAc,GAACE,eAAlB,EAAkC;AAChCmB,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,GAAJ;AAASG,WAAC,EAAE;AAAZ,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAC,GAAL;AAASG,WAAC,EAAC;AAAX,SAApB;AAEAgC,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,GAAJ;AAAQG,WAAC,EAAE;AAAX,SAApB;AACD,OAND,MAMO;AACLgC,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,GAAJ;AAASG,WAAC,EAAE;AAAZ,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAC,GAAL;AAASG,WAAC,EAAC;AAAX,SAApB;AAEAgC,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,GAAJ;AAAQG,WAAC,EAAE;AAAX,SAApB;AACD;AACF;;AAED,QAAGnI,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACAyJ,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B,EAHqB,CAKrB;;AACA/I,UAAI,CAAC,CAAD,CAAJ,GAAU8J,YAAY,CAACC,aAAb,CAA2BC,MAAM,CAACC,kBAAP,CAA0BT,IAA1B,CAA3B,CAAV;;AACA,UAAIU,QAAM,GAAGlK,IAAI,CAAC,CAAD,CAAJ,CAAQ0H,MAAR,GAAiB/H,WAAjB,GAA+BuK,MAA/B,EAAb;;AAEAA,cAAM,CAAC,CAAD,CAAN,CAAUG,SAAV,GAAsBH,QAAM,CAAC,CAAD,CAAN,CAAUG,SAAV,GAAsB,CAA5C;AACAH,cAAM,CAAC,CAAD,CAAN,CAAUI,YAAV,GAAyBJ,QAAM,CAAC,CAAD,CAAN,CAAUK,UAAV,GAAuB,IAAhD;;AAEA,UAAG3B,cAAc,GAACE,eAAlB,EAAkC;AAChCoB,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAOG,WAAC,EAAE;AAAV,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAC,GAAL;AAASG,WAAC,EAAC;AAAX,SAApB;AAEAgC,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAApB;AACD,OAND,MAMO;AACLgC,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAOG,WAAC,EAAE;AAAV,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAC,GAAL;AAASG,WAAC,EAAC;AAAX,SAApB;AAEAgC,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAApB;AACD;AACF;;AAED,QAAGnI,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACAyJ,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B,EAHqB,CAKrB;;AACA/I,UAAI,CAAC,CAAD,CAAJ,GAAU8J,YAAY,CAACC,aAAb,CAA2BC,MAAM,CAACC,kBAAP,CAA0BT,IAA1B,CAA3B,CAAV;;AACA,UAAIU,QAAM,GAAGlK,IAAI,CAAC,CAAD,CAAJ,CAAQ0H,MAAR,GAAiB/H,WAAjB,GAA+BuK,MAA/B,EAAb;;AAEAA,cAAM,CAAC,CAAD,CAAN,CAAUG,SAAV,GAAsBH,QAAM,CAAC,CAAD,CAAN,CAAUG,SAAV,GAAsB,CAA5C;AACAH,cAAM,CAAC,CAAD,CAAN,CAAUI,YAAV,GAAyBJ,QAAM,CAAC,CAAD,CAAN,CAAUK,UAAV,GAAuB,IAAhD;;AAEA,UAAG1B,cAAc,GAACE,eAAlB,EAAkC;AAChCmB,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,GAAJ;AAASG,WAAC,EAAE;AAAZ,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAC,GAAL;AAASG,WAAC,EAAC;AAAX,SAApB;AAEAgC,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,GAAJ;AAAQG,WAAC,EAAE;AAAX,SAApB;AACD,OAND,MAMO;AACLgC,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,GAAJ;AAASG,WAAC,EAAE;AAAZ,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAC,GAAL;AAASG,WAAC,EAAC;AAAX,SAApB;AAEAgC,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,GAAJ;AAAQG,WAAC,EAAE;AAAX,SAApB;AACD;AACF,KA3GiB,CA6GlB;;;AACAlI,QAAI,CAAC,CAAD,CAAJ,CAAQoK,OAAR,CAAgB,QAAhB;AACD;;AAED,MAAGnK,SAAS,IAAI,KAAhB,EAAsB;AACpBD,QAAI,CAAC,CAAD,CAAJ,GAAU0K,YAAY,CAAC,YAAD,EAAe1B,UAAf,EAA2BC,UAA3B,CAAtB;AACD;;AAGD,MAAGpJ,KAAK,IAAI,IAAZ,EAAiB;AACf;AACA,QAAGpC,OAAO,CAACI,OAAR,CAAgBC,uCAAhB,CAAwD,YAAxD,EAAsEJ,OAAtE,EAA+EL,SAA/E,CAAH,EAA6F;AAE3F;AACA;AACA,UAAIwC,MAAK,GAAGkH,cAAc,CAACtJ,OAAO,CAACI,OAAR,CAAgBC,uCAAhB,CAAwD,YAAxD,EAAsEJ,OAAtE,EAA+EL,SAA/E,CAAD,CAA1B;;AACA,UAAGwC,MAAK,CAAC,CAAD,CAAL,IAAY,IAAf,EAAoB;AAClB;AACA,YAAI8K,MAAM,GAAG3K,IAAI,CAAC,CAAD,CAAJ,CAAQH,KAAR,GAAgB+K,kBAAhB,CAAmC,CAAnC,CAAb;AACAD,cAAM,CAACE,KAAP,GAAeC,OAAO,CAACC,uBAAR,CAAgC;AAACC,WAAC,EAAE,IAAJ;AAAU1L,WAAC,EAAE,IAAb;AAAmB2L,WAAC,EAAE,IAAtB;AAA4BC,WAAC,EAAE;AAA/B,SAAhC,CAAf;AACAP,cAAM,CAACQ,SAAP,GAAmB,CAAnB;AACAnL,YAAI,CAAC,CAAD,CAAJ,CAAQH,KAAR,GAAgBuL,aAAhB,GAAgC,CAAhC;AACD,OAND,MAMO;AACLpL,YAAI,CAAC,CAAD,CAAJ,CAAQqL,WAAR,GAAsBxL,MAAK,CAAC,CAAD,CAA3B;AACD;AACF,KAdD,MAcO;AACL;AACA,UAAI8K,OAAM,GAAG3K,IAAI,CAAC,CAAD,CAAJ,CAAQH,KAAR,GAAgB+K,kBAAhB,CAAmC,CAAnC,CAAb;;AACAD,aAAM,CAACE,KAAP,GAAeC,OAAO,CAACC,uBAAR,CAAgC;AAACC,SAAC,EAAE,IAAJ;AAAU1L,SAAC,EAAE,IAAb;AAAmB2L,SAAC,EAAE,IAAtB;AAA4BC,SAAC,EAAE;AAA/B,OAAhC,CAAf;AACAP,aAAM,CAACQ,SAAP,GAAmB,CAAnB;AACAnL,UAAI,CAAC,CAAD,CAAJ,CAAQH,KAAR,GAAgBuL,aAAhB,GAAgC,CAAhC;AACD;AACF,GAvBD,MAuBO;AACL;AACA,QAAGvL,KAAK,IAAI,eAAZ,EAA4B;AAC1B;AACA,UAAI8K,QAAM,GAAG3K,IAAI,CAAC,CAAD,CAAJ,CAAQH,KAAR,GAAgB+K,kBAAhB,CAAmC,CAAnC,CAAb;;AACAD,cAAM,CAACE,KAAP,GAAeC,OAAO,CAACC,uBAAR,CAAgC;AAACC,SAAC,EAAE,IAAJ;AAAU1L,SAAC,EAAE,IAAb;AAAmB2L,SAAC,EAAE,IAAtB;AAA4BC,SAAC,EAAE;AAA/B,OAAhC,CAAf;AACAP,cAAM,CAACQ,SAAP,GAAmB,CAAnB;AACAnL,UAAI,CAAC,CAAD,CAAJ,CAAQH,KAAR,GAAgBuL,aAAhB,GAAgC,CAAhC;AACD,KAND,MAMO;AACL;AACA,UAAIE,QAAQ,GAAGvE,cAAc,CAAClH,KAAD,CAA7B;AACAG,UAAI,CAAC,CAAD,CAAJ,CAAQqL,WAAR,GAAsBC,QAAQ,CAAC,CAAD,CAA9B;AACD;AACF;;AAED,SAAOtL,IAAP;AACD;;AAED,SAASsH,gBAAT,CAA0BtH,IAA1B,EAAgCyH,YAAhC,EAA6C;AAC3C,MAAGA,YAAH,EAAgB;AACdA,gBAAY,CAAC8D,SAAb,CAAuB,CAACvL,IAAD,CAAvB;AACAyH,gBAAY,CAAC+D,sBAAb,CAAoC,CAApC;AACD,GAHD,MAGO;AACL;AACA,QAAIC,KAAK,GAAGtO,mBAAO,CAAC,8BAAD,CAAP,CAAsBsO,KAAlC;;AACA,QAAIC,KAAK,GAAG,IAAID,KAAJ,CAAU;AACpBpC,YAAM,EAAEtL,kBADY;AAEpB4J,UAAI,EAAE,QAFc;AAGpBgE,YAAM,EAAE,IAHY;AAIpBjE,YAAM,EAAE,CAAC1H,IAAD;AAJY,KAAV,CAAZ,CAHK,CASL;;AACA0L,SAAK,CAACE,UAAN;AACAnE,gBAAY,GAAGN,aAAa,CAAC,QAAD,CAA5B;AACAM,gBAAY,CAAC+D,sBAAb,CAAoC,CAApC;AACD;AAIF;;AAED,SAASrN,kBAAT,GAA6B;AAC3B,MAAI0N,SAAS,GAAG,EAAhB;AACA,MAAIC,qBAAqB,GAAG,EAA5B;;AACA,MAAGlO,UAAH,EAAc;AACZkO,yBAAqB,GAAGrO,OAAO,CAACI,OAAR,CAAgBC,uCAAhB,CAAwD,kBAAxD,EAA4EJ,OAA5E,EAAqFL,SAArF,CAAxB;;AAEA,SAAK,IAAIqD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGoL,qBAAqB,CAACtL,MAA1C,EAAkDE,CAAC,EAAnD,EAAwD;AACtDmL,eAAS,CAAC9K,IAAV,CAAe+K,qBAAqB,CAACpL,CAAD,CAApC;AACD;AACF;;AACD,SAAOmL,SAAP;AACD;;AAED,SAASpM,kBAAT,CAA4B6G,aAA5B,EAA2CC,cAA3C,EAA2DwF,IAA3D,EAAgE;AAC9D,MAAIC,WAAW,GAAG,IAAlB;AACA1F,eAAa,GAAG/C,MAAM,CAAC+C,aAAD,CAAtB;AACAC,gBAAc,GAAGhD,MAAM,CAACgD,cAAD,CAAvB;;AAEA,MAAG3I,UAAH,EAAc;AACZ;AAEA,SAAI,IAAIsK,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAG6D,IAAI,CAACvL,MAAxB,EAAgC0H,CAAC,EAAjC,EAAoC;AAElC,UAAG5B,aAAa,IAAIyF,IAAI,CAAC7D,CAAD,CAAJ,CAAQvI,WAAzB,IAAwC2G,aAAa,IAAIyF,IAAI,CAAC7D,CAAD,CAAJ,CAAQtI,YAApE,EAAiF;AAC/E;AACA,YAAG2G,cAAc,IAAIwF,IAAI,CAAC7D,CAAD,CAAJ,CAAQvI,WAA1B,IAAyC4G,cAAc,IAAIwF,IAAI,CAAC7D,CAAD,CAAJ,CAAQtI,YAAtE,EAAmF;AACjF;AACAoM,qBAAW,GAAG9D,CAAd;AACD;AACF;AACF;AACF;;AACD,SAAO8D,WAAP;AACD;;AAED,SAASC,yBAAT,CAAmCC,mBAAnC,EAAuD;AACrD,MAAIC,gBAAgB,GAAG,MAAvB;;AAEA,MAAG/N,QAAQ,CAACE,aAAT,CAAuB,gBAAvB,CAAH,EAA4C;AAC1C;AACA6N,oBAAgB,GAAG/N,QAAQ,CAACE,aAAT,CAAuB,gBAAvB,CAAnB;;AAEA,QAAG6N,gBAAgB,IAAI,MAAvB,EAA8B;AAC5BD,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,OAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,IAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACD;;AAED,QAAGH,gBAAgB,IAAI,OAAvB,EAA+B;AAC7BD,yBAAmB,CAACE,gBAApB,CAAqC,OAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,IAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACD;;AAED,QAAGH,gBAAgB,IAAI,MAAvB,EAA8B;AAC5BD,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,IAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,OAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACD;;AAED,QAAGH,gBAAgB,IAAI,MAAvB,EAA8B;AAC5BD,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,IAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,OAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACD;;AAED,QAAGH,gBAAgB,IAAI,IAAvB,EAA4B;AAC1BD,yBAAmB,CAACE,gBAApB,CAAqC,IAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,OAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACD;AAEF,GArED,MAqEO;AACL;AACAJ,uBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,uBAAmB,CAACE,gBAApB,CAAqC,OAArC;AACAF,uBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,uBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,uBAAmB,CAACE,gBAApB,CAAqC,IAArC;AACD;AACF;;AAED,SAAS5J,qBAAT,CAA+BF,iBAA/B,EAAiD;AAC/C,MAAIiK,WAAW,GAAG9O,OAAO,CAACI,OAAR,CAAgBC,uCAAhB,CAAwD,YAAxD,EAAsEJ,OAAtE,EAA+EL,SAA/E,CAAlB;AACA,MAAImP,MAAM,GAAGzF,cAAc,CAAC,IAAD,CAA3B;;AAEA,MAAGwF,WAAH,EAAe;AACb;AAEA,QAAGA,WAAW,IAAI,eAAlB,EAAmC;AACjC;AACAjK,uBAAiB,CAAC8J,gBAAlB,CAAmCG,WAAnC;AACAjK,uBAAiB,CAAC8J,gBAAlB,CAAmC,eAAnC;;AACA,WAAI,IAAI1L,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAG8L,MAAM,CAAChM,MAA1B,EAAkCE,CAAC,EAAnC,EAAsC;AACpC,YAAG8L,MAAM,CAAC9L,CAAD,CAAN,CAAUiH,IAAV,MAAoB4E,WAAvB,EAAmC;AACjCjK,2BAAiB,CAAC8J,gBAAlB,CAAmCI,MAAM,CAAC9L,CAAD,CAAN,CAAUiH,IAAV,EAAnC;AACD;AACF;AAEF,KAVD,MAUO;AACL;AACArF,uBAAiB,CAAC8J,gBAAlB,CAAmC,eAAnC;;AACA,WAAI,IAAI1L,EAAC,GAAG,CAAZ,EAAeA,EAAC,GAAG8L,MAAM,CAAChM,MAA1B,EAAkCE,EAAC,EAAnC,EAAsC;AACpC4B,yBAAiB,CAAC8J,gBAAlB,CAAmCI,MAAM,CAAC9L,EAAD,CAAN,CAAUiH,IAAV,EAAnC;AACD;AACF;AACF,GApBD,MAoBO;AACLrF,qBAAiB,CAAC8J,gBAAlB,CAAmC,eAAnC;;AACA,SAAI,IAAI1L,GAAC,GAAG,CAAZ,EAAeA,GAAC,GAAG8L,MAAM,CAAChM,MAA1B,EAAkCE,GAAC,EAAnC,EAAsC;AACpC4B,uBAAiB,CAAC8J,gBAAlB,CAAmCI,MAAM,CAAC9L,GAAD,CAAN,CAAUiH,IAAV,EAAnC;AACD;AACF;AACF;;AAED,SAAS/E,oBAAT,CAA8BD,cAA9B,EAA6C;AAC3C,MAAI8J,eAAe,GAAGrO,QAAQ,CAACE,aAAT,CAAuB,WAAvB,CAAtB;;AAGA,MAAGmO,eAAH,EAAmB;AACjB;AAEA,QAAGA,eAAe,IAAI,QAAtB,EAA+B;AAC7B9J,oBAAc,CAACyJ,gBAAf,CAAgC,QAAhC;AACAzJ,oBAAc,CAAC0J,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACA3J,oBAAc,CAACyJ,gBAAf,CAAgC,QAAhC;AACAzJ,oBAAc,CAAC0J,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACA3J,oBAAc,CAACyJ,gBAAf,CAAgC,UAAhC;AACAzJ,oBAAc,CAAC0J,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACD;;AAED,QAAGG,eAAe,IAAI,QAAtB,EAA+B;AAC7B9J,oBAAc,CAACyJ,gBAAf,CAAgC,QAAhC;AACAzJ,oBAAc,CAAC0J,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACA3J,oBAAc,CAACyJ,gBAAf,CAAgC,UAAhC;AACAzJ,oBAAc,CAAC0J,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACA3J,oBAAc,CAACyJ,gBAAf,CAAgC,QAAhC;AACAzJ,oBAAc,CAAC0J,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACD;;AAED,QAAGG,eAAe,IAAI,UAAtB,EAAiC;AAC/B9J,oBAAc,CAACyJ,gBAAf,CAAgC,UAAhC;AACAzJ,oBAAc,CAAC0J,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACA3J,oBAAc,CAACyJ,gBAAf,CAAgC,QAAhC;AACAzJ,oBAAc,CAAC0J,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACA3J,oBAAc,CAACyJ,gBAAf,CAAgC,QAAhC;AACAzJ,oBAAc,CAAC0J,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACD;AACF,GA7BD,MA6BO;AACL;AACA3J,kBAAc,CAACyJ,gBAAf,CAAgC,QAAhC;AACAzJ,kBAAc,CAACyJ,gBAAf,CAAgC,QAAhC;AACAzJ,kBAAc,CAACyJ,gBAAf,CAAgC,UAAhC;AACD;AAEF;;AAED,SAAShL,wBAAT,CAAkC4K,WAAlC,EAA8C;AAC5C,MAAIU,cAAc,GAAG,EAArB;;AACA,MAAG9O,UAAH,EAAc;AACZ;AACA,QAAIyC,WAAW,GAAG5C,OAAO,CAACI,OAAR,CAAgBC,uCAAhB,CAAwD,kBAAxD,EAA4EJ,OAA5E,EAAqFL,SAArF,CAAlB;;AAEA,SAAK,IAAIqD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGL,WAAW,CAACG,MAAhC,EAAwCE,CAAC,EAAzC,EAA8C;AAC5C;AACA,UAAGA,CAAC,IAAIsL,WAAR,EAAoB;AAClBU,sBAAc,CAAC3L,IAAf,CAAoBV,WAAW,CAACK,CAAD,CAA/B;AACD;AACF;AACF;;AACD,SAAOgM,cAAP;AACD;;AAED,SAAS9E,aAAT,CAAuB8D,KAAvB,EAA6B;AAAE;AAC7B,OAAI,IAAIhL,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGgL,KAAK,CAAChE,MAAN,GAAelH,MAAlC,EAA0CE,CAAC,EAA3C,EAA8C,CAC5C;AACD;AACF;;AAED,SAASQ,UAAT,CAAoBsF,MAApB,EAA2B;AACzB,MAAMmG,UAAU,GAAGrP,QAAQ,CAACqD,cAAT,CAAwB6F,MAAxB,CAAnB;AACA,MAAIoG,aAAJ;;AACA,MAAGD,UAAH,EAAc;AACZC,iBAAa,GAAGD,UAAU,CAACtD,MAA3B;AACAsD,cAAU,CAACE,MAAX;;AACA,QAAGD,aAAa,CAAClF,MAAd,CAAqBlH,MAArB,IAA+B,CAAlC,EAAoC;AAClCoM,mBAAa,CAACC,MAAd;AACD;AACF;AACF;;AAED,SAAS7F,aAAT,CAAuB8F,cAAvB,EAAuCC,aAAvC,EAAsDhN,SAAtD,EAAgE;AAC9D,MAAIiN,YAAY,GAAG1P,QAAQ,CAACqD,cAAT,CAAwBmM,cAAxB,CAAnB;AACA,MAAIG,WAAW,GAAG3P,QAAQ,CAACqD,cAAT,CAAwBoM,aAAxB,CAAlB;;AAEA,MAAG3O,QAAQ,CAACE,aAAT,CAAuB,cAAvB,KAA0CF,QAAQ,CAACE,aAAT,CAAuB,cAAvB,KAA0C,CAAvF,EAAyF;AACvF,QAAI4O,cAAc,GAAG9O,QAAQ,CAACE,aAAT,CAAuB,cAAvB,CAArB;;AAEA,QAAGyB,SAAS,IAAI,OAAhB,EAAwB;AACtBkN,iBAAW,CAACnF,KAAZ,CAAkBC,CAAlB,GAAsBiF,YAAY,CAAClF,KAAb,CAAmBC,CAAnB,GAAuBiF,YAAY,CAAClF,KAAb,CAAmBE,KAA1C,GAAkDkF,cAAxE;AACD;;AAED,QAAGnN,SAAS,IAAI,MAAhB,EAAuB;AACrBkN,iBAAW,CAACnF,KAAZ,CAAkBI,CAAlB,GAAsB8E,YAAY,CAAClF,KAAb,CAAmBI,CAAnB,GAAuB8E,YAAY,CAAClF,KAAb,CAAmBK,MAA1C,GAAmD+E,cAAzE;AACD;;AAED,QAAGnN,SAAS,IAAI,MAAhB,EAAuB;AACrBkN,iBAAW,CAACnF,KAAZ,CAAkBC,CAAlB,GAAsBiF,YAAY,CAAClF,KAAb,CAAmBC,CAAnB,GAAuBkF,WAAW,CAACnF,KAAZ,CAAkBE,KAAzC,GAAiDkF,cAAvE;AACD;;AAED,QAAGnN,SAAS,IAAI,IAAhB,EAAqB;AACnBkN,iBAAW,CAACnF,KAAZ,CAAkBI,CAAlB,GAAsB8E,YAAY,CAAClF,KAAb,CAAmBI,CAAnB,GAAuB+E,WAAW,CAACnF,KAAZ,CAAkBK,MAAzC,GAAkD+E,cAAxE;AACD;AACF;AACF;;AAED,SAASjG,cAAT,CAAwB6F,cAAxB,EAAwCC,aAAxC,EAAuDhN,SAAvD,EAAiE;AAC/D,MAAIiN,YAAY,GAAG1P,QAAQ,CAACqD,cAAT,CAAwBmM,cAAxB,CAAnB;AACA,MAAIG,WAAW,GAAG3P,QAAQ,CAACqD,cAAT,CAAwBoM,aAAxB,CAAlB;AACA,MAAII,UAAJ,EAAgBC,SAAhB,EAA2BC,UAA3B,EAAuCC,SAAvC,EAAkDC,IAAlD;;AAEA,MAAGnP,QAAQ,CAACE,aAAT,CAAuB,WAAvB,CAAH,EAAuC;AACrC,QAAGF,QAAQ,CAACE,aAAT,CAAuB,WAAvB,KAAuC,IAA1C,EAA+C;AAC7C;AAEA,UAAGyB,SAAS,IAAI,OAAb,IAAwBA,SAAS,IAAI,MAAxC,EAA+C;AAC7CoN,kBAAU,GAAGH,YAAY,CAAClF,KAAb,CAAmBI,CAAnB,GAAuB8E,YAAY,CAAClF,KAAb,CAAmBK,MAAnB,GAA0B,CAA9D;AACAiF,iBAAS,GAAGH,WAAW,CAACnF,KAAZ,CAAkBI,CAAlB,GAAsB+E,WAAW,CAACnF,KAAZ,CAAkBK,MAAlB,GAAyB,CAA3D;AACAoF,YAAI,GAAGJ,UAAU,GAAGC,SAApB;;AACA,YAAGG,IAAI,GAAG,CAAC,CAAR,IAAaA,IAAI,GAAG,CAAvB,EAAyB;AAACN,qBAAW,CAACnF,KAAZ,CAAkBI,CAAlB,GAAsB+E,WAAW,CAACnF,KAAZ,CAAkBI,CAAlB,GAAsBqF,IAA5C;AAAiD;AAC5E;;AAED,UAAGxN,SAAS,IAAI,MAAb,IAAuBA,SAAS,IAAI,IAAvC,EAA4C;AAC1CsN,kBAAU,GAAGL,YAAY,CAAClF,KAAb,CAAmBC,CAAnB,GAAuBiF,YAAY,CAAClF,KAAb,CAAmBE,KAAnB,GAAyB,CAA7D;AACAsF,iBAAS,GAAGL,WAAW,CAACnF,KAAZ,CAAkBC,CAAlB,GAAsBkF,WAAW,CAACnF,KAAZ,CAAkBE,KAAlB,GAAwB,CAA1D;AACAuF,YAAI,GAAGF,UAAU,GAAGC,SAApB;;AACA,YAAGC,IAAI,GAAG,CAAC,CAAR,IAAaA,IAAI,GAAG,CAAvB,EAAyB;AAACN,qBAAW,CAACnF,KAAZ,CAAkBC,CAAlB,GAAsBkF,WAAW,CAACnF,KAAZ,CAAkBC,CAAlB,GAAsBwF,IAA5C;AAAiD;AAC5E;AACF;AACF;AACF;;AAED,SAASC,kBAAT,CAA4BlH,aAA5B,EAA2CC,cAA3C,EAA2DxG,SAA3D,EAAqE;AACnE,MAAIJ,WAAW,GAAGrC,QAAQ,CAACqD,cAAT,CAAwB2F,aAAxB,CAAlB;AACA,MAAI1G,YAAY,GAAGtC,QAAQ,CAACqD,cAAT,CAAwB4F,cAAxB,CAAnB;AACA,MAAIuG,cAAJ;;AAEA,MAAG/M,SAAS,IAAI,MAAhB,EAAuB;AACrB+M,kBAAc,GAAGnN,WAAW,CAAC8N,EAA7B;AACD;;AAED,MAAG1N,SAAS,IAAI,OAAhB,EAAwB;AACtB,QAAGJ,WAAW,CAACmI,KAAZ,CAAkBC,CAAlB,IAAuBnI,YAAY,CAACkI,KAAb,CAAmBC,CAA7C,EAA+C;AAC7C+E,oBAAc,GAAGnN,WAAW,CAAC8N,EAA7B;AACD,KAFD,MAEO;AACLX,oBAAc,GAAGlN,YAAY,CAAC6N,EAA9B;AACD;AACF;;AAED,MAAG1N,SAAS,IAAI,MAAhB,EAAuB;AACrB,QAAGJ,WAAW,CAACmI,KAAZ,CAAkBI,CAAlB,IAAuBtI,YAAY,CAACkI,KAAb,CAAmBI,CAA7C,EAA+C;AAC7C4E,oBAAc,GAAGnN,WAAW,CAAC8N,EAA7B;AACD,KAFD,MAEO;AACLX,oBAAc,GAAGlN,YAAY,CAAC6N,EAA9B;AACD;AACF;;AAED,MAAG1N,SAAS,IAAI,MAAhB,EAAuB;AACrB,QAAGJ,WAAW,CAACmI,KAAZ,CAAkBC,CAAlB,IAAuBnI,YAAY,CAACkI,KAAb,CAAmBC,CAA7C,EAA+C;AAC7C+E,oBAAc,GAAGlN,YAAY,CAAC6N,EAA9B;AACD,KAFD,MAEO;AACLX,oBAAc,GAAGnN,WAAW,CAAC8N,EAA7B;AACD;AACF;;AAED,MAAG1N,SAAS,IAAI,IAAhB,EAAqB;AACnB,QAAGJ,WAAW,CAACmI,KAAZ,CAAkBI,CAAlB,IAAuBtI,YAAY,CAACkI,KAAb,CAAmBI,CAA7C,EAA+C;AAC7C4E,oBAAc,GAAGlN,YAAY,CAAC6N,EAA9B;AACD,KAFD,MAEO;AACLX,oBAAc,GAAGnN,WAAW,CAAC8N,EAA7B;AACD;AACF;;AAED,SAAOX,cAAP;AACD;;AAED,SAASY,4BAAT,CAAsCvO,SAAtC,EAAiDY,SAAjD,EAA2D;AACzD,MAAI+M,cAAc,GAAG3N,SAAS,CAACQ,WAAV,GAAwBJ,QAAxB,EAArB;;AAEA,MAAGQ,SAAS,IAAI,MAAhB,EAAuB;AACrB,SAAI,IAAIT,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGH,SAAS,CAACC,KAAV,EAAnB,EAAsCE,CAAC,EAAvC,EAA2C;AACzCwN,oBAAc,GAAGU,kBAAkB,CAACV,cAAD,EAAiB3N,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,EAAjB,EAA0CQ,SAA1C,CAAnC;AACD;AACF,GAJD,MAIO;AACL+M,kBAAc,GAAGU,kBAAkB,CAACV,cAAD,EAAiB3N,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAAjB,EAA0CQ,SAA1C,CAAnC;AACD;;AAED,SAAO+M,cAAP;AACD;;AAED,SAASa,iBAAT,CAA2BpM,KAA3B,EAAkCrB,OAAlC,EAA2C;AACvC;AACAqB,OAAK,CAACqM,cAAN,CAAqB,kDAAgD1N,OAArE,EAFuC,CAIvC;;AACAqB,OAAK,CAACsM,kBAAN,CAAyB,eAAzB;AACAtM,OAAK,CAACsM,kBAAN,CAAyB,QAAzB,EANuC,CAQvC;;AACA,MAAMnM,SAAS,GAAG,GAAlB;AACA,MAAMC,UAAU,GAAG,EAAnB;AAEA,MAAIE,IAAI,GAAGC,MAAM,CAACC,KAAP,GAAeC,aAAf,CAA6BC,UAAU,CAAC,CAAD,EAAI,CAAJ,EAAOP,SAAP,EAAkBC,UAAlB,CAAvC,CAAX;AACAJ,OAAK,CAACW,gBAAN,CAAuBL,IAAvB,EAbuC,CAevC;;AACA,MAAIiM,SAAS,GAAG7K,WAAW,CAAClB,KAAZ,GAAoBC,aAApB,CAAkCC,UAAU,CAAC,CAAC,CAAF,EAAKN,UAAU,GAAG,EAAlB,EAAsB,GAAtB,EAA2B,EAA3B,CAA5C,CAAhB;AAEAmM,WAAS,CAACxK,cAAV,CAAyB,qFAAzB;AACAwK,WAAS,CAACC,aAAV,CAAwB,KAAxB;AACAD,WAAS,CAACE,kBAAV,CAA6B,KAA7B;AACAF,WAAS,CAACG,UAAV,CAAqB,KAArB;AAEApM,MAAI,CAACQ,UAAL,CAAgByL,SAAhB;AAEA,SAAOvM,KAAP;AACH;;AAED,SAASK,UAAT,CAAoBL,KAApB,EAA2BG,SAA3B,EAAsCC,UAAtC,EAAiD;AAC/C;AACAJ,OAAK,CAACqM,cAAN,CAAqB,uBAArB,EAF+C,CAI/C;;AACArM,OAAK,CAACsM,kBAAN,CAAyB,iBAAzB;AACAtM,OAAK,CAACsM,kBAAN,CAAyB,QAAzB;AAEA,SAAOtM,KAAP;AACD;;AAED,SAASa,UAAT,CAAoBlC,OAApB,EAA6B+E,KAA7B,EAAoC8C,CAApC,EAAuCG,CAAvC,EAA0CF,KAA1C,EAAiDG,MAAjD,EAAwD;AACtD,MAAI2F,SAAS,GAAG7K,WAAW,CAAClB,KAAZ,GAAoBC,aAApB,CAAkCC,UAAU,CAAC8F,CAAD,EAAIG,CAAJ,EAAOF,KAAP,EAAcG,MAAd,CAA5C,CAAhB;AAEA2F,WAAS,CAACxK,cAAV,CAAyBpD,OAAzB;AACA4N,WAAS,CAACC,aAAV,CAAwB,KAAxB;AACAD,WAAS,CAACE,kBAAV,CAA6B,KAA7B;AACAF,WAAS,CAACG,UAAV,CAAqB,KAArB;;AAEA,MAAGhJ,KAAK,IAAI,KAAZ,EAAkB;AAChB6I,aAAS,CAACI,SAAV,GAAsBC,OAAO,CAACC,wBAAR,EAAtB;AACD;;AAED,SAAON,SAAP;AACD;;AAED,SAASxJ,aAAT,CAAuBpE,OAAvB,EAAgC+E,KAAhC,EAAuC8C,CAAvC,EAA0CG,CAA1C,EAA6CF,KAA7C,EAAoDG,MAApD,EAA2D;AACzD,MAAI9D,QAAQ,GAAGgK,QAAQ,CAACtM,KAAT,GAAiBC,aAAjB,CAA+BC,UAAU,CAAC8F,CAAD,EAAIG,CAAJ,EAAOF,KAAP,EAAcG,MAAd,CAAzC,CAAf;AAEA9D,UAAQ,CAACiK,aAAT,CAAuBC,cAAvB;AACAlK,UAAQ,CAACmK,aAAT,CAAuB,CAAvB;AACAnK,UAAQ,CAACoK,QAAT,CAAkBvO,OAAlB;;AACA,MAAG9B,QAAQ,CAACE,aAAT,CAAuB,WAAvB,CAAH,EAAuC;AACrC,QAAIoQ,YAAY,GAAGtQ,QAAQ,CAACE,aAAT,CAAuB,WAAvB,CAAnB;AACA+F,YAAQ,CAACiI,QAAT,CAAkBoC,YAAlB;AACD,GAHD,MAGO;AACLrK,YAAQ,CAACiI,QAAT,CAAkBrH,KAAlB;AACD;;AAED,SAAOZ,QAAP;AACD;;AAED,SAAS0C,cAAT,CAAwBY,IAAxB,EAA8B;AAC5B,MAAIgH,SAAS,GAAGjR,OAAO,CAACkR,cAAR,EAAhB;AACA,MAAIC,OAAO,GAAG,QAAd;AACA,MAAIrC,MAAM,GAAG,EAAb;;AACA,MAAG7E,IAAI,IAAI,IAAX,EAAiB;AACf,SAAI,IAAIjH,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGiO,SAAS,CAACvP,KAAV,EAAnB,EAAsCsB,CAAC,EAAvC,EAA0C;AACxC,UAAGiO,SAAS,CAACjO,CAAD,CAAT,CAAaiH,IAAb,GAAoBmH,QAApB,CAA6BD,OAA7B,CAAH,EAAyC;AACvCrC,cAAM,CAACzL,IAAP,CAAY4N,SAAS,CAACjO,CAAD,CAArB;AACD;AACF;AACF,GAND,MAMO;AACL;AACA,SAAI,IAAIA,GAAC,GAAG,CAAZ,EAAeA,GAAC,GAAGiO,SAAS,CAACvP,KAAV,EAAnB,EAAsCsB,GAAC,EAAvC,EAA0C;AACxC,UAAGiO,SAAS,CAACjO,GAAD,CAAT,CAAaiH,IAAb,MAAuBA,IAA1B,EAA+B;AAC7B6E,cAAM,CAACzL,IAAP,CAAY4N,SAAS,CAACjO,GAAD,CAArB;AACD;AACF;AACF;;AACF,SAAO8L,MAAP;AACA;;AAED,SAAShO,KAAT,CAAef,OAAf,EAAwBsC,SAAxB,EAAmCE,SAAnC,EAA6C;AAC3C,MAAId,SAAS,GAAG1B,OAAO,CAAC0B,SAAxB;AACA,MAAIwH,cAAJ;;AACA,MAAG5G,SAAS,IAAI,IAAhB,EAAqB;AAAC4G,kBAAc,GAAGtI,qBAAjB;AAAuC,GAA7D,MAAmE;AAACsI,kBAAc,GAAG5G,SAAjB;AAA2B;;AAE/F,MAAGZ,SAAS,CAACC,KAAV,KAAoB,CAAvB,EAAyB;AACvB;AACA,QAAI0N,cAAc,GAAGY,4BAA4B,CAACvO,SAAD,EAAYY,SAAZ,CAAjD;AACA,QAAIV,sBAAsB,GAAGnB,kBAA7B;;AAEA,SAAI,IAAIoB,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGH,SAAS,CAACC,KAAV,EAAnB,EAAsCE,CAAC,EAAvC,EAA2C;AACzC,UAAGH,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,MAA2BuN,cAA9B,EAA6C;AAC3C;AACA,YAAItN,eAAe,GAAGC,kBAAkB,CAACqN,cAAD,EAAiB3N,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,EAAjB,EAA0CF,sBAA1C,CAAxC;;AACA,YAAGG,eAAe,IAAI,IAAtB,EAA2B;AACzB;AACA,cAAGS,SAAS,IAAI,IAAhB,EAAqB;AACnB;AACA,gBAAGZ,sBAAsB,CAACG,eAAD,CAAtB,CAAwCS,SAA3C,EAAqD;AACnDP,yBAAW,CAACoN,cAAD,EAAiB3N,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,EAAjB,EAA0C,IAA1C,EAAgD,IAAhD,EAAsDoH,cAAtD,EAAsEtH,sBAAsB,CAACG,eAAD,CAAtB,CAAwCQ,IAA9G,EAAoHX,sBAAsB,CAACG,eAAD,CAAtB,CAAwCS,SAA5J,EAAuKT,eAAvK,CAAX;AACD,aAFD,MAEO;AACLE,yBAAW,CAACoN,cAAD,EAAiB3N,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,EAAjB,EAA0C,IAA1C,EAAgD,IAAhD,EAAsDoH,cAAtD,EAAsEtH,sBAAsB,CAACG,eAAD,CAAtB,CAAwCQ,IAA9G,EAAoH,IAApH,EAA0HR,eAA1H,CAAX;AACD;AACF,WAPD,MAOO;AACLE,uBAAW,CAACoN,cAAD,EAAiB3N,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,EAAjB,EAA0C,IAA1C,EAAgD,IAAhD,EAAsDoH,cAAtD,EAAsEtH,sBAAsB,CAACG,eAAD,CAAtB,CAAwCQ,IAA9G,EAAoHX,sBAAsB,CAACG,eAAD,CAAtB,CAAwCS,SAA5J,EAAuKT,eAAvK,CAAX;AACD;;AACDjC,uDAAM,CAACL,EAAP,CAAUgD,OAAV,CAAkB,kCAAlB;AACD,SAbD,MAaO;AACL;AACA,cAAGD,SAAS,IAAI,IAAhB,EAAqB;AACnByG,uBAAW,CAACoG,cAAD,EAAiB3N,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,EAAjB,EAA0C,IAA1C,EAAgD,IAAhD,EAAsDoH,cAAtD,EAAsE,IAAtE,CAAX;AACD,WAFD,MAEO;AACLD,uBAAW,CAACoG,cAAD,EAAiB3N,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,EAAjB,EAA0C,IAA1C,EAAgD,IAAhD,EAAsDoH,cAAtD,EAAsE,KAAtE,CAAX;AACD;;AACDpJ,uDAAM,CAACL,EAAP,CAAUgD,OAAV,CAAkB,8BAAlB;AACD;AACF;AACF;;AACDzC,WAAO,CAACI,OAAR,CAAgBsC,2CAAhB,CAA4DjC,kBAA5D,EAAgF,kBAAhF,EAAoGR,OAApG,EAA6GL,SAA7G;AACD,GAlCD,MAkCO;AACL;AACAE,iDAAM,CAACL,EAAP,CAAUgD,OAAV,CAAkB,oCAAlB;AACD;AACF,C,CAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAAS6O,cAAT,CAAwBF,OAAxB,EAAgC;AAC9B,MAAIG,SAAS,GAAGzR,6CAAM,CAAC0R,YAAP,EAAhB;AACA,MAAIxI,WAAJ,EAAiByI,gBAAjB,CAF8B,CAG9B;AAEA;;AAEA,OAAI,IAAI5P,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAG0P,SAAS,CAACxO,MAA7B,EAAqClB,CAAC,EAAtC,EAA0C;AACxC4P,oBAAgB,GAAGF,SAAS,CAAC1P,CAAD,CAAT,CAAa6P,wCAAb,CAAsD7R,QAAtD,CAAnB;;AAEA,SAAI,IAAIoD,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGwO,gBAAgB,CAAC1O,MAApC,EAA4CE,CAAC,EAA7C,EAAiD;AAC/C,UAAGwO,gBAAgB,CAACxO,CAAD,CAAhB,CAAoBiH,IAApB,CAAyBmH,QAAzB,CAAkCD,OAAlC,CAAH,EAA8C;AAC5CpI,mBAAW,GAAGyI,gBAAgB,CAACxO,CAAD,CAAhB,CAAoB+M,EAAlC;AACD;AACF;AACF;;AAED,MAAGhH,WAAW,IAAI,IAAlB,EAAuB;AACrBvJ,MAAE,CAACqE,KAAH,CAAS,+BAAT,EAA0C,kWAA1C;AACD,GAnB6B,CAqB9B;AAEA;AACA;AAGA;AACA;AAGA;AACA;;;AAEA,SAAOkF,WAAP;AACD;;AAED,SAASiE,YAAT,CAAsBmE,OAAtB,EAA+B9G,CAA/B,EAAkCG,CAAlC,EAAoC;AAClC,MAAI8G,SAAS,GAAGzR,6CAAM,CAAC0R,YAAP,EAAhB;AACA,MAAIG,eAAJ,EAAqBF,gBAArB;;AAEA,OAAI,IAAI5P,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAG0P,SAAS,CAACxO,MAA7B,EAAqClB,CAAC,EAAtC,EAA0C;AACxC4P,oBAAgB,GAAGF,SAAS,CAAC1P,CAAD,CAAT,CAAa6P,wCAAb,CAAsD7R,QAAtD,CAAnB;;AAEA,SAAI,IAAIoD,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGwO,gBAAgB,CAAC1O,MAApC,EAA4CE,CAAC,EAA7C,EAAiD;AAC/C,UAAGwO,gBAAgB,CAACxO,CAAD,CAAhB,CAAoBiH,IAApB,CAAyBmH,QAAzB,CAAkCD,OAAlC,CAAH,EAA8C;AAC5CO,uBAAe,GAAGF,gBAAgB,CAACxO,CAAD,CAAlC;AACD;AACF;AACF;;AAED,MAAG0O,eAAe,IAAI,IAAtB,EAA2B;AACzBlS,MAAE,CAACqE,KAAH,CAAS,+BAAT,EAA0C,kWAA1C;AACD,GAFD,MAEO;AACL,QAAI8N,YAAY,GAAGD,eAAe,CAACE,MAAhB,EAAnB;AACA,QAAIC,QAAQ,GAAGF,YAAY,CAACG,iBAAb,EAAf;AACAD,YAAQ,CAAClG,MAAT,GAAkBtL,kBAAlB;AACAwR,YAAQ,CAACzH,KAAT,CAAeC,CAAf,GAAmBA,CAAC,GAAGwH,QAAQ,CAACzH,KAAT,CAAeE,KAAf,GAAuB,CAA9C;AACAuH,YAAQ,CAACzH,KAAT,CAAeI,CAAf,GAAmBA,CAAC,GAAGqH,QAAQ,CAACzH,KAAT,CAAeK,MAAf,GAAwB,CAA/C;AACD;;AAED,SAAOiH,eAAP;AACD,C;;;;;;;;;;;AC14CD,mC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,4C;;;;;;;;;;;ACAA,sC","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch'\n// const { toArray } = require('util')\n\n//\n// Variables\n//\n\nlet UI = require('sketch/ui') \nvar SharedStyle = require('sketch/dom').SharedStyle\n\nconst pluginKey = \"flowArrows\"\nconst document = sketch.fromNative(context.document)\nlet docData = context.document.documentData()\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey) // TODO: Need to refactor\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards\nlet newConnectionsData = getConnectionsData()\n\n// Settings\nvar Settings = require('sketch/settings')\nlet arrowDirectionSetting\n\nif(Settings.settingForKey(\"arrowDirection\")) {\n arrowDirectionSetting = Settings.settingForKey('arrowDirection')\n} else {\n arrowDirectionSetting = \"Auto\"\n}\n \n//\n// Create Connection Function\n//\n\nexport default function(context) {}\nexport function createDefaultArrow(context){start(context, null)}\nexport function createAutoArrow(context){start(context, \"Auto\")}\nexport function createRightArrow(context){start(context, \"Right\", false)}\nexport function createDownArrow(context){start(context, \"Down\", false)}\nexport function createLeftArrow(context){start(context, \"Left\", false)}\nexport function createUpArrow(context){start(context, \"Up\", false)}\n\nexport function createRightArrowWithCondition(context){start(context, \"Right\", true)}\nexport function createDownArrowWithCondition(context){start(context, \"Down\", true)}\nexport function createLeftArrowWithCondition(context){start(context, \"Left\", true)}\nexport function createUpArrowWithCondition(context){start(context, \"Up\", true)}\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n\n let selection = context.selection\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n // let sourceObjectID = getSourceObjectFromSelection(selection)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, connectionIndex) {\n // There might be a situation, when user deleted current group or current group stays on another artboard => In that case need to create another group\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, condition) {\n // Process of creating new connection \n let localDirection, localStyle, localType\n if(direction == \"Auto\"){\n // If direction is auto, we need to specify direction ourselves\n localDirection = getDirection(firstObjectID, secondObjectID)\n } else {\n localDirection = direction\n }\n\n if(type == null){\n localType = Settings.settingForKey(\"arrowType\") \n } else {\n localType = type\n }\n \n // log(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey))\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey))\n \n if(style != null){\n // if we updating connection with previously created objects\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n localStyle = style\n } else {\n localStyle = \"Default Style\"\n }\n } else {\n // We don't have any data from the plugin data\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)){\n localStyle = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)\n } else {\n localStyle = \"Default Style\"\n }\n \n }\n \n \n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n let currentArrowsGroup = checkForGroup(\"Arrows\")\n let line = drawLine(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentArrowsGroup, condition)\n log(line)\n addToArrowsGroup(line, currentArrowsGroup)\n\n\n // if(localStyle != \"Default Style\"){\n // localStyle = localStyle[0].name()\n // }\n\n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : localStyle,\n condition : conditionID,\n type : localType,\n direction: localDirection,\n line : line.objectID()\n }\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForGroup(groupName) {\n let currentGroup = null\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n // If we already have \"Arrow\" group we need to save it's folder\n currentGroup = currentParentGroup.layers()[i]\n refactorLines(currentGroup)\n } \n }\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n if(diffX > diffY) {\n direction = \"Down\"\n } else {\n direction = \"Right\"\n }\n } else {\n // Top quarter\n if(absDiffX > absDiffY) {\n direction = \"Right\"\n } else {\n direction = \"Up\"\n }\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n if(absDiffX > absDiffY) {\n direction = \"Left\"\n } else {\n direction = \"Down\"\n }\n } else {\n // Top quarter\n if(diffX > diffY) {\n direction = \"Left\"\n } else {\n direction = \"Up\"\n }\n }\n }\n return direction\n}\n\nfunction drawLine(firstObjectID, secondObjectID, style, type, direction, currentGroup, condition){\n let firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, middlePosX, middlePosY, diffX, diffY\n let line = []\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n\n if(currentGroup){\n //if we already have a group, need to specify the difference\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n // Drawing a line\n let path = NSBezierPath.bezierPath()\n\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(type == \"Angled\" || type == null){\n // Based on direction, we need to specify connection points\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n line[0] = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n\n\n // Making middle points rounded\n let points = line[0].layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n\n // Providing Settings for the arrow\n line[0].setName(\"Arrow\")\n }\n\n if(type == \"Straight\"){\n // Based on direction, we need to specify connection points\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n line[0] = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n \n // Providing Settings for the arrow\n line[0].setName(\"Arrow\")\n }\n\n if(type == \"Curved\"){\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n line[0] = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line[0].layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Auto\"){\n sourceObjectID = firstObject.id\n }\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n } else {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[0].objectID(), direction)\n }\n \n return sourceObjectID\n}\n\nfunction confirmationAlert(alert, message) {\n // Title\n alert.setMessageText(\"Would you like to delete all the arrows from \"+message)\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Delete Arrows\")\n alert.addButtonWithTitle(\"Cancel\")\n \n // Creating the view\n const viewWidth = 300\n const viewHeight = 40\n \n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n \n // Label\n var infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(-1, viewHeight - 40, 330, 40))\n \n infoLabel.setStringValue(\"ℹ️ You can select layers, artboards to delete all the arrows from selected one only\")\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n \n view.addSubview(infoLabel)\n\n return alert\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) {\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n if(name == null) {\n for(let i = 0; i < allStyles.count(); i++){\n if(allStyles[i].name().includes(keyword)){\n styles.push(allStyles[i]);\n }\n }\n } else {\n // Searching only for name\n for(let i = 0; i < allStyles.count(); i++){\n if(allStyles[i].name() == name){\n styles.push(allStyles[i]);\n }\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, condition){\n let selection = context.selection\n let localDirection\n if(direction == null){localDirection = arrowDirectionSetting} else {localDirection = direction}\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n if(connectionIndex != null){\n // Because this is creating flow, we need to take the direction from user settings\n if(condition == true){\n // Need to remake the arrow condition\n if(currentConnectionsData[connectionIndex].condition){\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n } else {\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, true, connectionIndex)\n }\n } else {\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n }\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n // There is no connection with this two objects in our database\n if(condition == true){\n createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, true)\n } else {\n createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, false)\n }\n sketch.UI.message(\"New connection is created 🚀\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\n// {\n// \"script\": \"./script.js\",\n// \"name\" : \"onLayersMoved\",\n// \"handlers\" : {\n// \"actions\": {\n// \"LayersMoved.finish\": \"onLayersMoved\"\n// }\n// },\n// \"identifier\" : \"onLayersMoved\"\n// }\n\nfunction getConditionID(keyword){\n let libraries = sketch.getLibraries()\n let conditionID, symbolReferences\n // let keyword = \"#condition\"\n\n // log(libraries.length)\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionID = symbolReferences[i].id \n }\n }\n }\n\n if(conditionID == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n }\n\n // symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n // log(symbolReferences)\n // var symbolMaster = symbolReferences[0].import()\n\n\n // var instance = symbolMaster.createNewInstance()\n // console.log(instance)\n\n\n // instance.parent = currentParentGroup\n // log(symbolMaster)\n\n return conditionID\n}\n\nfunction addCondition(keyword, x, y){\n let libraries = sketch.getLibraries()\n let conditionObject, symbolReferences\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionObject = symbolReferences[i]\n }\n }\n }\n\n if(conditionObject == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n } else {\n let symbolMaster = conditionObject.import()\n let instance = symbolMaster.createNewInstance()\n instance.parent = currentParentGroup\n instance.frame.x = x - instance.frame.width / 2 \n instance.frame.y = y - instance.frame.height / 2\n }\n\n return conditionObject\n}\n\n\n\n\n\n\n","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","pluginKey","document","sketch","fromNative","context","docData","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","currentParentGroup","currentPage","currentArtboard","newConnectionsData","getConnectionsData","Settings","createAutoArrow","start","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","updateSelectedArrows","selection","count","currentConnectionsData","g","objectID","connectionIndex","findConnectionData","updateArrow","firstObject","secondObject","style","type","direction","line","condition","message","setValue_forKey_onLayer_forPluginIdentifier","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","length","updateArrowsCounter","i","getLayerWithID","sketchObject","parentArtboard","class","push","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","settingForKey","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","views","subviews","title","setSettingForKey","intValue","state","onLayersMoved","action","actionContext","panel","ControlBar","NSPanel","setStyleMask","NSTitledWindowMask","NSFullSizeContentViewWindowMask","setTitleVisibility","NSWindowTitleHidden","setTitlebarAppearsTransparent","setFrame_display","setMovableByWindowBackground","setHasShadow","setLevel","NSFloatingWindowLevel","center","makeKeyAndOrderFront","nil","firstObjectID","secondObjectID","lineID","conditionID","createArrow","localDirection","localStyle","localType","getDirection","getLayerStyles","updateSpacing","autoAlignLayer","currentArrowsGroup","checkForGroup","arrow","drawConnection","log","addToArrowsGroup","id","connection","groupName","currentGroup","layers","name","refactorLines","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","firstLayerPosX","firstLayerPosY","secondLayerPosX","secondLayerPosY","middlePosX","middlePosY","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","addCondition","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","sharedStyle","ownStyle","addLayers","fixGeometryWithOptions","Group","group","locked","moveToBack","dataArray","pluginDataConnections","data","arrayNumber","setActiveDirectionSetting","arrowDirectionField","currentDirection","addItemWithTitle","lastItem","setState","docSettings","styles","docTypeSettings","newConnections","lineObject","selectedGroup","remove","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","defineSourceObject","getSourceObjectFromSelection","confirmationAlert","setMessageText","addButtonWithTitle","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","allStyles","allLayerStyles","keyword","includes","dDirection","getConditionID","libraries","getLibraries","symbolReferences","getImportableSymbolReferencesForDocument","conditionObject","symbolMaster","import","instance","createNewInstance"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch'\n// const { toArray } = require('util')\n\n//\n// Variables\n//\n\nlet UI = require('sketch/ui') \n// var SharedStyle = require('sketch/dom').SharedStyle\n\nconst pluginKey = \"flowArrows\"\nconst document = sketch.fromNative(context.document)\nlet docData = context.document.documentData()\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey) // TODO: Need to refactor\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards\nlet newConnectionsData = getConnectionsData()\n\n// Settings\nvar Settings = require('sketch/settings')\n\n \n//\n// Create Connection Function\n//\n\nexport default function(context) {}\nexport function createAutoArrow(context){start(context, \"Auto\")}\nexport function createRightArrow(context){start(context, \"Right\", false)}\nexport function createDownArrow(context){start(context, \"Down\", false)}\nexport function createLeftArrow(context){start(context, \"Left\", false)}\nexport function createUpArrow(context){start(context, \"Up\", false)}\n\nexport function createRightArrowWithCondition(context){start(context, \"Right\", true)}\nexport function createDownArrowWithCondition(context){start(context, \"Down\", true)}\nexport function createLeftArrowWithCondition(context){start(context, \"Left\", true)}\nexport function createUpArrowWithCondition(context){start(context, \"Up\", true)}\n\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n\n let selection = context.selection\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n // let sourceObjectID = getSourceObjectFromSelection(selection)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, connectionIndex) {\n // There might be a situation, when user deleted current group or current group stays on another artboard => In that case need to create another group\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, condition) {\n // Process of creating new connection \n let localDirection, localStyle, localType\n if(direction == \"Auto\"){\n // If direction is auto, we need to specify direction ourselves\n localDirection = getDirection(firstObjectID, secondObjectID)\n } else {\n localDirection = direction\n }\n\n if(type == null){\n localType = Settings.settingForKey(\"arrowType\") \n } else {\n localType = type\n }\n \n // log(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey))\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey))\n \n if(style != null){\n // if we updating connection with previously created objects\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n localStyle = style\n } else {\n localStyle = \"Default Style\"\n }\n } else {\n // We don't have any data from the plugin data\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)){\n localStyle = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)\n } else {\n localStyle = \"Default Style\"\n }\n \n }\n \n \n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n let currentArrowsGroup = checkForGroup(\"Arrows\")\n let arrow = drawConnection(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentArrowsGroup, condition)\n log(arrow)\n addToArrowsGroup(arrow.line, currentArrowsGroup)\n\n\n let conditionID\n if(arrow.condition.length > 1) {\n conditionID = arrow.condition.id\n } else {\n conditionID = null\n }\n \n\n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : localStyle,\n condition : conditionID,\n type : localType,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForGroup(groupName) {\n let currentGroup = null\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n // If we already have \"Arrow\" group we need to save it's folder\n currentGroup = currentParentGroup.layers()[i]\n refactorLines(currentGroup)\n } \n }\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n if(diffX > diffY) {\n direction = \"Down\"\n } else {\n direction = \"Right\"\n }\n } else {\n // Top quarter\n if(absDiffX > absDiffY) {\n direction = \"Right\"\n } else {\n direction = \"Up\"\n }\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n if(absDiffX > absDiffY) {\n direction = \"Left\"\n } else {\n direction = \"Down\"\n }\n } else {\n // Top quarter\n if(diffX > diffY) {\n direction = \"Left\"\n } else {\n direction = \"Up\"\n }\n }\n }\n return direction\n}\n\nfunction drawConnection(firstObjectID, secondObjectID, style, type, direction, currentGroup, condition){\n let firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, middlePosX, middlePosY, diffX, diffY\n let connection = {line: [], condition: []}\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n\n if(currentGroup){\n //if we already have a group, need to specify the difference\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n // Drawing a line\n let path = NSBezierPath.bezierPath()\n\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(type == \"Angled\" || type == null){\n // Based on direction, we need to specify connection points\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n\n\n // Making middle points rounded\n let points = connection.line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n\n // Providing Settings for the arrow\n connection.line.setName(\"Arrow\")\n }\n\n if(type == \"Straight\"){\n // Based on direction, we need to specify connection points\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n \n // Providing Settings for the arrow\n connection.line.setName(\"Arrow\")\n }\n\n if(type == \"Curved\"){\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = connection.line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Auto\"){\n sourceObjectID = firstObject.id\n }\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n }\n \n return sourceObjectID\n}\n\nfunction confirmationAlert(alert, message) {\n // Title\n alert.setMessageText(\"Would you like to delete all the arrows from \"+message)\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Delete Arrows\")\n alert.addButtonWithTitle(\"Cancel\")\n \n // Creating the view\n const viewWidth = 300\n const viewHeight = 40\n \n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n \n // Label\n var infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(-1, viewHeight - 40, 330, 40))\n \n infoLabel.setStringValue(\"ℹ️ You can select layers, artboards to delete all the arrows from selected one only\")\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n \n view.addSubview(infoLabel)\n\n return alert\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) {\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n if(name == null) {\n for(let i = 0; i < allStyles.count(); i++){\n if(allStyles[i].name().includes(keyword)){\n styles.push(allStyles[i]);\n }\n }\n } else {\n // Searching only for name\n for(let i = 0; i < allStyles.count(); i++){\n if(allStyles[i].name() == name){\n styles.push(allStyles[i]);\n }\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, condition){\n let selection = context.selection\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n if(connectionIndex != null){\n // Because this is creating flow, we need to take the direction from user settings\n if(condition == true){\n // Need to remake the arrow condition\n if(currentConnectionsData[connectionIndex].condition){\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n } else {\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, dDirection, currentConnectionsData[connectionIndex].line, true, connectionIndex)\n }\n } else {\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n }\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n // There is no connection with this two objects in our database\n if(condition == true){\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, true)\n } else {\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, false)\n }\n sketch.UI.message(\"New connection is created 🚀\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\n// {\n// \"script\": \"./script.js\",\n// \"name\" : \"onLayersMoved\",\n// \"handlers\" : {\n// \"actions\": {\n// \"LayersMoved.finish\": \"onLayersMoved\"\n// }\n// },\n// \"identifier\" : \"onLayersMoved\"\n// }\n\nfunction getConditionID(keyword){\n let libraries = sketch.getLibraries()\n let conditionID, symbolReferences\n // let keyword = \"#condition\"\n\n // log(libraries.length)\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionID = symbolReferences[i].id \n }\n }\n }\n\n if(conditionID == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n }\n\n // symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n // log(symbolReferences)\n // var symbolMaster = symbolReferences[0].import()\n\n\n // var instance = symbolMaster.createNewInstance()\n // console.log(instance)\n\n\n // instance.parent = currentParentGroup\n // log(symbolMaster)\n\n return conditionID\n}\n\nfunction addCondition(keyword, x, y){\n let libraries = sketch.getLibraries()\n let conditionObject, symbolReferences\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionObject = symbolReferences[i]\n }\n }\n }\n\n if(conditionObject == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n } else {\n let symbolMaster = conditionObject.import()\n let instance = symbolMaster.createNewInstance()\n instance.parent = currentParentGroup\n instance.frame.x = x - instance.frame.width / 2 \n instance.frame.y = y - instance.frame.height / 2\n }\n\n return conditionObject\n}\n\n\n\n\n\n\n","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/src/script.js b/src/script.js index 19eacc3..32232a1 100644 --- a/src/script.js +++ b/src/script.js @@ -6,7 +6,7 @@ import sketch from 'sketch' // let UI = require('sketch/ui') -var SharedStyle = require('sketch/dom').SharedStyle +// var SharedStyle = require('sketch/dom').SharedStyle const pluginKey = "flowArrows" const document = sketch.fromNative(context.document) @@ -17,20 +17,13 @@ let newConnectionsData = getConnectionsData() // Settings var Settings = require('sketch/settings') -let arrowDirectionSetting -if(Settings.settingForKey("arrowDirection")) { - arrowDirectionSetting = Settings.settingForKey('arrowDirection') -} else { - arrowDirectionSetting = "Auto" -} // // Create Connection Function // export default function(context) {} -export function createDefaultArrow(context){start(context, null)} export function createAutoArrow(context){start(context, "Auto")} export function createRightArrow(context){start(context, "Right", false)} export function createDownArrow(context){start(context, "Down", false)} @@ -41,6 +34,7 @@ export function createRightArrowWithCondition(context){start(context, "Right", t export function createDownArrowWithCondition(context){start(context, "Down", true)} export function createLeftArrowWithCondition(context){start(context, "Left", true)} export function createUpArrowWithCondition(context){start(context, "Up", true)} + // // Plugin Commands // @@ -443,14 +437,18 @@ function createArrow(firstObjectID, secondObjectID, style, type, direction, cond updateSpacing(firstObjectID, secondObjectID, localDirection) autoAlignLayer(firstObjectID, secondObjectID, localDirection) let currentArrowsGroup = checkForGroup("Arrows") - let line = drawLine(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentArrowsGroup, condition) - log(line) - addToArrowsGroup(line, currentArrowsGroup) + let arrow = drawConnection(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentArrowsGroup, condition) + log(arrow) + addToArrowsGroup(arrow.line, currentArrowsGroup) - // if(localStyle != "Default Style"){ - // localStyle = localStyle[0].name() - // } + let conditionID + if(arrow.condition.length > 1) { + conditionID = arrow.condition.id + } else { + conditionID = null + } + // Storage for current connection let connection = { @@ -460,7 +458,7 @@ function createArrow(firstObjectID, secondObjectID, style, type, direction, cond condition : conditionID, type : localType, direction: localDirection, - line : line.objectID() + line : arrow.line.objectID() } // Need to save this data to the global array newConnectionsData.push(connection) @@ -532,9 +530,9 @@ function getDirection(firstObjectID, secondObjectID){ return direction } -function drawLine(firstObjectID, secondObjectID, style, type, direction, currentGroup, condition){ +function drawConnection(firstObjectID, secondObjectID, style, type, direction, currentGroup, condition){ let firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, middlePosX, middlePosY, diffX, diffY - let line = [] + let connection = {line: [], condition: []} let firstObject = document.getLayerWithID(firstObjectID) let secondObject = document.getLayerWithID(secondObjectID) @@ -646,16 +644,16 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current } // Painting the line - line[0] = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) + connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) // Making middle points rounded - let points = line[0].layers().firstObject().points() + let points = connection.line.layers().firstObject().points() points[1].cornerRadius = 20 points[2].cornerRadius = 20 // Providing Settings for the arrow - line[0].setName("Arrow") + connection.line.setName("Arrow") } if(type == "Straight"){ @@ -685,10 +683,10 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current } // Painting the line - line[0] = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) + connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) // Providing Settings for the arrow - line[0].setName("Arrow") + connection.line.setName("Arrow") } if(type == "Curved"){ @@ -698,8 +696,8 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)) // Painting the line - line[0] = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) - let points = line[0].layers().firstObject().points() + connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) + let points = connection.line.layers().firstObject().points() points[0].curveMode = points[1].curveMode = 4 points[0].hasCurveFrom = points[1].hasCurveTo = true @@ -725,8 +723,8 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)) // Painting the line - line[0] = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) - let points = line[0].layers().firstObject().points() + connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) + let points = connection.line.layers().firstObject().points() points[0].curveMode = points[1].curveMode = 4 points[0].hasCurveFrom = points[1].hasCurveTo = true @@ -752,8 +750,8 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)) // Painting the line - line[0] = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) - let points = line[0].layers().firstObject().points() + connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) + let points = connection.line.layers().firstObject().points() points[0].curveMode = points[1].curveMode = 4 points[0].hasCurveFrom = points[1].hasCurveTo = true @@ -779,8 +777,8 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)) // Painting the line - line[0] = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) - let points = line[0].layers().firstObject().points() + connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) + let points = connection.line.layers().firstObject().points() points[0].curveMode = points[1].curveMode = 4 points[0].hasCurveFrom = points[1].hasCurveTo = true @@ -801,11 +799,11 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current } // Providing Settings for the arrow - line[0].setName("Arrows") + connection.line.setName("Arrows") } if(condition != false){ - line[1] = addCondition("Answer YES", middlePosX, middlePosY) + connection.condition = addCondition("#con", middlePosX, middlePosY) } @@ -818,36 +816,36 @@ function drawLine(firstObjectID, secondObjectID, style, type, direction, current let style = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)) if(style[0] == null){ // Default Arrow Style - let border = line[0].style().addStylePartOfType(1) + let border = connection.line.style().addStylePartOfType(1) border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1}) border.thickness = 2 - line[0].style().endMarkerType = 2 + connection.line.style().endMarkerType = 2 } else { - line[0].sharedStyle = style[0] + connection.line.sharedStyle = style[0] } } else { // Default Arrow Style - let border = line[0].style().addStylePartOfType(1) + let border = connection.line.style().addStylePartOfType(1) border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1}) border.thickness = 2 - line[0].style().endMarkerType = 2 + connection.line.style().endMarkerType = 2 } } else { // arrow style already provided if(style == "Default Style"){ // Default Arrow Style - let border = line[0].style().addStylePartOfType(1) + let border = connection.line.style().addStylePartOfType(1) border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1}) border.thickness = 2 - line[0].style().endMarkerType = 2 + connection.line.style().endMarkerType = 2 } else { // User provided own style let ownStyle = getLayerStyles(style) - line[0].sharedStyle = ownStyle[0] + connection.line.sharedStyle = ownStyle[0] } } - return line + return connection } function addToArrowsGroup(line, currentGroup){ @@ -868,9 +866,6 @@ function addToArrowsGroup(line, currentGroup){ currentGroup = checkForGroup("Arrows") currentGroup.fixGeometryWithOptions(1) } - - - } function getConnectionsData(){ @@ -1200,8 +1195,6 @@ function getSourceObjectFromSelection(selection, direction){ for(let g = 0; g < selection.count(); g++) { sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction) } - } else { - sourceObjectID = defineSourceObject(sourceObjectID, selection[0].objectID(), direction) } return sourceObjectID @@ -1300,8 +1293,6 @@ function getLayerStyles(name) { function start(context, direction, condition){ let selection = context.selection - let localDirection - if(direction == null){localDirection = arrowDirectionSetting} else {localDirection = direction} if(selection.count() > 1){ // Need to find source object by ID first @@ -1317,20 +1308,20 @@ function start(context, direction, condition){ if(condition == true){ // Need to remake the arrow condition if(currentConnectionsData[connectionIndex].condition){ - updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex) + updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex) } else { - updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, true, connectionIndex) + updateArrow(sourceObjectID, selection[g].objectID(), null, null, dDirection, currentConnectionsData[connectionIndex].line, true, connectionIndex) } } else { - updateArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex) + updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex) } sketch.UI.message("Current connection is updated 🚀") } else { // There is no connection with this two objects in our database if(condition == true){ - createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, true) + createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, true) } else { - createArrow(sourceObjectID, selection[g].objectID(), null, null, localDirection, false) + createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, false) } sketch.UI.message("New connection is created 🚀") } From 88b6e5e1a667af915584d8553a3f6c8567209c5e Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Mon, 1 Apr 2019 08:45:58 +0300 Subject: [PATCH 08/44] refactoring --- arrows.sketchplugin/Contents/Sketch/script.js | 53 +++++++++-------- .../Contents/Sketch/script.js.map | 2 +- src/script.js | 58 ++++++++++--------- 3 files changed, 57 insertions(+), 56 deletions(-) diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index 5d86ccd..4e40d2c 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -131,8 +131,7 @@ var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); // var SharedStyle = var pluginKey = "flowArrows"; var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); var docData = context.document.documentData(); -var pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); // TODO: Need to refactor - +var pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); var currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards var newConnectionsData = getConnectionsData(); // Settings @@ -144,7 +143,7 @@ var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); // /* harmony default export */ __webpack_exports__["default"] = (function (context) {}); function createAutoArrow(context) { - start(context, "Auto"); + start(context, "Auto", false); } function createRightArrow(context) { start(context, "Right", false); @@ -542,7 +541,7 @@ function createArrow(firstObjectID, secondObjectID, style, type, direction, cond addToArrowsGroup(arrow.line, currentArrowsGroup); var conditionID; - if (arrow.condition.length > 1) { + if (arrow.condition != null) { conditionID = arrow.condition.id; } else { conditionID = null; @@ -1067,14 +1066,12 @@ function addToArrowsGroup(line, currentGroup) { } function getConnectionsData() { + //Refactored var dataArray = []; - var pluginDataConnections = []; if (pluginData) { - pluginDataConnections = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); - - for (var i = 0; i < pluginDataConnections.length; i++) { - dataArray.push(pluginDataConnections[i]); + for (var i = 0; i < pluginData.length; i++) { + dataArray.push(pluginData[i]); } } @@ -1260,7 +1257,7 @@ function deleteConnectionFromData(arrayNumber) { if (pluginData) { // If we have database - var connections = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); + var connections = pluginData; for (var i = 0; i < connections.length; i++) { // Updating all connections without deleted one @@ -1350,14 +1347,11 @@ function autoAlignLayer(sourceObjectID, childObjectID, direction) { } function defineSourceObject(firstObjectID, secondObjectID, direction) { + //Refactored var firstObject = document.getLayerWithID(firstObjectID); var secondObject = document.getLayerWithID(secondObjectID); var sourceObjectID; - if (direction == "Auto") { - sourceObjectID = firstObject.id; - } - if (direction == "Right") { if (firstObject.frame.x <= secondObject.frame.x) { sourceObjectID = firstObject.id; @@ -1394,6 +1388,7 @@ function defineSourceObject(firstObjectID, secondObjectID, direction) { } function getSourceObjectFromSelection(selection, direction) { + //Refactored var sourceObjectID = selection.firstObject().objectID(); if (direction != "Auto") { @@ -1494,40 +1489,44 @@ function start(context, direction, condition) { if (selection.count() > 1) { // Need to find source object by ID first var sourceObjectID = getSourceObjectFromSelection(selection, direction); - var currentConnectionsData = newConnectionsData; + var currentConnectionsData = newConnectionsData; // Need to refactor for (var g = 0; g < selection.count(); g++) { if (selection[g].objectID() != sourceObjectID) { // Then need to create or update connection arrow with each selection var connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData); - if (connectionIndex != null) { + if (connectionIndex == null) { + // There is no connection with this two objects in our database + createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, condition); + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("New connection is created 🚀"); + } else { // Because this is creating flow, we need to take the direction from user settings if (condition == true) { // Need to remake the arrow condition + // There might be a situation, when user recreates arrow with condition or not if (currentConnectionsData[connectionIndex].condition) { updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex); } else { - updateArrow(sourceObjectID, selection[g].objectID(), null, null, dDirection, currentConnectionsData[connectionIndex].line, true, connectionIndex); + updateArrow(sourceObjectID, selection[g].objectID(), null, null, dDirection, currentConnectionsData[connectionIndex].line, condition, connectionIndex); } } else { - updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex); - } + // If no condition, we need to delete + if (currentConnectionsData[connectionIndex].condition != null) { + // Need to delete previous condition first + /////// Looks like there is a problem with saving the connection + document.getLayerWithID(currentConnectionsData[connectionIndex].condition).remove(); + } - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Current connection is updated 🚀"); - } else { - // There is no connection with this two objects in our database - if (condition == true) { - createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, true); - } else { - createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, false); + updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, condition, connectionIndex); } - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("New connection is created 🚀"); + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Current connection is updated 🚀"); } } } + log(newConnectionsData); context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); } else { // When user didn't select anything diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index 4800099..0af0927 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","pluginKey","document","sketch","fromNative","context","docData","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","currentParentGroup","currentPage","currentArtboard","newConnectionsData","getConnectionsData","Settings","createAutoArrow","start","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","updateSelectedArrows","selection","count","currentConnectionsData","g","objectID","connectionIndex","findConnectionData","updateArrow","firstObject","secondObject","style","type","direction","line","condition","message","setValue_forKey_onLayer_forPluginIdentifier","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","length","updateArrowsCounter","i","getLayerWithID","sketchObject","parentArtboard","class","push","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","settingForKey","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","views","subviews","title","setSettingForKey","intValue","state","onLayersMoved","action","actionContext","panel","ControlBar","NSPanel","setStyleMask","NSTitledWindowMask","NSFullSizeContentViewWindowMask","setTitleVisibility","NSWindowTitleHidden","setTitlebarAppearsTransparent","setFrame_display","setMovableByWindowBackground","setHasShadow","setLevel","NSFloatingWindowLevel","center","makeKeyAndOrderFront","nil","firstObjectID","secondObjectID","lineID","conditionID","createArrow","localDirection","localStyle","localType","getDirection","getLayerStyles","updateSpacing","autoAlignLayer","currentArrowsGroup","checkForGroup","arrow","drawConnection","log","addToArrowsGroup","id","connection","groupName","currentGroup","layers","name","refactorLines","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","firstLayerPosX","firstLayerPosY","secondLayerPosX","secondLayerPosY","middlePosX","middlePosY","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","addCondition","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","sharedStyle","ownStyle","addLayers","fixGeometryWithOptions","Group","group","locked","moveToBack","dataArray","pluginDataConnections","data","arrayNumber","setActiveDirectionSetting","arrowDirectionField","currentDirection","addItemWithTitle","lastItem","setState","docSettings","styles","docTypeSettings","newConnections","lineObject","selectedGroup","remove","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","defineSourceObject","getSourceObjectFromSelection","confirmationAlert","setMessageText","addButtonWithTitle","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","allStyles","allLayerStyles","keyword","includes","dDirection","getConditionID","libraries","getLibraries","symbolReferences","getImportableSymbolReferencesForDocument","conditionObject","symbolMaster","import","instance","createNewInstance"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch'\n// const { toArray } = require('util')\n\n//\n// Variables\n//\n\nlet UI = require('sketch/ui') \n// var SharedStyle = require('sketch/dom').SharedStyle\n\nconst pluginKey = \"flowArrows\"\nconst document = sketch.fromNative(context.document)\nlet docData = context.document.documentData()\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey) // TODO: Need to refactor\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards\nlet newConnectionsData = getConnectionsData()\n\n// Settings\nvar Settings = require('sketch/settings')\n\n \n//\n// Create Connection Function\n//\n\nexport default function(context) {}\nexport function createAutoArrow(context){start(context, \"Auto\")}\nexport function createRightArrow(context){start(context, \"Right\", false)}\nexport function createDownArrow(context){start(context, \"Down\", false)}\nexport function createLeftArrow(context){start(context, \"Left\", false)}\nexport function createUpArrow(context){start(context, \"Up\", false)}\n\nexport function createRightArrowWithCondition(context){start(context, \"Right\", true)}\nexport function createDownArrowWithCondition(context){start(context, \"Down\", true)}\nexport function createLeftArrowWithCondition(context){start(context, \"Left\", true)}\nexport function createUpArrowWithCondition(context){start(context, \"Up\", true)}\n\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n\n let selection = context.selection\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n // let sourceObjectID = getSourceObjectFromSelection(selection)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, connectionIndex) {\n // There might be a situation, when user deleted current group or current group stays on another artboard => In that case need to create another group\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, condition) {\n // Process of creating new connection \n let localDirection, localStyle, localType\n if(direction == \"Auto\"){\n // If direction is auto, we need to specify direction ourselves\n localDirection = getDirection(firstObjectID, secondObjectID)\n } else {\n localDirection = direction\n }\n\n if(type == null){\n localType = Settings.settingForKey(\"arrowType\") \n } else {\n localType = type\n }\n \n // log(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey))\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey))\n \n if(style != null){\n // if we updating connection with previously created objects\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n localStyle = style\n } else {\n localStyle = \"Default Style\"\n }\n } else {\n // We don't have any data from the plugin data\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)){\n localStyle = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)\n } else {\n localStyle = \"Default Style\"\n }\n \n }\n \n \n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n let currentArrowsGroup = checkForGroup(\"Arrows\")\n let arrow = drawConnection(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentArrowsGroup, condition)\n log(arrow)\n addToArrowsGroup(arrow.line, currentArrowsGroup)\n\n\n let conditionID\n if(arrow.condition.length > 1) {\n conditionID = arrow.condition.id\n } else {\n conditionID = null\n }\n \n\n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : localStyle,\n condition : conditionID,\n type : localType,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForGroup(groupName) {\n let currentGroup = null\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n // If we already have \"Arrow\" group we need to save it's folder\n currentGroup = currentParentGroup.layers()[i]\n refactorLines(currentGroup)\n } \n }\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n if(diffX > diffY) {\n direction = \"Down\"\n } else {\n direction = \"Right\"\n }\n } else {\n // Top quarter\n if(absDiffX > absDiffY) {\n direction = \"Right\"\n } else {\n direction = \"Up\"\n }\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n if(absDiffX > absDiffY) {\n direction = \"Left\"\n } else {\n direction = \"Down\"\n }\n } else {\n // Top quarter\n if(diffX > diffY) {\n direction = \"Left\"\n } else {\n direction = \"Up\"\n }\n }\n }\n return direction\n}\n\nfunction drawConnection(firstObjectID, secondObjectID, style, type, direction, currentGroup, condition){\n let firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, middlePosX, middlePosY, diffX, diffY\n let connection = {line: [], condition: []}\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n\n if(currentGroup){\n //if we already have a group, need to specify the difference\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n // Drawing a line\n let path = NSBezierPath.bezierPath()\n\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(type == \"Angled\" || type == null){\n // Based on direction, we need to specify connection points\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n\n\n // Making middle points rounded\n let points = connection.line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n\n // Providing Settings for the arrow\n connection.line.setName(\"Arrow\")\n }\n\n if(type == \"Straight\"){\n // Based on direction, we need to specify connection points\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n \n // Providing Settings for the arrow\n connection.line.setName(\"Arrow\")\n }\n\n if(type == \"Curved\"){\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = connection.line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Auto\"){\n sourceObjectID = firstObject.id\n }\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n }\n \n return sourceObjectID\n}\n\nfunction confirmationAlert(alert, message) {\n // Title\n alert.setMessageText(\"Would you like to delete all the arrows from \"+message)\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Delete Arrows\")\n alert.addButtonWithTitle(\"Cancel\")\n \n // Creating the view\n const viewWidth = 300\n const viewHeight = 40\n \n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n \n // Label\n var infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(-1, viewHeight - 40, 330, 40))\n \n infoLabel.setStringValue(\"ℹ️ You can select layers, artboards to delete all the arrows from selected one only\")\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n \n view.addSubview(infoLabel)\n\n return alert\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) {\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n if(name == null) {\n for(let i = 0; i < allStyles.count(); i++){\n if(allStyles[i].name().includes(keyword)){\n styles.push(allStyles[i]);\n }\n }\n } else {\n // Searching only for name\n for(let i = 0; i < allStyles.count(); i++){\n if(allStyles[i].name() == name){\n styles.push(allStyles[i]);\n }\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, condition){\n let selection = context.selection\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n if(connectionIndex != null){\n // Because this is creating flow, we need to take the direction from user settings\n if(condition == true){\n // Need to remake the arrow condition\n if(currentConnectionsData[connectionIndex].condition){\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n } else {\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, dDirection, currentConnectionsData[connectionIndex].line, true, connectionIndex)\n }\n } else {\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n }\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n // There is no connection with this two objects in our database\n if(condition == true){\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, true)\n } else {\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, false)\n }\n sketch.UI.message(\"New connection is created 🚀\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\n// {\n// \"script\": \"./script.js\",\n// \"name\" : \"onLayersMoved\",\n// \"handlers\" : {\n// \"actions\": {\n// \"LayersMoved.finish\": \"onLayersMoved\"\n// }\n// },\n// \"identifier\" : \"onLayersMoved\"\n// }\n\nfunction getConditionID(keyword){\n let libraries = sketch.getLibraries()\n let conditionID, symbolReferences\n // let keyword = \"#condition\"\n\n // log(libraries.length)\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionID = symbolReferences[i].id \n }\n }\n }\n\n if(conditionID == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n }\n\n // symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n // log(symbolReferences)\n // var symbolMaster = symbolReferences[0].import()\n\n\n // var instance = symbolMaster.createNewInstance()\n // console.log(instance)\n\n\n // instance.parent = currentParentGroup\n // log(symbolMaster)\n\n return conditionID\n}\n\nfunction addCondition(keyword, x, y){\n let libraries = sketch.getLibraries()\n let conditionObject, symbolReferences\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionObject = symbolReferences[i]\n }\n }\n }\n\n if(conditionObject == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n } else {\n let symbolMaster = conditionObject.import()\n let instance = symbolMaster.createNewInstance()\n instance.parent = currentParentGroup\n instance.frame.x = x - instance.frame.width / 2 \n instance.frame.y = y - instance.frame.height / 2\n }\n\n return conditionObject\n}\n\n\n\n\n\n\n","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","pluginKey","document","sketch","fromNative","context","docData","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","currentParentGroup","currentPage","currentArtboard","newConnectionsData","getConnectionsData","Settings","createAutoArrow","start","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","updateSelectedArrows","selection","count","currentConnectionsData","g","objectID","connectionIndex","findConnectionData","updateArrow","firstObject","secondObject","style","type","direction","line","condition","message","setValue_forKey_onLayer_forPluginIdentifier","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","length","updateArrowsCounter","i","getLayerWithID","sketchObject","parentArtboard","class","push","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","settingForKey","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","views","subviews","title","setSettingForKey","intValue","state","onLayersMoved","action","actionContext","panel","ControlBar","NSPanel","setStyleMask","NSTitledWindowMask","NSFullSizeContentViewWindowMask","setTitleVisibility","NSWindowTitleHidden","setTitlebarAppearsTransparent","setFrame_display","setMovableByWindowBackground","setHasShadow","setLevel","NSFloatingWindowLevel","center","makeKeyAndOrderFront","nil","firstObjectID","secondObjectID","lineID","conditionID","createArrow","localDirection","localStyle","localType","getDirection","getLayerStyles","updateSpacing","autoAlignLayer","currentArrowsGroup","checkForGroup","arrow","drawConnection","log","addToArrowsGroup","id","connection","groupName","currentGroup","layers","name","refactorLines","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","firstLayerPosX","firstLayerPosY","secondLayerPosX","secondLayerPosY","middlePosX","middlePosY","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","addCondition","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","sharedStyle","ownStyle","addLayers","fixGeometryWithOptions","Group","group","locked","moveToBack","dataArray","data","arrayNumber","setActiveDirectionSetting","arrowDirectionField","currentDirection","addItemWithTitle","lastItem","setState","docSettings","styles","docTypeSettings","newConnections","lineObject","selectedGroup","remove","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","defineSourceObject","getSourceObjectFromSelection","confirmationAlert","setMessageText","addButtonWithTitle","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","allStyles","allLayerStyles","keyword","includes","dDirection","getConditionID","libraries","getLibraries","symbolReferences","getImportableSymbolReferencesForDocument","conditionObject","symbolMaster","import","instance","createNewInstance"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch'\n// const { toArray } = require('util')\n\n//\n// Variables\n//\n\nlet UI = require('sketch/ui') \n// var SharedStyle = require('sketch/dom').SharedStyle\n\nconst pluginKey = \"flowArrows\"\nconst document = sketch.fromNative(context.document)\nlet docData = context.document.documentData()\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey)\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards\nlet newConnectionsData = getConnectionsData()\n\n// Settings\nvar Settings = require('sketch/settings')\n\n \n//\n// Create Connection Function\n//\n\nexport default function(context) {}\nexport function createAutoArrow(context){start(context, \"Auto\", false)}\nexport function createRightArrow(context){start(context, \"Right\", false)}\nexport function createDownArrow(context){start(context, \"Down\", false)}\nexport function createLeftArrow(context){start(context, \"Left\", false)}\nexport function createUpArrow(context){start(context, \"Up\", false)}\n\nexport function createRightArrowWithCondition(context){start(context, \"Right\", true)}\nexport function createDownArrowWithCondition(context){start(context, \"Down\", true)}\nexport function createLeftArrowWithCondition(context){start(context, \"Left\", true)}\nexport function createUpArrowWithCondition(context){start(context, \"Up\", true)}\n\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n\n let selection = context.selection\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n // let sourceObjectID = getSourceObjectFromSelection(selection)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, connectionIndex) {\n // There might be a situation, when user deleted current group or current group stays on another artboard => In that case need to create another group\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, condition) {\n // Process of creating new connection \n let localDirection, localStyle, localType\n if(direction == \"Auto\"){\n // If direction is auto, we need to specify direction ourselves\n localDirection = getDirection(firstObjectID, secondObjectID)\n } else {\n localDirection = direction\n }\n\n if(type == null){\n localType = Settings.settingForKey(\"arrowType\") \n } else {\n localType = type\n }\n \n // log(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey))\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey))\n \n if(style != null){\n // if we updating connection with previously created objects\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n localStyle = style\n } else {\n localStyle = \"Default Style\"\n }\n } else {\n // We don't have any data from the plugin data\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)){\n localStyle = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)\n } else {\n localStyle = \"Default Style\"\n }\n \n }\n \n \n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n let currentArrowsGroup = checkForGroup(\"Arrows\")\n let arrow = drawConnection(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentArrowsGroup, condition)\n log(arrow)\n addToArrowsGroup(arrow.line, currentArrowsGroup)\n\n\n let conditionID\n\n\n if(arrow.condition != null) {\n conditionID = arrow.condition.id\n } else {\n conditionID = null\n }\n \n\n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : localStyle,\n condition : conditionID,\n type : localType,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForGroup(groupName) {\n let currentGroup = null\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n // If we already have \"Arrow\" group we need to save it's folder\n currentGroup = currentParentGroup.layers()[i]\n refactorLines(currentGroup)\n } \n }\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n if(diffX > diffY) {\n direction = \"Down\"\n } else {\n direction = \"Right\"\n }\n } else {\n // Top quarter\n if(absDiffX > absDiffY) {\n direction = \"Right\"\n } else {\n direction = \"Up\"\n }\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n if(absDiffX > absDiffY) {\n direction = \"Left\"\n } else {\n direction = \"Down\"\n }\n } else {\n // Top quarter\n if(diffX > diffY) {\n direction = \"Left\"\n } else {\n direction = \"Up\"\n }\n }\n }\n return direction\n}\n\nfunction drawConnection(firstObjectID, secondObjectID, style, type, direction, currentGroup, condition){\n let firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, middlePosX, middlePosY, diffX, diffY\n let connection = {line: [], condition: []}\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n\n if(currentGroup){\n //if we already have a group, need to specify the difference\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n // Drawing a line\n let path = NSBezierPath.bezierPath()\n\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(type == \"Angled\" || type == null){\n // Based on direction, we need to specify connection points\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n\n\n // Making middle points rounded\n let points = connection.line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n\n // Providing Settings for the arrow\n connection.line.setName(\"Arrow\")\n }\n\n if(type == \"Straight\"){\n // Based on direction, we need to specify connection points\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n \n // Providing Settings for the arrow\n connection.line.setName(\"Arrow\")\n }\n\n if(type == \"Curved\"){\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = connection.line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n }\n \n return sourceObjectID\n}\n\nfunction confirmationAlert(alert, message) {\n // Title\n alert.setMessageText(\"Would you like to delete all the arrows from \"+message)\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Delete Arrows\")\n alert.addButtonWithTitle(\"Cancel\")\n \n // Creating the view\n const viewWidth = 300\n const viewHeight = 40\n \n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n \n // Label\n var infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(-1, viewHeight - 40, 330, 40))\n \n infoLabel.setStringValue(\"ℹ️ You can select layers, artboards to delete all the arrows from selected one only\")\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n \n view.addSubview(infoLabel)\n\n return alert\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) {\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n if(name == null) {\n for(let i = 0; i < allStyles.count(); i++){\n if(allStyles[i].name().includes(keyword)){\n styles.push(allStyles[i]);\n }\n }\n } else {\n // Searching only for name\n for(let i = 0; i < allStyles.count(); i++){\n if(allStyles[i].name() == name){\n styles.push(allStyles[i]);\n }\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, condition){\n let selection = context.selection\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n \n if(connectionIndex == null){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, condition)\n sketch.UI.message(\"New connection is created 🚀\")\n } else {\n // Because this is creating flow, we need to take the direction from user settings\n if(condition == true){\n // Need to remake the arrow condition\n // There might be a situation, when user recreates arrow with condition or not\n if(currentConnectionsData[connectionIndex].condition){\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n } else {\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, dDirection, currentConnectionsData[connectionIndex].line, condition, connectionIndex)\n }\n } else {\n // If no condition, we need to delete\n if(currentConnectionsData[connectionIndex].condition != null){\n // Need to delete previous condition first\n /////// Looks like there is a problem with saving the connection\n document.getLayerWithID(currentConnectionsData[connectionIndex].condition).remove()\n }\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, condition, connectionIndex)\n }\n sketch.UI.message(\"Current connection is updated 🚀\")\n }\n }\n }\n log(newConnectionsData)\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\n// {\n// \"script\": \"./script.js\",\n// \"name\" : \"onLayersMoved\",\n// \"handlers\" : {\n// \"actions\": {\n// \"LayersMoved.finish\": \"onLayersMoved\"\n// }\n// },\n// \"identifier\" : \"onLayersMoved\"\n// }\n\nfunction getConditionID(keyword){\n let libraries = sketch.getLibraries()\n let conditionID, symbolReferences\n // let keyword = \"#condition\"\n\n // log(libraries.length)\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionID = symbolReferences[i].id \n }\n }\n }\n\n if(conditionID == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n }\n\n // symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n // log(symbolReferences)\n // var symbolMaster = symbolReferences[0].import()\n\n\n // var instance = symbolMaster.createNewInstance()\n // console.log(instance)\n\n\n // instance.parent = currentParentGroup\n // log(symbolMaster)\n\n return conditionID\n}\n\nfunction addCondition(keyword, x, y){\n let libraries = sketch.getLibraries()\n let conditionObject, symbolReferences\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionObject = symbolReferences[i]\n }\n }\n }\n\n if(conditionObject == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n } else {\n let symbolMaster = conditionObject.import()\n let instance = symbolMaster.createNewInstance()\n instance.parent = currentParentGroup\n instance.frame.x = x - instance.frame.width / 2 \n instance.frame.y = y - instance.frame.height / 2\n }\n\n return conditionObject\n}\n\n\n\n\n\n\n","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/src/script.js b/src/script.js index 32232a1..dac3d58 100644 --- a/src/script.js +++ b/src/script.js @@ -11,7 +11,7 @@ let UI = require('sketch/ui') const pluginKey = "flowArrows" const document = sketch.fromNative(context.document) let docData = context.document.documentData() -let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey) // TODO: Need to refactor +let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey) let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards let newConnectionsData = getConnectionsData() @@ -24,7 +24,7 @@ var Settings = require('sketch/settings') // export default function(context) {} -export function createAutoArrow(context){start(context, "Auto")} +export function createAutoArrow(context){start(context, "Auto", false)} export function createRightArrow(context){start(context, "Right", false)} export function createDownArrow(context){start(context, "Down", false)} export function createLeftArrow(context){start(context, "Left", false)} @@ -443,7 +443,9 @@ function createArrow(firstObjectID, secondObjectID, style, type, direction, cond let conditionID - if(arrow.condition.length > 1) { + + + if(arrow.condition != null) { conditionID = arrow.condition.id } else { conditionID = null @@ -868,16 +870,15 @@ function addToArrowsGroup(line, currentGroup){ } } -function getConnectionsData(){ +function getConnectionsData(){ //Refactored let dataArray = [] - let pluginDataConnections = [] + if(pluginData){ - pluginDataConnections = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey) - - for (let i = 0; i < pluginDataConnections.length; i ++) { - dataArray.push(pluginDataConnections[i]) + for (let i = 0; i < pluginData.length; i ++) { + dataArray.push(pluginData[i]) } } + return dataArray } @@ -1063,7 +1064,7 @@ function deleteConnectionFromData(arrayNumber){ let newConnections = [] if(pluginData){ // If we have database - let connections = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey) + let connections = pluginData for (let i = 0; i < connections.length; i ++) { // Updating all connections without deleted one @@ -1144,15 +1145,11 @@ function autoAlignLayer(sourceObjectID, childObjectID, direction){ } } -function defineSourceObject(firstObjectID, secondObjectID, direction){ +function defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored let firstObject = document.getLayerWithID(firstObjectID) let secondObject = document.getLayerWithID(secondObjectID) let sourceObjectID - if(direction == "Auto"){ - sourceObjectID = firstObject.id - } - if(direction == "Right"){ if(firstObject.frame.x <= secondObject.frame.x){ sourceObjectID = firstObject.id @@ -1188,7 +1185,7 @@ function defineSourceObject(firstObjectID, secondObjectID, direction){ return sourceObjectID } -function getSourceObjectFromSelection(selection, direction){ +function getSourceObjectFromSelection(selection, direction){ //Refactored let sourceObjectID = selection.firstObject().objectID() if(direction != "Auto"){ @@ -1297,36 +1294,41 @@ function start(context, direction, condition){ if(selection.count() > 1){ // Need to find source object by ID first let sourceObjectID = getSourceObjectFromSelection(selection, direction) - let currentConnectionsData = newConnectionsData + let currentConnectionsData = newConnectionsData // Need to refactor for(let g = 0; g < selection.count(); g++) { if(selection[g].objectID() != sourceObjectID){ // Then need to create or update connection arrow with each selection let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData) - if(connectionIndex != null){ + + if(connectionIndex == null){ + // There is no connection with this two objects in our database + createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, condition) + sketch.UI.message("New connection is created 🚀") + } else { // Because this is creating flow, we need to take the direction from user settings if(condition == true){ // Need to remake the arrow condition + // There might be a situation, when user recreates arrow with condition or not if(currentConnectionsData[connectionIndex].condition){ updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex) } else { - updateArrow(sourceObjectID, selection[g].objectID(), null, null, dDirection, currentConnectionsData[connectionIndex].line, true, connectionIndex) + updateArrow(sourceObjectID, selection[g].objectID(), null, null, dDirection, currentConnectionsData[connectionIndex].line, condition, connectionIndex) } } else { - updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex) + // If no condition, we need to delete + if(currentConnectionsData[connectionIndex].condition != null){ + // Need to delete previous condition first + /////// Looks like there is a problem with saving the connection + document.getLayerWithID(currentConnectionsData[connectionIndex].condition).remove() + } + updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, condition, connectionIndex) } sketch.UI.message("Current connection is updated 🚀") - } else { - // There is no connection with this two objects in our database - if(condition == true){ - createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, true) - } else { - createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, false) - } - sketch.UI.message("New connection is created 🚀") } } } + log(newConnectionsData) context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey) } else { // When user didn't select anything From 5227aa0ffe807f565304300303331fa20b685d1a Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Mon, 1 Apr 2019 22:56:06 +0300 Subject: [PATCH 09/44] refactoring --- arrows.sketchplugin/Contents/Sketch/script.js | 113 +++++------------- .../Contents/Sketch/script.js.map | 2 +- src/script.js | 108 +++++------------ 3 files changed, 63 insertions(+), 160 deletions(-) diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index 4e40d2c..01caeb5 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -482,40 +482,33 @@ function panel(context) { // Functions // -function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, connectionIndex) { - // There might be a situation, when user deleted current group or current group stays on another artboard => In that case need to create another group +function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { + // Refactored // Need to check if we have the layers with such IDs var firstObject = document.getLayerWithID(firstObjectID); - var secondObject = document.getLayerWithID(secondObjectID); // Need to delete data first, because we will have a new line + var secondObject = document.getLayerWithID(secondObjectID); + var conditionObject = document.getLayerWithID(conditionID); // Need to delete data first, because we will have a new line deleteLine(lineID); + + if (!isCondition && conditionObject) { + conditionObject.remove(); + } + newConnectionsData = deleteConnectionFromData(connectionIndex); if (firstObject && secondObject) { // If we have all the objects, we can recreate the line - createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID); + createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition); } } -function createArrow(firstObjectID, secondObjectID, style, type, direction, condition) { +function createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition) { // Process of creating new connection - var localDirection, localStyle, localType; - - if (direction == "Auto") { - // If direction is auto, we need to specify direction ourselves - localDirection = getDirection(firstObjectID, secondObjectID); - } else { - localDirection = direction; - } - - if (type == null) { - localType = Settings.settingForKey("arrowType"); - } else { - localType = type; - } // log(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)) - - - localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)); + var localStyle; + var localType = type == null ? localType = Settings.settingForKey("arrowType") : localType = type; + var localDirection = direction == "Auto" ? localDirection = getDirection(firstObjectID, secondObjectID) : localDirection = direction; + var conditionID = arrow.condition != null ? arrow.condition.id : null; if (style != null) { // if we updating connection with previously created objects @@ -536,17 +529,9 @@ function createArrow(firstObjectID, secondObjectID, style, type, direction, cond updateSpacing(firstObjectID, secondObjectID, localDirection); autoAlignLayer(firstObjectID, secondObjectID, localDirection); var currentArrowsGroup = checkForGroup("Arrows"); - var arrow = drawConnection(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentArrowsGroup, condition); - log(arrow); - addToArrowsGroup(arrow.line, currentArrowsGroup); - var conditionID; - - if (arrow.condition != null) { - conditionID = arrow.condition.id; - } else { - conditionID = null; - } // Storage for current connection + var arrow = drawConnection(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentArrowsGroup, isCondition); // log(arrow) + addToArrowsGroup(arrow.line, currentArrowsGroup); // Storage for current connection var connection = { firstObject: firstObjectID, @@ -576,6 +561,7 @@ function checkForGroup(groupName) { } function getDirection(firstObjectID, secondObjectID) { + // Refactored // Get direction from the source object var firstObject = document.getLayerWithID(firstObjectID); var secondObject = document.getLayerWithID(secondObjectID); @@ -593,35 +579,19 @@ function getDirection(firstObjectID, secondObjectID) { // Right Half if (secondObjectMidY > firstObjectMidY) { // Bottom quarter - if (diffX > diffY) { - direction = "Down"; - } else { - direction = "Right"; - } + direction = diffX > diffY ? "Down" : "Right"; } else { // Top quarter - if (absDiffX > absDiffY) { - direction = "Right"; - } else { - direction = "Up"; - } + direction = absDiffX > absDiffY ? "Right" : "Up"; } } else { // Left Half if (secondObjectMidY > firstObjectMidY) { // Bottom quarter - if (absDiffX > absDiffY) { - direction = "Left"; - } else { - direction = "Down"; - } + direction = absDiffX > absDiffY ? "Left" : "Down"; } else { // Top quarter - if (diffX > diffY) { - direction = "Left"; - } else { - direction = "Up"; - } + direction = diffX > diffY ? "Left" : "Up"; } } @@ -1252,7 +1222,8 @@ function setActiveTypeSetting(arrowTypeField) { } } -function deleteConnectionFromData(arrayNumber) { +function deleteConnectionFromData(connectionIndex) { + // Refactored var newConnections = []; if (pluginData) { @@ -1261,7 +1232,7 @@ function deleteConnectionFromData(arrayNumber) { for (var i = 0; i < connections.length; i++) { // Updating all connections without deleted one - if (i != arrayNumber) { + if (i != connectionIndex) { newConnections.push(connections[i]); } } @@ -1277,6 +1248,7 @@ function refactorLines(group) { } function deleteLine(lineID) { + // refactored var lineObject = document.getLayerWithID(lineID); var selectedGroup; @@ -1483,10 +1455,10 @@ function getLayerStyles(name) { return styles; } -function start(context, direction, condition) { +function start(context, direction, isCondition) { var selection = context.selection; - if (selection.count() > 1) { + if (selection.count() > 1 && selection[0].class() != "MSArtboardGroup") { // Need to find source object by ID first var sourceObjectID = getSourceObjectFromSelection(selection, direction); var currentConnectionsData = newConnectionsData; // Need to refactor @@ -1498,39 +1470,20 @@ function start(context, direction, condition) { if (connectionIndex == null) { // There is no connection with this two objects in our database - createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, condition); + createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, isCondition); sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("New connection is created 🚀"); } else { - // Because this is creating flow, we need to take the direction from user settings - if (condition == true) { - // Need to remake the arrow condition - // There might be a situation, when user recreates arrow with condition or not - if (currentConnectionsData[connectionIndex].condition) { - updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex); - } else { - updateArrow(sourceObjectID, selection[g].objectID(), null, null, dDirection, currentConnectionsData[connectionIndex].line, condition, connectionIndex); - } - } else { - // If no condition, we need to delete - if (currentConnectionsData[connectionIndex].condition != null) { - // Need to delete previous condition first - /////// Looks like there is a problem with saving the connection - document.getLayerWithID(currentConnectionsData[connectionIndex].condition).remove(); - } - - updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, condition, connectionIndex); - } - - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Current connection is updated 🚀"); + // Need to remake the arrow condition + updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex); + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Current connection is updated 🤘"); } } } - log(newConnectionsData); context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); } else { // When user didn't select anything - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Please select more than two layers"); + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Please select more than two layers. Artboards are coming soon 🥳"); } } // { // "script": "./script.js", diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index 0af0927..745008b 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","pluginKey","document","sketch","fromNative","context","docData","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","currentParentGroup","currentPage","currentArtboard","newConnectionsData","getConnectionsData","Settings","createAutoArrow","start","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","updateSelectedArrows","selection","count","currentConnectionsData","g","objectID","connectionIndex","findConnectionData","updateArrow","firstObject","secondObject","style","type","direction","line","condition","message","setValue_forKey_onLayer_forPluginIdentifier","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","length","updateArrowsCounter","i","getLayerWithID","sketchObject","parentArtboard","class","push","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","settingForKey","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","views","subviews","title","setSettingForKey","intValue","state","onLayersMoved","action","actionContext","panel","ControlBar","NSPanel","setStyleMask","NSTitledWindowMask","NSFullSizeContentViewWindowMask","setTitleVisibility","NSWindowTitleHidden","setTitlebarAppearsTransparent","setFrame_display","setMovableByWindowBackground","setHasShadow","setLevel","NSFloatingWindowLevel","center","makeKeyAndOrderFront","nil","firstObjectID","secondObjectID","lineID","conditionID","createArrow","localDirection","localStyle","localType","getDirection","getLayerStyles","updateSpacing","autoAlignLayer","currentArrowsGroup","checkForGroup","arrow","drawConnection","log","addToArrowsGroup","id","connection","groupName","currentGroup","layers","name","refactorLines","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","firstLayerPosX","firstLayerPosY","secondLayerPosX","secondLayerPosY","middlePosX","middlePosY","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","addCondition","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","sharedStyle","ownStyle","addLayers","fixGeometryWithOptions","Group","group","locked","moveToBack","dataArray","data","arrayNumber","setActiveDirectionSetting","arrowDirectionField","currentDirection","addItemWithTitle","lastItem","setState","docSettings","styles","docTypeSettings","newConnections","lineObject","selectedGroup","remove","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","defineSourceObject","getSourceObjectFromSelection","confirmationAlert","setMessageText","addButtonWithTitle","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","allStyles","allLayerStyles","keyword","includes","dDirection","getConditionID","libraries","getLibraries","symbolReferences","getImportableSymbolReferencesForDocument","conditionObject","symbolMaster","import","instance","createNewInstance"],"mappings":";;;;;;AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;;;;;;;AClFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;CACA;AAEA;AACA;AACA;;AAEA,IAAIA,EAAE,GAAGC,mBAAO,CAAC,4BAAD,CAAhB,C,CACA;;;AAEA,IAAMC,SAAS,GAAG,YAAlB;AACA,IAAMC,QAAQ,GAAGC,6CAAM,CAACC,UAAP,CAAkBC,OAAO,CAACH,QAA1B,CAAjB;AACA,IAAII,OAAO,GAAGD,OAAO,CAACH,QAAR,CAAiBK,YAAjB,EAAd;AACA,IAAIC,UAAU,GAAGH,OAAO,CAACI,OAAR,CAAgBC,uCAAhB,CAAwD,kBAAxD,EAA4EJ,OAA5E,EAAqFL,SAArF,CAAjB;AACA,IAAIU,kBAAkB,GAAGL,OAAO,CAACM,WAAR,GAAsBC,eAAtB,MAA2CP,OAAO,CAACM,WAAR,EAApE,C,CAA0F;;AAC1F,IAAIE,kBAAkB,GAAGC,kBAAkB,EAA3C,C,CAEA;;AACA,IAAIC,QAAQ,GAAGhB,mBAAO,CAAC,wCAAD,CAAtB,C,CAGA;AACA;AACA;;;AAEe,yEAASK,OAAT,EAAkB,CAAE;AAC5B,SAASY,eAAT,CAAyBZ,OAAzB,EAAiC;AAACa,OAAK,CAACb,OAAD,EAAU,MAAV,EAAkB,KAAlB,CAAL;AAA8B;AAChE,SAASc,gBAAT,CAA0Bd,OAA1B,EAAkC;AAACa,OAAK,CAACb,OAAD,EAAU,OAAV,EAAmB,KAAnB,CAAL;AAA+B;AAClE,SAASe,eAAT,CAAyBf,OAAzB,EAAiC;AAACa,OAAK,CAACb,OAAD,EAAU,MAAV,EAAkB,KAAlB,CAAL;AAA8B;AAChE,SAASgB,eAAT,CAAyBhB,OAAzB,EAAiC;AAACa,OAAK,CAACb,OAAD,EAAU,MAAV,EAAkB,KAAlB,CAAL;AAA8B;AAChE,SAASiB,aAAT,CAAuBjB,OAAvB,EAA+B;AAACa,OAAK,CAACb,OAAD,EAAU,IAAV,EAAgB,KAAhB,CAAL;AAA4B;AAE5D,SAASkB,6BAAT,CAAuClB,OAAvC,EAA+C;AAACa,OAAK,CAACb,OAAD,EAAU,OAAV,EAAmB,IAAnB,CAAL;AAA8B;AAC9E,SAASmB,4BAAT,CAAsCnB,OAAtC,EAA8C;AAACa,OAAK,CAACb,OAAD,EAAU,MAAV,EAAkB,IAAlB,CAAL;AAA6B;AAC5E,SAASoB,4BAAT,CAAsCpB,OAAtC,EAA8C;AAACa,OAAK,CAACb,OAAD,EAAU,MAAV,EAAkB,IAAlB,CAAL;AAA6B;AAC5E,SAASqB,0BAAT,CAAoCrB,OAApC,EAA4C;AAACa,OAAK,CAACb,OAAD,EAAU,IAAV,EAAgB,IAAhB,CAAL;AAA2B,C,CAE/E;AACA;AACA;;AAEO,SAASsB,oBAAT,CAA8BtB,OAA9B,EAAuC;AAE5C,MAAIuB,SAAS,GAAGvB,OAAO,CAACuB,SAAxB;;AAEA,MAAGA,SAAS,CAACC,KAAV,KAAoB,CAAvB,EAAyB;AACvB;AACA;AACA,QAAIC,sBAAsB,GAAGhB,kBAA7B;;AAEA,SAAI,IAAIiB,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGH,SAAS,CAACC,KAAV,EAAnB,EAAsCE,CAAC,EAAvC,EAA2C;AACzC,UAAGH,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,MAA2BJ,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAA9B,EAAsD;AACpD;AACA,YAAIC,eAAe,GAAGC,kBAAkB,CAACN,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAAD,EAA0BJ,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,EAA1B,EAAmDF,sBAAnD,CAAxC;;AAEA,YAAGG,eAAe,IAAI,IAAtB,EAA2B;AACzBE,qBAAW,CAACL,sBAAsB,CAACG,eAAD,CAAtB,CAAwCG,WAAzC,EAAsDN,sBAAsB,CAACG,eAAD,CAAtB,CAAwCI,YAA9F,EAA4GP,sBAAsB,CAACG,eAAD,CAAtB,CAAwCK,KAApJ,EAA2JR,sBAAsB,CAACG,eAAD,CAAtB,CAAwCM,IAAnM,EAAyMT,sBAAsB,CAACG,eAAD,CAAtB,CAAwCO,SAAjP,EAA4PV,sBAAsB,CAACG,eAAD,CAAtB,CAAwCQ,IAApS,EAA0SX,sBAAsB,CAACG,eAAD,CAAtB,CAAwCS,SAAlV,EAA6VT,eAA7V,CAAX;AACA9B,uDAAM,CAACJ,EAAP,CAAU4C,OAAV,CAAkB,kCAAlB;AACD,SAHD,MAGO;AACLxC,uDAAM,CAACJ,EAAP,CAAU4C,OAAV,CAAkB,mEAAlB;AACD;AACF;AACF;;AACDtC,WAAO,CAACI,OAAR,CAAgBmC,2CAAhB,CAA4D9B,kBAA5D,EAAgF,kBAAhF,EAAoGR,OAApG,EAA6GL,SAA7G;AACD,GAnBD,MAmBO;AACL;AACAE,iDAAM,CAACJ,EAAP,CAAU4C,OAAV,CAAkB,oCAAlB;AACD;AACF;AAEM,SAASE,oBAAT,CAA8BxC,OAA9B,EAAuC;AAC5C;AACA,MAAIuB,SAAS,GAAGvB,OAAO,CAACuB,SAAxB;AACA,MAAIkB,WAAW,GAAG/B,kBAAkB,EAApC;AACA,MAAIgC,mBAAJ;AACA,MAAIC,oBAAJ;;AAEA,MAAGF,WAAW,CAACG,MAAZ,GAAqB,CAAxB,EAA0B;AACxB;AACA,QAAMC,mBAAmB,GAAGJ,WAAW,CAACG,MAAxC;;AACA,SAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,mBAApB,EAAyCC,CAAC,EAA1C,EAA+C;AAC7C;AACAJ,yBAAmB,GAAG7C,QAAQ,CAACkD,cAAT,CAAwBN,WAAW,CAACK,CAAD,CAAX,CAAef,WAAvC,CAAtB;AACAW,yBAAmB,GAAGA,mBAAmB,CAACM,YAApB,CAAiCC,cAAjC,GAAkDtB,QAAlD,EAAtB;AAEAgB,0BAAoB,GAAG9C,QAAQ,CAACkD,cAAT,CAAwBN,WAAW,CAACK,CAAD,CAAX,CAAed,YAAvC,CAAvB;AACAW,0BAAoB,GAAGA,oBAAoB,CAACK,YAArB,CAAkCC,cAAlC,GAAmDtB,QAAnD,EAAvB;;AAEA,UAAGJ,SAAS,CAACC,KAAV,MAAqB,CAArB,IAA0BD,SAAS,CAAC,CAAD,CAAT,CAAa2B,KAAb,MAAwB,iBAArD,EAAuE;AACrE;AAEA,YAAIR,mBAAmB,IAAInB,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAA3B,EAAmD;AACjD,cAAIgB,oBAAoB,IAAIpB,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAA5B,EAAoD;AAClDG,uBAAW,CAACW,WAAW,CAACK,CAAD,CAAX,CAAef,WAAhB,EAA6BU,WAAW,CAACK,CAAD,CAAX,CAAed,YAA5C,EAA0DS,WAAW,CAACK,CAAD,CAAX,CAAeb,KAAzE,EAAgFQ,WAAW,CAACK,CAAD,CAAX,CAAeZ,IAA/F,EAAqGO,WAAW,CAACK,CAAD,CAAX,CAAeX,SAApH,EAA+HM,WAAW,CAACK,CAAD,CAAX,CAAeV,IAA9I,EAAoJK,WAAW,CAACK,CAAD,CAAX,CAAeT,SAAnK,EAA8KS,CAA9K,CAAX;AACD,WAFD,MAEO;AAACrC,8BAAkB,CAAC0C,IAAnB,CAAwBV,WAAW,CAACK,CAAD,CAAnC;AAAwC;AACjD,SAJD,MAIO;AACL;AACArC,4BAAkB,CAAC0C,IAAnB,CAAwBV,WAAW,CAACK,CAAD,CAAnC;AACD;AACF;AACF;;AACD9C,WAAO,CAACI,OAAR,CAAgBmC,2CAAhB,CAA4D9B,kBAA5D,EAAgF,kBAAhF,EAAoGR,OAApG,EAA6GL,SAA7G;AACAE,iDAAM,CAACJ,EAAP,CAAU4C,OAAV,CAAkB,2BAAlB;AACD,GA1BD,MA0BO;AACL;AACAxC,iDAAM,CAACJ,EAAP,CAAU4C,OAAV,CAAkB,4BAAlB;AACD;AACF;AAEM,SAASc,eAAT,CAAyBpD,OAAzB,EAAkC;AAAE;AACzC;AACA,MAAIyB,sBAAsB,GAAGhB,kBAA7B;;AACA,MAAGgB,sBAAsB,CAACmB,MAAvB,GAAgC,CAAnC,EAAqC;AACnC;AACA,QAAMC,mBAAmB,GAAGpB,sBAAsB,CAACmB,MAAnD;;AACA,SAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,mBAApB,EAAyCC,CAAC,EAA1C,EAA+C;AAC7C;AACA;AACAhB,iBAAW,CAACL,sBAAsB,CAACqB,CAAD,CAAtB,CAA0Bf,WAA3B,EAAwCN,sBAAsB,CAACqB,CAAD,CAAtB,CAA0Bd,YAAlE,EAAgFP,sBAAsB,CAACqB,CAAD,CAAtB,CAA0Bb,KAA1G,EAAiHR,sBAAsB,CAACqB,CAAD,CAAtB,CAA0BZ,IAA3I,EAAiJT,sBAAsB,CAACqB,CAAD,CAAtB,CAA0BX,SAA3K,EAAsLV,sBAAsB,CAACqB,CAAD,CAAtB,CAA0BV,IAAhN,EAAsNX,sBAAsB,CAACqB,CAAD,CAAtB,CAA0BT,SAAhP,EAA2PS,CAA3P,CAAX;AACD;;AACD9C,WAAO,CAACI,OAAR,CAAgBmC,2CAAhB,CAA4D9B,kBAA5D,EAAgF,kBAAhF,EAAoGR,OAApG,EAA6GL,SAA7G;AACAE,iDAAM,CAACJ,EAAP,CAAU4C,OAAV,CAAkB,2BAAlB;AACD,GAVD,MAUO;AACL;AACAxC,iDAAM,CAACJ,EAAP,CAAU4C,OAAV,CAAkB,4BAAlB;AACD;AACF;AAEM,SAASe,eAAT,CAAyBrD,OAAzB,EAAkC;AAEvC,MAAGS,kBAAkB,CAACmC,MAAnB,GAA4B,CAA/B,EAAiC;AAC/B;AACA,SAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGrC,kBAAkB,CAACmC,MAAvC,EAA+CE,CAAC,EAAhD,EAAqD;AACnD;AACAQ,gBAAU,CAAC7C,kBAAkB,CAACqC,CAAD,CAAlB,CAAsBV,IAAvB,CAAV;AACD;;AACDpC,WAAO,CAACI,OAAR,CAAgBmC,2CAAhB,CAA4D,IAA5D,EAAkE,kBAAlE,EAAsFtC,OAAtF,EAA+FL,SAA/F;AACAE,iDAAM,CAACJ,EAAP,CAAU4C,OAAV,CAAkB,wBAAlB;AACD,GARD,MAQO;AACL;AACAxC,iDAAM,CAACJ,EAAP,CAAU4C,OAAV,CAAkB,4BAAlB;AACD;AACF;AAEM,SAASiB,oBAAT,CAA8BvD,OAA9B,EAAuC;AAC5C,MAAIuB,SAAS,GAAGvB,OAAO,CAACuB,SAAxB;AACA,MAAIQ,WAAJ,EAAiBC,YAAjB,CAF4C,CAI5C;;AACA,MAAGT,SAAS,CAACC,KAAV,MAAqB,CAArB,IAA0BD,SAAS,CAAC,CAAD,CAAT,CAAa2B,KAAb,MAAwB,iBAArD,EAAuE;AACrE,QAAIT,WAAW,GAAG/B,kBAAkB,EAApC;;AAEA,QAAG+B,WAAW,CAACG,MAAZ,GAAqB,CAAxB,EAA0B;AACxB;AACA,UAAMC,mBAAmB,GAAGJ,WAAW,CAACG,MAAxC;;AACA,WAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,mBAApB,EAAyCC,CAAC,EAA1C,EAA+C;AAC7C;AACAf,mBAAW,GAAGlC,QAAQ,CAACkD,cAAT,CAAwBN,WAAW,CAACK,CAAD,CAAX,CAAef,WAAvC,CAAd;AACAC,oBAAY,GAAGnC,QAAQ,CAACkD,cAAT,CAAwBN,WAAW,CAACK,CAAD,CAAX,CAAed,YAAvC,CAAf;;AACA,YAAID,WAAW,CAACiB,YAAZ,CAAyBC,cAAzB,GAA0CtB,QAA1C,MAAwDJ,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAA5D,EAAoF;AAClF,cAAIK,YAAY,CAACgB,YAAb,CAA0BC,cAA1B,GAA2CtB,QAA3C,MAAyDJ,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAA7D,EAAqF;AACnF2B,sBAAU,CAACb,WAAW,CAACK,CAAD,CAAX,CAAeV,IAAhB,CAAV;AACA3B,8BAAkB,GAAG+C,wBAAwB,CAACV,CAAD,CAA7C;AACD;AACF;AACF;;AACD9C,aAAO,CAACI,OAAR,CAAgBmC,2CAAhB,CAA4D9B,kBAA5D,EAAgF,kBAAhF,EAAoGR,OAApG,EAA6GL,SAA7G;AACAE,mDAAM,CAACJ,EAAP,CAAU4C,OAAV,CAAkB,+CAAlB;AACD,KAhBD,MAgBO;AACL;AACAxC,mDAAM,CAACJ,EAAP,CAAU4C,OAAV,CAAkB,4BAAlB;AACD;AACF,GAvBD,MAuBO;AACLxC,iDAAM,CAACJ,EAAP,CAAU4C,OAAV,CAAkB,4BAAlB;AACD;AACF;AAEM,SAASmB,oBAAT,CAA8BzD,OAA9B,EAAuC;AAC5C,MAAIuB,SAAS,GAAGvB,OAAO,CAACuB,SAAxB;AACA,MAAIQ,WAAJ,EAAiBC,YAAjB,CAF4C,CAI5C;;AACA,MAAGT,SAAS,CAACC,KAAV,MAAqB,CAAxB,EAA0B;AAExB,SAAI,IAAIE,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGH,SAAS,CAACC,KAAV,EAAnB,EAAsCE,CAAC,EAAvC,EAA2C;AAEzC,UAAGH,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,MAA2BJ,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAA9B,EAAsD;AAAE;AACtD,YAAIc,WAAW,GAAG/B,kBAAkB,EAApC;AAEA,YAAIkB,eAAe,GAAGC,kBAAkB,CAACN,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAAD,EAA0BJ,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,EAA1B,EAAmDc,WAAnD,CAAxC;;AAEA,YAAGb,eAAe,IAAI,IAAtB,EAA2B;AACzB;AACA0B,oBAAU,CAACb,WAAW,CAACb,eAAD,CAAX,CAA6BQ,IAA9B,CAAV;AACA3B,4BAAkB,GAAG+C,wBAAwB,CAAC5B,eAAD,CAA7C;AACA,cAAMiB,mBAAmB,GAAGJ,WAAW,CAACG,MAAxC;;AACA,eAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,mBAApB,EAAyCC,CAAC,EAA1C,EAA+C;AAC7C;AACAf,uBAAW,GAAGlC,QAAQ,CAACkD,cAAT,CAAwBN,WAAW,CAACK,CAAD,CAAX,CAAef,WAAvC,CAAd;AACAC,wBAAY,GAAGnC,QAAQ,CAACkD,cAAT,CAAwBN,WAAW,CAACK,CAAD,CAAX,CAAed,YAAvC,CAAf;;AACA,gBAAGD,WAAW,CAACiB,YAAZ,CAAyBC,cAAzB,GAA0CtB,QAA1C,MAAwDJ,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAA3D,EAAmF;AACjF,kBAAGK,YAAY,CAACgB,YAAb,CAA0BC,cAA1B,GAA2CtB,QAA3C,MAAyDJ,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAA5D,EAAoF;AAClF2B,0BAAU,CAACb,WAAW,CAACK,CAAD,CAAX,CAAeV,IAAhB,CAAV;AACA3B,kCAAkB,GAAG+C,wBAAwB,CAACV,CAAD,CAA7C;AACD;AACF;AACF;;AACD9C,iBAAO,CAACI,OAAR,CAAgBmC,2CAAhB,CAA4D9B,kBAA5D,EAAgF,kBAAhF,EAAoGR,OAApG,EAA6GL,SAA7G;AACAE,uDAAM,CAACJ,EAAP,CAAU4C,OAAV,CAAkB,gDAAlB;AACD;AACF;AACF;AACF,GA9BD,MA8BO;AACLxC,iDAAM,CAACJ,EAAP,CAAU4C,OAAV,CAAkB,8BAAlB;AACD;AACF;AAEM,SAASoB,QAAT,CAAkB1D,OAAlB,EAA2B;AAChC,MAAI2D,KAAK,GAAGC,cAAc,CAACC,GAAf,EAAZ;AACA,MAAMC,SAAS,GAAG,GAAlB;AACA,MAAMC,UAAU,GAAG,GAAnB,CAHgC,CAKhC;;AACAJ,OAAK,GAAGK,UAAU,CAACL,KAAD,EAAQG,SAAR,EAAmBC,UAAnB,CAAlB;AACA,MAAIE,IAAI,GAAGC,MAAM,CAACC,KAAP,GAAeC,aAAf,CAA6BC,UAAU,CAAC,CAAD,EAAI,CAAJ,EAAOP,SAAP,EAAkBC,UAAlB,CAAvC,CAAX;AACAJ,OAAK,CAACW,gBAAN,CAAuBL,IAAvB,EARgC,CAUhC;;AACA,MAAIM,eAAe,GAAGC,UAAU,CAAC,aAAD,EAAgB,IAAhB,EAAsB,CAAC,CAAvB,EAA0BT,UAAU,GAAC,EAArC,EAAyC,GAAzC,EAA8C,EAA9C,CAAhC;AACAE,MAAI,CAACQ,UAAL,CAAgBF,eAAhB,EAZgC,CAchC;;AACA,MAAIG,iBAAiB,GAAGC,aAAa,CAACR,KAAd,GAAsBC,aAAtB,CAAoCC,UAAU,CAAC,CAAC,CAAF,EAAKN,UAAU,GAAG,EAAlB,EAAsB,GAAtB,EAA2B,EAA3B,CAA9C,CAAxB;AACAa,uBAAqB,CAACF,iBAAD,CAArB;AACAT,MAAI,CAACQ,UAAL,CAAgBC,iBAAhB,EAjBgC,CAmBhC;;AACA,MAAIG,mBAAmB,GAAGL,UAAU,CAAC,yGAAD,EAA4G,KAA5G,EAAmH,CAAC,CAApH,EAAuHT,UAAU,GAAC,EAAlI,EAAsI,GAAtI,EAA2I,EAA3I,CAApC;AACAE,MAAI,CAACQ,UAAL,CAAgBI,mBAAhB,EArBgC,CAwBhC;;AACA,MAAIC,cAAc,GAAGN,UAAU,CAAC,YAAD,EAAe,IAAf,EAAqB,CAAC,CAAtB,EAAyBT,UAAU,GAAC,GAApC,EAAyC,GAAzC,EAA8C,EAA9C,CAA/B;AACAE,MAAI,CAACQ,UAAL,CAAgBK,cAAhB,EA1BgC,CA4BhC;;AACA,MAAIC,cAAc,GAAGJ,aAAa,CAACR,KAAd,GAAsBC,aAAtB,CAAoCC,UAAU,CAAC,CAAC,CAAF,EAAKN,UAAU,GAAG,GAAlB,EAAuB,GAAvB,EAA4B,EAA5B,CAA9C,CAArB;AACAiB,sBAAoB,CAACD,cAAD,CAApB;AACAd,MAAI,CAACQ,UAAL,CAAgBM,cAAhB,EA/BgC,CAiChC;;AACA,MAAIE,kBAAkB,GAAGT,UAAU,CAAC,0DAAD,EAA6D,KAA7D,EAAoE,CAAC,CAArE,EAAwET,UAAU,GAAC,GAAnF,EAAwF,GAAxF,EAA6F,EAA7F,CAAnC;AACAE,MAAI,CAACQ,UAAL,CAAgBQ,kBAAhB,EAnCgC,CAsChC;;AACA,MAAIC,iBAAiB,GAAGV,UAAU,CAAC,eAAD,EAAkB,IAAlB,EAAwB,CAAC,CAAzB,EAA4BT,UAAU,GAAG,GAAzC,EAA8C,GAA9C,EAAmD,EAAnD,CAAlC;AACAE,MAAI,CAACQ,UAAL,CAAgBS,iBAAhB,EAxCgC,CA0ChC;;AACA,MAAIC,mBAAmB,GAAGX,UAAU,CAAC,IAAD,EAAO,IAAP,EAAa,EAAb,EAAiBT,UAAU,GAAG,GAA9B,EAAmC,GAAnC,EAAwC,EAAxC,CAApC;AACAE,MAAI,CAACQ,UAAL,CAAgBU,mBAAhB,EA5CgC,CA8ChC;;AACA,MAAIC,iBAAiB,GAAGC,WAAW,CAAClB,KAAZ,GAAoBC,aAApB,CAAkCC,UAAU,CAAC,CAAC,CAAF,EAAKN,UAAU,GAAG,GAAlB,EAAuB,EAAvB,EAA2B,EAA3B,CAA5C,CAAxB;AACA,MAAIuB,SAAS,GAAGC,iBAAiB,CAACpB,KAAlB,GAA0BqB,IAA1B,GAAiCC,WAAjC,EAAhB;AACAL,mBAAiB,CAACM,cAAlB,CAAiCC,MAAM,CAAChF,QAAQ,CAACiF,aAAT,CAAuB,cAAvB,CAAD,CAAvC;AACAR,mBAAiB,CAACS,YAAlB,CAA+BP,SAA/B;AACArB,MAAI,CAACQ,UAAL,CAAgBW,iBAAhB,EAnDgC,CAqDhC;;AACA,MAAIU,mBAAmB,GAAGC,SAAS,CAAC5B,KAAV,GAAkBC,aAAlB,CAAgCC,UAAU,CAAC,EAAD,EAAKN,UAAU,GAAG,GAAlB,EAAuB,EAAvB,EAA2B,EAA3B,CAA1C,CAA1B;AACA+B,qBAAmB,CAACE,WAApB,CAAgC,IAAhC;AACAF,qBAAmB,CAACG,WAApB,CAAgC,CAAhC;AACAH,qBAAmB,CAACI,aAApB,CAAkC,KAAlC;AACAJ,qBAAmB,CAACK,aAApB,CAAkC,IAAlC;AACAL,qBAAmB,CAACM,sBAApB,CAA2C,UAASC,MAAT,EAAgB;AACzD,QAAIC,KAAK,GAAG,IAAID,MAAM,CAACE,YAAP,EAAhB;AACAnB,qBAAiB,CAACM,cAAlB,CAAiCC,MAAM,CAACW,KAAD,CAAvC;AACD,GAHD;AAKArC,MAAI,CAACQ,UAAL,CAAgBqB,mBAAhB,EAhEgC,CAiEhC;AAEA;;AACA,MAAIU,qBAAqB,GAAGhC,UAAU,CAAC,mIAAD,EAAsI,KAAtI,EAA6I,CAAC,CAA9I,EAAiJT,UAAU,GAAC,GAA5J,EAAiK,GAAjK,EAAsK,EAAtK,CAAtC;AACAE,MAAI,CAACQ,UAAL,CAAgB+B,qBAAhB,EArEgC,CAuEhC;;AACA,MAAIC,kBAAkB,GAAGjC,UAAU,CAAC,gBAAD,EAAmB,IAAnB,EAAyB,CAAC,CAA1B,EAA6BT,UAAU,GAAC,GAAxC,EAA6C,GAA7C,EAAkD,EAAlD,CAAnC;AACAE,MAAI,CAACQ,UAAL,CAAgBgC,kBAAhB,EAzEgC,CA2EhC;;AACA,MAAIC,QAAQ,GAAGC,aAAa,CAAC,yBAAD,EAA4B,KAA5B,EAAmC,CAAC,CAApC,EAAuC5C,UAAU,GAAC,GAAlD,EAAuD,GAAvD,EAA4D,EAA5D,CAA5B;AACAE,MAAI,CAACQ,UAAL,CAAgBiC,QAAhB,EA7EgC,CA+EhC;;AACA,MAAIE,kBAAkB,GAAGpC,UAAU,CAAC,gEAAD,EAAmE,KAAnE,EAA0E,CAAC,CAA3E,EAA8ET,UAAU,GAAC,GAAzF,EAA8F,GAA9F,EAAmG,EAAnG,CAAnC;AACAE,MAAI,CAACQ,UAAL,CAAgBmC,kBAAhB,EAjFgC,CAmFhC;;AACA,MAAIC,eAAe,GAAGrC,UAAU,CAAC,uDAAD,EAA0D,IAA1D,EAAgE,CAAC,CAAjE,EAAoET,UAAU,GAAC,GAA/E,EAAoF,GAApF,EAAyF,EAAzF,CAAhC;AACAE,MAAI,CAACQ,UAAL,CAAgBoC,eAAhB,EArFgC,CAwFhC;AAEA;;AACA,MAAIC,aAAa,GAAGnD,KAAK,CAACoD,QAAN,EAApB;;AAEA,MAAGD,aAAa,IAAIE,wBAApB,EAA6C;AAC3C;AACA;AACAhH,WAAO,CAACI,OAAR,CAAgBmC,2CAAhB,CAA4DoB,KAAK,CAACsD,KAAN,GAAc,CAAd,EAAiBC,QAAjB,GAA4B,CAA5B,EAA+BC,KAA/B,EAA5D,EAAoG,YAApG,EAAkHlH,OAAlH,EAA2HL,SAA3H;AACAe,YAAQ,CAACyG,gBAAT,CAA0B,WAA1B,EAAuCzD,KAAK,CAACsD,KAAN,GAAc,CAAd,EAAiBC,QAAjB,GAA4B,CAA5B,EAA+BC,KAA/B,EAAvC;AACAxG,YAAQ,CAACyG,gBAAT,CAA0B,cAA1B,EAA0CzD,KAAK,CAACsD,KAAN,GAAc,CAAd,EAAiBC,QAAjB,GAA4B,CAA5B,EAA+BG,QAA/B,EAA1C;AACA1G,YAAQ,CAACyG,gBAAT,CAA0B,WAA1B,EAAuCzD,KAAK,CAACsD,KAAN,GAAc,CAAd,EAAiBC,QAAjB,GAA4B,EAA5B,EAAgCI,KAAhC,EAAvC;AACA5H,MAAE,CAAC4C,OAAH,CAAW,yBAAX;AACD;AACF;AAEM,SAASiF,aAAT,CAAuBvH,OAAvB,EAAgC;AACrCF,+CAAM,CAACJ,EAAP,CAAU4C,OAAV,CAAkB,oCAAlB;AACA,MAAMkF,MAAM,GAAGxH,OAAO,CAACyH,aAAvB;AACD;AAEM,SAASC,KAAT,CAAe1H,OAAf,EAAwB;AAC7B,MAAI2H,UAAJ;AACAA,YAAU,GAAGC,OAAO,CAACzD,KAAR,GAAgBqB,IAAhB,EAAb;AACAmC,YAAU,CAACE,YAAX,CAAwBC,kBAAkB,GAAGC,+BAA7C,EAH6B,CAI7B;;AACAJ,YAAU,CAACK,kBAAX,CAA8BC,mBAA9B;AACAN,YAAU,CAACO,6BAAX,CAAyC,IAAzC;AACAP,YAAU,CAACQ,gBAAX,CAA4B9D,UAAU,CAAC,CAAD,EAAI,CAAJ,EAAO,GAAP,EAAY,EAAZ,CAAtC,EAAuD,KAAvD;AACAsD,YAAU,CAACS,4BAAX,CAAwC,IAAxC;AACAT,YAAU,CAACU,YAAX,CAAwB,IAAxB;AACAV,YAAU,CAACW,QAAX,CAAoBC,qBAApB,EAV6B,CAY7B;;AACAZ,YAAU,CAACa,MAAX;AACAb,YAAU,CAACc,oBAAX,CAAgCC,GAAhC,EAd6B,CAgB/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAIC,C,CAED;AACA;AACA;;AAEA,SAAS5G,WAAT,CAAqB6G,aAArB,EAAoCC,cAApC,EAAoD3G,KAApD,EAA2DC,IAA3D,EAAiEC,SAAjE,EAA4E0G,MAA5E,EAAoFC,WAApF,EAAiGlH,eAAjG,EAAkH;AAChH;AACA;AACA,MAAIG,WAAW,GAAGlC,QAAQ,CAACkD,cAAT,CAAwB4F,aAAxB,CAAlB;AACA,MAAI3G,YAAY,GAAGnC,QAAQ,CAACkD,cAAT,CAAwB6F,cAAxB,CAAnB,CAJgH,CAMhH;;AACAtF,YAAU,CAACuF,MAAD,CAAV;AACApI,oBAAkB,GAAG+C,wBAAwB,CAAC5B,eAAD,CAA7C;;AAEA,MAAGG,WAAW,IAAIC,YAAlB,EAA+B;AAC7B;AACA+G,eAAW,CAACJ,aAAD,EAAgBC,cAAhB,EAAgC3G,KAAhC,EAAuCC,IAAvC,EAA6CC,SAA7C,EAAwD2G,WAAxD,CAAX;AACD;AACF;;AAED,SAASC,WAAT,CAAqBJ,aAArB,EAAoCC,cAApC,EAAoD3G,KAApD,EAA2DC,IAA3D,EAAiEC,SAAjE,EAA4EE,SAA5E,EAAuF;AACrF;AACA,MAAI2G,cAAJ,EAAoBC,UAApB,EAAgCC,SAAhC;;AACA,MAAG/G,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACA6G,kBAAc,GAAGG,YAAY,CAACR,aAAD,EAAgBC,cAAhB,CAA7B;AACD,GAHD,MAGO;AACLI,kBAAc,GAAG7G,SAAjB;AACD;;AAED,MAAGD,IAAI,IAAI,IAAX,EAAgB;AACdgH,aAAS,GAAGvI,QAAQ,CAACiF,aAAT,CAAuB,WAAvB,CAAZ;AACD,GAFD,MAEO;AACLsD,aAAS,GAAGhH,IAAZ;AACD,GAdoF,CAgBrF;;;AACA+G,YAAU,GAAGG,cAAc,CAACpJ,OAAO,CAACI,OAAR,CAAgBC,uCAAhB,CAAwD,YAAxD,EAAsEJ,OAAtE,EAA+EL,SAA/E,CAAD,CAA3B;;AAEA,MAAGqC,KAAK,IAAI,IAAZ,EAAiB;AACf;AACA,QAAGmH,cAAc,CAACnH,KAAD,CAAd,IAAyB,IAAzB,IAAiCA,KAAK,IAAI,eAA7C,EAA6D;AAC3DgH,gBAAU,GAAGhH,KAAb;AACD,KAFD,MAEO;AACLgH,gBAAU,GAAG,eAAb;AACD;AACF,GAPD,MAOO;AACL;AACA,QAAGjJ,OAAO,CAACI,OAAR,CAAgBC,uCAAhB,CAAwD,YAAxD,EAAsEJ,OAAtE,EAA+EL,SAA/E,CAAH,EAA6F;AAC3FqJ,gBAAU,GAAGjJ,OAAO,CAACI,OAAR,CAAgBC,uCAAhB,CAAwD,YAAxD,EAAsEJ,OAAtE,EAA+EL,SAA/E,CAAb;AACD,KAFD,MAEO;AACLqJ,gBAAU,GAAG,eAAb;AACD;AAEF;;AAGDI,eAAa,CAACV,aAAD,EAAgBC,cAAhB,EAAgCI,cAAhC,CAAb;AACAM,gBAAc,CAACX,aAAD,EAAgBC,cAAhB,EAAgCI,cAAhC,CAAd;AACA,MAAIO,kBAAkB,GAAGC,aAAa,CAAC,QAAD,CAAtC;AACA,MAAIC,KAAK,GAAGC,cAAc,CAACf,aAAD,EAAgBC,cAAhB,EAAgCK,UAAhC,EAA4CC,SAA5C,EAAuDF,cAAvD,EAAuEO,kBAAvE,EAA2FlH,SAA3F,CAA1B;AACAsH,KAAG,CAACF,KAAD,CAAH;AACAG,kBAAgB,CAACH,KAAK,CAACrH,IAAP,EAAamH,kBAAb,CAAhB;AAGA,MAAIT,WAAJ;;AAGA,MAAGW,KAAK,CAACpH,SAAN,IAAmB,IAAtB,EAA4B;AAC1ByG,eAAW,GAAGW,KAAK,CAACpH,SAAN,CAAgBwH,EAA9B;AACD,GAFD,MAEO;AACLf,eAAW,GAAG,IAAd;AACD,GApDoF,CAuDrF;;;AACA,MAAIgB,UAAU,GAAG;AACf/H,eAAW,EAAG4G,aADC;AAEf3G,gBAAY,EAAG4G,cAFA;AAGf3G,SAAK,EAAGgH,UAHO;AAIf5G,aAAS,EAAGyG,WAJG;AAKf5G,QAAI,EAAGgH,SALQ;AAMf/G,aAAS,EAAE6G,cANI;AAOf5G,QAAI,EAAGqH,KAAK,CAACrH,IAAN,CAAWT,QAAX,EAPQ,CASjB;;AATiB,GAAjB;AAUAlB,oBAAkB,CAAC0C,IAAnB,CAAwB2G,UAAxB;AACD;;AAED,SAASN,aAAT,CAAuBO,SAAvB,EAAkC;AAChC,MAAIC,YAAY,GAAG,IAAnB,CADgC,CAEhC;;AACA,OAAI,IAAIlH,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGxC,kBAAkB,CAAC2J,MAAnB,GAA4BzI,KAA5B,EAAnB,EAAwDsB,CAAC,EAAzD,EAA4D;AAC1D,QAAGxC,kBAAkB,CAAC2J,MAAnB,GAA4BnH,CAA5B,EAA+BoH,IAA/B,MAAyCH,SAA5C,EAAuD;AACrD;AACAC,kBAAY,GAAG1J,kBAAkB,CAAC2J,MAAnB,GAA4BnH,CAA5B,CAAf;AACAqH,mBAAa,CAACH,YAAD,CAAb;AACD;AACF;;AACD,SAAOA,YAAP;AACD;;AAED,SAASb,YAAT,CAAsBR,aAAtB,EAAqCC,cAArC,EAAoD;AAClD;AACA,MAAM7G,WAAW,GAAGlC,QAAQ,CAACkD,cAAT,CAAwB4F,aAAxB,CAApB;AACA,MAAM3G,YAAY,GAAGnC,QAAQ,CAACkD,cAAT,CAAwB6F,cAAxB,CAArB;AACA,MAAMwB,eAAe,GAAGrI,WAAW,CAACsI,KAAZ,CAAkBC,CAAlB,GAAoBvI,WAAW,CAACsI,KAAZ,CAAkBE,KAAlB,GAAwB,CAApE;AACA,MAAMC,eAAe,GAAGzI,WAAW,CAACsI,KAAZ,CAAkBI,CAAlB,GAAoB1I,WAAW,CAACsI,KAAZ,CAAkBK,MAAlB,GAAyB,CAArE;AACA,MAAMC,gBAAgB,GAAG3I,YAAY,CAACqI,KAAb,CAAmBC,CAAnB,GAAqBtI,YAAY,CAACqI,KAAb,CAAmBE,KAAnB,GAAyB,CAAvE;AACA,MAAMK,gBAAgB,GAAG5I,YAAY,CAACqI,KAAb,CAAmBI,CAAnB,GAAqBzI,YAAY,CAACqI,KAAb,CAAmBK,MAAnB,GAA0B,CAAxE;AAEA,MAAMG,KAAK,GAAGT,eAAe,GAAGO,gBAAhC;AACA,MAAMG,KAAK,GAAGN,eAAe,GAAGI,gBAAhC;AACA,MAAMG,QAAQ,GAAGC,IAAI,CAACC,GAAL,CAASJ,KAAT,CAAjB;AACA,MAAMK,QAAQ,GAAGF,IAAI,CAACC,GAAL,CAASH,KAAT,CAAjB;AACA,MAAI3I,SAAJ;;AAEA,MAAGwI,gBAAgB,GAAGP,eAAtB,EAAsC;AACpC;AACA,QAAGQ,gBAAgB,GAAGJ,eAAtB,EAAsC;AACpC;AACA,UAAGK,KAAK,GAAGC,KAAX,EAAkB;AAChB3I,iBAAS,GAAG,MAAZ;AACD,OAFD,MAEO;AACLA,iBAAS,GAAG,OAAZ;AACD;AACF,KAPD,MAOO;AACL;AACA,UAAG4I,QAAQ,GAAGG,QAAd,EAAwB;AACtB/I,iBAAS,GAAG,OAAZ;AACD,OAFD,MAEO;AACLA,iBAAS,GAAG,IAAZ;AACD;AACF;AACF,GAjBD,MAiBO;AACL;AACA,QAAGyI,gBAAgB,GAAGJ,eAAtB,EAAsC;AACpC;AACA,UAAGO,QAAQ,GAAGG,QAAd,EAAwB;AACtB/I,iBAAS,GAAG,MAAZ;AACD,OAFD,MAEO;AACLA,iBAAS,GAAG,MAAZ;AACD;AACF,KAPD,MAOO;AACL;AACA,UAAG0I,KAAK,GAAGC,KAAX,EAAkB;AAChB3I,iBAAS,GAAG,MAAZ;AACD,OAFD,MAEO;AACLA,iBAAS,GAAG,IAAZ;AACD;AACF;AACF;;AACD,SAAOA,SAAP;AACD;;AAED,SAASuH,cAAT,CAAwBf,aAAxB,EAAuCC,cAAvC,EAAuD3G,KAAvD,EAA8DC,IAA9D,EAAoEC,SAApE,EAA+E6H,YAA/E,EAA6F3H,SAA7F,EAAuG;AACrG,MAAI8I,cAAJ,EAAoBC,cAApB,EAAoCC,eAApC,EAAqDC,eAArD,EAAsEC,UAAtE,EAAkFC,UAAlF,EAA8FX,KAA9F,EAAqGC,KAArG;AACA,MAAIhB,UAAU,GAAG;AAAC1H,QAAI,EAAE,EAAP;AAAWC,aAAS,EAAE;AAAtB,GAAjB;AACA,MAAIN,WAAW,GAAGlC,QAAQ,CAACkD,cAAT,CAAwB4F,aAAxB,CAAlB;AACA,MAAI3G,YAAY,GAAGnC,QAAQ,CAACkD,cAAT,CAAwB6F,cAAxB,CAAnB;AAEA,MAAI6C,iBAAiB,GAAG1J,WAAW,CAACsI,KAAZ,CAAkBqB,WAAlB,CAA8B;AAACC,QAAI,EAAE5J,WAAW,CAAC6J,MAAnB;AAA2BC,MAAE,EAAEvL;AAA/B,GAA9B,CAAxB;AACA,MAAIwL,kBAAkB,GAAG9J,YAAY,CAACqI,KAAb,CAAmBqB,WAAnB,CAA+B;AAACC,QAAI,EAAE3J,YAAY,CAAC4J,MAApB;AAA4BC,MAAE,EAAEvL;AAAhC,GAA/B,CAAzB;;AAEA,MAAG0J,YAAH,EAAgB;AACd;AACAa,SAAK,GAAGb,YAAY,CAACK,KAAb,GAAqBC,CAArB,EAAR;AACAQ,SAAK,GAAGd,YAAY,CAACK,KAAb,GAAqBI,CAArB,EAAR;AACD,GAJD,MAIO;AACLI,SAAK,GAAG,CAAR;AACAC,SAAK,GAAG,CAAR;AACD,GAhBoG,CAkBrG;;;AACA,MAAIiB,IAAI,GAAGC,YAAY,CAACC,UAAb,EAAX,CAnBqG,CAqBrG;;AACA,MAAG9J,SAAS,IAAI,IAAhB,EAAqB;AACnB;AACAgJ,kBAAc,GAAGM,iBAAiB,CAACnB,CAAlB,GAAoBmB,iBAAiB,CAAClB,KAAlB,GAAwB,CAA5C,GAA8CM,KAA/D;AACAO,kBAAc,GAAGK,iBAAiB,CAAChB,CAAlB,GAAoBK,KAArC,CAHmB,CAKnB;;AACAO,mBAAe,GAAGS,kBAAkB,CAACxB,CAAnB,GAAqBwB,kBAAkB,CAACvB,KAAnB,GAAyB,CAA9C,GAAgDM,KAAlE;AACAS,mBAAe,GAAGQ,kBAAkB,CAACrB,CAAnB,GAAqBqB,kBAAkB,CAACpB,MAAxC,GAA+CI,KAAjE,CAPmB,CASnB;;AACAS,cAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD;AACAG,cAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD;AACD;;AAED,MAAGnJ,SAAS,IAAI,OAAhB,EAAwB;AACtB;AACAgJ,kBAAc,GAAGM,iBAAiB,CAACnB,CAAlB,GAAoBmB,iBAAiB,CAAClB,KAAtC,GAA4CM,KAA7D;AACAO,kBAAc,GAAGK,iBAAiB,CAAChB,CAAlB,GAAoBgB,iBAAiB,CAACf,MAAlB,GAAyB,CAA7C,GAA+CI,KAAhE,CAHsB,CAKtB;;AACAO,mBAAe,GAAGS,kBAAkB,CAACxB,CAAnB,GAAqBO,KAAvC;AACAS,mBAAe,GAAGQ,kBAAkB,CAACrB,CAAnB,GAAqBqB,kBAAkB,CAACpB,MAAnB,GAA0B,CAA/C,GAAiDI,KAAnE,CAPsB,CAStB;;AACAS,cAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD;AACAG,cAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD;AACD;;AAED,MAAGnJ,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACAgJ,kBAAc,GAAGM,iBAAiB,CAACnB,CAAlB,GAAoBmB,iBAAiB,CAAClB,KAAlB,GAAwB,CAA5C,GAA8CM,KAA/D;AACAO,kBAAc,GAAGK,iBAAiB,CAAChB,CAAlB,GAAoBgB,iBAAiB,CAACf,MAAtC,GAA6CI,KAA9D,CAHqB,CAKrB;;AACAO,mBAAe,GAAGS,kBAAkB,CAACxB,CAAnB,GAAqBwB,kBAAkB,CAACvB,KAAnB,GAAyB,CAA9C,GAAgDM,KAAlE;AACAS,mBAAe,GAAGQ,kBAAkB,CAACrB,CAAnB,GAAqBK,KAAvC,CAPqB,CASrB;;AACAS,cAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD;AACAG,cAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD;AACD;;AAED,MAAGnJ,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACAgJ,kBAAc,GAAGM,iBAAiB,CAACnB,CAAlB,GAAoBO,KAArC;AACAO,kBAAc,GAAGK,iBAAiB,CAAChB,CAAlB,GAAoBgB,iBAAiB,CAACf,MAAlB,GAAyB,CAA7C,GAA+CI,KAAhE,CAHqB,CAKrB;;AACAO,mBAAe,GAAGS,kBAAkB,CAACxB,CAAnB,GAAqBwB,kBAAkB,CAACvB,KAAxC,GAA8CM,KAAhE;AACAS,mBAAe,GAAGQ,kBAAkB,CAACrB,CAAnB,GAAqBqB,kBAAkB,CAACpB,MAAnB,GAA0B,CAA/C,GAAiDI,KAAnE,CAPqB,CASrB;;AACAS,cAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD;AACAG,cAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD;AACD;;AAED,MAAGpJ,IAAI,IAAI,QAAR,IAAoBA,IAAI,IAAI,IAA/B,EAAoC;AAClC;AAEA,QAAGC,SAAS,IAAI,IAAhB,EAAqB;AACnB;AACA4J,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAAChB,cAAD,EAAgBK,UAAhB,CAA5B;AACAO,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBG,UAAjB,CAA5B;AACAO,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B;AACD;;AAED,QAAGnJ,SAAS,IAAI,OAAhB,EAAwB;AACtB;AACA4J,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACZ,UAAD,EAAYH,cAAZ,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACZ,UAAD,EAAYD,eAAZ,CAA5B;AACAS,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B;AACD;;AAED,QAAGnJ,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACA4J,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAAChB,cAAD,EAAgBK,UAAhB,CAA5B;AACAO,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBG,UAAjB,CAA5B;AACAO,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B;AACD;;AAED,QAAGnJ,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACA4J,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACZ,UAAD,EAAYH,cAAZ,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACZ,UAAD,EAAYD,eAAZ,CAA5B;AACAS,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B;AACD,KAjCiC,CAmClC;;;AACAxB,cAAU,CAAC1H,IAAX,GAAkBiK,YAAY,CAACC,aAAb,CAA2BC,MAAM,CAACC,kBAAP,CAA0BT,IAA1B,CAA3B,CAAlB,CApCkC,CAuClC;;AACA,QAAIU,MAAM,GAAG3C,UAAU,CAAC1H,IAAX,CAAgB6H,MAAhB,GAAyBlI,WAAzB,GAAuC0K,MAAvC,EAAb;AACAA,UAAM,CAAC,CAAD,CAAN,CAAUC,YAAV,GAAyB,EAAzB;AACAD,UAAM,CAAC,CAAD,CAAN,CAAUC,YAAV,GAAyB,EAAzB,CA1CkC,CA4ClC;;AACA5C,cAAU,CAAC1H,IAAX,CAAgBuK,OAAhB,CAAwB,OAAxB;AACD;;AAED,MAAGzK,IAAI,IAAI,UAAX,EAAsB;AACpB;AACA,QAAGC,SAAS,IAAI,IAAhB,EAAqB;AACnB;AACA4J,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B;AACD;;AAED,QAAGnJ,SAAS,IAAI,OAAhB,EAAwB;AACtB;AACA4J,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B;AACD;;AAED,QAAGnJ,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACA4J,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B;AACD;;AAED,QAAGnJ,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACA4J,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B;AACD,KAxBmB,CA0BpB;;;AACAxB,cAAU,CAAC1H,IAAX,GAAkBiK,YAAY,CAACC,aAAb,CAA2BC,MAAM,CAACC,kBAAP,CAA0BT,IAA1B,CAA3B,CAAlB,CA3BoB,CA6BpB;;AACAjC,cAAU,CAAC1H,IAAX,CAAgBuK,OAAhB,CAAwB,OAAxB;AACD;;AAED,MAAGzK,IAAI,IAAI,QAAX,EAAoB;AAClB,QAAGC,SAAS,IAAI,IAAhB,EAAqB;AACnB;AACA4J,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B,EAHmB,CAKnB;;AACAxB,gBAAU,CAAC1H,IAAX,GAAkBiK,YAAY,CAACC,aAAb,CAA2BC,MAAM,CAACC,kBAAP,CAA0BT,IAA1B,CAA3B,CAAlB;;AACA,UAAIU,OAAM,GAAG3C,UAAU,CAAC1H,IAAX,CAAgB6H,MAAhB,GAAyBlI,WAAzB,GAAuC0K,MAAvC,EAAb;;AAEAA,aAAM,CAAC,CAAD,CAAN,CAAUG,SAAV,GAAsBH,OAAM,CAAC,CAAD,CAAN,CAAUG,SAAV,GAAsB,CAA5C;AACAH,aAAM,CAAC,CAAD,CAAN,CAAUI,YAAV,GAAyBJ,OAAM,CAAC,CAAD,CAAN,CAAUK,UAAV,GAAuB,IAAhD;;AAEA,UAAG3B,cAAc,GAACE,eAAlB,EAAkC;AAChCoB,eAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAOG,WAAC,EAAE;AAAV,SAAtB;AACAgC,eAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAC,GAAL;AAASG,WAAC,EAAC;AAAX,SAApB;AAEAgC,eAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAAtB;AACAgC,eAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAApB;AACD,OAND,MAMO;AACLgC,eAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAOG,WAAC,EAAE;AAAV,SAAtB;AACAgC,eAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAC,GAAL;AAASG,WAAC,EAAC;AAAX,SAApB;AAEAgC,eAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAAtB;AACAgC,eAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAApB;AACD;AACF;;AAED,QAAGtI,SAAS,IAAI,OAAhB,EAAwB;AACtB;AACA4J,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B,EAHsB,CAKtB;;AACAxB,gBAAU,CAAC1H,IAAX,GAAkBiK,YAAY,CAACC,aAAb,CAA2BC,MAAM,CAACC,kBAAP,CAA0BT,IAA1B,CAA3B,CAAlB;;AACA,UAAIU,QAAM,GAAG3C,UAAU,CAAC1H,IAAX,CAAgB6H,MAAhB,GAAyBlI,WAAzB,GAAuC0K,MAAvC,EAAb;;AAEAA,cAAM,CAAC,CAAD,CAAN,CAAUG,SAAV,GAAsBH,QAAM,CAAC,CAAD,CAAN,CAAUG,SAAV,GAAsB,CAA5C;AACAH,cAAM,CAAC,CAAD,CAAN,CAAUI,YAAV,GAAyBJ,QAAM,CAAC,CAAD,CAAN,CAAUK,UAAV,GAAuB,IAAhD;;AAEA,UAAG1B,cAAc,GAACE,eAAlB,EAAkC;AAChCmB,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,GAAJ;AAASG,WAAC,EAAE;AAAZ,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAC,GAAL;AAASG,WAAC,EAAC;AAAX,SAApB;AAEAgC,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,GAAJ;AAAQG,WAAC,EAAE;AAAX,SAApB;AACD,OAND,MAMO;AACLgC,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,GAAJ;AAASG,WAAC,EAAE;AAAZ,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAC,GAAL;AAASG,WAAC,EAAC;AAAX,SAApB;AAEAgC,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,GAAJ;AAAQG,WAAC,EAAE;AAAX,SAApB;AACD;AACF;;AAED,QAAGtI,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACA4J,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B,EAHqB,CAKrB;;AACAxB,gBAAU,CAAC1H,IAAX,GAAkBiK,YAAY,CAACC,aAAb,CAA2BC,MAAM,CAACC,kBAAP,CAA0BT,IAA1B,CAA3B,CAAlB;;AACA,UAAIU,QAAM,GAAG3C,UAAU,CAAC1H,IAAX,CAAgB6H,MAAhB,GAAyBlI,WAAzB,GAAuC0K,MAAvC,EAAb;;AAEAA,cAAM,CAAC,CAAD,CAAN,CAAUG,SAAV,GAAsBH,QAAM,CAAC,CAAD,CAAN,CAAUG,SAAV,GAAsB,CAA5C;AACAH,cAAM,CAAC,CAAD,CAAN,CAAUI,YAAV,GAAyBJ,QAAM,CAAC,CAAD,CAAN,CAAUK,UAAV,GAAuB,IAAhD;;AAEA,UAAG3B,cAAc,GAACE,eAAlB,EAAkC;AAChCoB,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAOG,WAAC,EAAE;AAAV,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAC,GAAL;AAASG,WAAC,EAAC;AAAX,SAApB;AAEAgC,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAApB;AACD,OAND,MAMO;AACLgC,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAOG,WAAC,EAAE;AAAV,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAC,GAAL;AAASG,WAAC,EAAC;AAAX,SAApB;AAEAgC,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAApB;AACD;AACF;;AAED,QAAGtI,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACA4J,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B,EAHqB,CAKrB;;AACAxB,gBAAU,CAAC1H,IAAX,GAAkBiK,YAAY,CAACC,aAAb,CAA2BC,MAAM,CAACC,kBAAP,CAA0BT,IAA1B,CAA3B,CAAlB;;AACA,UAAIU,QAAM,GAAG3C,UAAU,CAAC1H,IAAX,CAAgB6H,MAAhB,GAAyBlI,WAAzB,GAAuC0K,MAAvC,EAAb;;AAEAA,cAAM,CAAC,CAAD,CAAN,CAAUG,SAAV,GAAsBH,QAAM,CAAC,CAAD,CAAN,CAAUG,SAAV,GAAsB,CAA5C;AACAH,cAAM,CAAC,CAAD,CAAN,CAAUI,YAAV,GAAyBJ,QAAM,CAAC,CAAD,CAAN,CAAUK,UAAV,GAAuB,IAAhD;;AAEA,UAAG1B,cAAc,GAACE,eAAlB,EAAkC;AAChCmB,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,GAAJ;AAASG,WAAC,EAAE;AAAZ,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAC,GAAL;AAASG,WAAC,EAAC;AAAX,SAApB;AAEAgC,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,GAAJ;AAAQG,WAAC,EAAE;AAAX,SAApB;AACD,OAND,MAMO;AACLgC,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,GAAJ;AAASG,WAAC,EAAE;AAAZ,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAC,GAAL;AAASG,WAAC,EAAC;AAAX,SAApB;AAEAgC,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,GAAJ;AAAQG,WAAC,EAAE;AAAX,SAApB;AACD;AACF,KA3GiB,CA6GlB;;;AACAX,cAAU,CAAC1H,IAAX,CAAgBuK,OAAhB,CAAwB,QAAxB;AACD;;AAED,MAAGtK,SAAS,IAAI,KAAhB,EAAsB;AACpByH,cAAU,CAACzH,SAAX,GAAuB4K,YAAY,CAAC,MAAD,EAAS1B,UAAT,EAAqBC,UAArB,CAAnC;AACD;;AAGD,MAAGvJ,KAAK,IAAI,IAAZ,EAAiB;AACf;AACA,QAAGjC,OAAO,CAACI,OAAR,CAAgBC,uCAAhB,CAAwD,YAAxD,EAAsEJ,OAAtE,EAA+EL,SAA/E,CAAH,EAA6F;AAE3F;AACA;AACA,UAAIqC,MAAK,GAAGmH,cAAc,CAACpJ,OAAO,CAACI,OAAR,CAAgBC,uCAAhB,CAAwD,YAAxD,EAAsEJ,OAAtE,EAA+EL,SAA/E,CAAD,CAA1B;;AACA,UAAGqC,MAAK,CAAC,CAAD,CAAL,IAAY,IAAf,EAAoB;AAClB;AACA,YAAIiL,MAAM,GAAGpD,UAAU,CAAC1H,IAAX,CAAgBH,KAAhB,GAAwBkL,kBAAxB,CAA2C,CAA3C,CAAb;AACAD,cAAM,CAACE,KAAP,GAAeC,OAAO,CAACC,uBAAR,CAAgC;AAACC,WAAC,EAAE,IAAJ;AAAU7L,WAAC,EAAE,IAAb;AAAmB8L,WAAC,EAAE,IAAtB;AAA4BC,WAAC,EAAE;AAA/B,SAAhC,CAAf;AACAP,cAAM,CAACQ,SAAP,GAAmB,CAAnB;AACA5D,kBAAU,CAAC1H,IAAX,CAAgBH,KAAhB,GAAwB0L,aAAxB,GAAwC,CAAxC;AACD,OAND,MAMO;AACL7D,kBAAU,CAAC1H,IAAX,CAAgBwL,WAAhB,GAA8B3L,MAAK,CAAC,CAAD,CAAnC;AACD;AACF,KAdD,MAcO;AACL;AACA,UAAIiL,OAAM,GAAGpD,UAAU,CAAC1H,IAAX,CAAgBH,KAAhB,GAAwBkL,kBAAxB,CAA2C,CAA3C,CAAb;;AACAD,aAAM,CAACE,KAAP,GAAeC,OAAO,CAACC,uBAAR,CAAgC;AAACC,SAAC,EAAE,IAAJ;AAAU7L,SAAC,EAAE,IAAb;AAAmB8L,SAAC,EAAE,IAAtB;AAA4BC,SAAC,EAAE;AAA/B,OAAhC,CAAf;AACAP,aAAM,CAACQ,SAAP,GAAmB,CAAnB;AACA5D,gBAAU,CAAC1H,IAAX,CAAgBH,KAAhB,GAAwB0L,aAAxB,GAAwC,CAAxC;AACD;AACF,GAvBD,MAuBO;AACL;AACA,QAAG1L,KAAK,IAAI,eAAZ,EAA4B;AAC1B;AACA,UAAIiL,QAAM,GAAGpD,UAAU,CAAC1H,IAAX,CAAgBH,KAAhB,GAAwBkL,kBAAxB,CAA2C,CAA3C,CAAb;;AACAD,cAAM,CAACE,KAAP,GAAeC,OAAO,CAACC,uBAAR,CAAgC;AAACC,SAAC,EAAE,IAAJ;AAAU7L,SAAC,EAAE,IAAb;AAAmB8L,SAAC,EAAE,IAAtB;AAA4BC,SAAC,EAAE;AAA/B,OAAhC,CAAf;AACAP,cAAM,CAACQ,SAAP,GAAmB,CAAnB;AACA5D,gBAAU,CAAC1H,IAAX,CAAgBH,KAAhB,GAAwB0L,aAAxB,GAAwC,CAAxC;AACD,KAND,MAMO;AACL;AACA,UAAIE,QAAQ,GAAGzE,cAAc,CAACnH,KAAD,CAA7B;AACA6H,gBAAU,CAAC1H,IAAX,CAAgBwL,WAAhB,GAA8BC,QAAQ,CAAC,CAAD,CAAtC;AACD;AACF;;AAED,SAAO/D,UAAP;AACD;;AAED,SAASF,gBAAT,CAA0BxH,IAA1B,EAAgC4H,YAAhC,EAA6C;AAC3C,MAAGA,YAAH,EAAgB;AACdA,gBAAY,CAAC8D,SAAb,CAAuB,CAAC1L,IAAD,CAAvB;AACA4H,gBAAY,CAAC+D,sBAAb,CAAoC,CAApC;AACD,GAHD,MAGO;AACL;AACA,QAAIC,KAAK,GAAGrO,mBAAO,CAAC,8BAAD,CAAP,CAAsBqO,KAAlC;;AACA,QAAIC,KAAK,GAAG,IAAID,KAAJ,CAAU;AACpBpC,YAAM,EAAEtL,kBADY;AAEpB4J,UAAI,EAAE,QAFc;AAGpBgE,YAAM,EAAE,IAHY;AAIpBjE,YAAM,EAAE,CAAC7H,IAAD;AAJY,KAAV,CAAZ,CAHK,CASL;;AACA6L,SAAK,CAACE,UAAN;AACAnE,gBAAY,GAAGR,aAAa,CAAC,QAAD,CAA5B;AACAQ,gBAAY,CAAC+D,sBAAb,CAAoC,CAApC;AACD;AACF;;AAED,SAASrN,kBAAT,GAA6B;AAAE;AAC7B,MAAI0N,SAAS,GAAG,EAAhB;;AAEA,MAAGjO,UAAH,EAAc;AACZ,SAAK,IAAI2C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG3C,UAAU,CAACyC,MAA/B,EAAuCE,CAAC,EAAxC,EAA6C;AAC3CsL,eAAS,CAACjL,IAAV,CAAehD,UAAU,CAAC2C,CAAD,CAAzB;AACD;AACF;;AAED,SAAOsL,SAAP;AACD;;AAED,SAASvM,kBAAT,CAA4B8G,aAA5B,EAA2CC,cAA3C,EAA2DyF,IAA3D,EAAgE;AAC9D,MAAIC,WAAW,GAAG,IAAlB;AACA3F,eAAa,GAAGhD,MAAM,CAACgD,aAAD,CAAtB;AACAC,gBAAc,GAAGjD,MAAM,CAACiD,cAAD,CAAvB;;AAEA,MAAGzI,UAAH,EAAc;AACZ;AAEA,SAAI,IAAIsK,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAG4D,IAAI,CAACzL,MAAxB,EAAgC6H,CAAC,EAAjC,EAAoC;AAElC,UAAG9B,aAAa,IAAI0F,IAAI,CAAC5D,CAAD,CAAJ,CAAQ1I,WAAzB,IAAwC4G,aAAa,IAAI0F,IAAI,CAAC5D,CAAD,CAAJ,CAAQzI,YAApE,EAAiF;AAC/E;AACA,YAAG4G,cAAc,IAAIyF,IAAI,CAAC5D,CAAD,CAAJ,CAAQ1I,WAA1B,IAAyC6G,cAAc,IAAIyF,IAAI,CAAC5D,CAAD,CAAJ,CAAQzI,YAAtE,EAAmF;AACjF;AACAsM,qBAAW,GAAG7D,CAAd;AACD;AACF;AACF;AACF;;AACD,SAAO6D,WAAP;AACD;;AAED,SAASC,yBAAT,CAAmCC,mBAAnC,EAAuD;AACrD,MAAIC,gBAAgB,GAAG,MAAvB;;AAEA,MAAG9N,QAAQ,CAACiF,aAAT,CAAuB,gBAAvB,CAAH,EAA4C;AAC1C;AACA6I,oBAAgB,GAAG9N,QAAQ,CAACiF,aAAT,CAAuB,gBAAvB,CAAnB;;AAEA,QAAG6I,gBAAgB,IAAI,MAAvB,EAA8B;AAC5BD,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,OAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,IAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACD;;AAED,QAAGH,gBAAgB,IAAI,OAAvB,EAA+B;AAC7BD,yBAAmB,CAACE,gBAApB,CAAqC,OAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,IAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACD;;AAED,QAAGH,gBAAgB,IAAI,MAAvB,EAA8B;AAC5BD,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,IAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,OAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACD;;AAED,QAAGH,gBAAgB,IAAI,MAAvB,EAA8B;AAC5BD,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,IAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,OAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACD;;AAED,QAAGH,gBAAgB,IAAI,IAAvB,EAA4B;AAC1BD,yBAAmB,CAACE,gBAApB,CAAqC,IAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,OAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACD;AAEF,GArED,MAqEO;AACL;AACAJ,uBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,uBAAmB,CAACE,gBAApB,CAAqC,OAArC;AACAF,uBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,uBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,uBAAmB,CAACE,gBAApB,CAAqC,IAArC;AACD;AACF;;AAED,SAAS9J,qBAAT,CAA+BF,iBAA/B,EAAiD;AAC/C,MAAImK,WAAW,GAAG7O,OAAO,CAACI,OAAR,CAAgBC,uCAAhB,CAAwD,YAAxD,EAAsEJ,OAAtE,EAA+EL,SAA/E,CAAlB;AACA,MAAIkP,MAAM,GAAG1F,cAAc,CAAC,IAAD,CAA3B;;AAEA,MAAGyF,WAAH,EAAe;AACb;AAEA,QAAGA,WAAW,IAAI,eAAlB,EAAmC;AACjC;AACAnK,uBAAiB,CAACgK,gBAAlB,CAAmCG,WAAnC;AACAnK,uBAAiB,CAACgK,gBAAlB,CAAmC,eAAnC;;AACA,WAAI,IAAI5L,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGgM,MAAM,CAAClM,MAA1B,EAAkCE,CAAC,EAAnC,EAAsC;AACpC,YAAGgM,MAAM,CAAChM,CAAD,CAAN,CAAUoH,IAAV,MAAoB2E,WAAvB,EAAmC;AACjCnK,2BAAiB,CAACgK,gBAAlB,CAAmCI,MAAM,CAAChM,CAAD,CAAN,CAAUoH,IAAV,EAAnC;AACD;AACF;AAEF,KAVD,MAUO;AACL;AACAxF,uBAAiB,CAACgK,gBAAlB,CAAmC,eAAnC;;AACA,WAAI,IAAI5L,EAAC,GAAG,CAAZ,EAAeA,EAAC,GAAGgM,MAAM,CAAClM,MAA1B,EAAkCE,EAAC,EAAnC,EAAsC;AACpC4B,yBAAiB,CAACgK,gBAAlB,CAAmCI,MAAM,CAAChM,EAAD,CAAN,CAAUoH,IAAV,EAAnC;AACD;AACF;AACF,GApBD,MAoBO;AACLxF,qBAAiB,CAACgK,gBAAlB,CAAmC,eAAnC;;AACA,SAAI,IAAI5L,GAAC,GAAG,CAAZ,EAAeA,GAAC,GAAGgM,MAAM,CAAClM,MAA1B,EAAkCE,GAAC,EAAnC,EAAsC;AACpC4B,uBAAiB,CAACgK,gBAAlB,CAAmCI,MAAM,CAAChM,GAAD,CAAN,CAAUoH,IAAV,EAAnC;AACD;AACF;AACF;;AAED,SAASlF,oBAAT,CAA8BD,cAA9B,EAA6C;AAC3C,MAAIgK,eAAe,GAAGpO,QAAQ,CAACiF,aAAT,CAAuB,WAAvB,CAAtB;;AAGA,MAAGmJ,eAAH,EAAmB;AACjB;AAEA,QAAGA,eAAe,IAAI,QAAtB,EAA+B;AAC7BhK,oBAAc,CAAC2J,gBAAf,CAAgC,QAAhC;AACA3J,oBAAc,CAAC4J,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACA7J,oBAAc,CAAC2J,gBAAf,CAAgC,QAAhC;AACA3J,oBAAc,CAAC4J,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACA7J,oBAAc,CAAC2J,gBAAf,CAAgC,UAAhC;AACA3J,oBAAc,CAAC4J,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACD;;AAED,QAAGG,eAAe,IAAI,QAAtB,EAA+B;AAC7BhK,oBAAc,CAAC2J,gBAAf,CAAgC,QAAhC;AACA3J,oBAAc,CAAC4J,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACA7J,oBAAc,CAAC2J,gBAAf,CAAgC,UAAhC;AACA3J,oBAAc,CAAC4J,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACA7J,oBAAc,CAAC2J,gBAAf,CAAgC,QAAhC;AACA3J,oBAAc,CAAC4J,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACD;;AAED,QAAGG,eAAe,IAAI,UAAtB,EAAiC;AAC/BhK,oBAAc,CAAC2J,gBAAf,CAAgC,UAAhC;AACA3J,oBAAc,CAAC4J,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACA7J,oBAAc,CAAC2J,gBAAf,CAAgC,QAAhC;AACA3J,oBAAc,CAAC4J,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACA7J,oBAAc,CAAC2J,gBAAf,CAAgC,QAAhC;AACA3J,oBAAc,CAAC4J,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACD;AACF,GA7BD,MA6BO;AACL;AACA7J,kBAAc,CAAC2J,gBAAf,CAAgC,QAAhC;AACA3J,kBAAc,CAAC2J,gBAAf,CAAgC,QAAhC;AACA3J,kBAAc,CAAC2J,gBAAf,CAAgC,UAAhC;AACD;AAEF;;AAED,SAASlL,wBAAT,CAAkC8K,WAAlC,EAA8C;AAC5C,MAAIU,cAAc,GAAG,EAArB;;AACA,MAAG7O,UAAH,EAAc;AACZ;AACA,QAAIsC,WAAW,GAAGtC,UAAlB;;AAEA,SAAK,IAAI2C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGL,WAAW,CAACG,MAAhC,EAAwCE,CAAC,EAAzC,EAA8C;AAC5C;AACA,UAAGA,CAAC,IAAIwL,WAAR,EAAoB;AAClBU,sBAAc,CAAC7L,IAAf,CAAoBV,WAAW,CAACK,CAAD,CAA/B;AACD;AACF;AACF;;AACD,SAAOkM,cAAP;AACD;;AAED,SAAS7E,aAAT,CAAuB8D,KAAvB,EAA6B;AAAE;AAC7B,OAAI,IAAInL,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGmL,KAAK,CAAChE,MAAN,GAAerH,MAAlC,EAA0CE,CAAC,EAA3C,EAA8C,CAC5C;AACD;AACF;;AAED,SAASQ,UAAT,CAAoBuF,MAApB,EAA2B;AACzB,MAAMoG,UAAU,GAAGpP,QAAQ,CAACkD,cAAT,CAAwB8F,MAAxB,CAAnB;AACA,MAAIqG,aAAJ;;AACA,MAAGD,UAAH,EAAc;AACZC,iBAAa,GAAGD,UAAU,CAACrD,MAA3B;AACAqD,cAAU,CAACE,MAAX;;AACA,QAAGD,aAAa,CAACjF,MAAd,CAAqBrH,MAArB,IAA+B,CAAlC,EAAoC;AAClCsM,mBAAa,CAACC,MAAd;AACD;AACF;AACF;;AAED,SAAS9F,aAAT,CAAuB+F,cAAvB,EAAuCC,aAAvC,EAAsDlN,SAAtD,EAAgE;AAC9D,MAAImN,YAAY,GAAGzP,QAAQ,CAACkD,cAAT,CAAwBqM,cAAxB,CAAnB;AACA,MAAIG,WAAW,GAAG1P,QAAQ,CAACkD,cAAT,CAAwBsM,aAAxB,CAAlB;;AAEA,MAAG1O,QAAQ,CAACiF,aAAT,CAAuB,cAAvB,KAA0CjF,QAAQ,CAACiF,aAAT,CAAuB,cAAvB,KAA0C,CAAvF,EAAyF;AACvF,QAAI4J,cAAc,GAAG7O,QAAQ,CAACiF,aAAT,CAAuB,cAAvB,CAArB;;AAEA,QAAGzD,SAAS,IAAI,OAAhB,EAAwB;AACtBoN,iBAAW,CAAClF,KAAZ,CAAkBC,CAAlB,GAAsBgF,YAAY,CAACjF,KAAb,CAAmBC,CAAnB,GAAuBgF,YAAY,CAACjF,KAAb,CAAmBE,KAA1C,GAAkDiF,cAAxE;AACD;;AAED,QAAGrN,SAAS,IAAI,MAAhB,EAAuB;AACrBoN,iBAAW,CAAClF,KAAZ,CAAkBI,CAAlB,GAAsB6E,YAAY,CAACjF,KAAb,CAAmBI,CAAnB,GAAuB6E,YAAY,CAACjF,KAAb,CAAmBK,MAA1C,GAAmD8E,cAAzE;AACD;;AAED,QAAGrN,SAAS,IAAI,MAAhB,EAAuB;AACrBoN,iBAAW,CAAClF,KAAZ,CAAkBC,CAAlB,GAAsBgF,YAAY,CAACjF,KAAb,CAAmBC,CAAnB,GAAuBiF,WAAW,CAAClF,KAAZ,CAAkBE,KAAzC,GAAiDiF,cAAvE;AACD;;AAED,QAAGrN,SAAS,IAAI,IAAhB,EAAqB;AACnBoN,iBAAW,CAAClF,KAAZ,CAAkBI,CAAlB,GAAsB6E,YAAY,CAACjF,KAAb,CAAmBI,CAAnB,GAAuB8E,WAAW,CAAClF,KAAZ,CAAkBK,MAAzC,GAAkD8E,cAAxE;AACD;AACF;AACF;;AAED,SAASlG,cAAT,CAAwB8F,cAAxB,EAAwCC,aAAxC,EAAuDlN,SAAvD,EAAiE;AAC/D,MAAImN,YAAY,GAAGzP,QAAQ,CAACkD,cAAT,CAAwBqM,cAAxB,CAAnB;AACA,MAAIG,WAAW,GAAG1P,QAAQ,CAACkD,cAAT,CAAwBsM,aAAxB,CAAlB;AACA,MAAII,UAAJ,EAAgBC,SAAhB,EAA2BC,UAA3B,EAAuCC,SAAvC,EAAkDC,IAAlD;;AAEA,MAAGlP,QAAQ,CAACiF,aAAT,CAAuB,WAAvB,CAAH,EAAuC;AACrC,QAAGjF,QAAQ,CAACiF,aAAT,CAAuB,WAAvB,KAAuC,IAA1C,EAA+C;AAC7C;AAEA,UAAGzD,SAAS,IAAI,OAAb,IAAwBA,SAAS,IAAI,MAAxC,EAA+C;AAC7CsN,kBAAU,GAAGH,YAAY,CAACjF,KAAb,CAAmBI,CAAnB,GAAuB6E,YAAY,CAACjF,KAAb,CAAmBK,MAAnB,GAA0B,CAA9D;AACAgF,iBAAS,GAAGH,WAAW,CAAClF,KAAZ,CAAkBI,CAAlB,GAAsB8E,WAAW,CAAClF,KAAZ,CAAkBK,MAAlB,GAAyB,CAA3D;AACAmF,YAAI,GAAGJ,UAAU,GAAGC,SAApB;;AACA,YAAGG,IAAI,GAAG,CAAC,CAAR,IAAaA,IAAI,GAAG,CAAvB,EAAyB;AAACN,qBAAW,CAAClF,KAAZ,CAAkBI,CAAlB,GAAsB8E,WAAW,CAAClF,KAAZ,CAAkBI,CAAlB,GAAsBoF,IAA5C;AAAiD;AAC5E;;AAED,UAAG1N,SAAS,IAAI,MAAb,IAAuBA,SAAS,IAAI,IAAvC,EAA4C;AAC1CwN,kBAAU,GAAGL,YAAY,CAACjF,KAAb,CAAmBC,CAAnB,GAAuBgF,YAAY,CAACjF,KAAb,CAAmBE,KAAnB,GAAyB,CAA7D;AACAqF,iBAAS,GAAGL,WAAW,CAAClF,KAAZ,CAAkBC,CAAlB,GAAsBiF,WAAW,CAAClF,KAAZ,CAAkBE,KAAlB,GAAwB,CAA1D;AACAsF,YAAI,GAAGF,UAAU,GAAGC,SAApB;;AACA,YAAGC,IAAI,GAAG,CAAC,CAAR,IAAaA,IAAI,GAAG,CAAvB,EAAyB;AAACN,qBAAW,CAAClF,KAAZ,CAAkBC,CAAlB,GAAsBiF,WAAW,CAAClF,KAAZ,CAAkBC,CAAlB,GAAsBuF,IAA5C;AAAiD;AAC5E;AACF;AACF;AACF;;AAED,SAASC,kBAAT,CAA4BnH,aAA5B,EAA2CC,cAA3C,EAA2DzG,SAA3D,EAAqE;AAAE;AACrE,MAAIJ,WAAW,GAAGlC,QAAQ,CAACkD,cAAT,CAAwB4F,aAAxB,CAAlB;AACA,MAAI3G,YAAY,GAAGnC,QAAQ,CAACkD,cAAT,CAAwB6F,cAAxB,CAAnB;AACA,MAAIwG,cAAJ;;AAEA,MAAGjN,SAAS,IAAI,OAAhB,EAAwB;AACtB,QAAGJ,WAAW,CAACsI,KAAZ,CAAkBC,CAAlB,IAAuBtI,YAAY,CAACqI,KAAb,CAAmBC,CAA7C,EAA+C;AAC7C8E,oBAAc,GAAGrN,WAAW,CAAC8H,EAA7B;AACD,KAFD,MAEO;AACLuF,oBAAc,GAAGpN,YAAY,CAAC6H,EAA9B;AACD;AACF;;AAED,MAAG1H,SAAS,IAAI,MAAhB,EAAuB;AACrB,QAAGJ,WAAW,CAACsI,KAAZ,CAAkBI,CAAlB,IAAuBzI,YAAY,CAACqI,KAAb,CAAmBI,CAA7C,EAA+C;AAC7C2E,oBAAc,GAAGrN,WAAW,CAAC8H,EAA7B;AACD,KAFD,MAEO;AACLuF,oBAAc,GAAGpN,YAAY,CAAC6H,EAA9B;AACD;AACF;;AAED,MAAG1H,SAAS,IAAI,MAAhB,EAAuB;AACrB,QAAGJ,WAAW,CAACsI,KAAZ,CAAkBC,CAAlB,IAAuBtI,YAAY,CAACqI,KAAb,CAAmBC,CAA7C,EAA+C;AAC7C8E,oBAAc,GAAGpN,YAAY,CAAC6H,EAA9B;AACD,KAFD,MAEO;AACLuF,oBAAc,GAAGrN,WAAW,CAAC8H,EAA7B;AACD;AACF;;AAED,MAAG1H,SAAS,IAAI,IAAhB,EAAqB;AACnB,QAAGJ,WAAW,CAACsI,KAAZ,CAAkBI,CAAlB,IAAuBzI,YAAY,CAACqI,KAAb,CAAmBI,CAA7C,EAA+C;AAC7C2E,oBAAc,GAAGpN,YAAY,CAAC6H,EAA9B;AACD,KAFD,MAEO;AACLuF,oBAAc,GAAGrN,WAAW,CAAC8H,EAA7B;AACD;AACF;;AAED,SAAOuF,cAAP;AACD;;AAED,SAASW,4BAAT,CAAsCxO,SAAtC,EAAiDY,SAAjD,EAA2D;AAAE;AAC3D,MAAIiN,cAAc,GAAG7N,SAAS,CAACQ,WAAV,GAAwBJ,QAAxB,EAArB;;AAEA,MAAGQ,SAAS,IAAI,MAAhB,EAAuB;AACrB,SAAI,IAAIT,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGH,SAAS,CAACC,KAAV,EAAnB,EAAsCE,CAAC,EAAvC,EAA2C;AACzC0N,oBAAc,GAAGU,kBAAkB,CAACV,cAAD,EAAiB7N,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,EAAjB,EAA0CQ,SAA1C,CAAnC;AACD;AACF;;AAED,SAAOiN,cAAP;AACD;;AAED,SAASY,iBAAT,CAA2BrM,KAA3B,EAAkCrB,OAAlC,EAA2C;AACvC;AACAqB,OAAK,CAACsM,cAAN,CAAqB,kDAAgD3N,OAArE,EAFuC,CAIvC;;AACAqB,OAAK,CAACuM,kBAAN,CAAyB,eAAzB;AACAvM,OAAK,CAACuM,kBAAN,CAAyB,QAAzB,EANuC,CAQvC;;AACA,MAAMpM,SAAS,GAAG,GAAlB;AACA,MAAMC,UAAU,GAAG,EAAnB;AAEA,MAAIE,IAAI,GAAGC,MAAM,CAACC,KAAP,GAAeC,aAAf,CAA6BC,UAAU,CAAC,CAAD,EAAI,CAAJ,EAAOP,SAAP,EAAkBC,UAAlB,CAAvC,CAAX;AACAJ,OAAK,CAACW,gBAAN,CAAuBL,IAAvB,EAbuC,CAevC;;AACA,MAAIkM,SAAS,GAAG9K,WAAW,CAAClB,KAAZ,GAAoBC,aAApB,CAAkCC,UAAU,CAAC,CAAC,CAAF,EAAKN,UAAU,GAAG,EAAlB,EAAsB,GAAtB,EAA2B,EAA3B,CAA5C,CAAhB;AAEAoM,WAAS,CAACzK,cAAV,CAAyB,qFAAzB;AACAyK,WAAS,CAACC,aAAV,CAAwB,KAAxB;AACAD,WAAS,CAACE,kBAAV,CAA6B,KAA7B;AACAF,WAAS,CAACG,UAAV,CAAqB,KAArB;AAEArM,MAAI,CAACQ,UAAL,CAAgB0L,SAAhB;AAEA,SAAOxM,KAAP;AACH;;AAED,SAASK,UAAT,CAAoBL,KAApB,EAA2BG,SAA3B,EAAsCC,UAAtC,EAAiD;AAC/C;AACAJ,OAAK,CAACsM,cAAN,CAAqB,uBAArB,EAF+C,CAI/C;;AACAtM,OAAK,CAACuM,kBAAN,CAAyB,iBAAzB;AACAvM,OAAK,CAACuM,kBAAN,CAAyB,QAAzB;AAEA,SAAOvM,KAAP;AACD;;AAED,SAASa,UAAT,CAAoBlC,OAApB,EAA6BgF,KAA7B,EAAoCgD,CAApC,EAAuCG,CAAvC,EAA0CF,KAA1C,EAAiDG,MAAjD,EAAwD;AACtD,MAAIyF,SAAS,GAAG9K,WAAW,CAAClB,KAAZ,GAAoBC,aAApB,CAAkCC,UAAU,CAACiG,CAAD,EAAIG,CAAJ,EAAOF,KAAP,EAAcG,MAAd,CAA5C,CAAhB;AAEAyF,WAAS,CAACzK,cAAV,CAAyBpD,OAAzB;AACA6N,WAAS,CAACC,aAAV,CAAwB,KAAxB;AACAD,WAAS,CAACE,kBAAV,CAA6B,KAA7B;AACAF,WAAS,CAACG,UAAV,CAAqB,KAArB;;AAEA,MAAGhJ,KAAK,IAAI,KAAZ,EAAkB;AAChB6I,aAAS,CAACI,SAAV,GAAsBC,OAAO,CAACC,wBAAR,EAAtB;AACD;;AAED,SAAON,SAAP;AACD;;AAED,SAASxJ,aAAT,CAAuBrE,OAAvB,EAAgCgF,KAAhC,EAAuCgD,CAAvC,EAA0CG,CAA1C,EAA6CF,KAA7C,EAAoDG,MAApD,EAA2D;AACzD,MAAIhE,QAAQ,GAAGgK,QAAQ,CAACvM,KAAT,GAAiBC,aAAjB,CAA+BC,UAAU,CAACiG,CAAD,EAAIG,CAAJ,EAAOF,KAAP,EAAcG,MAAd,CAAzC,CAAf;AAEAhE,UAAQ,CAACiK,aAAT,CAAuBC,cAAvB;AACAlK,UAAQ,CAACmK,aAAT,CAAuB,CAAvB;AACAnK,UAAQ,CAACoK,QAAT,CAAkBxO,OAAlB;;AACA,MAAG3B,QAAQ,CAACiF,aAAT,CAAuB,WAAvB,CAAH,EAAuC;AACrC,QAAImL,YAAY,GAAGpQ,QAAQ,CAACiF,aAAT,CAAuB,WAAvB,CAAnB;AACAc,YAAQ,CAACkI,QAAT,CAAkBmC,YAAlB;AACD,GAHD,MAGO;AACLrK,YAAQ,CAACkI,QAAT,CAAkBtH,KAAlB;AACD;;AAED,SAAOZ,QAAP;AACD;;AAED,SAAS0C,cAAT,CAAwBc,IAAxB,EAA8B;AAC5B,MAAI8G,SAAS,GAAG/Q,OAAO,CAACgR,cAAR,EAAhB;AACA,MAAIC,OAAO,GAAG,QAAd;AACA,MAAIpC,MAAM,GAAG,EAAb;;AACA,MAAG5E,IAAI,IAAI,IAAX,EAAiB;AACf,SAAI,IAAIpH,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGkO,SAAS,CAACxP,KAAV,EAAnB,EAAsCsB,CAAC,EAAvC,EAA0C;AACxC,UAAGkO,SAAS,CAAClO,CAAD,CAAT,CAAaoH,IAAb,GAAoBiH,QAApB,CAA6BD,OAA7B,CAAH,EAAyC;AACvCpC,cAAM,CAAC3L,IAAP,CAAY6N,SAAS,CAAClO,CAAD,CAArB;AACD;AACF;AACF,GAND,MAMO;AACL;AACA,SAAI,IAAIA,GAAC,GAAG,CAAZ,EAAeA,GAAC,GAAGkO,SAAS,CAACxP,KAAV,EAAnB,EAAsCsB,GAAC,EAAvC,EAA0C;AACxC,UAAGkO,SAAS,CAAClO,GAAD,CAAT,CAAaoH,IAAb,MAAuBA,IAA1B,EAA+B;AAC7B4E,cAAM,CAAC3L,IAAP,CAAY6N,SAAS,CAAClO,GAAD,CAArB;AACD;AACF;AACF;;AACF,SAAOgM,MAAP;AACA;;AAED,SAASjO,KAAT,CAAeb,OAAf,EAAwBmC,SAAxB,EAAmCE,SAAnC,EAA6C;AAC3C,MAAId,SAAS,GAAGvB,OAAO,CAACuB,SAAxB;;AAEA,MAAGA,SAAS,CAACC,KAAV,KAAoB,CAAvB,EAAyB;AACvB;AACA,QAAI4N,cAAc,GAAGW,4BAA4B,CAACxO,SAAD,EAAYY,SAAZ,CAAjD;AACA,QAAIV,sBAAsB,GAAGhB,kBAA7B,CAHuB,CAGyB;;AAEhD,SAAI,IAAIiB,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGH,SAAS,CAACC,KAAV,EAAnB,EAAsCE,CAAC,EAAvC,EAA2C;AACzC,UAAGH,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,MAA2ByN,cAA9B,EAA6C;AAC3C;AACA,YAAIxN,eAAe,GAAGC,kBAAkB,CAACuN,cAAD,EAAiB7N,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,EAAjB,EAA0CF,sBAA1C,CAAxC;;AAEA,YAAGG,eAAe,IAAI,IAAtB,EAA2B;AACzB;AACAmH,qBAAW,CAACqG,cAAD,EAAiB7N,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,EAAjB,EAA0C,IAA1C,EAAgD,IAAhD,EAAsDQ,SAAtD,EAAiEE,SAAjE,CAAX;AACAvC,uDAAM,CAACJ,EAAP,CAAU4C,OAAV,CAAkB,8BAAlB;AACD,SAJD,MAIO;AACL;AACA,cAAGD,SAAS,IAAI,IAAhB,EAAqB;AACnB;AACA;AACA,gBAAGZ,sBAAsB,CAACG,eAAD,CAAtB,CAAwCS,SAA3C,EAAqD;AACnDP,yBAAW,CAACsN,cAAD,EAAiB7N,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,EAAjB,EAA0C,IAA1C,EAAgD,IAAhD,EAAsDQ,SAAtD,EAAiEV,sBAAsB,CAACG,eAAD,CAAtB,CAAwCQ,IAAzG,EAA+GX,sBAAsB,CAACG,eAAD,CAAtB,CAAwCS,SAAvJ,EAAkKT,eAAlK,CAAX;AACD,aAFD,MAEO;AACLE,yBAAW,CAACsN,cAAD,EAAiB7N,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,EAAjB,EAA0C,IAA1C,EAAgD,IAAhD,EAAsDyP,UAAtD,EAAkE3P,sBAAsB,CAACG,eAAD,CAAtB,CAAwCQ,IAA1G,EAAgHC,SAAhH,EAA2HT,eAA3H,CAAX;AACD;AACF,WARD,MAQO;AACL;AACA,gBAAGH,sBAAsB,CAACG,eAAD,CAAtB,CAAwCS,SAAxC,IAAqD,IAAxD,EAA6D;AAC3D;AACA;AACAxC,sBAAQ,CAACkD,cAAT,CAAwBtB,sBAAsB,CAACG,eAAD,CAAtB,CAAwCS,SAAhE,EAA2E8M,MAA3E;AACD;;AACDrN,uBAAW,CAACsN,cAAD,EAAiB7N,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,EAAjB,EAA0C,IAA1C,EAAgD,IAAhD,EAAsDQ,SAAtD,EAAiEV,sBAAsB,CAACG,eAAD,CAAtB,CAAwCQ,IAAzG,EAA+GC,SAA/G,EAA0HT,eAA1H,CAAX;AACD;;AACD9B,uDAAM,CAACJ,EAAP,CAAU4C,OAAV,CAAkB,kCAAlB;AACD;AACF;AACF;;AACDqH,OAAG,CAAClJ,kBAAD,CAAH;AACAT,WAAO,CAACI,OAAR,CAAgBmC,2CAAhB,CAA4D9B,kBAA5D,EAAgF,kBAAhF,EAAoGR,OAApG,EAA6GL,SAA7G;AACD,GAvCD,MAuCO;AACL;AACAE,iDAAM,CAACJ,EAAP,CAAU4C,OAAV,CAAkB,oCAAlB;AACD;AACF,C,CAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAAS+O,cAAT,CAAwBH,OAAxB,EAAgC;AAC9B,MAAII,SAAS,GAAGxR,6CAAM,CAACyR,YAAP,EAAhB;AACA,MAAIzI,WAAJ,EAAiB0I,gBAAjB,CAF8B,CAG9B;AAEA;;AAEA,OAAI,IAAI9P,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAG4P,SAAS,CAAC1O,MAA7B,EAAqClB,CAAC,EAAtC,EAA0C;AACxC8P,oBAAgB,GAAGF,SAAS,CAAC5P,CAAD,CAAT,CAAa+P,wCAAb,CAAsD5R,QAAtD,CAAnB;;AAEA,SAAI,IAAIiD,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAG0O,gBAAgB,CAAC5O,MAApC,EAA4CE,CAAC,EAA7C,EAAiD;AAC/C,UAAG0O,gBAAgB,CAAC1O,CAAD,CAAhB,CAAoBoH,IAApB,CAAyBiH,QAAzB,CAAkCD,OAAlC,CAAH,EAA8C;AAC5CpI,mBAAW,GAAG0I,gBAAgB,CAAC1O,CAAD,CAAhB,CAAoB+G,EAAlC;AACD;AACF;AACF;;AAED,MAAGf,WAAW,IAAI,IAAlB,EAAuB;AACrBpJ,MAAE,CAACiE,KAAH,CAAS,+BAAT,EAA0C,kWAA1C;AACD,GAnB6B,CAqB9B;AAEA;AACA;AAGA;AACA;AAGA;AACA;;;AAEA,SAAOmF,WAAP;AACD;;AAED,SAASmE,YAAT,CAAsBiE,OAAtB,EAA+B5G,CAA/B,EAAkCG,CAAlC,EAAoC;AAClC,MAAI6G,SAAS,GAAGxR,6CAAM,CAACyR,YAAP,EAAhB;AACA,MAAIG,eAAJ,EAAqBF,gBAArB;;AAEA,OAAI,IAAI9P,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAG4P,SAAS,CAAC1O,MAA7B,EAAqClB,CAAC,EAAtC,EAA0C;AACxC8P,oBAAgB,GAAGF,SAAS,CAAC5P,CAAD,CAAT,CAAa+P,wCAAb,CAAsD5R,QAAtD,CAAnB;;AAEA,SAAI,IAAIiD,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAG0O,gBAAgB,CAAC5O,MAApC,EAA4CE,CAAC,EAA7C,EAAiD;AAC/C,UAAG0O,gBAAgB,CAAC1O,CAAD,CAAhB,CAAoBoH,IAApB,CAAyBiH,QAAzB,CAAkCD,OAAlC,CAAH,EAA8C;AAC5CQ,uBAAe,GAAGF,gBAAgB,CAAC1O,CAAD,CAAlC;AACD;AACF;AACF;;AAED,MAAG4O,eAAe,IAAI,IAAtB,EAA2B;AACzBhS,MAAE,CAACiE,KAAH,CAAS,+BAAT,EAA0C,kWAA1C;AACD,GAFD,MAEO;AACL,QAAIgO,YAAY,GAAGD,eAAe,CAACE,MAAhB,EAAnB;AACA,QAAIC,QAAQ,GAAGF,YAAY,CAACG,iBAAb,EAAf;AACAD,YAAQ,CAACjG,MAAT,GAAkBtL,kBAAlB;AACAuR,YAAQ,CAACxH,KAAT,CAAeC,CAAf,GAAmBA,CAAC,GAAGuH,QAAQ,CAACxH,KAAT,CAAeE,KAAf,GAAuB,CAA9C;AACAsH,YAAQ,CAACxH,KAAT,CAAeI,CAAf,GAAmBA,CAAC,GAAGoH,QAAQ,CAACxH,KAAT,CAAeK,MAAf,GAAwB,CAA/C;AACD;;AAED,SAAOgH,eAAP;AACD,C;;;;;;;;;;;ACn4CD,mC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,4C;;;;;;;;;;;ACAA,sC","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch'\n// const { toArray } = require('util')\n\n//\n// Variables\n//\n\nlet UI = require('sketch/ui') \n// var SharedStyle = require('sketch/dom').SharedStyle\n\nconst pluginKey = \"flowArrows\"\nconst document = sketch.fromNative(context.document)\nlet docData = context.document.documentData()\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey)\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards\nlet newConnectionsData = getConnectionsData()\n\n// Settings\nvar Settings = require('sketch/settings')\n\n \n//\n// Create Connection Function\n//\n\nexport default function(context) {}\nexport function createAutoArrow(context){start(context, \"Auto\", false)}\nexport function createRightArrow(context){start(context, \"Right\", false)}\nexport function createDownArrow(context){start(context, \"Down\", false)}\nexport function createLeftArrow(context){start(context, \"Left\", false)}\nexport function createUpArrow(context){start(context, \"Up\", false)}\n\nexport function createRightArrowWithCondition(context){start(context, \"Right\", true)}\nexport function createDownArrowWithCondition(context){start(context, \"Down\", true)}\nexport function createLeftArrowWithCondition(context){start(context, \"Left\", true)}\nexport function createUpArrowWithCondition(context){start(context, \"Up\", true)}\n\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n\n let selection = context.selection\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n // let sourceObjectID = getSourceObjectFromSelection(selection)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, connectionIndex) {\n // There might be a situation, when user deleted current group or current group stays on another artboard => In that case need to create another group\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, condition) {\n // Process of creating new connection \n let localDirection, localStyle, localType\n if(direction == \"Auto\"){\n // If direction is auto, we need to specify direction ourselves\n localDirection = getDirection(firstObjectID, secondObjectID)\n } else {\n localDirection = direction\n }\n\n if(type == null){\n localType = Settings.settingForKey(\"arrowType\") \n } else {\n localType = type\n }\n \n // log(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey))\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey))\n \n if(style != null){\n // if we updating connection with previously created objects\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n localStyle = style\n } else {\n localStyle = \"Default Style\"\n }\n } else {\n // We don't have any data from the plugin data\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)){\n localStyle = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)\n } else {\n localStyle = \"Default Style\"\n }\n \n }\n \n \n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n let currentArrowsGroup = checkForGroup(\"Arrows\")\n let arrow = drawConnection(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentArrowsGroup, condition)\n log(arrow)\n addToArrowsGroup(arrow.line, currentArrowsGroup)\n\n\n let conditionID\n\n\n if(arrow.condition != null) {\n conditionID = arrow.condition.id\n } else {\n conditionID = null\n }\n \n\n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : localStyle,\n condition : conditionID,\n type : localType,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForGroup(groupName) {\n let currentGroup = null\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n // If we already have \"Arrow\" group we need to save it's folder\n currentGroup = currentParentGroup.layers()[i]\n refactorLines(currentGroup)\n } \n }\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n if(diffX > diffY) {\n direction = \"Down\"\n } else {\n direction = \"Right\"\n }\n } else {\n // Top quarter\n if(absDiffX > absDiffY) {\n direction = \"Right\"\n } else {\n direction = \"Up\"\n }\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n if(absDiffX > absDiffY) {\n direction = \"Left\"\n } else {\n direction = \"Down\"\n }\n } else {\n // Top quarter\n if(diffX > diffY) {\n direction = \"Left\"\n } else {\n direction = \"Up\"\n }\n }\n }\n return direction\n}\n\nfunction drawConnection(firstObjectID, secondObjectID, style, type, direction, currentGroup, condition){\n let firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, middlePosX, middlePosY, diffX, diffY\n let connection = {line: [], condition: []}\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n\n if(currentGroup){\n //if we already have a group, need to specify the difference\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n // Drawing a line\n let path = NSBezierPath.bezierPath()\n\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(type == \"Angled\" || type == null){\n // Based on direction, we need to specify connection points\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n\n\n // Making middle points rounded\n let points = connection.line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n\n // Providing Settings for the arrow\n connection.line.setName(\"Arrow\")\n }\n\n if(type == \"Straight\"){\n // Based on direction, we need to specify connection points\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n \n // Providing Settings for the arrow\n connection.line.setName(\"Arrow\")\n }\n\n if(type == \"Curved\"){\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = connection.line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n }\n \n return sourceObjectID\n}\n\nfunction confirmationAlert(alert, message) {\n // Title\n alert.setMessageText(\"Would you like to delete all the arrows from \"+message)\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Delete Arrows\")\n alert.addButtonWithTitle(\"Cancel\")\n \n // Creating the view\n const viewWidth = 300\n const viewHeight = 40\n \n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n \n // Label\n var infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(-1, viewHeight - 40, 330, 40))\n \n infoLabel.setStringValue(\"ℹ️ You can select layers, artboards to delete all the arrows from selected one only\")\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n \n view.addSubview(infoLabel)\n\n return alert\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) {\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n if(name == null) {\n for(let i = 0; i < allStyles.count(); i++){\n if(allStyles[i].name().includes(keyword)){\n styles.push(allStyles[i]);\n }\n }\n } else {\n // Searching only for name\n for(let i = 0; i < allStyles.count(); i++){\n if(allStyles[i].name() == name){\n styles.push(allStyles[i]);\n }\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, condition){\n let selection = context.selection\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n \n if(connectionIndex == null){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, condition)\n sketch.UI.message(\"New connection is created 🚀\")\n } else {\n // Because this is creating flow, we need to take the direction from user settings\n if(condition == true){\n // Need to remake the arrow condition\n // There might be a situation, when user recreates arrow with condition or not\n if(currentConnectionsData[connectionIndex].condition){\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n } else {\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, dDirection, currentConnectionsData[connectionIndex].line, condition, connectionIndex)\n }\n } else {\n // If no condition, we need to delete\n if(currentConnectionsData[connectionIndex].condition != null){\n // Need to delete previous condition first\n /////// Looks like there is a problem with saving the connection\n document.getLayerWithID(currentConnectionsData[connectionIndex].condition).remove()\n }\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, condition, connectionIndex)\n }\n sketch.UI.message(\"Current connection is updated 🚀\")\n }\n }\n }\n log(newConnectionsData)\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\n// {\n// \"script\": \"./script.js\",\n// \"name\" : \"onLayersMoved\",\n// \"handlers\" : {\n// \"actions\": {\n// \"LayersMoved.finish\": \"onLayersMoved\"\n// }\n// },\n// \"identifier\" : \"onLayersMoved\"\n// }\n\nfunction getConditionID(keyword){\n let libraries = sketch.getLibraries()\n let conditionID, symbolReferences\n // let keyword = \"#condition\"\n\n // log(libraries.length)\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionID = symbolReferences[i].id \n }\n }\n }\n\n if(conditionID == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n }\n\n // symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n // log(symbolReferences)\n // var symbolMaster = symbolReferences[0].import()\n\n\n // var instance = symbolMaster.createNewInstance()\n // console.log(instance)\n\n\n // instance.parent = currentParentGroup\n // log(symbolMaster)\n\n return conditionID\n}\n\nfunction addCondition(keyword, x, y){\n let libraries = sketch.getLibraries()\n let conditionObject, symbolReferences\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionObject = symbolReferences[i]\n }\n }\n }\n\n if(conditionObject == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n } else {\n let symbolMaster = conditionObject.import()\n let instance = symbolMaster.createNewInstance()\n instance.parent = currentParentGroup\n instance.frame.x = x - instance.frame.width / 2 \n instance.frame.y = y - instance.frame.height / 2\n }\n\n return conditionObject\n}\n\n\n\n\n\n\n","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","pluginKey","document","sketch","fromNative","context","docData","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","currentParentGroup","currentPage","currentArtboard","newConnectionsData","getConnectionsData","Settings","createAutoArrow","start","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","updateSelectedArrows","selection","count","currentConnectionsData","g","objectID","connectionIndex","findConnectionData","updateArrow","firstObject","secondObject","style","type","direction","line","condition","message","setValue_forKey_onLayer_forPluginIdentifier","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","length","updateArrowsCounter","i","getLayerWithID","sketchObject","parentArtboard","class","push","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","settingForKey","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","views","subviews","title","setSettingForKey","intValue","state","onLayersMoved","action","actionContext","panel","ControlBar","NSPanel","setStyleMask","NSTitledWindowMask","NSFullSizeContentViewWindowMask","setTitleVisibility","NSWindowTitleHidden","setTitlebarAppearsTransparent","setFrame_display","setMovableByWindowBackground","setHasShadow","setLevel","NSFloatingWindowLevel","center","makeKeyAndOrderFront","nil","firstObjectID","secondObjectID","lineID","conditionID","isCondition","conditionObject","remove","createArrow","localStyle","localType","localDirection","getDirection","arrow","id","getLayerStyles","updateSpacing","autoAlignLayer","currentArrowsGroup","checkForGroup","drawConnection","addToArrowsGroup","connection","groupName","currentGroup","layers","name","refactorLines","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","firstLayerPosX","firstLayerPosY","secondLayerPosX","secondLayerPosY","middlePosX","middlePosY","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","addCondition","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","sharedStyle","ownStyle","addLayers","fixGeometryWithOptions","Group","group","locked","moveToBack","dataArray","data","arrayNumber","setActiveDirectionSetting","arrowDirectionField","currentDirection","addItemWithTitle","lastItem","setState","docSettings","styles","docTypeSettings","newConnections","lineObject","selectedGroup","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","defineSourceObject","getSourceObjectFromSelection","confirmationAlert","setMessageText","addButtonWithTitle","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","allStyles","allLayerStyles","keyword","includes","getConditionID","libraries","getLibraries","symbolReferences","getImportableSymbolReferencesForDocument","symbolMaster","import","instance","createNewInstance"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch'\n// const { toArray } = require('util')\n\n//\n// Variables\n//\n\nlet UI = require('sketch/ui') \n// var SharedStyle = require('sketch/dom').SharedStyle\n\nconst pluginKey = \"flowArrows\"\nconst document = sketch.fromNative(context.document)\nlet docData = context.document.documentData()\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey)\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards\nlet newConnectionsData = getConnectionsData()\n\n// Settings\nvar Settings = require('sketch/settings')\n\n \n//\n// Create Connection Function\n//\n\nexport default function(context) {}\nexport function createAutoArrow(context){start(context, \"Auto\", false)}\nexport function createRightArrow(context){start(context, \"Right\", false)}\nexport function createDownArrow(context){start(context, \"Down\", false)}\nexport function createLeftArrow(context){start(context, \"Left\", false)}\nexport function createUpArrow(context){start(context, \"Up\", false)}\n\nexport function createRightArrowWithCondition(context){start(context, \"Right\", true)}\nexport function createDownArrowWithCondition(context){start(context, \"Down\", true)}\nexport function createLeftArrowWithCondition(context){start(context, \"Left\", true)}\nexport function createUpArrowWithCondition(context){start(context, \"Up\", true)}\n\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n\n let selection = context.selection\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n // let sourceObjectID = getSourceObjectFromSelection(selection)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let conditionObject = document.getLayerWithID(conditionID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n if(!isCondition && conditionObject){conditionObject.remove()}\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition) {\n // Process of creating new connection \n let localStyle\n\n let localType = type == null ? localType = Settings.settingForKey(\"arrowType\") : localType = type\n let localDirection = direction == \"Auto\" ? localDirection = getDirection(firstObjectID, secondObjectID) : localDirection = direction\n let conditionID = arrow.condition != null ? arrow.condition.id : null\n \n\n if(style != null){\n // if we updating connection with previously created objects\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n localStyle = style\n } else {\n localStyle = \"Default Style\"\n }\n } else {\n // We don't have any data from the plugin data\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)){\n localStyle = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)\n } else {\n localStyle = \"Default Style\"\n }\n \n }\n \n \n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n let currentArrowsGroup = checkForGroup(\"Arrows\")\n let arrow = drawConnection(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentArrowsGroup, isCondition)\n // log(arrow)\n addToArrowsGroup(arrow.line, currentArrowsGroup)\n\n\n\n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : localStyle,\n condition : conditionID,\n type : localType,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForGroup(groupName) {\n let currentGroup = null\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n // If we already have \"Arrow\" group we need to save it's folder\n currentGroup = currentParentGroup.layers()[i]\n refactorLines(currentGroup)\n } \n }\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\"\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\"\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\"\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\"\n }\n }\n\n return direction\n}\n\nfunction drawConnection(firstObjectID, secondObjectID, style, type, direction, currentGroup, condition){\n let firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, middlePosX, middlePosY, diffX, diffY\n let connection = {line: [], condition: []}\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n\n if(currentGroup){\n //if we already have a group, need to specify the difference\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n // Drawing a line\n let path = NSBezierPath.bezierPath()\n\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(type == \"Angled\" || type == null){\n // Based on direction, we need to specify connection points\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n\n\n // Making middle points rounded\n let points = connection.line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n\n // Providing Settings for the arrow\n connection.line.setName(\"Arrow\")\n }\n\n if(type == \"Straight\"){\n // Based on direction, we need to specify connection points\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n \n // Providing Settings for the arrow\n connection.line.setName(\"Arrow\")\n }\n\n if(type == \"Curved\"){\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = connection.line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n }\n \n return sourceObjectID\n}\n\nfunction confirmationAlert(alert, message) {\n // Title\n alert.setMessageText(\"Would you like to delete all the arrows from \"+message)\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Delete Arrows\")\n alert.addButtonWithTitle(\"Cancel\")\n \n // Creating the view\n const viewWidth = 300\n const viewHeight = 40\n \n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n \n // Label\n var infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(-1, viewHeight - 40, 330, 40))\n \n infoLabel.setStringValue(\"ℹ️ You can select layers, artboards to delete all the arrows from selected one only\")\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n \n view.addSubview(infoLabel)\n\n return alert\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) {\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n if(name == null) {\n for(let i = 0; i < allStyles.count(); i++){\n if(allStyles[i].name().includes(keyword)){\n styles.push(allStyles[i]);\n }\n }\n } else {\n // Searching only for name\n for(let i = 0; i < allStyles.count(); i++){\n if(allStyles[i].name() == name){\n styles.push(allStyles[i]);\n }\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, isCondition){\n let selection = context.selection\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n \n if(connectionIndex == null){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, isCondition)\n sketch.UI.message(\"New connection is created 🚀\")\n } else {\n // Need to remake the arrow condition\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\n// {\n// \"script\": \"./script.js\",\n// \"name\" : \"onLayersMoved\",\n// \"handlers\" : {\n// \"actions\": {\n// \"LayersMoved.finish\": \"onLayersMoved\"\n// }\n// },\n// \"identifier\" : \"onLayersMoved\"\n// }\n\nfunction getConditionID(keyword){\n let libraries = sketch.getLibraries()\n let conditionID, symbolReferences\n // let keyword = \"#condition\"\n\n // log(libraries.length)\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionID = symbolReferences[i].id \n }\n }\n }\n\n if(conditionID == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n }\n\n // symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n // log(symbolReferences)\n // var symbolMaster = symbolReferences[0].import()\n\n\n // var instance = symbolMaster.createNewInstance()\n // console.log(instance)\n\n\n // instance.parent = currentParentGroup\n // log(symbolMaster)\n\n return conditionID\n}\n\nfunction addCondition(keyword, x, y){\n let libraries = sketch.getLibraries()\n let conditionObject, symbolReferences\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionObject = symbolReferences[i]\n }\n }\n }\n\n if(conditionObject == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n } else {\n let symbolMaster = conditionObject.import()\n let instance = symbolMaster.createNewInstance()\n instance.parent = currentParentGroup\n instance.frame.x = x - instance.frame.width / 2 \n instance.frame.y = y - instance.frame.height / 2\n }\n\n return conditionObject\n}\n\n\n\n\n\n\n","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/src/script.js b/src/script.js index dac3d58..d0f0ee5 100644 --- a/src/script.js +++ b/src/script.js @@ -381,41 +381,32 @@ export function panel(context) { // Functions // -function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, connectionIndex) { - // There might be a situation, when user deleted current group or current group stays on another artboard => In that case need to create another group +function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored // Need to check if we have the layers with such IDs let firstObject = document.getLayerWithID(firstObjectID) let secondObject = document.getLayerWithID(secondObjectID) + let conditionObject = document.getLayerWithID(conditionID) // Need to delete data first, because we will have a new line deleteLine(lineID) + if(!isCondition && conditionObject){conditionObject.remove()} newConnectionsData = deleteConnectionFromData(connectionIndex) if(firstObject && secondObject){ // If we have all the objects, we can recreate the line - createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID) + createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition) } } -function createArrow(firstObjectID, secondObjectID, style, type, direction, condition) { +function createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition) { // Process of creating new connection - let localDirection, localStyle, localType - if(direction == "Auto"){ - // If direction is auto, we need to specify direction ourselves - localDirection = getDirection(firstObjectID, secondObjectID) - } else { - localDirection = direction - } + let localStyle - if(type == null){ - localType = Settings.settingForKey("arrowType") - } else { - localType = type - } - - // log(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)) - localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)) + let localType = type == null ? localType = Settings.settingForKey("arrowType") : localType = type + let localDirection = direction == "Auto" ? localDirection = getDirection(firstObjectID, secondObjectID) : localDirection = direction + let conditionID = arrow.condition != null ? arrow.condition.id : null + if(style != null){ // if we updating connection with previously created objects if(getLayerStyles(style) != null && style != "Default Style"){ @@ -437,20 +428,11 @@ function createArrow(firstObjectID, secondObjectID, style, type, direction, cond updateSpacing(firstObjectID, secondObjectID, localDirection) autoAlignLayer(firstObjectID, secondObjectID, localDirection) let currentArrowsGroup = checkForGroup("Arrows") - let arrow = drawConnection(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentArrowsGroup, condition) - log(arrow) + let arrow = drawConnection(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentArrowsGroup, isCondition) + // log(arrow) addToArrowsGroup(arrow.line, currentArrowsGroup) - let conditionID - - - if(arrow.condition != null) { - conditionID = arrow.condition.id - } else { - conditionID = null - } - // Storage for current connection let connection = { @@ -479,7 +461,7 @@ function checkForGroup(groupName) { return currentGroup } -function getDirection(firstObjectID, secondObjectID){ +function getDirection(firstObjectID, secondObjectID){ // Refactored // Get direction from the source object const firstObject = document.getLayerWithID(firstObjectID) const secondObject = document.getLayerWithID(secondObjectID) @@ -498,37 +480,22 @@ function getDirection(firstObjectID, secondObjectID){ // Right Half if(secondObjectMidY > firstObjectMidY){ // Bottom quarter - if(diffX > diffY) { - direction = "Down" - } else { - direction = "Right" - } + direction = diffX > diffY ? "Down" : "Right" } else { // Top quarter - if(absDiffX > absDiffY) { - direction = "Right" - } else { - direction = "Up" - } + direction = absDiffX > absDiffY ? "Right" : "Up" } } else { // Left Half if(secondObjectMidY > firstObjectMidY){ // Bottom quarter - if(absDiffX > absDiffY) { - direction = "Left" - } else { - direction = "Down" - } + direction = absDiffX > absDiffY ? "Left" : "Down" } else { // Top quarter - if(diffX > diffY) { - direction = "Left" - } else { - direction = "Up" - } + direction = diffX > diffY ? "Left" : "Up" } } + return direction } @@ -1060,7 +1027,7 @@ function setActiveTypeSetting(arrowTypeField){ } -function deleteConnectionFromData(arrayNumber){ +function deleteConnectionFromData(connectionIndex){ // Refactored let newConnections = [] if(pluginData){ // If we have database @@ -1068,7 +1035,7 @@ function deleteConnectionFromData(arrayNumber){ for (let i = 0; i < connections.length; i ++) { // Updating all connections without deleted one - if(i != arrayNumber){ + if(i != connectionIndex){ newConnections.push(connections[i]) } } @@ -1082,8 +1049,8 @@ function refactorLines(group){ // Need to finish } } -function deleteLine(lineID){ - const lineObject = document.getLayerWithID(lineID) +function deleteLine(lineID){ // refactored + let lineObject = document.getLayerWithID(lineID) let selectedGroup if(lineObject){ selectedGroup = lineObject.parent @@ -1288,10 +1255,10 @@ function getLayerStyles(name) { return styles } -function start(context, direction, condition){ +function start(context, direction, isCondition){ let selection = context.selection - if(selection.count() > 1){ + if(selection.count() > 1 && selection[0].class() != "MSArtboardGroup"){ // Need to find source object by ID first let sourceObjectID = getSourceObjectFromSelection(selection, direction) let currentConnectionsData = newConnectionsData // Need to refactor @@ -1303,36 +1270,19 @@ function start(context, direction, condition){ if(connectionIndex == null){ // There is no connection with this two objects in our database - createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, condition) + createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, isCondition) sketch.UI.message("New connection is created 🚀") } else { - // Because this is creating flow, we need to take the direction from user settings - if(condition == true){ - // Need to remake the arrow condition - // There might be a situation, when user recreates arrow with condition or not - if(currentConnectionsData[connectionIndex].condition){ - updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex) - } else { - updateArrow(sourceObjectID, selection[g].objectID(), null, null, dDirection, currentConnectionsData[connectionIndex].line, condition, connectionIndex) - } - } else { - // If no condition, we need to delete - if(currentConnectionsData[connectionIndex].condition != null){ - // Need to delete previous condition first - /////// Looks like there is a problem with saving the connection - document.getLayerWithID(currentConnectionsData[connectionIndex].condition).remove() - } - updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, condition, connectionIndex) - } - sketch.UI.message("Current connection is updated 🚀") + // Need to remake the arrow condition + updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex) + sketch.UI.message("Current connection is updated 🤘") } } } - log(newConnectionsData) context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey) } else { // When user didn't select anything - sketch.UI.message("Please select more than two layers") + sketch.UI.message("Please select more than two layers. Artboards are coming soon 🥳") } } From c144a813a16ed6d42f6701912b6648442d559f57 Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Mon, 1 Apr 2019 23:18:42 +0300 Subject: [PATCH 10/44] fixed the problem --- arrows.sketchplugin/Contents/Sketch/script.js | 30 +++++--------- .../Contents/Sketch/script.js.map | 2 +- src/script.js | 41 ++++++------------- 3 files changed, 24 insertions(+), 49 deletions(-) diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index 01caeb5..744bde9 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -508,22 +508,13 @@ function createArrow(firstObjectID, secondObjectID, style, type, direction, isCo var localStyle; var localType = type == null ? localType = Settings.settingForKey("arrowType") : localType = type; var localDirection = direction == "Auto" ? localDirection = getDirection(firstObjectID, secondObjectID) : localDirection = direction; - var conditionID = arrow.condition != null ? arrow.condition.id : null; if (style != null) { // if we updating connection with previously created objects - if (getLayerStyles(style) != null && style != "Default Style") { - localStyle = style; - } else { - localStyle = "Default Style"; - } + localStyle = getLayerStyles(style) != null && style != "Default Style" ? localStyle = style : ocalStyle = "Default Style"; } else { // We don't have any data from the plugin data - if (context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)) { - localStyle = context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey); - } else { - localStyle = "Default Style"; - } + localStyle = context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) ? localStyle = context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) : localStyle = "Default Style"; } updateSpacing(firstObjectID, secondObjectID, localDirection); @@ -531,7 +522,8 @@ function createArrow(firstObjectID, secondObjectID, style, type, direction, isCo var currentArrowsGroup = checkForGroup("Arrows"); var arrow = drawConnection(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentArrowsGroup, isCondition); // log(arrow) - addToArrowsGroup(arrow.line, currentArrowsGroup); // Storage for current connection + addToArrowsGroup(arrow.line, currentArrowsGroup); + var conditionID = arrow.condition != null && arrow.condition.length > 0 ? arrow.condition.id : null; // Storage for current connection var connection = { firstObject: firstObjectID, @@ -1433,21 +1425,19 @@ function alertCheckbox(message, state, x, y, width, height) { } function getLayerStyles(name) { + // Refactored var allStyles = docData.allLayerStyles(); var keyword = "$arrow"; var styles = []; - if (name == null) { - for (var i = 0; i < allStyles.count(); i++) { + for (var i = 0; i < allStyles.count(); i++) { + if (name == null) { if (allStyles[i].name().includes(keyword)) { styles.push(allStyles[i]); } - } - } else { - // Searching only for name - for (var _i3 = 0; _i3 < allStyles.count(); _i3++) { - if (allStyles[_i3].name() == name) { - styles.push(allStyles[_i3]); + } else { + if (allStyles[i].name() == name) { + styles.push(allStyles[i]); } } } diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index 745008b..1f06b38 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","pluginKey","document","sketch","fromNative","context","docData","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","currentParentGroup","currentPage","currentArtboard","newConnectionsData","getConnectionsData","Settings","createAutoArrow","start","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","updateSelectedArrows","selection","count","currentConnectionsData","g","objectID","connectionIndex","findConnectionData","updateArrow","firstObject","secondObject","style","type","direction","line","condition","message","setValue_forKey_onLayer_forPluginIdentifier","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","length","updateArrowsCounter","i","getLayerWithID","sketchObject","parentArtboard","class","push","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","settingForKey","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","views","subviews","title","setSettingForKey","intValue","state","onLayersMoved","action","actionContext","panel","ControlBar","NSPanel","setStyleMask","NSTitledWindowMask","NSFullSizeContentViewWindowMask","setTitleVisibility","NSWindowTitleHidden","setTitlebarAppearsTransparent","setFrame_display","setMovableByWindowBackground","setHasShadow","setLevel","NSFloatingWindowLevel","center","makeKeyAndOrderFront","nil","firstObjectID","secondObjectID","lineID","conditionID","isCondition","conditionObject","remove","createArrow","localStyle","localType","localDirection","getDirection","arrow","id","getLayerStyles","updateSpacing","autoAlignLayer","currentArrowsGroup","checkForGroup","drawConnection","addToArrowsGroup","connection","groupName","currentGroup","layers","name","refactorLines","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","firstLayerPosX","firstLayerPosY","secondLayerPosX","secondLayerPosY","middlePosX","middlePosY","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","addCondition","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","sharedStyle","ownStyle","addLayers","fixGeometryWithOptions","Group","group","locked","moveToBack","dataArray","data","arrayNumber","setActiveDirectionSetting","arrowDirectionField","currentDirection","addItemWithTitle","lastItem","setState","docSettings","styles","docTypeSettings","newConnections","lineObject","selectedGroup","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","defineSourceObject","getSourceObjectFromSelection","confirmationAlert","setMessageText","addButtonWithTitle","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","allStyles","allLayerStyles","keyword","includes","getConditionID","libraries","getLibraries","symbolReferences","getImportableSymbolReferencesForDocument","symbolMaster","import","instance","createNewInstance"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch'\n// const { toArray } = require('util')\n\n//\n// Variables\n//\n\nlet UI = require('sketch/ui') \n// var SharedStyle = require('sketch/dom').SharedStyle\n\nconst pluginKey = \"flowArrows\"\nconst document = sketch.fromNative(context.document)\nlet docData = context.document.documentData()\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey)\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards\nlet newConnectionsData = getConnectionsData()\n\n// Settings\nvar Settings = require('sketch/settings')\n\n \n//\n// Create Connection Function\n//\n\nexport default function(context) {}\nexport function createAutoArrow(context){start(context, \"Auto\", false)}\nexport function createRightArrow(context){start(context, \"Right\", false)}\nexport function createDownArrow(context){start(context, \"Down\", false)}\nexport function createLeftArrow(context){start(context, \"Left\", false)}\nexport function createUpArrow(context){start(context, \"Up\", false)}\n\nexport function createRightArrowWithCondition(context){start(context, \"Right\", true)}\nexport function createDownArrowWithCondition(context){start(context, \"Down\", true)}\nexport function createLeftArrowWithCondition(context){start(context, \"Left\", true)}\nexport function createUpArrowWithCondition(context){start(context, \"Up\", true)}\n\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n\n let selection = context.selection\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n // let sourceObjectID = getSourceObjectFromSelection(selection)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let conditionObject = document.getLayerWithID(conditionID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n if(!isCondition && conditionObject){conditionObject.remove()}\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition) {\n // Process of creating new connection \n let localStyle\n\n let localType = type == null ? localType = Settings.settingForKey(\"arrowType\") : localType = type\n let localDirection = direction == \"Auto\" ? localDirection = getDirection(firstObjectID, secondObjectID) : localDirection = direction\n let conditionID = arrow.condition != null ? arrow.condition.id : null\n \n\n if(style != null){\n // if we updating connection with previously created objects\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n localStyle = style\n } else {\n localStyle = \"Default Style\"\n }\n } else {\n // We don't have any data from the plugin data\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)){\n localStyle = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)\n } else {\n localStyle = \"Default Style\"\n }\n \n }\n \n \n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n let currentArrowsGroup = checkForGroup(\"Arrows\")\n let arrow = drawConnection(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentArrowsGroup, isCondition)\n // log(arrow)\n addToArrowsGroup(arrow.line, currentArrowsGroup)\n\n\n\n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : localStyle,\n condition : conditionID,\n type : localType,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForGroup(groupName) {\n let currentGroup = null\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n // If we already have \"Arrow\" group we need to save it's folder\n currentGroup = currentParentGroup.layers()[i]\n refactorLines(currentGroup)\n } \n }\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\"\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\"\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\"\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\"\n }\n }\n\n return direction\n}\n\nfunction drawConnection(firstObjectID, secondObjectID, style, type, direction, currentGroup, condition){\n let firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, middlePosX, middlePosY, diffX, diffY\n let connection = {line: [], condition: []}\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n\n if(currentGroup){\n //if we already have a group, need to specify the difference\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n // Drawing a line\n let path = NSBezierPath.bezierPath()\n\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(type == \"Angled\" || type == null){\n // Based on direction, we need to specify connection points\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n\n\n // Making middle points rounded\n let points = connection.line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n\n // Providing Settings for the arrow\n connection.line.setName(\"Arrow\")\n }\n\n if(type == \"Straight\"){\n // Based on direction, we need to specify connection points\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n \n // Providing Settings for the arrow\n connection.line.setName(\"Arrow\")\n }\n\n if(type == \"Curved\"){\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = connection.line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n }\n \n return sourceObjectID\n}\n\nfunction confirmationAlert(alert, message) {\n // Title\n alert.setMessageText(\"Would you like to delete all the arrows from \"+message)\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Delete Arrows\")\n alert.addButtonWithTitle(\"Cancel\")\n \n // Creating the view\n const viewWidth = 300\n const viewHeight = 40\n \n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n \n // Label\n var infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(-1, viewHeight - 40, 330, 40))\n \n infoLabel.setStringValue(\"ℹ️ You can select layers, artboards to delete all the arrows from selected one only\")\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n \n view.addSubview(infoLabel)\n\n return alert\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) {\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n if(name == null) {\n for(let i = 0; i < allStyles.count(); i++){\n if(allStyles[i].name().includes(keyword)){\n styles.push(allStyles[i]);\n }\n }\n } else {\n // Searching only for name\n for(let i = 0; i < allStyles.count(); i++){\n if(allStyles[i].name() == name){\n styles.push(allStyles[i]);\n }\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, isCondition){\n let selection = context.selection\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n \n if(connectionIndex == null){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, isCondition)\n sketch.UI.message(\"New connection is created 🚀\")\n } else {\n // Need to remake the arrow condition\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\n// {\n// \"script\": \"./script.js\",\n// \"name\" : \"onLayersMoved\",\n// \"handlers\" : {\n// \"actions\": {\n// \"LayersMoved.finish\": \"onLayersMoved\"\n// }\n// },\n// \"identifier\" : \"onLayersMoved\"\n// }\n\nfunction getConditionID(keyword){\n let libraries = sketch.getLibraries()\n let conditionID, symbolReferences\n // let keyword = \"#condition\"\n\n // log(libraries.length)\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionID = symbolReferences[i].id \n }\n }\n }\n\n if(conditionID == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n }\n\n // symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n // log(symbolReferences)\n // var symbolMaster = symbolReferences[0].import()\n\n\n // var instance = symbolMaster.createNewInstance()\n // console.log(instance)\n\n\n // instance.parent = currentParentGroup\n // log(symbolMaster)\n\n return conditionID\n}\n\nfunction addCondition(keyword, x, y){\n let libraries = sketch.getLibraries()\n let conditionObject, symbolReferences\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionObject = symbolReferences[i]\n }\n }\n }\n\n if(conditionObject == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n } else {\n let symbolMaster = conditionObject.import()\n let instance = symbolMaster.createNewInstance()\n instance.parent = currentParentGroup\n instance.frame.x = x - instance.frame.width / 2 \n instance.frame.y = y - instance.frame.height / 2\n }\n\n return conditionObject\n}\n\n\n\n\n\n\n","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","pluginKey","document","sketch","fromNative","context","docData","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","currentParentGroup","currentPage","currentArtboard","newConnectionsData","getConnectionsData","Settings","createAutoArrow","start","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","updateSelectedArrows","selection","count","currentConnectionsData","g","objectID","connectionIndex","findConnectionData","updateArrow","firstObject","secondObject","style","type","direction","line","condition","message","setValue_forKey_onLayer_forPluginIdentifier","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","length","updateArrowsCounter","i","getLayerWithID","sketchObject","parentArtboard","class","push","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","settingForKey","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","views","subviews","title","setSettingForKey","intValue","state","onLayersMoved","action","actionContext","panel","ControlBar","NSPanel","setStyleMask","NSTitledWindowMask","NSFullSizeContentViewWindowMask","setTitleVisibility","NSWindowTitleHidden","setTitlebarAppearsTransparent","setFrame_display","setMovableByWindowBackground","setHasShadow","setLevel","NSFloatingWindowLevel","center","makeKeyAndOrderFront","nil","firstObjectID","secondObjectID","lineID","conditionID","isCondition","conditionObject","remove","createArrow","localStyle","localType","localDirection","getDirection","getLayerStyles","ocalStyle","updateSpacing","autoAlignLayer","currentArrowsGroup","checkForGroup","arrow","drawConnection","addToArrowsGroup","id","connection","groupName","currentGroup","layers","name","refactorLines","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","firstLayerPosX","firstLayerPosY","secondLayerPosX","secondLayerPosY","middlePosX","middlePosY","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","addCondition","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","sharedStyle","ownStyle","addLayers","fixGeometryWithOptions","Group","group","locked","moveToBack","dataArray","data","arrayNumber","setActiveDirectionSetting","arrowDirectionField","currentDirection","addItemWithTitle","lastItem","setState","docSettings","styles","docTypeSettings","newConnections","lineObject","selectedGroup","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","defineSourceObject","getSourceObjectFromSelection","confirmationAlert","setMessageText","addButtonWithTitle","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","allStyles","allLayerStyles","keyword","includes","getConditionID","libraries","getLibraries","symbolReferences","getImportableSymbolReferencesForDocument","symbolMaster","import","instance","createNewInstance"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch'\n// const { toArray } = require('util')\n\n//\n// Variables\n//\n\nlet UI = require('sketch/ui') \n// var SharedStyle = require('sketch/dom').SharedStyle\n\nconst pluginKey = \"flowArrows\"\nconst document = sketch.fromNative(context.document)\nlet docData = context.document.documentData()\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey)\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards\nlet newConnectionsData = getConnectionsData()\n\n// Settings\nvar Settings = require('sketch/settings')\n\n \n//\n// Create Connection Function\n//\n\nexport default function(context) {}\nexport function createAutoArrow(context){start(context, \"Auto\", false)}\nexport function createRightArrow(context){start(context, \"Right\", false)}\nexport function createDownArrow(context){start(context, \"Down\", false)}\nexport function createLeftArrow(context){start(context, \"Left\", false)}\nexport function createUpArrow(context){start(context, \"Up\", false)}\n\nexport function createRightArrowWithCondition(context){start(context, \"Right\", true)}\nexport function createDownArrowWithCondition(context){start(context, \"Down\", true)}\nexport function createLeftArrowWithCondition(context){start(context, \"Left\", true)}\nexport function createUpArrowWithCondition(context){start(context, \"Up\", true)}\n\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n\n let selection = context.selection\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n // let sourceObjectID = getSourceObjectFromSelection(selection)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let conditionObject = document.getLayerWithID(conditionID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n if(!isCondition && conditionObject){conditionObject.remove()}\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition) {\n // Process of creating new connection \n let localStyle\n let localType = type == null ? localType = Settings.settingForKey(\"arrowType\") : localType = type\n let localDirection = direction == \"Auto\" ? localDirection = getDirection(firstObjectID, secondObjectID) : localDirection = direction\n \n \n if(style != null){\n // if we updating connection with previously created objects\n localStyle = getLayerStyles(style) != null && style != \"Default Style\" ? localStyle = style : ocalStyle = \"Default Style\"\n } else {\n // We don't have any data from the plugin data\n localStyle = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) ? localStyle = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) : localStyle = \"Default Style\" \n }\n \n \n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n let currentArrowsGroup = checkForGroup(\"Arrows\")\n let arrow = drawConnection(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentArrowsGroup, isCondition)\n // log(arrow)\n addToArrowsGroup(arrow.line, currentArrowsGroup)\n\n\n\n let conditionID = arrow.condition != null && arrow.condition.length > 0 ? arrow.condition.id : null\n\n\n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : localStyle,\n condition : conditionID,\n type : localType,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForGroup(groupName) {\n let currentGroup = null\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n // If we already have \"Arrow\" group we need to save it's folder\n currentGroup = currentParentGroup.layers()[i]\n refactorLines(currentGroup)\n } \n }\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\"\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\"\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\"\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\"\n }\n }\n\n return direction\n}\n\nfunction drawConnection(firstObjectID, secondObjectID, style, type, direction, currentGroup, condition){\n let firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, middlePosX, middlePosY, diffX, diffY\n let connection = {line: [], condition: []}\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n\n if(currentGroup){\n //if we already have a group, need to specify the difference\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n // Drawing a line\n let path = NSBezierPath.bezierPath()\n\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(type == \"Angled\" || type == null){\n // Based on direction, we need to specify connection points\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n\n\n // Making middle points rounded\n let points = connection.line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n\n // Providing Settings for the arrow\n connection.line.setName(\"Arrow\")\n }\n\n if(type == \"Straight\"){\n // Based on direction, we need to specify connection points\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n \n // Providing Settings for the arrow\n connection.line.setName(\"Arrow\")\n }\n\n if(type == \"Curved\"){\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = connection.line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n }\n \n return sourceObjectID\n}\n\nfunction confirmationAlert(alert, message) {\n // Title\n alert.setMessageText(\"Would you like to delete all the arrows from \"+message)\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Delete Arrows\")\n alert.addButtonWithTitle(\"Cancel\")\n \n // Creating the view\n const viewWidth = 300\n const viewHeight = 40\n \n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n \n // Label\n var infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(-1, viewHeight - 40, 330, 40))\n \n infoLabel.setStringValue(\"ℹ️ You can select layers, artboards to delete all the arrows from selected one only\")\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n \n view.addSubview(infoLabel)\n\n return alert\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n\n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i])}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i])}\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, isCondition){\n let selection = context.selection\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n \n if(connectionIndex == null){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, isCondition)\n sketch.UI.message(\"New connection is created 🚀\")\n } else {\n // Need to remake the arrow condition\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\n// {\n// \"script\": \"./script.js\",\n// \"name\" : \"onLayersMoved\",\n// \"handlers\" : {\n// \"actions\": {\n// \"LayersMoved.finish\": \"onLayersMoved\"\n// }\n// },\n// \"identifier\" : \"onLayersMoved\"\n// }\n\nfunction getConditionID(keyword){\n let libraries = sketch.getLibraries()\n let conditionID, symbolReferences\n // let keyword = \"#condition\"\n\n // log(libraries.length)\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionID = symbolReferences[i].id \n }\n }\n }\n\n if(conditionID == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n }\n\n // symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n // log(symbolReferences)\n // var symbolMaster = symbolReferences[0].import()\n\n\n // var instance = symbolMaster.createNewInstance()\n // console.log(instance)\n\n\n // instance.parent = currentParentGroup\n // log(symbolMaster)\n\n return conditionID\n}\n\nfunction addCondition(keyword, x, y){\n let libraries = sketch.getLibraries()\n let conditionObject, symbolReferences\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionObject = symbolReferences[i]\n }\n }\n }\n\n if(conditionObject == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n } else {\n let symbolMaster = conditionObject.import()\n let instance = symbolMaster.createNewInstance()\n instance.parent = currentParentGroup\n instance.frame.x = x - instance.frame.width / 2 \n instance.frame.y = y - instance.frame.height / 2\n }\n\n return conditionObject\n}\n\n\n\n\n\n\n","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/src/script.js b/src/script.js index d0f0ee5..57984c2 100644 --- a/src/script.js +++ b/src/script.js @@ -401,27 +401,16 @@ function updateArrow(firstObjectID, secondObjectID, style, type, direction, line function createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition) { // Process of creating new connection let localStyle - let localType = type == null ? localType = Settings.settingForKey("arrowType") : localType = type let localDirection = direction == "Auto" ? localDirection = getDirection(firstObjectID, secondObjectID) : localDirection = direction - let conditionID = arrow.condition != null ? arrow.condition.id : null - + if(style != null){ // if we updating connection with previously created objects - if(getLayerStyles(style) != null && style != "Default Style"){ - localStyle = style - } else { - localStyle = "Default Style" - } + localStyle = getLayerStyles(style) != null && style != "Default Style" ? localStyle = style : ocalStyle = "Default Style" } else { // We don't have any data from the plugin data - if(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)){ - localStyle = context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) - } else { - localStyle = "Default Style" - } - + localStyle = context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) ? localStyle = context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) : localStyle = "Default Style" } @@ -434,6 +423,9 @@ function createArrow(firstObjectID, secondObjectID, style, type, direction, isCo + let conditionID = arrow.condition != null && arrow.condition.length > 0 ? arrow.condition.id : null + + // Storage for current connection let connection = { firstObject : firstObjectID, @@ -845,7 +837,6 @@ function getConnectionsData(){ //Refactored dataArray.push(pluginData[i]) } } - return dataArray } @@ -1234,22 +1225,16 @@ function alertCheckbox(message, state, x, y, width, height){ return checkbox } -function getLayerStyles(name) { +function getLayerStyles(name) { // Refactored let allStyles = docData.allLayerStyles() let keyword = "$arrow" let styles = [] - if(name == null) { - for(let i = 0; i < allStyles.count(); i++){ - if(allStyles[i].name().includes(keyword)){ - styles.push(allStyles[i]); - } - } - } else { - // Searching only for name - for(let i = 0; i < allStyles.count(); i++){ - if(allStyles[i].name() == name){ - styles.push(allStyles[i]); - } + + for(let i = 0; i < allStyles.count(); i++){ + if(name == null) { + if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i])} + } else { + if(allStyles[i].name() == name){styles.push(allStyles[i])} } } return styles From 68d5b052227c8f5080e502f59227c3c22e211c55 Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Mon, 1 Apr 2019 23:33:11 +0300 Subject: [PATCH 11/44] refactoring --- arrows.sketchplugin/Contents/Sketch/script.js | 25 +++++------- .../Contents/Sketch/script.js.map | 2 +- src/script.js | 40 +++++++++---------- 3 files changed, 32 insertions(+), 35 deletions(-) diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index 744bde9..4767866 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -505,23 +505,14 @@ function updateArrow(firstObjectID, secondObjectID, style, type, direction, line function createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition) { // Process of creating new connection - var localStyle; - var localType = type == null ? localType = Settings.settingForKey("arrowType") : localType = type; - var localDirection = direction == "Auto" ? localDirection = getDirection(firstObjectID, secondObjectID) : localDirection = direction; - - if (style != null) { - // if we updating connection with previously created objects - localStyle = getLayerStyles(style) != null && style != "Default Style" ? localStyle = style : ocalStyle = "Default Style"; - } else { - // We don't have any data from the plugin data - localStyle = context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) ? localStyle = context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) : localStyle = "Default Style"; - } + var localType = type == null ? Settings.settingForKey("arrowType") : type; + var localDirection = direction == "Auto" ? getDirection(firstObjectID, secondObjectID) : direction; // Main Operations based on the settings updateSpacing(firstObjectID, secondObjectID, localDirection); autoAlignLayer(firstObjectID, secondObjectID, localDirection); - var currentArrowsGroup = checkForGroup("Arrows"); - var arrow = drawConnection(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentArrowsGroup, isCondition); // log(arrow) + var currentArrowsGroup = checkForGroup("Arrows"); // Need to refactor + var arrow = drawConnection(firstObjectID, secondObjectID, style, localType, localDirection, currentArrowsGroup, isCondition); addToArrowsGroup(arrow.line, currentArrowsGroup); var conditionID = arrow.condition != null && arrow.condition.length > 0 ? arrow.condition.id : null; // Storage for current connection @@ -545,7 +536,6 @@ function checkForGroup(groupName) { if (currentParentGroup.layers()[i].name() == groupName) { // If we already have "Arrow" group we need to save it's folder currentGroup = currentParentGroup.layers()[i]; - refactorLines(currentGroup); } } @@ -948,6 +938,13 @@ function drawConnection(firstObjectID, secondObjectID, style, type, direction, c connection.condition = addCondition("#con", middlePosX, middlePosY); } + if (style != null) { + localStyle = getLayerStyles(style) != null && style != "Default Style" ? style : "Default Style"; + } else { + // We don't have any data from the plugin data + localStyle = context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) ? context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) : "Default Style"; + } + if (style == null) { // that means we are creating new arrow if (context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)) { diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index 1f06b38..5913751 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","pluginKey","document","sketch","fromNative","context","docData","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","currentParentGroup","currentPage","currentArtboard","newConnectionsData","getConnectionsData","Settings","createAutoArrow","start","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","updateSelectedArrows","selection","count","currentConnectionsData","g","objectID","connectionIndex","findConnectionData","updateArrow","firstObject","secondObject","style","type","direction","line","condition","message","setValue_forKey_onLayer_forPluginIdentifier","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","length","updateArrowsCounter","i","getLayerWithID","sketchObject","parentArtboard","class","push","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","settingForKey","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","views","subviews","title","setSettingForKey","intValue","state","onLayersMoved","action","actionContext","panel","ControlBar","NSPanel","setStyleMask","NSTitledWindowMask","NSFullSizeContentViewWindowMask","setTitleVisibility","NSWindowTitleHidden","setTitlebarAppearsTransparent","setFrame_display","setMovableByWindowBackground","setHasShadow","setLevel","NSFloatingWindowLevel","center","makeKeyAndOrderFront","nil","firstObjectID","secondObjectID","lineID","conditionID","isCondition","conditionObject","remove","createArrow","localStyle","localType","localDirection","getDirection","getLayerStyles","ocalStyle","updateSpacing","autoAlignLayer","currentArrowsGroup","checkForGroup","arrow","drawConnection","addToArrowsGroup","id","connection","groupName","currentGroup","layers","name","refactorLines","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","firstLayerPosX","firstLayerPosY","secondLayerPosX","secondLayerPosY","middlePosX","middlePosY","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","addCondition","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","sharedStyle","ownStyle","addLayers","fixGeometryWithOptions","Group","group","locked","moveToBack","dataArray","data","arrayNumber","setActiveDirectionSetting","arrowDirectionField","currentDirection","addItemWithTitle","lastItem","setState","docSettings","styles","docTypeSettings","newConnections","lineObject","selectedGroup","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","defineSourceObject","getSourceObjectFromSelection","confirmationAlert","setMessageText","addButtonWithTitle","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","allStyles","allLayerStyles","keyword","includes","getConditionID","libraries","getLibraries","symbolReferences","getImportableSymbolReferencesForDocument","symbolMaster","import","instance","createNewInstance"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch'\n// const { toArray } = require('util')\n\n//\n// Variables\n//\n\nlet UI = require('sketch/ui') \n// var SharedStyle = require('sketch/dom').SharedStyle\n\nconst pluginKey = \"flowArrows\"\nconst document = sketch.fromNative(context.document)\nlet docData = context.document.documentData()\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey)\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards\nlet newConnectionsData = getConnectionsData()\n\n// Settings\nvar Settings = require('sketch/settings')\n\n \n//\n// Create Connection Function\n//\n\nexport default function(context) {}\nexport function createAutoArrow(context){start(context, \"Auto\", false)}\nexport function createRightArrow(context){start(context, \"Right\", false)}\nexport function createDownArrow(context){start(context, \"Down\", false)}\nexport function createLeftArrow(context){start(context, \"Left\", false)}\nexport function createUpArrow(context){start(context, \"Up\", false)}\n\nexport function createRightArrowWithCondition(context){start(context, \"Right\", true)}\nexport function createDownArrowWithCondition(context){start(context, \"Down\", true)}\nexport function createLeftArrowWithCondition(context){start(context, \"Left\", true)}\nexport function createUpArrowWithCondition(context){start(context, \"Up\", true)}\n\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n\n let selection = context.selection\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n // let sourceObjectID = getSourceObjectFromSelection(selection)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let conditionObject = document.getLayerWithID(conditionID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n if(!isCondition && conditionObject){conditionObject.remove()}\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition) {\n // Process of creating new connection \n let localStyle\n let localType = type == null ? localType = Settings.settingForKey(\"arrowType\") : localType = type\n let localDirection = direction == \"Auto\" ? localDirection = getDirection(firstObjectID, secondObjectID) : localDirection = direction\n \n \n if(style != null){\n // if we updating connection with previously created objects\n localStyle = getLayerStyles(style) != null && style != \"Default Style\" ? localStyle = style : ocalStyle = \"Default Style\"\n } else {\n // We don't have any data from the plugin data\n localStyle = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) ? localStyle = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) : localStyle = \"Default Style\" \n }\n \n \n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n let currentArrowsGroup = checkForGroup(\"Arrows\")\n let arrow = drawConnection(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentArrowsGroup, isCondition)\n // log(arrow)\n addToArrowsGroup(arrow.line, currentArrowsGroup)\n\n\n\n let conditionID = arrow.condition != null && arrow.condition.length > 0 ? arrow.condition.id : null\n\n\n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : localStyle,\n condition : conditionID,\n type : localType,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForGroup(groupName) {\n let currentGroup = null\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n // If we already have \"Arrow\" group we need to save it's folder\n currentGroup = currentParentGroup.layers()[i]\n refactorLines(currentGroup)\n } \n }\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\"\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\"\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\"\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\"\n }\n }\n\n return direction\n}\n\nfunction drawConnection(firstObjectID, secondObjectID, style, type, direction, currentGroup, condition){\n let firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, middlePosX, middlePosY, diffX, diffY\n let connection = {line: [], condition: []}\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n\n if(currentGroup){\n //if we already have a group, need to specify the difference\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n // Drawing a line\n let path = NSBezierPath.bezierPath()\n\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(type == \"Angled\" || type == null){\n // Based on direction, we need to specify connection points\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n\n\n // Making middle points rounded\n let points = connection.line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n\n // Providing Settings for the arrow\n connection.line.setName(\"Arrow\")\n }\n\n if(type == \"Straight\"){\n // Based on direction, we need to specify connection points\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n \n // Providing Settings for the arrow\n connection.line.setName(\"Arrow\")\n }\n\n if(type == \"Curved\"){\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = connection.line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n }\n \n return sourceObjectID\n}\n\nfunction confirmationAlert(alert, message) {\n // Title\n alert.setMessageText(\"Would you like to delete all the arrows from \"+message)\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Delete Arrows\")\n alert.addButtonWithTitle(\"Cancel\")\n \n // Creating the view\n const viewWidth = 300\n const viewHeight = 40\n \n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n \n // Label\n var infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(-1, viewHeight - 40, 330, 40))\n \n infoLabel.setStringValue(\"ℹ️ You can select layers, artboards to delete all the arrows from selected one only\")\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n \n view.addSubview(infoLabel)\n\n return alert\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n\n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i])}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i])}\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, isCondition){\n let selection = context.selection\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n \n if(connectionIndex == null){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, isCondition)\n sketch.UI.message(\"New connection is created 🚀\")\n } else {\n // Need to remake the arrow condition\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\n// {\n// \"script\": \"./script.js\",\n// \"name\" : \"onLayersMoved\",\n// \"handlers\" : {\n// \"actions\": {\n// \"LayersMoved.finish\": \"onLayersMoved\"\n// }\n// },\n// \"identifier\" : \"onLayersMoved\"\n// }\n\nfunction getConditionID(keyword){\n let libraries = sketch.getLibraries()\n let conditionID, symbolReferences\n // let keyword = \"#condition\"\n\n // log(libraries.length)\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionID = symbolReferences[i].id \n }\n }\n }\n\n if(conditionID == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n }\n\n // symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n // log(symbolReferences)\n // var symbolMaster = symbolReferences[0].import()\n\n\n // var instance = symbolMaster.createNewInstance()\n // console.log(instance)\n\n\n // instance.parent = currentParentGroup\n // log(symbolMaster)\n\n return conditionID\n}\n\nfunction addCondition(keyword, x, y){\n let libraries = sketch.getLibraries()\n let conditionObject, symbolReferences\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionObject = symbolReferences[i]\n }\n }\n }\n\n if(conditionObject == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n } else {\n let symbolMaster = conditionObject.import()\n let instance = symbolMaster.createNewInstance()\n instance.parent = currentParentGroup\n instance.frame.x = x - instance.frame.width / 2 \n instance.frame.y = y - instance.frame.height / 2\n }\n\n return conditionObject\n}\n\n\n\n\n\n\n","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","pluginKey","document","sketch","fromNative","context","docData","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","currentParentGroup","currentPage","currentArtboard","newConnectionsData","getConnectionsData","Settings","createAutoArrow","start","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","updateSelectedArrows","selection","count","currentConnectionsData","g","objectID","connectionIndex","findConnectionData","updateArrow","firstObject","secondObject","style","type","direction","line","condition","message","setValue_forKey_onLayer_forPluginIdentifier","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","length","updateArrowsCounter","i","getLayerWithID","sketchObject","parentArtboard","class","push","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","settingForKey","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","views","subviews","title","setSettingForKey","intValue","state","onLayersMoved","action","actionContext","panel","ControlBar","NSPanel","setStyleMask","NSTitledWindowMask","NSFullSizeContentViewWindowMask","setTitleVisibility","NSWindowTitleHidden","setTitlebarAppearsTransparent","setFrame_display","setMovableByWindowBackground","setHasShadow","setLevel","NSFloatingWindowLevel","center","makeKeyAndOrderFront","nil","firstObjectID","secondObjectID","lineID","conditionID","isCondition","conditionObject","remove","createArrow","localType","localDirection","getDirection","updateSpacing","autoAlignLayer","currentArrowsGroup","checkForGroup","arrow","drawConnection","addToArrowsGroup","id","connection","localStyle","groupName","currentGroup","layers","name","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","firstLayerPosX","firstLayerPosY","secondLayerPosX","secondLayerPosY","middlePosX","middlePosY","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","addCondition","getLayerStyles","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","sharedStyle","ownStyle","addLayers","fixGeometryWithOptions","Group","group","locked","moveToBack","dataArray","data","arrayNumber","setActiveDirectionSetting","arrowDirectionField","currentDirection","addItemWithTitle","lastItem","setState","docSettings","styles","docTypeSettings","newConnections","refactorLines","lineObject","selectedGroup","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","defineSourceObject","getSourceObjectFromSelection","confirmationAlert","setMessageText","addButtonWithTitle","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","allStyles","allLayerStyles","keyword","includes","getConditionID","libraries","getLibraries","symbolReferences","getImportableSymbolReferencesForDocument","symbolMaster","import","instance","createNewInstance"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch'\n// const { toArray } = require('util')\n\n//\n// Variables\n//\n\nlet UI = require('sketch/ui') \n// var SharedStyle = require('sketch/dom').SharedStyle\n\nconst pluginKey = \"flowArrows\"\nconst document = sketch.fromNative(context.document)\nlet docData = context.document.documentData()\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey)\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards\nlet newConnectionsData = getConnectionsData()\n\n// Settings\nvar Settings = require('sketch/settings')\n\n \n//\n// Create Connection Function\n//\n\nexport default function(context) {}\nexport function createAutoArrow(context){start(context, \"Auto\", false)}\nexport function createRightArrow(context){start(context, \"Right\", false)}\nexport function createDownArrow(context){start(context, \"Down\", false)}\nexport function createLeftArrow(context){start(context, \"Left\", false)}\nexport function createUpArrow(context){start(context, \"Up\", false)}\n\nexport function createRightArrowWithCondition(context){start(context, \"Right\", true)}\nexport function createDownArrowWithCondition(context){start(context, \"Down\", true)}\nexport function createLeftArrowWithCondition(context){start(context, \"Left\", true)}\nexport function createUpArrowWithCondition(context){start(context, \"Up\", true)}\n\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n\n let selection = context.selection\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n // let sourceObjectID = getSourceObjectFromSelection(selection)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let conditionObject = document.getLayerWithID(conditionID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n if(!isCondition && conditionObject){conditionObject.remove()}\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition) {\n // Process of creating new connection \n let localType = type == null ? Settings.settingForKey(\"arrowType\") : type\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction\n \n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n \n let currentArrowsGroup = checkForGroup(\"Arrows\") // Need to refactor\n let arrow = drawConnection(firstObjectID, secondObjectID, style, localType, localDirection, currentArrowsGroup, isCondition)\n \n addToArrowsGroup(arrow.line, currentArrowsGroup)\n\n let conditionID = arrow.condition != null && arrow.condition.length > 0 ? arrow.condition.id : null\n\n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : localStyle,\n condition : conditionID,\n type : localType,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForGroup(groupName) {\n let currentGroup = null\n\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n // If we already have \"Arrow\" group we need to save it's folder\n currentGroup = currentParentGroup.layers()[i]\n } \n }\n\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\"\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\"\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\"\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\"\n }\n }\n\n return direction\n}\n\nfunction drawConnection(firstObjectID, secondObjectID, style, type, direction, currentGroup, condition){\n let firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, middlePosX, middlePosY, diffX, diffY\n let connection = {line: [], condition: []}\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n\n if(currentGroup){\n //if we already have a group, need to specify the difference\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n // Drawing a line\n let path = NSBezierPath.bezierPath()\n\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(type == \"Angled\" || type == null){\n // Based on direction, we need to specify connection points\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n\n\n // Making middle points rounded\n let points = connection.line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n\n // Providing Settings for the arrow\n connection.line.setName(\"Arrow\")\n }\n\n if(type == \"Straight\"){\n // Based on direction, we need to specify connection points\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n \n // Providing Settings for the arrow\n connection.line.setName(\"Arrow\")\n }\n\n if(type == \"Curved\"){\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = connection.line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n }\n \n return sourceObjectID\n}\n\nfunction confirmationAlert(alert, message) {\n // Title\n alert.setMessageText(\"Would you like to delete all the arrows from \"+message)\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Delete Arrows\")\n alert.addButtonWithTitle(\"Cancel\")\n \n // Creating the view\n const viewWidth = 300\n const viewHeight = 40\n \n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n \n // Label\n var infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(-1, viewHeight - 40, 330, 40))\n \n infoLabel.setStringValue(\"ℹ️ You can select layers, artboards to delete all the arrows from selected one only\")\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n \n view.addSubview(infoLabel)\n\n return alert\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n\n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i])}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i])}\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, isCondition){\n let selection = context.selection\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n \n if(connectionIndex == null){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, isCondition)\n sketch.UI.message(\"New connection is created 🚀\")\n } else {\n // Need to remake the arrow condition\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\n// {\n// \"script\": \"./script.js\",\n// \"name\" : \"onLayersMoved\",\n// \"handlers\" : {\n// \"actions\": {\n// \"LayersMoved.finish\": \"onLayersMoved\"\n// }\n// },\n// \"identifier\" : \"onLayersMoved\"\n// }\n\nfunction getConditionID(keyword){\n let libraries = sketch.getLibraries()\n let conditionID, symbolReferences\n // let keyword = \"#condition\"\n\n // log(libraries.length)\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionID = symbolReferences[i].id \n }\n }\n }\n\n if(conditionID == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n }\n\n // symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n // log(symbolReferences)\n // var symbolMaster = symbolReferences[0].import()\n\n\n // var instance = symbolMaster.createNewInstance()\n // console.log(instance)\n\n\n // instance.parent = currentParentGroup\n // log(symbolMaster)\n\n return conditionID\n}\n\nfunction addCondition(keyword, x, y){\n let libraries = sketch.getLibraries()\n let conditionObject, symbolReferences\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionObject = symbolReferences[i]\n }\n }\n }\n\n if(conditionObject == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n } else {\n let symbolMaster = conditionObject.import()\n let instance = symbolMaster.createNewInstance()\n instance.parent = currentParentGroup\n instance.frame.x = x - instance.frame.width / 2 \n instance.frame.y = y - instance.frame.height / 2\n }\n\n return conditionObject\n}\n\n\n\n\n\n\n","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/src/script.js b/src/script.js index 57984c2..d04f32c 100644 --- a/src/script.js +++ b/src/script.js @@ -400,32 +400,20 @@ function updateArrow(firstObjectID, secondObjectID, style, type, direction, line function createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition) { // Process of creating new connection - let localStyle - let localType = type == null ? localType = Settings.settingForKey("arrowType") : localType = type - let localDirection = direction == "Auto" ? localDirection = getDirection(firstObjectID, secondObjectID) : localDirection = direction - - - if(style != null){ - // if we updating connection with previously created objects - localStyle = getLayerStyles(style) != null && style != "Default Style" ? localStyle = style : ocalStyle = "Default Style" - } else { - // We don't have any data from the plugin data - localStyle = context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) ? localStyle = context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) : localStyle = "Default Style" - } - + let localType = type == null ? Settings.settingForKey("arrowType") : type + let localDirection = direction == "Auto" ? getDirection(firstObjectID, secondObjectID) : direction + // Main Operations based on the settings updateSpacing(firstObjectID, secondObjectID, localDirection) autoAlignLayer(firstObjectID, secondObjectID, localDirection) - let currentArrowsGroup = checkForGroup("Arrows") - let arrow = drawConnection(firstObjectID, secondObjectID, localStyle, localType, localDirection, currentArrowsGroup, isCondition) - // log(arrow) + + let currentArrowsGroup = checkForGroup("Arrows") // Need to refactor + let arrow = drawConnection(firstObjectID, secondObjectID, style, localType, localDirection, currentArrowsGroup, isCondition) + addToArrowsGroup(arrow.line, currentArrowsGroup) - - let conditionID = arrow.condition != null && arrow.condition.length > 0 ? arrow.condition.id : null - // Storage for current connection let connection = { firstObject : firstObjectID, @@ -442,14 +430,15 @@ function createArrow(firstObjectID, secondObjectID, style, type, direction, isCo function checkForGroup(groupName) { let currentGroup = null + // Checking all the groups that we have for(let i = 0; i < currentParentGroup.layers().count(); i++){ if(currentParentGroup.layers()[i].name() == groupName) { // If we already have "Arrow" group we need to save it's folder currentGroup = currentParentGroup.layers()[i] - refactorLines(currentGroup) } } + return currentGroup } @@ -497,6 +486,7 @@ function drawConnection(firstObjectID, secondObjectID, style, type, direction, c let firstObject = document.getLayerWithID(firstObjectID) let secondObject = document.getLayerWithID(secondObjectID) + let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup}) let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup}) @@ -768,6 +758,16 @@ function drawConnection(firstObjectID, secondObjectID, style, type, direction, c } + + + if(style != null){ + localStyle = getLayerStyles(style) != null && style != "Default Style" ? style : "Default Style" + } else { + // We don't have any data from the plugin data + localStyle = context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) ? context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) : "Default Style" + } + + if(style == null){ // that means we are creating new arrow if(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)){ From c83ed39d656d446ce51a1df27520be8b0f907d58 Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Thu, 4 Apr 2019 22:00:16 +0300 Subject: [PATCH 12/44] fixes --- arrows.sketchplugin/Contents/Sketch/script.js | 169 ++++++++++------ .../Contents/Sketch/script.js.map | 2 +- src/script.js | 181 ++++++++++++------ 3 files changed, 236 insertions(+), 116 deletions(-) diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index 4767866..eef726c 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -504,12 +504,12 @@ function updateArrow(firstObjectID, secondObjectID, style, type, direction, line } function createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition) { - // Process of creating new connection - var localType = type == null ? Settings.settingForKey("arrowType") : type; - var localDirection = direction == "Auto" ? getDirection(firstObjectID, secondObjectID) : direction; // Main Operations based on the settings - + // Main Operations based on the settings updateSpacing(firstObjectID, secondObjectID, localDirection); - autoAlignLayer(firstObjectID, secondObjectID, localDirection); + autoAlignLayer(firstObjectID, secondObjectID, localDirection); // Process of creating new connection + + var localType = type == null ? Settings.settingForKey("arrowType") : type; + var localDirection = direction == "Auto" ? getDirection(firstObjectID, secondObjectID) : direction; var currentArrowsGroup = checkForGroup("Arrows"); // Need to refactor var arrow = drawConnection(firstObjectID, secondObjectID, style, localType, localDirection, currentArrowsGroup, isCondition); @@ -607,55 +607,52 @@ function drawConnection(firstObjectID, secondObjectID, style, type, direction, c } // Drawing a line - var path = NSBezierPath.bezierPath(); // Getting all the positions - - if (direction == "Up") { - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; - firstLayerPosY = firstObjectAbsPos.y - diffY; // Second Layer Position End Point Position - - secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; - secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height - diffY; // Middle Points - - middlePosX = (firstLayerPosX + secondLayerPosX) / 2; - middlePosY = (firstLayerPosY + secondLayerPosY) / 2; - } - - if (direction == "Right") { - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width - diffX; - firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position - - secondLayerPosX = secondObjectAbsPos.x - diffX; - secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points - - middlePosX = (firstLayerPosX + secondLayerPosX) / 2; - middlePosY = (firstLayerPosY + secondLayerPosY) / 2; - } - - if (direction == "Down") { - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; - firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height - diffY; // Second Layer Position End Point Position - - secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; - secondLayerPosY = secondObjectAbsPos.y - diffY; // Middle Points - - middlePosX = (firstLayerPosX + secondLayerPosX) / 2; - middlePosY = (firstLayerPosY + secondLayerPosY) / 2; - } - - if (direction == "Left") { - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x - diffX; - firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position - - secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width - diffX; - secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points - - middlePosX = (firstLayerPosX + secondLayerPosX) / 2; - middlePosY = (firstLayerPosY + secondLayerPosY) / 2; - } + var path = NSBezierPath.bezierPath(); + getConnectionPos(direction); // // Getting all the positions + // if(direction == "Up"){ + // // First Layer Position Start Point Position + // firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX + // firstLayerPosY = firstObjectAbsPos.y-diffY + // // Second Layer Position End Point Position + // secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX + // secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY + // // Middle Points + // middlePosX = (firstLayerPosX + secondLayerPosX)/2 + // middlePosY = (firstLayerPosY + secondLayerPosY)/2 + // } + // if(direction == "Right"){ + // // First Layer Position Start Point Position + // firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX + // firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY + // // Second Layer Position End Point Position + // secondLayerPosX = secondObjectAbsPos.x-diffX + // secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY + // // Middle Points + // middlePosX = (firstLayerPosX + secondLayerPosX)/2 + // middlePosY = (firstLayerPosY + secondLayerPosY)/2 + // } + // if(direction == "Down"){ + // // First Layer Position Start Point Position + // firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX + // firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY + // // Second Layer Position End Point Position + // secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX + // secondLayerPosY = secondObjectAbsPos.y-diffY + // // Middle Points + // middlePosX = (firstLayerPosX + secondLayerPosX)/2 + // middlePosY = (firstLayerPosY + secondLayerPosY)/2 + // } + // if(direction == "Left"){ + // // First Layer Position Start Point Position + // firstLayerPosX = firstObjectAbsPos.x-diffX + // firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY + // // Second Layer Position End Point Position + // secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX + // secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY + // // Middle Points + // middlePosX = (firstLayerPosX + secondLayerPosX)/2 + // middlePosY = (firstLayerPosY + secondLayerPosY)/2 + // } if (type == "Angled" || type == null) { // Based on direction, we need to specify connection points @@ -1540,6 +1537,70 @@ function addCondition(keyword, x, y) { return conditionObject; } +function getConnectionPos(direction) { + var connectionPos = { + firstLayerPosX: null, + firstLayerPosY: null, + secondLayerPosX: null, + secondLayerPosY: null, + middlePosX: null, + middlePosY: null, + diffX: null, + diffY: null // Getting all the positions + + }; + + if (direction == "Up") { + // First Layer Position Start Point Position + connectionPos.firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; + connectionPos.firstLayerPosY = firstObjectAbsPos.y - diffY; // Second Layer Position End Point Position + + secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; + secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height - diffY; // Middle Points + + middlePosX = (firstLayerPosX + secondLayerPosX) / 2; + middlePosY = (firstLayerPosY + secondLayerPosY) / 2; + } + + if (direction == "Right") { + // First Layer Position Start Point Position + firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width - diffX; + firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position + + secondLayerPosX = secondObjectAbsPos.x - diffX; + secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points + + middlePosX = (firstLayerPosX + secondLayerPosX) / 2; + middlePosY = (firstLayerPosY + secondLayerPosY) / 2; + } + + if (direction == "Down") { + // First Layer Position Start Point Position + firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; + firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height - diffY; // Second Layer Position End Point Position + + secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; + secondLayerPosY = secondObjectAbsPos.y - diffY; // Middle Points + + middlePosX = (firstLayerPosX + secondLayerPosX) / 2; + middlePosY = (firstLayerPosY + secondLayerPosY) / 2; + } + + if (direction == "Left") { + // First Layer Position Start Point Position + firstLayerPosX = firstObjectAbsPos.x - diffX; + firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position + + secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width - diffX; + secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points + + middlePosX = (firstLayerPosX + secondLayerPosX) / 2; + middlePosY = (firstLayerPosY + secondLayerPosY) / 2; + } + + return connectionPos; +} + /***/ }), /***/ "sketch": diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index 5913751..c4fd286 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","pluginKey","document","sketch","fromNative","context","docData","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","currentParentGroup","currentPage","currentArtboard","newConnectionsData","getConnectionsData","Settings","createAutoArrow","start","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","updateSelectedArrows","selection","count","currentConnectionsData","g","objectID","connectionIndex","findConnectionData","updateArrow","firstObject","secondObject","style","type","direction","line","condition","message","setValue_forKey_onLayer_forPluginIdentifier","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","length","updateArrowsCounter","i","getLayerWithID","sketchObject","parentArtboard","class","push","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","settingForKey","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","views","subviews","title","setSettingForKey","intValue","state","onLayersMoved","action","actionContext","panel","ControlBar","NSPanel","setStyleMask","NSTitledWindowMask","NSFullSizeContentViewWindowMask","setTitleVisibility","NSWindowTitleHidden","setTitlebarAppearsTransparent","setFrame_display","setMovableByWindowBackground","setHasShadow","setLevel","NSFloatingWindowLevel","center","makeKeyAndOrderFront","nil","firstObjectID","secondObjectID","lineID","conditionID","isCondition","conditionObject","remove","createArrow","localType","localDirection","getDirection","updateSpacing","autoAlignLayer","currentArrowsGroup","checkForGroup","arrow","drawConnection","addToArrowsGroup","id","connection","localStyle","groupName","currentGroup","layers","name","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","firstLayerPosX","firstLayerPosY","secondLayerPosX","secondLayerPosY","middlePosX","middlePosY","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","addCondition","getLayerStyles","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","sharedStyle","ownStyle","addLayers","fixGeometryWithOptions","Group","group","locked","moveToBack","dataArray","data","arrayNumber","setActiveDirectionSetting","arrowDirectionField","currentDirection","addItemWithTitle","lastItem","setState","docSettings","styles","docTypeSettings","newConnections","refactorLines","lineObject","selectedGroup","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","defineSourceObject","getSourceObjectFromSelection","confirmationAlert","setMessageText","addButtonWithTitle","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","allStyles","allLayerStyles","keyword","includes","getConditionID","libraries","getLibraries","symbolReferences","getImportableSymbolReferencesForDocument","symbolMaster","import","instance","createNewInstance"],"mappings":";;;;;;AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;;;;;;;AClFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;CACA;AAEA;AACA;AACA;;AAEA,IAAIA,EAAE,GAAGC,mBAAO,CAAC,4BAAD,CAAhB,C,CACA;;;AAEA,IAAMC,SAAS,GAAG,YAAlB;AACA,IAAMC,QAAQ,GAAGC,6CAAM,CAACC,UAAP,CAAkBC,OAAO,CAACH,QAA1B,CAAjB;AACA,IAAII,OAAO,GAAGD,OAAO,CAACH,QAAR,CAAiBK,YAAjB,EAAd;AACA,IAAIC,UAAU,GAAGH,OAAO,CAACI,OAAR,CAAgBC,uCAAhB,CAAwD,kBAAxD,EAA4EJ,OAA5E,EAAqFL,SAArF,CAAjB;AACA,IAAIU,kBAAkB,GAAGL,OAAO,CAACM,WAAR,GAAsBC,eAAtB,MAA2CP,OAAO,CAACM,WAAR,EAApE,C,CAA0F;;AAC1F,IAAIE,kBAAkB,GAAGC,kBAAkB,EAA3C,C,CAEA;;AACA,IAAIC,QAAQ,GAAGhB,mBAAO,CAAC,wCAAD,CAAtB,C,CAGA;AACA;AACA;;;AAEe,yEAASK,OAAT,EAAkB,CAAE;AAC5B,SAASY,eAAT,CAAyBZ,OAAzB,EAAiC;AAACa,OAAK,CAACb,OAAD,EAAU,MAAV,EAAkB,KAAlB,CAAL;AAA8B;AAChE,SAASc,gBAAT,CAA0Bd,OAA1B,EAAkC;AAACa,OAAK,CAACb,OAAD,EAAU,OAAV,EAAmB,KAAnB,CAAL;AAA+B;AAClE,SAASe,eAAT,CAAyBf,OAAzB,EAAiC;AAACa,OAAK,CAACb,OAAD,EAAU,MAAV,EAAkB,KAAlB,CAAL;AAA8B;AAChE,SAASgB,eAAT,CAAyBhB,OAAzB,EAAiC;AAACa,OAAK,CAACb,OAAD,EAAU,MAAV,EAAkB,KAAlB,CAAL;AAA8B;AAChE,SAASiB,aAAT,CAAuBjB,OAAvB,EAA+B;AAACa,OAAK,CAACb,OAAD,EAAU,IAAV,EAAgB,KAAhB,CAAL;AAA4B;AAE5D,SAASkB,6BAAT,CAAuClB,OAAvC,EAA+C;AAACa,OAAK,CAACb,OAAD,EAAU,OAAV,EAAmB,IAAnB,CAAL;AAA8B;AAC9E,SAASmB,4BAAT,CAAsCnB,OAAtC,EAA8C;AAACa,OAAK,CAACb,OAAD,EAAU,MAAV,EAAkB,IAAlB,CAAL;AAA6B;AAC5E,SAASoB,4BAAT,CAAsCpB,OAAtC,EAA8C;AAACa,OAAK,CAACb,OAAD,EAAU,MAAV,EAAkB,IAAlB,CAAL;AAA6B;AAC5E,SAASqB,0BAAT,CAAoCrB,OAApC,EAA4C;AAACa,OAAK,CAACb,OAAD,EAAU,IAAV,EAAgB,IAAhB,CAAL;AAA2B,C,CAE/E;AACA;AACA;;AAEO,SAASsB,oBAAT,CAA8BtB,OAA9B,EAAuC;AAE5C,MAAIuB,SAAS,GAAGvB,OAAO,CAACuB,SAAxB;;AAEA,MAAGA,SAAS,CAACC,KAAV,KAAoB,CAAvB,EAAyB;AACvB;AACA;AACA,QAAIC,sBAAsB,GAAGhB,kBAA7B;;AAEA,SAAI,IAAIiB,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGH,SAAS,CAACC,KAAV,EAAnB,EAAsCE,CAAC,EAAvC,EAA2C;AACzC,UAAGH,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,MAA2BJ,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAA9B,EAAsD;AACpD;AACA,YAAIC,eAAe,GAAGC,kBAAkB,CAACN,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAAD,EAA0BJ,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,EAA1B,EAAmDF,sBAAnD,CAAxC;;AAEA,YAAGG,eAAe,IAAI,IAAtB,EAA2B;AACzBE,qBAAW,CAACL,sBAAsB,CAACG,eAAD,CAAtB,CAAwCG,WAAzC,EAAsDN,sBAAsB,CAACG,eAAD,CAAtB,CAAwCI,YAA9F,EAA4GP,sBAAsB,CAACG,eAAD,CAAtB,CAAwCK,KAApJ,EAA2JR,sBAAsB,CAACG,eAAD,CAAtB,CAAwCM,IAAnM,EAAyMT,sBAAsB,CAACG,eAAD,CAAtB,CAAwCO,SAAjP,EAA4PV,sBAAsB,CAACG,eAAD,CAAtB,CAAwCQ,IAApS,EAA0SX,sBAAsB,CAACG,eAAD,CAAtB,CAAwCS,SAAlV,EAA6VT,eAA7V,CAAX;AACA9B,uDAAM,CAACJ,EAAP,CAAU4C,OAAV,CAAkB,kCAAlB;AACD,SAHD,MAGO;AACLxC,uDAAM,CAACJ,EAAP,CAAU4C,OAAV,CAAkB,mEAAlB;AACD;AACF;AACF;;AACDtC,WAAO,CAACI,OAAR,CAAgBmC,2CAAhB,CAA4D9B,kBAA5D,EAAgF,kBAAhF,EAAoGR,OAApG,EAA6GL,SAA7G;AACD,GAnBD,MAmBO;AACL;AACAE,iDAAM,CAACJ,EAAP,CAAU4C,OAAV,CAAkB,oCAAlB;AACD;AACF;AAEM,SAASE,oBAAT,CAA8BxC,OAA9B,EAAuC;AAC5C;AACA,MAAIuB,SAAS,GAAGvB,OAAO,CAACuB,SAAxB;AACA,MAAIkB,WAAW,GAAG/B,kBAAkB,EAApC;AACA,MAAIgC,mBAAJ;AACA,MAAIC,oBAAJ;;AAEA,MAAGF,WAAW,CAACG,MAAZ,GAAqB,CAAxB,EAA0B;AACxB;AACA,QAAMC,mBAAmB,GAAGJ,WAAW,CAACG,MAAxC;;AACA,SAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,mBAApB,EAAyCC,CAAC,EAA1C,EAA+C;AAC7C;AACAJ,yBAAmB,GAAG7C,QAAQ,CAACkD,cAAT,CAAwBN,WAAW,CAACK,CAAD,CAAX,CAAef,WAAvC,CAAtB;AACAW,yBAAmB,GAAGA,mBAAmB,CAACM,YAApB,CAAiCC,cAAjC,GAAkDtB,QAAlD,EAAtB;AAEAgB,0BAAoB,GAAG9C,QAAQ,CAACkD,cAAT,CAAwBN,WAAW,CAACK,CAAD,CAAX,CAAed,YAAvC,CAAvB;AACAW,0BAAoB,GAAGA,oBAAoB,CAACK,YAArB,CAAkCC,cAAlC,GAAmDtB,QAAnD,EAAvB;;AAEA,UAAGJ,SAAS,CAACC,KAAV,MAAqB,CAArB,IAA0BD,SAAS,CAAC,CAAD,CAAT,CAAa2B,KAAb,MAAwB,iBAArD,EAAuE;AACrE;AAEA,YAAIR,mBAAmB,IAAInB,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAA3B,EAAmD;AACjD,cAAIgB,oBAAoB,IAAIpB,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAA5B,EAAoD;AAClDG,uBAAW,CAACW,WAAW,CAACK,CAAD,CAAX,CAAef,WAAhB,EAA6BU,WAAW,CAACK,CAAD,CAAX,CAAed,YAA5C,EAA0DS,WAAW,CAACK,CAAD,CAAX,CAAeb,KAAzE,EAAgFQ,WAAW,CAACK,CAAD,CAAX,CAAeZ,IAA/F,EAAqGO,WAAW,CAACK,CAAD,CAAX,CAAeX,SAApH,EAA+HM,WAAW,CAACK,CAAD,CAAX,CAAeV,IAA9I,EAAoJK,WAAW,CAACK,CAAD,CAAX,CAAeT,SAAnK,EAA8KS,CAA9K,CAAX;AACD,WAFD,MAEO;AAACrC,8BAAkB,CAAC0C,IAAnB,CAAwBV,WAAW,CAACK,CAAD,CAAnC;AAAwC;AACjD,SAJD,MAIO;AACL;AACArC,4BAAkB,CAAC0C,IAAnB,CAAwBV,WAAW,CAACK,CAAD,CAAnC;AACD;AACF;AACF;;AACD9C,WAAO,CAACI,OAAR,CAAgBmC,2CAAhB,CAA4D9B,kBAA5D,EAAgF,kBAAhF,EAAoGR,OAApG,EAA6GL,SAA7G;AACAE,iDAAM,CAACJ,EAAP,CAAU4C,OAAV,CAAkB,2BAAlB;AACD,GA1BD,MA0BO;AACL;AACAxC,iDAAM,CAACJ,EAAP,CAAU4C,OAAV,CAAkB,4BAAlB;AACD;AACF;AAEM,SAASc,eAAT,CAAyBpD,OAAzB,EAAkC;AAAE;AACzC;AACA,MAAIyB,sBAAsB,GAAGhB,kBAA7B;;AACA,MAAGgB,sBAAsB,CAACmB,MAAvB,GAAgC,CAAnC,EAAqC;AACnC;AACA,QAAMC,mBAAmB,GAAGpB,sBAAsB,CAACmB,MAAnD;;AACA,SAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,mBAApB,EAAyCC,CAAC,EAA1C,EAA+C;AAC7C;AACA;AACAhB,iBAAW,CAACL,sBAAsB,CAACqB,CAAD,CAAtB,CAA0Bf,WAA3B,EAAwCN,sBAAsB,CAACqB,CAAD,CAAtB,CAA0Bd,YAAlE,EAAgFP,sBAAsB,CAACqB,CAAD,CAAtB,CAA0Bb,KAA1G,EAAiHR,sBAAsB,CAACqB,CAAD,CAAtB,CAA0BZ,IAA3I,EAAiJT,sBAAsB,CAACqB,CAAD,CAAtB,CAA0BX,SAA3K,EAAsLV,sBAAsB,CAACqB,CAAD,CAAtB,CAA0BV,IAAhN,EAAsNX,sBAAsB,CAACqB,CAAD,CAAtB,CAA0BT,SAAhP,EAA2PS,CAA3P,CAAX;AACD;;AACD9C,WAAO,CAACI,OAAR,CAAgBmC,2CAAhB,CAA4D9B,kBAA5D,EAAgF,kBAAhF,EAAoGR,OAApG,EAA6GL,SAA7G;AACAE,iDAAM,CAACJ,EAAP,CAAU4C,OAAV,CAAkB,2BAAlB;AACD,GAVD,MAUO;AACL;AACAxC,iDAAM,CAACJ,EAAP,CAAU4C,OAAV,CAAkB,4BAAlB;AACD;AACF;AAEM,SAASe,eAAT,CAAyBrD,OAAzB,EAAkC;AAEvC,MAAGS,kBAAkB,CAACmC,MAAnB,GAA4B,CAA/B,EAAiC;AAC/B;AACA,SAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGrC,kBAAkB,CAACmC,MAAvC,EAA+CE,CAAC,EAAhD,EAAqD;AACnD;AACAQ,gBAAU,CAAC7C,kBAAkB,CAACqC,CAAD,CAAlB,CAAsBV,IAAvB,CAAV;AACD;;AACDpC,WAAO,CAACI,OAAR,CAAgBmC,2CAAhB,CAA4D,IAA5D,EAAkE,kBAAlE,EAAsFtC,OAAtF,EAA+FL,SAA/F;AACAE,iDAAM,CAACJ,EAAP,CAAU4C,OAAV,CAAkB,wBAAlB;AACD,GARD,MAQO;AACL;AACAxC,iDAAM,CAACJ,EAAP,CAAU4C,OAAV,CAAkB,4BAAlB;AACD;AACF;AAEM,SAASiB,oBAAT,CAA8BvD,OAA9B,EAAuC;AAC5C,MAAIuB,SAAS,GAAGvB,OAAO,CAACuB,SAAxB;AACA,MAAIQ,WAAJ,EAAiBC,YAAjB,CAF4C,CAI5C;;AACA,MAAGT,SAAS,CAACC,KAAV,MAAqB,CAArB,IAA0BD,SAAS,CAAC,CAAD,CAAT,CAAa2B,KAAb,MAAwB,iBAArD,EAAuE;AACrE,QAAIT,WAAW,GAAG/B,kBAAkB,EAApC;;AAEA,QAAG+B,WAAW,CAACG,MAAZ,GAAqB,CAAxB,EAA0B;AACxB;AACA,UAAMC,mBAAmB,GAAGJ,WAAW,CAACG,MAAxC;;AACA,WAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,mBAApB,EAAyCC,CAAC,EAA1C,EAA+C;AAC7C;AACAf,mBAAW,GAAGlC,QAAQ,CAACkD,cAAT,CAAwBN,WAAW,CAACK,CAAD,CAAX,CAAef,WAAvC,CAAd;AACAC,oBAAY,GAAGnC,QAAQ,CAACkD,cAAT,CAAwBN,WAAW,CAACK,CAAD,CAAX,CAAed,YAAvC,CAAf;;AACA,YAAID,WAAW,CAACiB,YAAZ,CAAyBC,cAAzB,GAA0CtB,QAA1C,MAAwDJ,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAA5D,EAAoF;AAClF,cAAIK,YAAY,CAACgB,YAAb,CAA0BC,cAA1B,GAA2CtB,QAA3C,MAAyDJ,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAA7D,EAAqF;AACnF2B,sBAAU,CAACb,WAAW,CAACK,CAAD,CAAX,CAAeV,IAAhB,CAAV;AACA3B,8BAAkB,GAAG+C,wBAAwB,CAACV,CAAD,CAA7C;AACD;AACF;AACF;;AACD9C,aAAO,CAACI,OAAR,CAAgBmC,2CAAhB,CAA4D9B,kBAA5D,EAAgF,kBAAhF,EAAoGR,OAApG,EAA6GL,SAA7G;AACAE,mDAAM,CAACJ,EAAP,CAAU4C,OAAV,CAAkB,+CAAlB;AACD,KAhBD,MAgBO;AACL;AACAxC,mDAAM,CAACJ,EAAP,CAAU4C,OAAV,CAAkB,4BAAlB;AACD;AACF,GAvBD,MAuBO;AACLxC,iDAAM,CAACJ,EAAP,CAAU4C,OAAV,CAAkB,4BAAlB;AACD;AACF;AAEM,SAASmB,oBAAT,CAA8BzD,OAA9B,EAAuC;AAC5C,MAAIuB,SAAS,GAAGvB,OAAO,CAACuB,SAAxB;AACA,MAAIQ,WAAJ,EAAiBC,YAAjB,CAF4C,CAI5C;;AACA,MAAGT,SAAS,CAACC,KAAV,MAAqB,CAAxB,EAA0B;AAExB,SAAI,IAAIE,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGH,SAAS,CAACC,KAAV,EAAnB,EAAsCE,CAAC,EAAvC,EAA2C;AAEzC,UAAGH,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,MAA2BJ,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAA9B,EAAsD;AAAE;AACtD,YAAIc,WAAW,GAAG/B,kBAAkB,EAApC;AAEA,YAAIkB,eAAe,GAAGC,kBAAkB,CAACN,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAAD,EAA0BJ,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,EAA1B,EAAmDc,WAAnD,CAAxC;;AAEA,YAAGb,eAAe,IAAI,IAAtB,EAA2B;AACzB;AACA0B,oBAAU,CAACb,WAAW,CAACb,eAAD,CAAX,CAA6BQ,IAA9B,CAAV;AACA3B,4BAAkB,GAAG+C,wBAAwB,CAAC5B,eAAD,CAA7C;AACA,cAAMiB,mBAAmB,GAAGJ,WAAW,CAACG,MAAxC;;AACA,eAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,mBAApB,EAAyCC,CAAC,EAA1C,EAA+C;AAC7C;AACAf,uBAAW,GAAGlC,QAAQ,CAACkD,cAAT,CAAwBN,WAAW,CAACK,CAAD,CAAX,CAAef,WAAvC,CAAd;AACAC,wBAAY,GAAGnC,QAAQ,CAACkD,cAAT,CAAwBN,WAAW,CAACK,CAAD,CAAX,CAAed,YAAvC,CAAf;;AACA,gBAAGD,WAAW,CAACiB,YAAZ,CAAyBC,cAAzB,GAA0CtB,QAA1C,MAAwDJ,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAA3D,EAAmF;AACjF,kBAAGK,YAAY,CAACgB,YAAb,CAA0BC,cAA1B,GAA2CtB,QAA3C,MAAyDJ,SAAS,CAAC,CAAD,CAAT,CAAaI,QAAb,EAA5D,EAAoF;AAClF2B,0BAAU,CAACb,WAAW,CAACK,CAAD,CAAX,CAAeV,IAAhB,CAAV;AACA3B,kCAAkB,GAAG+C,wBAAwB,CAACV,CAAD,CAA7C;AACD;AACF;AACF;;AACD9C,iBAAO,CAACI,OAAR,CAAgBmC,2CAAhB,CAA4D9B,kBAA5D,EAAgF,kBAAhF,EAAoGR,OAApG,EAA6GL,SAA7G;AACAE,uDAAM,CAACJ,EAAP,CAAU4C,OAAV,CAAkB,gDAAlB;AACD;AACF;AACF;AACF,GA9BD,MA8BO;AACLxC,iDAAM,CAACJ,EAAP,CAAU4C,OAAV,CAAkB,8BAAlB;AACD;AACF;AAEM,SAASoB,QAAT,CAAkB1D,OAAlB,EAA2B;AAChC,MAAI2D,KAAK,GAAGC,cAAc,CAACC,GAAf,EAAZ;AACA,MAAMC,SAAS,GAAG,GAAlB;AACA,MAAMC,UAAU,GAAG,GAAnB,CAHgC,CAKhC;;AACAJ,OAAK,GAAGK,UAAU,CAACL,KAAD,EAAQG,SAAR,EAAmBC,UAAnB,CAAlB;AACA,MAAIE,IAAI,GAAGC,MAAM,CAACC,KAAP,GAAeC,aAAf,CAA6BC,UAAU,CAAC,CAAD,EAAI,CAAJ,EAAOP,SAAP,EAAkBC,UAAlB,CAAvC,CAAX;AACAJ,OAAK,CAACW,gBAAN,CAAuBL,IAAvB,EARgC,CAUhC;;AACA,MAAIM,eAAe,GAAGC,UAAU,CAAC,aAAD,EAAgB,IAAhB,EAAsB,CAAC,CAAvB,EAA0BT,UAAU,GAAC,EAArC,EAAyC,GAAzC,EAA8C,EAA9C,CAAhC;AACAE,MAAI,CAACQ,UAAL,CAAgBF,eAAhB,EAZgC,CAchC;;AACA,MAAIG,iBAAiB,GAAGC,aAAa,CAACR,KAAd,GAAsBC,aAAtB,CAAoCC,UAAU,CAAC,CAAC,CAAF,EAAKN,UAAU,GAAG,EAAlB,EAAsB,GAAtB,EAA2B,EAA3B,CAA9C,CAAxB;AACAa,uBAAqB,CAACF,iBAAD,CAArB;AACAT,MAAI,CAACQ,UAAL,CAAgBC,iBAAhB,EAjBgC,CAmBhC;;AACA,MAAIG,mBAAmB,GAAGL,UAAU,CAAC,yGAAD,EAA4G,KAA5G,EAAmH,CAAC,CAApH,EAAuHT,UAAU,GAAC,EAAlI,EAAsI,GAAtI,EAA2I,EAA3I,CAApC;AACAE,MAAI,CAACQ,UAAL,CAAgBI,mBAAhB,EArBgC,CAwBhC;;AACA,MAAIC,cAAc,GAAGN,UAAU,CAAC,YAAD,EAAe,IAAf,EAAqB,CAAC,CAAtB,EAAyBT,UAAU,GAAC,GAApC,EAAyC,GAAzC,EAA8C,EAA9C,CAA/B;AACAE,MAAI,CAACQ,UAAL,CAAgBK,cAAhB,EA1BgC,CA4BhC;;AACA,MAAIC,cAAc,GAAGJ,aAAa,CAACR,KAAd,GAAsBC,aAAtB,CAAoCC,UAAU,CAAC,CAAC,CAAF,EAAKN,UAAU,GAAG,GAAlB,EAAuB,GAAvB,EAA4B,EAA5B,CAA9C,CAArB;AACAiB,sBAAoB,CAACD,cAAD,CAApB;AACAd,MAAI,CAACQ,UAAL,CAAgBM,cAAhB,EA/BgC,CAiChC;;AACA,MAAIE,kBAAkB,GAAGT,UAAU,CAAC,0DAAD,EAA6D,KAA7D,EAAoE,CAAC,CAArE,EAAwET,UAAU,GAAC,GAAnF,EAAwF,GAAxF,EAA6F,EAA7F,CAAnC;AACAE,MAAI,CAACQ,UAAL,CAAgBQ,kBAAhB,EAnCgC,CAsChC;;AACA,MAAIC,iBAAiB,GAAGV,UAAU,CAAC,eAAD,EAAkB,IAAlB,EAAwB,CAAC,CAAzB,EAA4BT,UAAU,GAAG,GAAzC,EAA8C,GAA9C,EAAmD,EAAnD,CAAlC;AACAE,MAAI,CAACQ,UAAL,CAAgBS,iBAAhB,EAxCgC,CA0ChC;;AACA,MAAIC,mBAAmB,GAAGX,UAAU,CAAC,IAAD,EAAO,IAAP,EAAa,EAAb,EAAiBT,UAAU,GAAG,GAA9B,EAAmC,GAAnC,EAAwC,EAAxC,CAApC;AACAE,MAAI,CAACQ,UAAL,CAAgBU,mBAAhB,EA5CgC,CA8ChC;;AACA,MAAIC,iBAAiB,GAAGC,WAAW,CAAClB,KAAZ,GAAoBC,aAApB,CAAkCC,UAAU,CAAC,CAAC,CAAF,EAAKN,UAAU,GAAG,GAAlB,EAAuB,EAAvB,EAA2B,EAA3B,CAA5C,CAAxB;AACA,MAAIuB,SAAS,GAAGC,iBAAiB,CAACpB,KAAlB,GAA0BqB,IAA1B,GAAiCC,WAAjC,EAAhB;AACAL,mBAAiB,CAACM,cAAlB,CAAiCC,MAAM,CAAChF,QAAQ,CAACiF,aAAT,CAAuB,cAAvB,CAAD,CAAvC;AACAR,mBAAiB,CAACS,YAAlB,CAA+BP,SAA/B;AACArB,MAAI,CAACQ,UAAL,CAAgBW,iBAAhB,EAnDgC,CAqDhC;;AACA,MAAIU,mBAAmB,GAAGC,SAAS,CAAC5B,KAAV,GAAkBC,aAAlB,CAAgCC,UAAU,CAAC,EAAD,EAAKN,UAAU,GAAG,GAAlB,EAAuB,EAAvB,EAA2B,EAA3B,CAA1C,CAA1B;AACA+B,qBAAmB,CAACE,WAApB,CAAgC,IAAhC;AACAF,qBAAmB,CAACG,WAApB,CAAgC,CAAhC;AACAH,qBAAmB,CAACI,aAApB,CAAkC,KAAlC;AACAJ,qBAAmB,CAACK,aAApB,CAAkC,IAAlC;AACAL,qBAAmB,CAACM,sBAApB,CAA2C,UAASC,MAAT,EAAgB;AACzD,QAAIC,KAAK,GAAG,IAAID,MAAM,CAACE,YAAP,EAAhB;AACAnB,qBAAiB,CAACM,cAAlB,CAAiCC,MAAM,CAACW,KAAD,CAAvC;AACD,GAHD;AAKArC,MAAI,CAACQ,UAAL,CAAgBqB,mBAAhB,EAhEgC,CAiEhC;AAEA;;AACA,MAAIU,qBAAqB,GAAGhC,UAAU,CAAC,mIAAD,EAAsI,KAAtI,EAA6I,CAAC,CAA9I,EAAiJT,UAAU,GAAC,GAA5J,EAAiK,GAAjK,EAAsK,EAAtK,CAAtC;AACAE,MAAI,CAACQ,UAAL,CAAgB+B,qBAAhB,EArEgC,CAuEhC;;AACA,MAAIC,kBAAkB,GAAGjC,UAAU,CAAC,gBAAD,EAAmB,IAAnB,EAAyB,CAAC,CAA1B,EAA6BT,UAAU,GAAC,GAAxC,EAA6C,GAA7C,EAAkD,EAAlD,CAAnC;AACAE,MAAI,CAACQ,UAAL,CAAgBgC,kBAAhB,EAzEgC,CA2EhC;;AACA,MAAIC,QAAQ,GAAGC,aAAa,CAAC,yBAAD,EAA4B,KAA5B,EAAmC,CAAC,CAApC,EAAuC5C,UAAU,GAAC,GAAlD,EAAuD,GAAvD,EAA4D,EAA5D,CAA5B;AACAE,MAAI,CAACQ,UAAL,CAAgBiC,QAAhB,EA7EgC,CA+EhC;;AACA,MAAIE,kBAAkB,GAAGpC,UAAU,CAAC,gEAAD,EAAmE,KAAnE,EAA0E,CAAC,CAA3E,EAA8ET,UAAU,GAAC,GAAzF,EAA8F,GAA9F,EAAmG,EAAnG,CAAnC;AACAE,MAAI,CAACQ,UAAL,CAAgBmC,kBAAhB,EAjFgC,CAmFhC;;AACA,MAAIC,eAAe,GAAGrC,UAAU,CAAC,uDAAD,EAA0D,IAA1D,EAAgE,CAAC,CAAjE,EAAoET,UAAU,GAAC,GAA/E,EAAoF,GAApF,EAAyF,EAAzF,CAAhC;AACAE,MAAI,CAACQ,UAAL,CAAgBoC,eAAhB,EArFgC,CAwFhC;AAEA;;AACA,MAAIC,aAAa,GAAGnD,KAAK,CAACoD,QAAN,EAApB;;AAEA,MAAGD,aAAa,IAAIE,wBAApB,EAA6C;AAC3C;AACA;AACAhH,WAAO,CAACI,OAAR,CAAgBmC,2CAAhB,CAA4DoB,KAAK,CAACsD,KAAN,GAAc,CAAd,EAAiBC,QAAjB,GAA4B,CAA5B,EAA+BC,KAA/B,EAA5D,EAAoG,YAApG,EAAkHlH,OAAlH,EAA2HL,SAA3H;AACAe,YAAQ,CAACyG,gBAAT,CAA0B,WAA1B,EAAuCzD,KAAK,CAACsD,KAAN,GAAc,CAAd,EAAiBC,QAAjB,GAA4B,CAA5B,EAA+BC,KAA/B,EAAvC;AACAxG,YAAQ,CAACyG,gBAAT,CAA0B,cAA1B,EAA0CzD,KAAK,CAACsD,KAAN,GAAc,CAAd,EAAiBC,QAAjB,GAA4B,CAA5B,EAA+BG,QAA/B,EAA1C;AACA1G,YAAQ,CAACyG,gBAAT,CAA0B,WAA1B,EAAuCzD,KAAK,CAACsD,KAAN,GAAc,CAAd,EAAiBC,QAAjB,GAA4B,EAA5B,EAAgCI,KAAhC,EAAvC;AACA5H,MAAE,CAAC4C,OAAH,CAAW,yBAAX;AACD;AACF;AAEM,SAASiF,aAAT,CAAuBvH,OAAvB,EAAgC;AACrCF,+CAAM,CAACJ,EAAP,CAAU4C,OAAV,CAAkB,oCAAlB;AACA,MAAMkF,MAAM,GAAGxH,OAAO,CAACyH,aAAvB;AACD;AAEM,SAASC,KAAT,CAAe1H,OAAf,EAAwB;AAC7B,MAAI2H,UAAJ;AACAA,YAAU,GAAGC,OAAO,CAACzD,KAAR,GAAgBqB,IAAhB,EAAb;AACAmC,YAAU,CAACE,YAAX,CAAwBC,kBAAkB,GAAGC,+BAA7C,EAH6B,CAI7B;;AACAJ,YAAU,CAACK,kBAAX,CAA8BC,mBAA9B;AACAN,YAAU,CAACO,6BAAX,CAAyC,IAAzC;AACAP,YAAU,CAACQ,gBAAX,CAA4B9D,UAAU,CAAC,CAAD,EAAI,CAAJ,EAAO,GAAP,EAAY,EAAZ,CAAtC,EAAuD,KAAvD;AACAsD,YAAU,CAACS,4BAAX,CAAwC,IAAxC;AACAT,YAAU,CAACU,YAAX,CAAwB,IAAxB;AACAV,YAAU,CAACW,QAAX,CAAoBC,qBAApB,EAV6B,CAY7B;;AACAZ,YAAU,CAACa,MAAX;AACAb,YAAU,CAACc,oBAAX,CAAgCC,GAAhC,EAd6B,CAgB/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAIC,C,CAED;AACA;AACA;;AAEA,SAAS5G,WAAT,CAAqB6G,aAArB,EAAoCC,cAApC,EAAoD3G,KAApD,EAA2DC,IAA3D,EAAiEC,SAAjE,EAA4E0G,MAA5E,EAAoFC,WAApF,EAAiGC,WAAjG,EAA8GnH,eAA9G,EAA+H;AAAE;AAC/H;AACA,MAAIG,WAAW,GAAGlC,QAAQ,CAACkD,cAAT,CAAwB4F,aAAxB,CAAlB;AACA,MAAI3G,YAAY,GAAGnC,QAAQ,CAACkD,cAAT,CAAwB6F,cAAxB,CAAnB;AACA,MAAII,eAAe,GAAGnJ,QAAQ,CAACkD,cAAT,CAAwB+F,WAAxB,CAAtB,CAJ6H,CAM7H;;AACAxF,YAAU,CAACuF,MAAD,CAAV;;AACA,MAAG,CAACE,WAAD,IAAgBC,eAAnB,EAAmC;AAACA,mBAAe,CAACC,MAAhB;AAAyB;;AAC7DxI,oBAAkB,GAAG+C,wBAAwB,CAAC5B,eAAD,CAA7C;;AAEA,MAAGG,WAAW,IAAIC,YAAlB,EAA+B;AAC7B;AACAkH,eAAW,CAACP,aAAD,EAAgBC,cAAhB,EAAgC3G,KAAhC,EAAuCC,IAAvC,EAA6CC,SAA7C,EAAwD4G,WAAxD,CAAX;AACD;AACF;;AAED,SAASG,WAAT,CAAqBP,aAArB,EAAoCC,cAApC,EAAoD3G,KAApD,EAA2DC,IAA3D,EAAiEC,SAAjE,EAA4E4G,WAA5E,EAAyF;AACvF;AACA,MAAII,SAAS,GAAGjH,IAAI,IAAI,IAAR,GAAevB,QAAQ,CAACiF,aAAT,CAAuB,WAAvB,CAAf,GAAqD1D,IAArE;AACA,MAAIkH,cAAc,GAAGjH,SAAS,IAAI,MAAb,GAAsBkH,YAAY,CAACV,aAAD,EAAgBC,cAAhB,CAAlC,GAAoEzG,SAAzF,CAHuF,CAKvF;;AACAmH,eAAa,CAACX,aAAD,EAAgBC,cAAhB,EAAgCQ,cAAhC,CAAb;AACAG,gBAAc,CAACZ,aAAD,EAAgBC,cAAhB,EAAgCQ,cAAhC,CAAd;AAEA,MAAII,kBAAkB,GAAGC,aAAa,CAAC,QAAD,CAAtC,CATuF,CAStC;;AACjD,MAAIC,KAAK,GAAGC,cAAc,CAAChB,aAAD,EAAgBC,cAAhB,EAAgC3G,KAAhC,EAAuCkH,SAAvC,EAAkDC,cAAlD,EAAkEI,kBAAlE,EAAsFT,WAAtF,CAA1B;AAEAa,kBAAgB,CAACF,KAAK,CAACtH,IAAP,EAAaoH,kBAAb,CAAhB;AAEA,MAAIV,WAAW,GAAGY,KAAK,CAACrH,SAAN,IAAmB,IAAnB,IAA2BqH,KAAK,CAACrH,SAAN,CAAgBO,MAAhB,GAAyB,CAApD,GAAwD8G,KAAK,CAACrH,SAAN,CAAgBwH,EAAxE,GAA6E,IAA/F,CAduF,CAgBvF;;AACA,MAAIC,UAAU,GAAG;AACf/H,eAAW,EAAG4G,aADC;AAEf3G,gBAAY,EAAG4G,cAFA;AAGf3G,SAAK,EAAG8H,UAHO;AAIf1H,aAAS,EAAGyG,WAJG;AAKf5G,QAAI,EAAGiH,SALQ;AAMfhH,aAAS,EAAEiH,cANI;AAOfhH,QAAI,EAAGsH,KAAK,CAACtH,IAAN,CAAWT,QAAX,EAPQ,CASjB;;AATiB,GAAjB;AAUAlB,oBAAkB,CAAC0C,IAAnB,CAAwB2G,UAAxB;AACD;;AAED,SAASL,aAAT,CAAuBO,SAAvB,EAAkC;AAChC,MAAIC,YAAY,GAAG,IAAnB,CADgC,CAGhC;;AACA,OAAI,IAAInH,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGxC,kBAAkB,CAAC4J,MAAnB,GAA4B1I,KAA5B,EAAnB,EAAwDsB,CAAC,EAAzD,EAA4D;AAC1D,QAAGxC,kBAAkB,CAAC4J,MAAnB,GAA4BpH,CAA5B,EAA+BqH,IAA/B,MAAyCH,SAA5C,EAAuD;AACrD;AACAC,kBAAY,GAAG3J,kBAAkB,CAAC4J,MAAnB,GAA4BpH,CAA5B,CAAf;AACD;AACF;;AAED,SAAOmH,YAAP;AACD;;AAED,SAASZ,YAAT,CAAsBV,aAAtB,EAAqCC,cAArC,EAAoD;AAAE;AACpD;AACA,MAAM7G,WAAW,GAAGlC,QAAQ,CAACkD,cAAT,CAAwB4F,aAAxB,CAApB;AACA,MAAM3G,YAAY,GAAGnC,QAAQ,CAACkD,cAAT,CAAwB6F,cAAxB,CAArB;AACA,MAAMwB,eAAe,GAAGrI,WAAW,CAACsI,KAAZ,CAAkBC,CAAlB,GAAoBvI,WAAW,CAACsI,KAAZ,CAAkBE,KAAlB,GAAwB,CAApE;AACA,MAAMC,eAAe,GAAGzI,WAAW,CAACsI,KAAZ,CAAkBI,CAAlB,GAAoB1I,WAAW,CAACsI,KAAZ,CAAkBK,MAAlB,GAAyB,CAArE;AACA,MAAMC,gBAAgB,GAAG3I,YAAY,CAACqI,KAAb,CAAmBC,CAAnB,GAAqBtI,YAAY,CAACqI,KAAb,CAAmBE,KAAnB,GAAyB,CAAvE;AACA,MAAMK,gBAAgB,GAAG5I,YAAY,CAACqI,KAAb,CAAmBI,CAAnB,GAAqBzI,YAAY,CAACqI,KAAb,CAAmBK,MAAnB,GAA0B,CAAxE;AAEA,MAAMG,KAAK,GAAGT,eAAe,GAAGO,gBAAhC;AACA,MAAMG,KAAK,GAAGN,eAAe,GAAGI,gBAAhC;AACA,MAAMG,QAAQ,GAAGC,IAAI,CAACC,GAAL,CAASJ,KAAT,CAAjB;AACA,MAAMK,QAAQ,GAAGF,IAAI,CAACC,GAAL,CAASH,KAAT,CAAjB;AACA,MAAI3I,SAAJ;;AAEA,MAAGwI,gBAAgB,GAAGP,eAAtB,EAAsC;AACpC;AACA,QAAGQ,gBAAgB,GAAGJ,eAAtB,EAAsC;AACpC;AACArI,eAAS,GAAG0I,KAAK,GAAGC,KAAR,GAAgB,MAAhB,GAAyB,OAArC;AACD,KAHD,MAGO;AACL;AACA3I,eAAS,GAAG4I,QAAQ,GAAGG,QAAX,GAAsB,OAAtB,GAAgC,IAA5C;AACD;AACF,GATD,MASO;AACL;AACA,QAAGN,gBAAgB,GAAGJ,eAAtB,EAAsC;AACpC;AACArI,eAAS,GAAG4I,QAAQ,GAAGG,QAAX,GAAsB,MAAtB,GAA+B,MAA3C;AACD,KAHD,MAGO;AACL;AACA/I,eAAS,GAAG0I,KAAK,GAAGC,KAAR,GAAgB,MAAhB,GAAyB,IAArC;AACD;AACF;;AAED,SAAO3I,SAAP;AACD;;AAED,SAASwH,cAAT,CAAwBhB,aAAxB,EAAuCC,cAAvC,EAAuD3G,KAAvD,EAA8DC,IAA9D,EAAoEC,SAApE,EAA+E8H,YAA/E,EAA6F5H,SAA7F,EAAuG;AACrG,MAAI8I,cAAJ,EAAoBC,cAApB,EAAoCC,eAApC,EAAqDC,eAArD,EAAsEC,UAAtE,EAAkFC,UAAlF,EAA8FX,KAA9F,EAAqGC,KAArG;AACA,MAAIhB,UAAU,GAAG;AAAC1H,QAAI,EAAE,EAAP;AAAWC,aAAS,EAAE;AAAtB,GAAjB;AACA,MAAIN,WAAW,GAAGlC,QAAQ,CAACkD,cAAT,CAAwB4F,aAAxB,CAAlB;AACA,MAAI3G,YAAY,GAAGnC,QAAQ,CAACkD,cAAT,CAAwB6F,cAAxB,CAAnB;AAGA,MAAI6C,iBAAiB,GAAG1J,WAAW,CAACsI,KAAZ,CAAkBqB,WAAlB,CAA8B;AAACC,QAAI,EAAE5J,WAAW,CAAC6J,MAAnB;AAA2BC,MAAE,EAAEvL;AAA/B,GAA9B,CAAxB;AACA,MAAIwL,kBAAkB,GAAG9J,YAAY,CAACqI,KAAb,CAAmBqB,WAAnB,CAA+B;AAACC,QAAI,EAAE3J,YAAY,CAAC4J,MAApB;AAA4BC,MAAE,EAAEvL;AAAhC,GAA/B,CAAzB;;AAEA,MAAG2J,YAAH,EAAgB;AACd;AACAY,SAAK,GAAGZ,YAAY,CAACI,KAAb,GAAqBC,CAArB,EAAR;AACAQ,SAAK,GAAGb,YAAY,CAACI,KAAb,GAAqBI,CAArB,EAAR;AACD,GAJD,MAIO;AACLI,SAAK,GAAG,CAAR;AACAC,SAAK,GAAG,CAAR;AACD,GAjBoG,CAmBrG;;;AACA,MAAIiB,IAAI,GAAGC,YAAY,CAACC,UAAb,EAAX,CApBqG,CAsBrG;;AACA,MAAG9J,SAAS,IAAI,IAAhB,EAAqB;AACnB;AACAgJ,kBAAc,GAAGM,iBAAiB,CAACnB,CAAlB,GAAoBmB,iBAAiB,CAAClB,KAAlB,GAAwB,CAA5C,GAA8CM,KAA/D;AACAO,kBAAc,GAAGK,iBAAiB,CAAChB,CAAlB,GAAoBK,KAArC,CAHmB,CAKnB;;AACAO,mBAAe,GAAGS,kBAAkB,CAACxB,CAAnB,GAAqBwB,kBAAkB,CAACvB,KAAnB,GAAyB,CAA9C,GAAgDM,KAAlE;AACAS,mBAAe,GAAGQ,kBAAkB,CAACrB,CAAnB,GAAqBqB,kBAAkB,CAACpB,MAAxC,GAA+CI,KAAjE,CAPmB,CASnB;;AACAS,cAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD;AACAG,cAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD;AACD;;AAED,MAAGnJ,SAAS,IAAI,OAAhB,EAAwB;AACtB;AACAgJ,kBAAc,GAAGM,iBAAiB,CAACnB,CAAlB,GAAoBmB,iBAAiB,CAAClB,KAAtC,GAA4CM,KAA7D;AACAO,kBAAc,GAAGK,iBAAiB,CAAChB,CAAlB,GAAoBgB,iBAAiB,CAACf,MAAlB,GAAyB,CAA7C,GAA+CI,KAAhE,CAHsB,CAKtB;;AACAO,mBAAe,GAAGS,kBAAkB,CAACxB,CAAnB,GAAqBO,KAAvC;AACAS,mBAAe,GAAGQ,kBAAkB,CAACrB,CAAnB,GAAqBqB,kBAAkB,CAACpB,MAAnB,GAA0B,CAA/C,GAAiDI,KAAnE,CAPsB,CAStB;;AACAS,cAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD;AACAG,cAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD;AACD;;AAED,MAAGnJ,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACAgJ,kBAAc,GAAGM,iBAAiB,CAACnB,CAAlB,GAAoBmB,iBAAiB,CAAClB,KAAlB,GAAwB,CAA5C,GAA8CM,KAA/D;AACAO,kBAAc,GAAGK,iBAAiB,CAAChB,CAAlB,GAAoBgB,iBAAiB,CAACf,MAAtC,GAA6CI,KAA9D,CAHqB,CAKrB;;AACAO,mBAAe,GAAGS,kBAAkB,CAACxB,CAAnB,GAAqBwB,kBAAkB,CAACvB,KAAnB,GAAyB,CAA9C,GAAgDM,KAAlE;AACAS,mBAAe,GAAGQ,kBAAkB,CAACrB,CAAnB,GAAqBK,KAAvC,CAPqB,CASrB;;AACAS,cAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD;AACAG,cAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD;AACD;;AAED,MAAGnJ,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACAgJ,kBAAc,GAAGM,iBAAiB,CAACnB,CAAlB,GAAoBO,KAArC;AACAO,kBAAc,GAAGK,iBAAiB,CAAChB,CAAlB,GAAoBgB,iBAAiB,CAACf,MAAlB,GAAyB,CAA7C,GAA+CI,KAAhE,CAHqB,CAKrB;;AACAO,mBAAe,GAAGS,kBAAkB,CAACxB,CAAnB,GAAqBwB,kBAAkB,CAACvB,KAAxC,GAA8CM,KAAhE;AACAS,mBAAe,GAAGQ,kBAAkB,CAACrB,CAAnB,GAAqBqB,kBAAkB,CAACpB,MAAnB,GAA0B,CAA/C,GAAiDI,KAAnE,CAPqB,CASrB;;AACAS,cAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD;AACAG,cAAU,GAAG,CAACJ,cAAc,GAAGE,eAAlB,IAAmC,CAAhD;AACD;;AAED,MAAGpJ,IAAI,IAAI,QAAR,IAAoBA,IAAI,IAAI,IAA/B,EAAoC;AAClC;AAEA,QAAGC,SAAS,IAAI,IAAhB,EAAqB;AACnB;AACA4J,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAAChB,cAAD,EAAgBK,UAAhB,CAA5B;AACAO,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBG,UAAjB,CAA5B;AACAO,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B;AACD;;AAED,QAAGnJ,SAAS,IAAI,OAAhB,EAAwB;AACtB;AACA4J,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACZ,UAAD,EAAYH,cAAZ,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACZ,UAAD,EAAYD,eAAZ,CAA5B;AACAS,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B;AACD;;AAED,QAAGnJ,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACA4J,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAAChB,cAAD,EAAgBK,UAAhB,CAA5B;AACAO,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBG,UAAjB,CAA5B;AACAO,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B;AACD;;AAED,QAAGnJ,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACA4J,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACZ,UAAD,EAAYH,cAAZ,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACZ,UAAD,EAAYD,eAAZ,CAA5B;AACAS,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B;AACD,KAjCiC,CAmClC;;;AACAxB,cAAU,CAAC1H,IAAX,GAAkBiK,YAAY,CAACC,aAAb,CAA2BC,MAAM,CAACC,kBAAP,CAA0BT,IAA1B,CAA3B,CAAlB,CApCkC,CAuClC;;AACA,QAAIU,MAAM,GAAG3C,UAAU,CAAC1H,IAAX,CAAgB8H,MAAhB,GAAyBnI,WAAzB,GAAuC0K,MAAvC,EAAb;AACAA,UAAM,CAAC,CAAD,CAAN,CAAUC,YAAV,GAAyB,EAAzB;AACAD,UAAM,CAAC,CAAD,CAAN,CAAUC,YAAV,GAAyB,EAAzB,CA1CkC,CA4ClC;;AACA5C,cAAU,CAAC1H,IAAX,CAAgBuK,OAAhB,CAAwB,OAAxB;AACD;;AAED,MAAGzK,IAAI,IAAI,UAAX,EAAsB;AACpB;AACA,QAAGC,SAAS,IAAI,IAAhB,EAAqB;AACnB;AACA4J,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B;AACD;;AAED,QAAGnJ,SAAS,IAAI,OAAhB,EAAwB;AACtB;AACA4J,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B;AACD;;AAED,QAAGnJ,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACA4J,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B;AACD;;AAED,QAAGnJ,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACA4J,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B;AACD,KAxBmB,CA0BpB;;;AACAxB,cAAU,CAAC1H,IAAX,GAAkBiK,YAAY,CAACC,aAAb,CAA2BC,MAAM,CAACC,kBAAP,CAA0BT,IAA1B,CAA3B,CAAlB,CA3BoB,CA6BpB;;AACAjC,cAAU,CAAC1H,IAAX,CAAgBuK,OAAhB,CAAwB,OAAxB;AACD;;AAED,MAAGzK,IAAI,IAAI,QAAX,EAAoB;AAClB,QAAGC,SAAS,IAAI,IAAhB,EAAqB;AACnB;AACA4J,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B,EAHmB,CAKnB;;AACAxB,gBAAU,CAAC1H,IAAX,GAAkBiK,YAAY,CAACC,aAAb,CAA2BC,MAAM,CAACC,kBAAP,CAA0BT,IAA1B,CAA3B,CAAlB;;AACA,UAAIU,OAAM,GAAG3C,UAAU,CAAC1H,IAAX,CAAgB8H,MAAhB,GAAyBnI,WAAzB,GAAuC0K,MAAvC,EAAb;;AAEAA,aAAM,CAAC,CAAD,CAAN,CAAUG,SAAV,GAAsBH,OAAM,CAAC,CAAD,CAAN,CAAUG,SAAV,GAAsB,CAA5C;AACAH,aAAM,CAAC,CAAD,CAAN,CAAUI,YAAV,GAAyBJ,OAAM,CAAC,CAAD,CAAN,CAAUK,UAAV,GAAuB,IAAhD;;AAEA,UAAG3B,cAAc,GAACE,eAAlB,EAAkC;AAChCoB,eAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAOG,WAAC,EAAE;AAAV,SAAtB;AACAgC,eAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAC,GAAL;AAASG,WAAC,EAAC;AAAX,SAApB;AAEAgC,eAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAAtB;AACAgC,eAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAApB;AACD,OAND,MAMO;AACLgC,eAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAOG,WAAC,EAAE;AAAV,SAAtB;AACAgC,eAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAC,GAAL;AAASG,WAAC,EAAC;AAAX,SAApB;AAEAgC,eAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAAtB;AACAgC,eAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAApB;AACD;AACF;;AAED,QAAGtI,SAAS,IAAI,OAAhB,EAAwB;AACtB;AACA4J,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B,EAHsB,CAKtB;;AACAxB,gBAAU,CAAC1H,IAAX,GAAkBiK,YAAY,CAACC,aAAb,CAA2BC,MAAM,CAACC,kBAAP,CAA0BT,IAA1B,CAA3B,CAAlB;;AACA,UAAIU,QAAM,GAAG3C,UAAU,CAAC1H,IAAX,CAAgB8H,MAAhB,GAAyBnI,WAAzB,GAAuC0K,MAAvC,EAAb;;AAEAA,cAAM,CAAC,CAAD,CAAN,CAAUG,SAAV,GAAsBH,QAAM,CAAC,CAAD,CAAN,CAAUG,SAAV,GAAsB,CAA5C;AACAH,cAAM,CAAC,CAAD,CAAN,CAAUI,YAAV,GAAyBJ,QAAM,CAAC,CAAD,CAAN,CAAUK,UAAV,GAAuB,IAAhD;;AAEA,UAAG1B,cAAc,GAACE,eAAlB,EAAkC;AAChCmB,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,GAAJ;AAASG,WAAC,EAAE;AAAZ,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAC,GAAL;AAASG,WAAC,EAAC;AAAX,SAApB;AAEAgC,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,GAAJ;AAAQG,WAAC,EAAE;AAAX,SAApB;AACD,OAND,MAMO;AACLgC,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,GAAJ;AAASG,WAAC,EAAE;AAAZ,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAC,GAAL;AAASG,WAAC,EAAC;AAAX,SAApB;AAEAgC,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,GAAJ;AAAQG,WAAC,EAAE;AAAX,SAApB;AACD;AACF;;AAED,QAAGtI,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACA4J,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B,EAHqB,CAKrB;;AACAxB,gBAAU,CAAC1H,IAAX,GAAkBiK,YAAY,CAACC,aAAb,CAA2BC,MAAM,CAACC,kBAAP,CAA0BT,IAA1B,CAA3B,CAAlB;;AACA,UAAIU,QAAM,GAAG3C,UAAU,CAAC1H,IAAX,CAAgB8H,MAAhB,GAAyBnI,WAAzB,GAAuC0K,MAAvC,EAAb;;AAEAA,cAAM,CAAC,CAAD,CAAN,CAAUG,SAAV,GAAsBH,QAAM,CAAC,CAAD,CAAN,CAAUG,SAAV,GAAsB,CAA5C;AACAH,cAAM,CAAC,CAAD,CAAN,CAAUI,YAAV,GAAyBJ,QAAM,CAAC,CAAD,CAAN,CAAUK,UAAV,GAAuB,IAAhD;;AAEA,UAAG3B,cAAc,GAACE,eAAlB,EAAkC;AAChCoB,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAOG,WAAC,EAAE;AAAV,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAC,GAAL;AAASG,WAAC,EAAC;AAAX,SAApB;AAEAgC,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAApB;AACD,OAND,MAMO;AACLgC,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAOG,WAAC,EAAE;AAAV,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAC,GAAL;AAASG,WAAC,EAAC;AAAX,SAApB;AAEAgC,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAApB;AACD;AACF;;AAED,QAAGtI,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACA4J,UAAI,CAACG,WAAL,CAAiBC,WAAW,CAAChB,cAAD,EAAgBC,cAAhB,CAA5B;AACAW,UAAI,CAACK,WAAL,CAAiBD,WAAW,CAACd,eAAD,EAAiBC,eAAjB,CAA5B,EAHqB,CAKrB;;AACAxB,gBAAU,CAAC1H,IAAX,GAAkBiK,YAAY,CAACC,aAAb,CAA2BC,MAAM,CAACC,kBAAP,CAA0BT,IAA1B,CAA3B,CAAlB;;AACA,UAAIU,QAAM,GAAG3C,UAAU,CAAC1H,IAAX,CAAgB8H,MAAhB,GAAyBnI,WAAzB,GAAuC0K,MAAvC,EAAb;;AAEAA,cAAM,CAAC,CAAD,CAAN,CAAUG,SAAV,GAAsBH,QAAM,CAAC,CAAD,CAAN,CAAUG,SAAV,GAAsB,CAA5C;AACAH,cAAM,CAAC,CAAD,CAAN,CAAUI,YAAV,GAAyBJ,QAAM,CAAC,CAAD,CAAN,CAAUK,UAAV,GAAuB,IAAhD;;AAEA,UAAG1B,cAAc,GAACE,eAAlB,EAAkC;AAChCmB,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,GAAJ;AAASG,WAAC,EAAE;AAAZ,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAC,GAAL;AAASG,WAAC,EAAC;AAAX,SAApB;AAEAgC,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,GAAJ;AAAQG,WAAC,EAAE;AAAX,SAApB;AACD,OAND,MAMO;AACLgC,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,GAAJ;AAASG,WAAC,EAAE;AAAZ,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,CAAC,GAAL;AAASG,WAAC,EAAC;AAAX,SAApB;AAEAgC,gBAAM,CAAC,CAAD,CAAN,CAAUM,SAAV,GAAsB;AAACzC,WAAC,EAAE,CAAJ;AAAMG,WAAC,EAAE;AAAT,SAAtB;AACAgC,gBAAM,CAAC,CAAD,CAAN,CAAUO,OAAV,GAAoB;AAAC1C,WAAC,EAAE,GAAJ;AAAQG,WAAC,EAAE;AAAX,SAApB;AACD;AACF,KA3GiB,CA6GlB;;;AACAX,cAAU,CAAC1H,IAAX,CAAgBuK,OAAhB,CAAwB,QAAxB;AACD;;AAED,MAAGtK,SAAS,IAAI,KAAhB,EAAsB;AACpByH,cAAU,CAACzH,SAAX,GAAuB4K,YAAY,CAAC,MAAD,EAAS1B,UAAT,EAAqBC,UAArB,CAAnC;AACD;;AAKD,MAAGvJ,KAAK,IAAI,IAAZ,EAAiB;AACf8H,cAAU,GAAGmD,cAAc,CAACjL,KAAD,CAAd,IAAyB,IAAzB,IAAiCA,KAAK,IAAI,eAA1C,GAA4DA,KAA5D,GAAoE,eAAjF;AACD,GAFD,MAEO;AACL;AACA8H,cAAU,GAAG/J,OAAO,CAACI,OAAR,CAAgBC,uCAAhB,CAAwD,YAAxD,EAAsEJ,OAAtE,EAA+EL,SAA/E,IAA4FI,OAAO,CAACI,OAAR,CAAgBC,uCAAhB,CAAwD,YAAxD,EAAsEJ,OAAtE,EAA+EL,SAA/E,CAA5F,GAAwL,eAArM;AACD;;AAGD,MAAGqC,KAAK,IAAI,IAAZ,EAAiB;AACf;AACA,QAAGjC,OAAO,CAACI,OAAR,CAAgBC,uCAAhB,CAAwD,YAAxD,EAAsEJ,OAAtE,EAA+EL,SAA/E,CAAH,EAA6F;AAE3F;AACA;AACA,UAAIqC,MAAK,GAAGiL,cAAc,CAAClN,OAAO,CAACI,OAAR,CAAgBC,uCAAhB,CAAwD,YAAxD,EAAsEJ,OAAtE,EAA+EL,SAA/E,CAAD,CAA1B;;AACA,UAAGqC,MAAK,CAAC,CAAD,CAAL,IAAY,IAAf,EAAoB;AAClB;AACA,YAAIkL,MAAM,GAAGrD,UAAU,CAAC1H,IAAX,CAAgBH,KAAhB,GAAwBmL,kBAAxB,CAA2C,CAA3C,CAAb;AACAD,cAAM,CAACE,KAAP,GAAeC,OAAO,CAACC,uBAAR,CAAgC;AAACC,WAAC,EAAE,IAAJ;AAAU9L,WAAC,EAAE,IAAb;AAAmB+L,WAAC,EAAE,IAAtB;AAA4BC,WAAC,EAAE;AAA/B,SAAhC,CAAf;AACAP,cAAM,CAACQ,SAAP,GAAmB,CAAnB;AACA7D,kBAAU,CAAC1H,IAAX,CAAgBH,KAAhB,GAAwB2L,aAAxB,GAAwC,CAAxC;AACD,OAND,MAMO;AACL9D,kBAAU,CAAC1H,IAAX,CAAgByL,WAAhB,GAA8B5L,MAAK,CAAC,CAAD,CAAnC;AACD;AACF,KAdD,MAcO;AACL;AACA,UAAIkL,OAAM,GAAGrD,UAAU,CAAC1H,IAAX,CAAgBH,KAAhB,GAAwBmL,kBAAxB,CAA2C,CAA3C,CAAb;;AACAD,aAAM,CAACE,KAAP,GAAeC,OAAO,CAACC,uBAAR,CAAgC;AAACC,SAAC,EAAE,IAAJ;AAAU9L,SAAC,EAAE,IAAb;AAAmB+L,SAAC,EAAE,IAAtB;AAA4BC,SAAC,EAAE;AAA/B,OAAhC,CAAf;AACAP,aAAM,CAACQ,SAAP,GAAmB,CAAnB;AACA7D,gBAAU,CAAC1H,IAAX,CAAgBH,KAAhB,GAAwB2L,aAAxB,GAAwC,CAAxC;AACD;AACF,GAvBD,MAuBO;AACL;AACA,QAAG3L,KAAK,IAAI,eAAZ,EAA4B;AAC1B;AACA,UAAIkL,QAAM,GAAGrD,UAAU,CAAC1H,IAAX,CAAgBH,KAAhB,GAAwBmL,kBAAxB,CAA2C,CAA3C,CAAb;;AACAD,cAAM,CAACE,KAAP,GAAeC,OAAO,CAACC,uBAAR,CAAgC;AAACC,SAAC,EAAE,IAAJ;AAAU9L,SAAC,EAAE,IAAb;AAAmB+L,SAAC,EAAE,IAAtB;AAA4BC,SAAC,EAAE;AAA/B,OAAhC,CAAf;AACAP,cAAM,CAACQ,SAAP,GAAmB,CAAnB;AACA7D,gBAAU,CAAC1H,IAAX,CAAgBH,KAAhB,GAAwB2L,aAAxB,GAAwC,CAAxC;AACD,KAND,MAMO;AACL;AACA,UAAIE,QAAQ,GAAGZ,cAAc,CAACjL,KAAD,CAA7B;AACA6H,gBAAU,CAAC1H,IAAX,CAAgByL,WAAhB,GAA8BC,QAAQ,CAAC,CAAD,CAAtC;AACD;AACF;;AAED,SAAOhE,UAAP;AACD;;AAED,SAASF,gBAAT,CAA0BxH,IAA1B,EAAgC6H,YAAhC,EAA6C;AAC3C,MAAGA,YAAH,EAAgB;AACdA,gBAAY,CAAC8D,SAAb,CAAuB,CAAC3L,IAAD,CAAvB;AACA6H,gBAAY,CAAC+D,sBAAb,CAAoC,CAApC;AACD,GAHD,MAGO;AACL;AACA,QAAIC,KAAK,GAAGtO,mBAAO,CAAC,8BAAD,CAAP,CAAsBsO,KAAlC;;AACA,QAAIC,KAAK,GAAG,IAAID,KAAJ,CAAU;AACpBrC,YAAM,EAAEtL,kBADY;AAEpB6J,UAAI,EAAE,QAFc;AAGpBgE,YAAM,EAAE,IAHY;AAIpBjE,YAAM,EAAE,CAAC9H,IAAD;AAJY,KAAV,CAAZ,CAHK,CASL;;AACA8L,SAAK,CAACE,UAAN;AACAnE,gBAAY,GAAGR,aAAa,CAAC,QAAD,CAA5B;AACAQ,gBAAY,CAAC+D,sBAAb,CAAoC,CAApC;AACD;AACF;;AAED,SAAStN,kBAAT,GAA6B;AAAE;AAC7B,MAAI2N,SAAS,GAAG,EAAhB;;AAEA,MAAGlO,UAAH,EAAc;AACZ,SAAK,IAAI2C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG3C,UAAU,CAACyC,MAA/B,EAAuCE,CAAC,EAAxC,EAA6C;AAC3CuL,eAAS,CAAClL,IAAV,CAAehD,UAAU,CAAC2C,CAAD,CAAzB;AACD;AACF;;AACD,SAAOuL,SAAP;AACD;;AAED,SAASxM,kBAAT,CAA4B8G,aAA5B,EAA2CC,cAA3C,EAA2D0F,IAA3D,EAAgE;AAC9D,MAAIC,WAAW,GAAG,IAAlB;AACA5F,eAAa,GAAGhD,MAAM,CAACgD,aAAD,CAAtB;AACAC,gBAAc,GAAGjD,MAAM,CAACiD,cAAD,CAAvB;;AAEA,MAAGzI,UAAH,EAAc;AACZ;AAEA,SAAI,IAAIsK,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAG6D,IAAI,CAAC1L,MAAxB,EAAgC6H,CAAC,EAAjC,EAAoC;AAElC,UAAG9B,aAAa,IAAI2F,IAAI,CAAC7D,CAAD,CAAJ,CAAQ1I,WAAzB,IAAwC4G,aAAa,IAAI2F,IAAI,CAAC7D,CAAD,CAAJ,CAAQzI,YAApE,EAAiF;AAC/E;AACA,YAAG4G,cAAc,IAAI0F,IAAI,CAAC7D,CAAD,CAAJ,CAAQ1I,WAA1B,IAAyC6G,cAAc,IAAI0F,IAAI,CAAC7D,CAAD,CAAJ,CAAQzI,YAAtE,EAAmF;AACjF;AACAuM,qBAAW,GAAG9D,CAAd;AACD;AACF;AACF;AACF;;AACD,SAAO8D,WAAP;AACD;;AAED,SAASC,yBAAT,CAAmCC,mBAAnC,EAAuD;AACrD,MAAIC,gBAAgB,GAAG,MAAvB;;AAEA,MAAG/N,QAAQ,CAACiF,aAAT,CAAuB,gBAAvB,CAAH,EAA4C;AAC1C;AACA8I,oBAAgB,GAAG/N,QAAQ,CAACiF,aAAT,CAAuB,gBAAvB,CAAnB;;AAEA,QAAG8I,gBAAgB,IAAI,MAAvB,EAA8B;AAC5BD,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,OAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,IAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACD;;AAED,QAAGH,gBAAgB,IAAI,OAAvB,EAA+B;AAC7BD,yBAAmB,CAACE,gBAApB,CAAqC,OAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,IAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACD;;AAED,QAAGH,gBAAgB,IAAI,MAAvB,EAA8B;AAC5BD,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,IAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,OAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACD;;AAED,QAAGH,gBAAgB,IAAI,MAAvB,EAA8B;AAC5BD,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,IAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,OAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACD;;AAED,QAAGH,gBAAgB,IAAI,IAAvB,EAA4B;AAC1BD,yBAAmB,CAACE,gBAApB,CAAqC,IAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,OAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACAJ,yBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,yBAAmB,CAACG,QAApB,GAA+BC,QAA/B,CAAwC,CAAxC;AACD;AAEF,GArED,MAqEO;AACL;AACAJ,uBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,uBAAmB,CAACE,gBAApB,CAAqC,OAArC;AACAF,uBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,uBAAmB,CAACE,gBAApB,CAAqC,MAArC;AACAF,uBAAmB,CAACE,gBAApB,CAAqC,IAArC;AACD;AACF;;AAED,SAAS/J,qBAAT,CAA+BF,iBAA/B,EAAiD;AAC/C,MAAIoK,WAAW,GAAG9O,OAAO,CAACI,OAAR,CAAgBC,uCAAhB,CAAwD,YAAxD,EAAsEJ,OAAtE,EAA+EL,SAA/E,CAAlB;AACA,MAAImP,MAAM,GAAG7B,cAAc,CAAC,IAAD,CAA3B;;AAEA,MAAG4B,WAAH,EAAe;AACb;AAEA,QAAGA,WAAW,IAAI,eAAlB,EAAmC;AACjC;AACApK,uBAAiB,CAACiK,gBAAlB,CAAmCG,WAAnC;AACApK,uBAAiB,CAACiK,gBAAlB,CAAmC,eAAnC;;AACA,WAAI,IAAI7L,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGiM,MAAM,CAACnM,MAA1B,EAAkCE,CAAC,EAAnC,EAAsC;AACpC,YAAGiM,MAAM,CAACjM,CAAD,CAAN,CAAUqH,IAAV,MAAoB2E,WAAvB,EAAmC;AACjCpK,2BAAiB,CAACiK,gBAAlB,CAAmCI,MAAM,CAACjM,CAAD,CAAN,CAAUqH,IAAV,EAAnC;AACD;AACF;AAEF,KAVD,MAUO;AACL;AACAzF,uBAAiB,CAACiK,gBAAlB,CAAmC,eAAnC;;AACA,WAAI,IAAI7L,EAAC,GAAG,CAAZ,EAAeA,EAAC,GAAGiM,MAAM,CAACnM,MAA1B,EAAkCE,EAAC,EAAnC,EAAsC;AACpC4B,yBAAiB,CAACiK,gBAAlB,CAAmCI,MAAM,CAACjM,EAAD,CAAN,CAAUqH,IAAV,EAAnC;AACD;AACF;AACF,GApBD,MAoBO;AACLzF,qBAAiB,CAACiK,gBAAlB,CAAmC,eAAnC;;AACA,SAAI,IAAI7L,GAAC,GAAG,CAAZ,EAAeA,GAAC,GAAGiM,MAAM,CAACnM,MAA1B,EAAkCE,GAAC,EAAnC,EAAsC;AACpC4B,uBAAiB,CAACiK,gBAAlB,CAAmCI,MAAM,CAACjM,GAAD,CAAN,CAAUqH,IAAV,EAAnC;AACD;AACF;AACF;;AAED,SAASnF,oBAAT,CAA8BD,cAA9B,EAA6C;AAC3C,MAAIiK,eAAe,GAAGrO,QAAQ,CAACiF,aAAT,CAAuB,WAAvB,CAAtB;;AAGA,MAAGoJ,eAAH,EAAmB;AACjB;AAEA,QAAGA,eAAe,IAAI,QAAtB,EAA+B;AAC7BjK,oBAAc,CAAC4J,gBAAf,CAAgC,QAAhC;AACA5J,oBAAc,CAAC6J,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACA9J,oBAAc,CAAC4J,gBAAf,CAAgC,QAAhC;AACA5J,oBAAc,CAAC6J,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACA9J,oBAAc,CAAC4J,gBAAf,CAAgC,UAAhC;AACA5J,oBAAc,CAAC6J,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACD;;AAED,QAAGG,eAAe,IAAI,QAAtB,EAA+B;AAC7BjK,oBAAc,CAAC4J,gBAAf,CAAgC,QAAhC;AACA5J,oBAAc,CAAC6J,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACA9J,oBAAc,CAAC4J,gBAAf,CAAgC,UAAhC;AACA5J,oBAAc,CAAC6J,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACA9J,oBAAc,CAAC4J,gBAAf,CAAgC,QAAhC;AACA5J,oBAAc,CAAC6J,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACD;;AAED,QAAGG,eAAe,IAAI,UAAtB,EAAiC;AAC/BjK,oBAAc,CAAC4J,gBAAf,CAAgC,UAAhC;AACA5J,oBAAc,CAAC6J,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACA9J,oBAAc,CAAC4J,gBAAf,CAAgC,QAAhC;AACA5J,oBAAc,CAAC6J,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACA9J,oBAAc,CAAC4J,gBAAf,CAAgC,QAAhC;AACA5J,oBAAc,CAAC6J,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACD;AACF,GA7BD,MA6BO;AACL;AACA9J,kBAAc,CAAC4J,gBAAf,CAAgC,QAAhC;AACA5J,kBAAc,CAAC4J,gBAAf,CAAgC,QAAhC;AACA5J,kBAAc,CAAC4J,gBAAf,CAAgC,UAAhC;AACD;AAEF;;AAED,SAASnL,wBAAT,CAAkC5B,eAAlC,EAAkD;AAAE;AAClD,MAAIqN,cAAc,GAAG,EAArB;;AACA,MAAG9O,UAAH,EAAc;AACZ;AACA,QAAIsC,WAAW,GAAGtC,UAAlB;;AAEA,SAAK,IAAI2C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGL,WAAW,CAACG,MAAhC,EAAwCE,CAAC,EAAzC,EAA8C;AAC5C;AACA,UAAGA,CAAC,IAAIlB,eAAR,EAAwB;AACtBqN,sBAAc,CAAC9L,IAAf,CAAoBV,WAAW,CAACK,CAAD,CAA/B;AACD;AACF;AACF;;AACD,SAAOmM,cAAP;AACD;;AAED,SAASC,aAAT,CAAuBhB,KAAvB,EAA6B;AAAE;AAC7B,OAAI,IAAIpL,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGoL,KAAK,CAAChE,MAAN,GAAetH,MAAlC,EAA0CE,CAAC,EAA3C,EAA8C,CAC5C;AACD;AACF;;AAED,SAASQ,UAAT,CAAoBuF,MAApB,EAA2B;AAAE;AAC3B,MAAIsG,UAAU,GAAGtP,QAAQ,CAACkD,cAAT,CAAwB8F,MAAxB,CAAjB;AACA,MAAIuG,aAAJ;;AACA,MAAGD,UAAH,EAAc;AACZC,iBAAa,GAAGD,UAAU,CAACvD,MAA3B;AACAuD,cAAU,CAAClG,MAAX;;AACA,QAAGmG,aAAa,CAAClF,MAAd,CAAqBtH,MAArB,IAA+B,CAAlC,EAAoC;AAClCwM,mBAAa,CAACnG,MAAd;AACD;AACF;AACF;;AAED,SAASK,aAAT,CAAuB+F,cAAvB,EAAuCC,aAAvC,EAAsDnN,SAAtD,EAAgE;AAC9D,MAAIoN,YAAY,GAAG1P,QAAQ,CAACkD,cAAT,CAAwBsM,cAAxB,CAAnB;AACA,MAAIG,WAAW,GAAG3P,QAAQ,CAACkD,cAAT,CAAwBuM,aAAxB,CAAlB;;AAEA,MAAG3O,QAAQ,CAACiF,aAAT,CAAuB,cAAvB,KAA0CjF,QAAQ,CAACiF,aAAT,CAAuB,cAAvB,KAA0C,CAAvF,EAAyF;AACvF,QAAI6J,cAAc,GAAG9O,QAAQ,CAACiF,aAAT,CAAuB,cAAvB,CAArB;;AAEA,QAAGzD,SAAS,IAAI,OAAhB,EAAwB;AACtBqN,iBAAW,CAACnF,KAAZ,CAAkBC,CAAlB,GAAsBiF,YAAY,CAAClF,KAAb,CAAmBC,CAAnB,GAAuBiF,YAAY,CAAClF,KAAb,CAAmBE,KAA1C,GAAkDkF,cAAxE;AACD;;AAED,QAAGtN,SAAS,IAAI,MAAhB,EAAuB;AACrBqN,iBAAW,CAACnF,KAAZ,CAAkBI,CAAlB,GAAsB8E,YAAY,CAAClF,KAAb,CAAmBI,CAAnB,GAAuB8E,YAAY,CAAClF,KAAb,CAAmBK,MAA1C,GAAmD+E,cAAzE;AACD;;AAED,QAAGtN,SAAS,IAAI,MAAhB,EAAuB;AACrBqN,iBAAW,CAACnF,KAAZ,CAAkBC,CAAlB,GAAsBiF,YAAY,CAAClF,KAAb,CAAmBC,CAAnB,GAAuBkF,WAAW,CAACnF,KAAZ,CAAkBE,KAAzC,GAAiDkF,cAAvE;AACD;;AAED,QAAGtN,SAAS,IAAI,IAAhB,EAAqB;AACnBqN,iBAAW,CAACnF,KAAZ,CAAkBI,CAAlB,GAAsB8E,YAAY,CAAClF,KAAb,CAAmBI,CAAnB,GAAuB+E,WAAW,CAACnF,KAAZ,CAAkBK,MAAzC,GAAkD+E,cAAxE;AACD;AACF;AACF;;AAED,SAASlG,cAAT,CAAwB8F,cAAxB,EAAwCC,aAAxC,EAAuDnN,SAAvD,EAAiE;AAC/D,MAAIoN,YAAY,GAAG1P,QAAQ,CAACkD,cAAT,CAAwBsM,cAAxB,CAAnB;AACA,MAAIG,WAAW,GAAG3P,QAAQ,CAACkD,cAAT,CAAwBuM,aAAxB,CAAlB;AACA,MAAII,UAAJ,EAAgBC,SAAhB,EAA2BC,UAA3B,EAAuCC,SAAvC,EAAkDC,IAAlD;;AAEA,MAAGnP,QAAQ,CAACiF,aAAT,CAAuB,WAAvB,CAAH,EAAuC;AACrC,QAAGjF,QAAQ,CAACiF,aAAT,CAAuB,WAAvB,KAAuC,IAA1C,EAA+C;AAC7C;AAEA,UAAGzD,SAAS,IAAI,OAAb,IAAwBA,SAAS,IAAI,MAAxC,EAA+C;AAC7CuN,kBAAU,GAAGH,YAAY,CAAClF,KAAb,CAAmBI,CAAnB,GAAuB8E,YAAY,CAAClF,KAAb,CAAmBK,MAAnB,GAA0B,CAA9D;AACAiF,iBAAS,GAAGH,WAAW,CAACnF,KAAZ,CAAkBI,CAAlB,GAAsB+E,WAAW,CAACnF,KAAZ,CAAkBK,MAAlB,GAAyB,CAA3D;AACAoF,YAAI,GAAGJ,UAAU,GAAGC,SAApB;;AACA,YAAGG,IAAI,GAAG,CAAC,CAAR,IAAaA,IAAI,GAAG,CAAvB,EAAyB;AAACN,qBAAW,CAACnF,KAAZ,CAAkBI,CAAlB,GAAsB+E,WAAW,CAACnF,KAAZ,CAAkBI,CAAlB,GAAsBqF,IAA5C;AAAiD;AAC5E;;AAED,UAAG3N,SAAS,IAAI,MAAb,IAAuBA,SAAS,IAAI,IAAvC,EAA4C;AAC1CyN,kBAAU,GAAGL,YAAY,CAAClF,KAAb,CAAmBC,CAAnB,GAAuBiF,YAAY,CAAClF,KAAb,CAAmBE,KAAnB,GAAyB,CAA7D;AACAsF,iBAAS,GAAGL,WAAW,CAACnF,KAAZ,CAAkBC,CAAlB,GAAsBkF,WAAW,CAACnF,KAAZ,CAAkBE,KAAlB,GAAwB,CAA1D;AACAuF,YAAI,GAAGF,UAAU,GAAGC,SAApB;;AACA,YAAGC,IAAI,GAAG,CAAC,CAAR,IAAaA,IAAI,GAAG,CAAvB,EAAyB;AAACN,qBAAW,CAACnF,KAAZ,CAAkBC,CAAlB,GAAsBkF,WAAW,CAACnF,KAAZ,CAAkBC,CAAlB,GAAsBwF,IAA5C;AAAiD;AAC5E;AACF;AACF;AACF;;AAED,SAASC,kBAAT,CAA4BpH,aAA5B,EAA2CC,cAA3C,EAA2DzG,SAA3D,EAAqE;AAAE;AACrE,MAAIJ,WAAW,GAAGlC,QAAQ,CAACkD,cAAT,CAAwB4F,aAAxB,CAAlB;AACA,MAAI3G,YAAY,GAAGnC,QAAQ,CAACkD,cAAT,CAAwB6F,cAAxB,CAAnB;AACA,MAAIyG,cAAJ;;AAEA,MAAGlN,SAAS,IAAI,OAAhB,EAAwB;AACtB,QAAGJ,WAAW,CAACsI,KAAZ,CAAkBC,CAAlB,IAAuBtI,YAAY,CAACqI,KAAb,CAAmBC,CAA7C,EAA+C;AAC7C+E,oBAAc,GAAGtN,WAAW,CAAC8H,EAA7B;AACD,KAFD,MAEO;AACLwF,oBAAc,GAAGrN,YAAY,CAAC6H,EAA9B;AACD;AACF;;AAED,MAAG1H,SAAS,IAAI,MAAhB,EAAuB;AACrB,QAAGJ,WAAW,CAACsI,KAAZ,CAAkBI,CAAlB,IAAuBzI,YAAY,CAACqI,KAAb,CAAmBI,CAA7C,EAA+C;AAC7C4E,oBAAc,GAAGtN,WAAW,CAAC8H,EAA7B;AACD,KAFD,MAEO;AACLwF,oBAAc,GAAGrN,YAAY,CAAC6H,EAA9B;AACD;AACF;;AAED,MAAG1H,SAAS,IAAI,MAAhB,EAAuB;AACrB,QAAGJ,WAAW,CAACsI,KAAZ,CAAkBC,CAAlB,IAAuBtI,YAAY,CAACqI,KAAb,CAAmBC,CAA7C,EAA+C;AAC7C+E,oBAAc,GAAGrN,YAAY,CAAC6H,EAA9B;AACD,KAFD,MAEO;AACLwF,oBAAc,GAAGtN,WAAW,CAAC8H,EAA7B;AACD;AACF;;AAED,MAAG1H,SAAS,IAAI,IAAhB,EAAqB;AACnB,QAAGJ,WAAW,CAACsI,KAAZ,CAAkBI,CAAlB,IAAuBzI,YAAY,CAACqI,KAAb,CAAmBI,CAA7C,EAA+C;AAC7C4E,oBAAc,GAAGrN,YAAY,CAAC6H,EAA9B;AACD,KAFD,MAEO;AACLwF,oBAAc,GAAGtN,WAAW,CAAC8H,EAA7B;AACD;AACF;;AAED,SAAOwF,cAAP;AACD;;AAED,SAASW,4BAAT,CAAsCzO,SAAtC,EAAiDY,SAAjD,EAA2D;AAAE;AAC3D,MAAIkN,cAAc,GAAG9N,SAAS,CAACQ,WAAV,GAAwBJ,QAAxB,EAArB;;AAEA,MAAGQ,SAAS,IAAI,MAAhB,EAAuB;AACrB,SAAI,IAAIT,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGH,SAAS,CAACC,KAAV,EAAnB,EAAsCE,CAAC,EAAvC,EAA2C;AACzC2N,oBAAc,GAAGU,kBAAkB,CAACV,cAAD,EAAiB9N,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,EAAjB,EAA0CQ,SAA1C,CAAnC;AACD;AACF;;AAED,SAAOkN,cAAP;AACD;;AAED,SAASY,iBAAT,CAA2BtM,KAA3B,EAAkCrB,OAAlC,EAA2C;AACvC;AACAqB,OAAK,CAACuM,cAAN,CAAqB,kDAAgD5N,OAArE,EAFuC,CAIvC;;AACAqB,OAAK,CAACwM,kBAAN,CAAyB,eAAzB;AACAxM,OAAK,CAACwM,kBAAN,CAAyB,QAAzB,EANuC,CAQvC;;AACA,MAAMrM,SAAS,GAAG,GAAlB;AACA,MAAMC,UAAU,GAAG,EAAnB;AAEA,MAAIE,IAAI,GAAGC,MAAM,CAACC,KAAP,GAAeC,aAAf,CAA6BC,UAAU,CAAC,CAAD,EAAI,CAAJ,EAAOP,SAAP,EAAkBC,UAAlB,CAAvC,CAAX;AACAJ,OAAK,CAACW,gBAAN,CAAuBL,IAAvB,EAbuC,CAevC;;AACA,MAAImM,SAAS,GAAG/K,WAAW,CAAClB,KAAZ,GAAoBC,aAApB,CAAkCC,UAAU,CAAC,CAAC,CAAF,EAAKN,UAAU,GAAG,EAAlB,EAAsB,GAAtB,EAA2B,EAA3B,CAA5C,CAAhB;AAEAqM,WAAS,CAAC1K,cAAV,CAAyB,qFAAzB;AACA0K,WAAS,CAACC,aAAV,CAAwB,KAAxB;AACAD,WAAS,CAACE,kBAAV,CAA6B,KAA7B;AACAF,WAAS,CAACG,UAAV,CAAqB,KAArB;AAEAtM,MAAI,CAACQ,UAAL,CAAgB2L,SAAhB;AAEA,SAAOzM,KAAP;AACH;;AAED,SAASK,UAAT,CAAoBL,KAApB,EAA2BG,SAA3B,EAAsCC,UAAtC,EAAiD;AAC/C;AACAJ,OAAK,CAACuM,cAAN,CAAqB,uBAArB,EAF+C,CAI/C;;AACAvM,OAAK,CAACwM,kBAAN,CAAyB,iBAAzB;AACAxM,OAAK,CAACwM,kBAAN,CAAyB,QAAzB;AAEA,SAAOxM,KAAP;AACD;;AAED,SAASa,UAAT,CAAoBlC,OAApB,EAA6BgF,KAA7B,EAAoCgD,CAApC,EAAuCG,CAAvC,EAA0CF,KAA1C,EAAiDG,MAAjD,EAAwD;AACtD,MAAI0F,SAAS,GAAG/K,WAAW,CAAClB,KAAZ,GAAoBC,aAApB,CAAkCC,UAAU,CAACiG,CAAD,EAAIG,CAAJ,EAAOF,KAAP,EAAcG,MAAd,CAA5C,CAAhB;AAEA0F,WAAS,CAAC1K,cAAV,CAAyBpD,OAAzB;AACA8N,WAAS,CAACC,aAAV,CAAwB,KAAxB;AACAD,WAAS,CAACE,kBAAV,CAA6B,KAA7B;AACAF,WAAS,CAACG,UAAV,CAAqB,KAArB;;AAEA,MAAGjJ,KAAK,IAAI,KAAZ,EAAkB;AAChB8I,aAAS,CAACI,SAAV,GAAsBC,OAAO,CAACC,wBAAR,EAAtB;AACD;;AAED,SAAON,SAAP;AACD;;AAED,SAASzJ,aAAT,CAAuBrE,OAAvB,EAAgCgF,KAAhC,EAAuCgD,CAAvC,EAA0CG,CAA1C,EAA6CF,KAA7C,EAAoDG,MAApD,EAA2D;AACzD,MAAIhE,QAAQ,GAAGiK,QAAQ,CAACxM,KAAT,GAAiBC,aAAjB,CAA+BC,UAAU,CAACiG,CAAD,EAAIG,CAAJ,EAAOF,KAAP,EAAcG,MAAd,CAAzC,CAAf;AAEAhE,UAAQ,CAACkK,aAAT,CAAuBC,cAAvB;AACAnK,UAAQ,CAACoK,aAAT,CAAuB,CAAvB;AACApK,UAAQ,CAACqK,QAAT,CAAkBzO,OAAlB;;AACA,MAAG3B,QAAQ,CAACiF,aAAT,CAAuB,WAAvB,CAAH,EAAuC;AACrC,QAAIoL,YAAY,GAAGrQ,QAAQ,CAACiF,aAAT,CAAuB,WAAvB,CAAnB;AACAc,YAAQ,CAACmI,QAAT,CAAkBmC,YAAlB;AACD,GAHD,MAGO;AACLtK,YAAQ,CAACmI,QAAT,CAAkBvH,KAAlB;AACD;;AAED,SAAOZ,QAAP;AACD;;AAED,SAASwG,cAAT,CAAwB/C,IAAxB,EAA8B;AAAE;AAC9B,MAAI8G,SAAS,GAAGhR,OAAO,CAACiR,cAAR,EAAhB;AACA,MAAIC,OAAO,GAAG,QAAd;AACA,MAAIpC,MAAM,GAAG,EAAb;;AAEA,OAAI,IAAIjM,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGmO,SAAS,CAACzP,KAAV,EAAnB,EAAsCsB,CAAC,EAAvC,EAA0C;AACxC,QAAGqH,IAAI,IAAI,IAAX,EAAiB;AACf,UAAG8G,SAAS,CAACnO,CAAD,CAAT,CAAaqH,IAAb,GAAoBiH,QAApB,CAA6BD,OAA7B,CAAH,EAAyC;AAACpC,cAAM,CAAC5L,IAAP,CAAY8N,SAAS,CAACnO,CAAD,CAArB;AAA0B;AACrE,KAFD,MAEO;AACL,UAAGmO,SAAS,CAACnO,CAAD,CAAT,CAAaqH,IAAb,MAAuBA,IAA1B,EAA+B;AAAC4E,cAAM,CAAC5L,IAAP,CAAY8N,SAAS,CAACnO,CAAD,CAArB;AAA0B;AAC3D;AACF;;AACF,SAAOiM,MAAP;AACA;;AAED,SAASlO,KAAT,CAAeb,OAAf,EAAwBmC,SAAxB,EAAmC4G,WAAnC,EAA+C;AAC7C,MAAIxH,SAAS,GAAGvB,OAAO,CAACuB,SAAxB;;AAEA,MAAGA,SAAS,CAACC,KAAV,KAAoB,CAApB,IAAyBD,SAAS,CAAC,CAAD,CAAT,CAAa2B,KAAb,MAAwB,iBAApD,EAAsE;AACpE;AACA,QAAImM,cAAc,GAAGW,4BAA4B,CAACzO,SAAD,EAAYY,SAAZ,CAAjD;AACA,QAAIV,sBAAsB,GAAGhB,kBAA7B,CAHoE,CAGpB;;AAEhD,SAAI,IAAIiB,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGH,SAAS,CAACC,KAAV,EAAnB,EAAsCE,CAAC,EAAvC,EAA2C;AACzC,UAAGH,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,MAA2B0N,cAA9B,EAA6C;AAC3C;AACA,YAAIzN,eAAe,GAAGC,kBAAkB,CAACwN,cAAD,EAAiB9N,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,EAAjB,EAA0CF,sBAA1C,CAAxC;;AAEA,YAAGG,eAAe,IAAI,IAAtB,EAA2B;AACzB;AACAsH,qBAAW,CAACmG,cAAD,EAAiB9N,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,EAAjB,EAA0C,IAA1C,EAAgD,IAAhD,EAAsDQ,SAAtD,EAAiE4G,WAAjE,CAAX;AACAjJ,uDAAM,CAACJ,EAAP,CAAU4C,OAAV,CAAkB,8BAAlB;AACD,SAJD,MAIO;AACL;AACAR,qBAAW,CAACuN,cAAD,EAAiB9N,SAAS,CAACG,CAAD,CAAT,CAAaC,QAAb,EAAjB,EAA0C,IAA1C,EAAgD,IAAhD,EAAsDQ,SAAtD,EAAiEV,sBAAsB,CAACG,eAAD,CAAtB,CAAwCQ,IAAzG,EAA+GX,sBAAsB,CAACG,eAAD,CAAtB,CAAwCS,SAAvJ,EAAkK0G,WAAlK,EAA+KnH,eAA/K,CAAX;AACA9B,uDAAM,CAACJ,EAAP,CAAU4C,OAAV,CAAkB,kCAAlB;AACD;AACF;AACF;;AACDtC,WAAO,CAACI,OAAR,CAAgBmC,2CAAhB,CAA4D9B,kBAA5D,EAAgF,kBAAhF,EAAoGR,OAApG,EAA6GL,SAA7G;AACD,GAtBD,MAsBO;AACL;AACAE,iDAAM,CAACJ,EAAP,CAAU4C,OAAV,CAAkB,kEAAlB;AACD;AACF,C,CAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA,SAAS+O,cAAT,CAAwBF,OAAxB,EAAgC;AAC9B,MAAIG,SAAS,GAAGxR,6CAAM,CAACyR,YAAP,EAAhB;AACA,MAAIzI,WAAJ,EAAiB0I,gBAAjB,CAF8B,CAG9B;AAEA;;AAEA,OAAI,IAAI9P,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAG4P,SAAS,CAAC1O,MAA7B,EAAqClB,CAAC,EAAtC,EAA0C;AACxC8P,oBAAgB,GAAGF,SAAS,CAAC5P,CAAD,CAAT,CAAa+P,wCAAb,CAAsD5R,QAAtD,CAAnB;;AAEA,SAAI,IAAIiD,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAG0O,gBAAgB,CAAC5O,MAApC,EAA4CE,CAAC,EAA7C,EAAiD;AAC/C,UAAG0O,gBAAgB,CAAC1O,CAAD,CAAhB,CAAoBqH,IAApB,CAAyBiH,QAAzB,CAAkCD,OAAlC,CAAH,EAA8C;AAC5CrI,mBAAW,GAAG0I,gBAAgB,CAAC1O,CAAD,CAAhB,CAAoB+G,EAAlC;AACD;AACF;AACF;;AAED,MAAGf,WAAW,IAAI,IAAlB,EAAuB;AACrBpJ,MAAE,CAACiE,KAAH,CAAS,+BAAT,EAA0C,kWAA1C;AACD,GAnB6B,CAqB9B;AAEA;AACA;AAGA;AACA;AAGA;AACA;;;AAEA,SAAOmF,WAAP;AACD;;AAED,SAASmE,YAAT,CAAsBkE,OAAtB,EAA+B7G,CAA/B,EAAkCG,CAAlC,EAAoC;AAClC,MAAI6G,SAAS,GAAGxR,6CAAM,CAACyR,YAAP,EAAhB;AACA,MAAIvI,eAAJ,EAAqBwI,gBAArB;;AAEA,OAAI,IAAI9P,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAG4P,SAAS,CAAC1O,MAA7B,EAAqClB,CAAC,EAAtC,EAA0C;AACxC8P,oBAAgB,GAAGF,SAAS,CAAC5P,CAAD,CAAT,CAAa+P,wCAAb,CAAsD5R,QAAtD,CAAnB;;AAEA,SAAI,IAAIiD,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAG0O,gBAAgB,CAAC5O,MAApC,EAA4CE,CAAC,EAA7C,EAAiD;AAC/C,UAAG0O,gBAAgB,CAAC1O,CAAD,CAAhB,CAAoBqH,IAApB,CAAyBiH,QAAzB,CAAkCD,OAAlC,CAAH,EAA8C;AAC5CnI,uBAAe,GAAGwI,gBAAgB,CAAC1O,CAAD,CAAlC;AACD;AACF;AACF;;AAED,MAAGkG,eAAe,IAAI,IAAtB,EAA2B;AACzBtJ,MAAE,CAACiE,KAAH,CAAS,+BAAT,EAA0C,kWAA1C;AACD,GAFD,MAEO;AACL,QAAI+N,YAAY,GAAG1I,eAAe,CAAC2I,MAAhB,EAAnB;AACA,QAAIC,QAAQ,GAAGF,YAAY,CAACG,iBAAb,EAAf;AACAD,YAAQ,CAAChG,MAAT,GAAkBtL,kBAAlB;AACAsR,YAAQ,CAACvH,KAAT,CAAeC,CAAf,GAAmBA,CAAC,GAAGsH,QAAQ,CAACvH,KAAT,CAAeE,KAAf,GAAuB,CAA9C;AACAqH,YAAQ,CAACvH,KAAT,CAAeI,CAAf,GAAmBA,CAAC,GAAGmH,QAAQ,CAACvH,KAAT,CAAeK,MAAf,GAAwB,CAA/C;AACD;;AAED,SAAO1B,eAAP;AACD,C;;;;;;;;;;;ACl0CD,mC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,4C;;;;;;;;;;;ACAA,sC","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch'\n// const { toArray } = require('util')\n\n//\n// Variables\n//\n\nlet UI = require('sketch/ui') \n// var SharedStyle = require('sketch/dom').SharedStyle\n\nconst pluginKey = \"flowArrows\"\nconst document = sketch.fromNative(context.document)\nlet docData = context.document.documentData()\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey)\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards\nlet newConnectionsData = getConnectionsData()\n\n// Settings\nvar Settings = require('sketch/settings')\n\n \n//\n// Create Connection Function\n//\n\nexport default function(context) {}\nexport function createAutoArrow(context){start(context, \"Auto\", false)}\nexport function createRightArrow(context){start(context, \"Right\", false)}\nexport function createDownArrow(context){start(context, \"Down\", false)}\nexport function createLeftArrow(context){start(context, \"Left\", false)}\nexport function createUpArrow(context){start(context, \"Up\", false)}\n\nexport function createRightArrowWithCondition(context){start(context, \"Right\", true)}\nexport function createDownArrowWithCondition(context){start(context, \"Down\", true)}\nexport function createLeftArrowWithCondition(context){start(context, \"Left\", true)}\nexport function createUpArrowWithCondition(context){start(context, \"Up\", true)}\n\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n\n let selection = context.selection\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n // let sourceObjectID = getSourceObjectFromSelection(selection)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let conditionObject = document.getLayerWithID(conditionID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n if(!isCondition && conditionObject){conditionObject.remove()}\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition) {\n // Process of creating new connection \n let localType = type == null ? Settings.settingForKey(\"arrowType\") : type\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction\n \n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n \n let currentArrowsGroup = checkForGroup(\"Arrows\") // Need to refactor\n let arrow = drawConnection(firstObjectID, secondObjectID, style, localType, localDirection, currentArrowsGroup, isCondition)\n \n addToArrowsGroup(arrow.line, currentArrowsGroup)\n\n let conditionID = arrow.condition != null && arrow.condition.length > 0 ? arrow.condition.id : null\n\n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : localStyle,\n condition : conditionID,\n type : localType,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForGroup(groupName) {\n let currentGroup = null\n\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n // If we already have \"Arrow\" group we need to save it's folder\n currentGroup = currentParentGroup.layers()[i]\n } \n }\n\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\"\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\"\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\"\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\"\n }\n }\n\n return direction\n}\n\nfunction drawConnection(firstObjectID, secondObjectID, style, type, direction, currentGroup, condition){\n let firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, middlePosX, middlePosY, diffX, diffY\n let connection = {line: [], condition: []}\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n\n if(currentGroup){\n //if we already have a group, need to specify the difference\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n // Drawing a line\n let path = NSBezierPath.bezierPath()\n\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(type == \"Angled\" || type == null){\n // Based on direction, we need to specify connection points\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n\n\n // Making middle points rounded\n let points = connection.line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n\n // Providing Settings for the arrow\n connection.line.setName(\"Arrow\")\n }\n\n if(type == \"Straight\"){\n // Based on direction, we need to specify connection points\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n \n // Providing Settings for the arrow\n connection.line.setName(\"Arrow\")\n }\n\n if(type == \"Curved\"){\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = connection.line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n }\n \n return sourceObjectID\n}\n\nfunction confirmationAlert(alert, message) {\n // Title\n alert.setMessageText(\"Would you like to delete all the arrows from \"+message)\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Delete Arrows\")\n alert.addButtonWithTitle(\"Cancel\")\n \n // Creating the view\n const viewWidth = 300\n const viewHeight = 40\n \n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n \n // Label\n var infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(-1, viewHeight - 40, 330, 40))\n \n infoLabel.setStringValue(\"ℹ️ You can select layers, artboards to delete all the arrows from selected one only\")\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n \n view.addSubview(infoLabel)\n\n return alert\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n\n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i])}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i])}\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, isCondition){\n let selection = context.selection\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n \n if(connectionIndex == null){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, isCondition)\n sketch.UI.message(\"New connection is created 🚀\")\n } else {\n // Need to remake the arrow condition\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\n// {\n// \"script\": \"./script.js\",\n// \"name\" : \"onLayersMoved\",\n// \"handlers\" : {\n// \"actions\": {\n// \"LayersMoved.finish\": \"onLayersMoved\"\n// }\n// },\n// \"identifier\" : \"onLayersMoved\"\n// }\n\nfunction getConditionID(keyword){\n let libraries = sketch.getLibraries()\n let conditionID, symbolReferences\n // let keyword = \"#condition\"\n\n // log(libraries.length)\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionID = symbolReferences[i].id \n }\n }\n }\n\n if(conditionID == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n }\n\n // symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n // log(symbolReferences)\n // var symbolMaster = symbolReferences[0].import()\n\n\n // var instance = symbolMaster.createNewInstance()\n // console.log(instance)\n\n\n // instance.parent = currentParentGroup\n // log(symbolMaster)\n\n return conditionID\n}\n\nfunction addCondition(keyword, x, y){\n let libraries = sketch.getLibraries()\n let conditionObject, symbolReferences\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionObject = symbolReferences[i]\n }\n }\n }\n\n if(conditionObject == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n } else {\n let symbolMaster = conditionObject.import()\n let instance = symbolMaster.createNewInstance()\n instance.parent = currentParentGroup\n instance.frame.x = x - instance.frame.width / 2 \n instance.frame.y = y - instance.frame.height / 2\n }\n\n return conditionObject\n}\n\n\n\n\n\n\n","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","pluginKey","document","sketch","fromNative","context","docData","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","currentParentGroup","currentPage","currentArtboard","newConnectionsData","getConnectionsData","Settings","createAutoArrow","start","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","updateSelectedArrows","selection","count","currentConnectionsData","g","objectID","connectionIndex","findConnectionData","updateArrow","firstObject","secondObject","style","type","direction","line","condition","message","setValue_forKey_onLayer_forPluginIdentifier","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","length","updateArrowsCounter","i","getLayerWithID","sketchObject","parentArtboard","class","push","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","settingForKey","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","views","subviews","title","setSettingForKey","intValue","state","onLayersMoved","action","actionContext","panel","ControlBar","NSPanel","setStyleMask","NSTitledWindowMask","NSFullSizeContentViewWindowMask","setTitleVisibility","NSWindowTitleHidden","setTitlebarAppearsTransparent","setFrame_display","setMovableByWindowBackground","setHasShadow","setLevel","NSFloatingWindowLevel","center","makeKeyAndOrderFront","nil","firstObjectID","secondObjectID","lineID","conditionID","isCondition","conditionObject","remove","createArrow","updateSpacing","localDirection","autoAlignLayer","localType","getDirection","currentArrowsGroup","checkForGroup","arrow","drawConnection","addToArrowsGroup","id","connection","localStyle","groupName","currentGroup","layers","name","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","firstLayerPosX","firstLayerPosY","secondLayerPosX","secondLayerPosY","middlePosX","middlePosY","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","path","NSBezierPath","bezierPath","getConnectionPos","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","addCondition","getLayerStyles","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","sharedStyle","ownStyle","addLayers","fixGeometryWithOptions","Group","group","locked","moveToBack","dataArray","data","arrayNumber","setActiveDirectionSetting","arrowDirectionField","currentDirection","addItemWithTitle","lastItem","setState","docSettings","styles","docTypeSettings","newConnections","refactorLines","lineObject","selectedGroup","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","defineSourceObject","getSourceObjectFromSelection","confirmationAlert","setMessageText","addButtonWithTitle","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","allStyles","allLayerStyles","keyword","includes","getConditionID","libraries","getLibraries","symbolReferences","getImportableSymbolReferencesForDocument","symbolMaster","import","instance","createNewInstance","connectionPos"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch'\n// const { toArray } = require('util')\n\n//\n// Variables\n//\n\nlet UI = require('sketch/ui') \n// var SharedStyle = require('sketch/dom').SharedStyle\n\nconst pluginKey = \"flowArrows\"\nconst document = sketch.fromNative(context.document)\nlet docData = context.document.documentData()\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey)\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards\nlet newConnectionsData = getConnectionsData()\n\n// Settings\nvar Settings = require('sketch/settings')\n\n \n//\n// Create Connection Function\n//\n\nexport default function(context) {}\nexport function createAutoArrow(context){start(context, \"Auto\", false)}\nexport function createRightArrow(context){start(context, \"Right\", false)}\nexport function createDownArrow(context){start(context, \"Down\", false)}\nexport function createLeftArrow(context){start(context, \"Left\", false)}\nexport function createUpArrow(context){start(context, \"Up\", false)}\n\nexport function createRightArrowWithCondition(context){start(context, \"Right\", true)}\nexport function createDownArrowWithCondition(context){start(context, \"Down\", true)}\nexport function createLeftArrowWithCondition(context){start(context, \"Left\", true)}\nexport function createUpArrowWithCondition(context){start(context, \"Up\", true)}\n\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n\n let selection = context.selection\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n // let sourceObjectID = getSourceObjectFromSelection(selection)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let conditionObject = document.getLayerWithID(conditionID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n if(!isCondition && conditionObject){conditionObject.remove()}\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition) { \n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n\n // Process of creating new connection \n let localType = type == null ? Settings.settingForKey(\"arrowType\") : type\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction\n\n let currentArrowsGroup = checkForGroup(\"Arrows\") // Need to refactor\n let arrow = drawConnection(firstObjectID, secondObjectID, style, localType, localDirection, currentArrowsGroup, isCondition)\n \n addToArrowsGroup(arrow.line, currentArrowsGroup)\n\n let conditionID = arrow.condition != null && arrow.condition.length > 0 ? arrow.condition.id : null\n\n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : localStyle,\n condition : conditionID,\n type : localType,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForGroup(groupName) {\n let currentGroup = null\n\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n // If we already have \"Arrow\" group we need to save it's folder\n currentGroup = currentParentGroup.layers()[i]\n } \n }\n\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\"\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\"\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\"\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\"\n }\n }\n\n return direction\n}\n\nfunction drawConnection(firstObjectID, secondObjectID, style, type, direction, currentGroup, condition){\n let firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, middlePosX, middlePosY, diffX, diffY\n let connection = {line: [], condition: []}\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n\n if(currentGroup){\n //if we already have a group, need to specify the difference\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n // Drawing a line\n let path = NSBezierPath.bezierPath()\n\n getConnectionPos(direction)\n\n // // Getting all the positions\n // if(direction == \"Up\"){\n // // First Layer Position Start Point Position\n // firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n // firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // // Second Layer Position End Point Position\n // secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n // secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // // Middle Points\n // middlePosX = (firstLayerPosX + secondLayerPosX)/2\n // middlePosY = (firstLayerPosY + secondLayerPosY)/2\n // }\n\n // if(direction == \"Right\"){\n // // First Layer Position Start Point Position\n // firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n // firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // // Second Layer Position End Point Position\n // secondLayerPosX = secondObjectAbsPos.x-diffX\n // secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // // Middle Points\n // middlePosX = (firstLayerPosX + secondLayerPosX)/2\n // middlePosY = (firstLayerPosY + secondLayerPosY)/2\n // }\n\n // if(direction == \"Down\"){\n // // First Layer Position Start Point Position\n // firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n // firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // // Second Layer Position End Point Position\n // secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n // secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // // Middle Points\n // middlePosX = (firstLayerPosX + secondLayerPosX)/2\n // middlePosY = (firstLayerPosY + secondLayerPosY)/2\n // }\n\n // if(direction == \"Left\"){\n // // First Layer Position Start Point Position\n // firstLayerPosX = firstObjectAbsPos.x-diffX\n // firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // // Second Layer Position End Point Position\n // secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n // secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // // Middle Points\n // middlePosX = (firstLayerPosX + secondLayerPosX)/2\n // middlePosY = (firstLayerPosY + secondLayerPosY)/2\n // }\n\n if(type == \"Angled\" || type == null){\n // Based on direction, we need to specify connection points\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n\n\n // Making middle points rounded\n let points = connection.line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n\n // Providing Settings for the arrow\n connection.line.setName(\"Arrow\")\n }\n\n if(type == \"Straight\"){\n // Based on direction, we need to specify connection points\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n \n // Providing Settings for the arrow\n connection.line.setName(\"Arrow\")\n }\n\n if(type == \"Curved\"){\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = connection.line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n }\n \n return sourceObjectID\n}\n\nfunction confirmationAlert(alert, message) {\n // Title\n alert.setMessageText(\"Would you like to delete all the arrows from \"+message)\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Delete Arrows\")\n alert.addButtonWithTitle(\"Cancel\")\n \n // Creating the view\n const viewWidth = 300\n const viewHeight = 40\n \n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n \n // Label\n var infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(-1, viewHeight - 40, 330, 40))\n \n infoLabel.setStringValue(\"ℹ️ You can select layers, artboards to delete all the arrows from selected one only\")\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n \n view.addSubview(infoLabel)\n\n return alert\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n\n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i])}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i])}\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, isCondition){\n let selection = context.selection\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n \n if(connectionIndex == null){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, isCondition)\n sketch.UI.message(\"New connection is created 🚀\")\n } else {\n // Need to remake the arrow condition\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\n// {\n// \"script\": \"./script.js\",\n// \"name\" : \"onLayersMoved\",\n// \"handlers\" : {\n// \"actions\": {\n// \"LayersMoved.finish\": \"onLayersMoved\"\n// }\n// },\n// \"identifier\" : \"onLayersMoved\"\n// }\n\nfunction getConditionID(keyword){\n let libraries = sketch.getLibraries()\n let conditionID, symbolReferences\n // let keyword = \"#condition\"\n\n // log(libraries.length)\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionID = symbolReferences[i].id \n }\n }\n }\n\n if(conditionID == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n }\n\n // symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n // log(symbolReferences)\n // var symbolMaster = symbolReferences[0].import()\n\n\n // var instance = symbolMaster.createNewInstance()\n // console.log(instance)\n\n\n // instance.parent = currentParentGroup\n // log(symbolMaster)\n\n return conditionID\n}\n\nfunction addCondition(keyword, x, y){\n let libraries = sketch.getLibraries()\n let conditionObject, symbolReferences\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionObject = symbolReferences[i]\n }\n }\n }\n\n if(conditionObject == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n } else {\n let symbolMaster = conditionObject.import()\n let instance = symbolMaster.createNewInstance()\n instance.parent = currentParentGroup\n instance.frame.x = x - instance.frame.width / 2 \n instance.frame.y = y - instance.frame.height / 2\n }\n\n return conditionObject\n}\n\nfunction getConnectionPos(direction){\n let connectionPos = {firstLayerPosX: null, firstLayerPosY: null, secondLayerPosX: null, secondLayerPosY: null, middlePosX: null, middlePosY: null, diffX: null, diffY: null}\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n return connectionPos\n}\n\n\n\n\n\n\n","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/src/script.js b/src/script.js index d04f32c..25ee581 100644 --- a/src/script.js +++ b/src/script.js @@ -398,15 +398,15 @@ function updateArrow(firstObjectID, secondObjectID, style, type, direction, line } } -function createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition) { - // Process of creating new connection - let localType = type == null ? Settings.settingForKey("arrowType") : type - let localDirection = direction == "Auto" ? getDirection(firstObjectID, secondObjectID) : direction - +function createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition) { // Main Operations based on the settings updateSpacing(firstObjectID, secondObjectID, localDirection) autoAlignLayer(firstObjectID, secondObjectID, localDirection) - + + // Process of creating new connection + let localType = type == null ? Settings.settingForKey("arrowType") : type + let localDirection = direction == "Auto" ? getDirection(firstObjectID, secondObjectID) : direction + let currentArrowsGroup = checkForGroup("Arrows") // Need to refactor let arrow = drawConnection(firstObjectID, secondObjectID, style, localType, localDirection, currentArrowsGroup, isCondition) @@ -502,62 +502,64 @@ function drawConnection(firstObjectID, secondObjectID, style, type, direction, c // Drawing a line let path = NSBezierPath.bezierPath() - // Getting all the positions - if(direction == "Up"){ - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX - firstLayerPosY = firstObjectAbsPos.y-diffY + getConnectionPos(direction) - // Second Layer Position End Point Position - secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX - secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY + // // Getting all the positions + // if(direction == "Up"){ + // // First Layer Position Start Point Position + // firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX + // firstLayerPosY = firstObjectAbsPos.y-diffY - // Middle Points - middlePosX = (firstLayerPosX + secondLayerPosX)/2 - middlePosY = (firstLayerPosY + secondLayerPosY)/2 - } + // // Second Layer Position End Point Position + // secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX + // secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY - if(direction == "Right"){ - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX - firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY + // // Middle Points + // middlePosX = (firstLayerPosX + secondLayerPosX)/2 + // middlePosY = (firstLayerPosY + secondLayerPosY)/2 + // } - // Second Layer Position End Point Position - secondLayerPosX = secondObjectAbsPos.x-diffX - secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY - - // Middle Points - middlePosX = (firstLayerPosX + secondLayerPosX)/2 - middlePosY = (firstLayerPosY + secondLayerPosY)/2 - } - - if(direction == "Down"){ - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX - firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY - - // Second Layer Position End Point Position - secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX - secondLayerPosY = secondObjectAbsPos.y-diffY - - // Middle Points - middlePosX = (firstLayerPosX + secondLayerPosX)/2 - middlePosY = (firstLayerPosY + secondLayerPosY)/2 - } - - if(direction == "Left"){ - // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x-diffX - firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY + // if(direction == "Right"){ + // // First Layer Position Start Point Position + // firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX + // firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY - // Second Layer Position End Point Position - secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX - secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY - - // Middle Points - middlePosX = (firstLayerPosX + secondLayerPosX)/2 - middlePosY = (firstLayerPosY + secondLayerPosY)/2 - } + // // Second Layer Position End Point Position + // secondLayerPosX = secondObjectAbsPos.x-diffX + // secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY + + // // Middle Points + // middlePosX = (firstLayerPosX + secondLayerPosX)/2 + // middlePosY = (firstLayerPosY + secondLayerPosY)/2 + // } + + // if(direction == "Down"){ + // // First Layer Position Start Point Position + // firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX + // firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY + + // // Second Layer Position End Point Position + // secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX + // secondLayerPosY = secondObjectAbsPos.y-diffY + + // // Middle Points + // middlePosX = (firstLayerPosX + secondLayerPosX)/2 + // middlePosY = (firstLayerPosY + secondLayerPosY)/2 + // } + + // if(direction == "Left"){ + // // First Layer Position Start Point Position + // firstLayerPosX = firstObjectAbsPos.x-diffX + // firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY + + // // Second Layer Position End Point Position + // secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX + // secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY + + // // Middle Points + // middlePosX = (firstLayerPosX + secondLayerPosX)/2 + // middlePosY = (firstLayerPosY + secondLayerPosY)/2 + // } if(type == "Angled" || type == null){ // Based on direction, we need to specify connection points @@ -757,9 +759,6 @@ function drawConnection(firstObjectID, secondObjectID, style, type, direction, c connection.condition = addCondition("#con", middlePosX, middlePosY) } - - - if(style != null){ localStyle = getLayerStyles(style) != null && style != "Default Style" ? style : "Default Style" } else { @@ -767,7 +766,6 @@ function drawConnection(firstObjectID, secondObjectID, style, type, direction, c localStyle = context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) ? context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) : "Default Style" } - if(style == null){ // that means we are creating new arrow if(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)){ @@ -1346,6 +1344,67 @@ function addCondition(keyword, x, y){ return conditionObject } +function getConnectionPos(direction){ + let connectionPos = {firstLayerPosX: null, firstLayerPosY: null, secondLayerPosX: null, secondLayerPosY: null, middlePosX: null, middlePosY: null, diffX: null, diffY: null} + // Getting all the positions + if(direction == "Up"){ + // First Layer Position Start Point Position + connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX + connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY + + // Second Layer Position End Point Position + secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX + secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY + + // Middle Points + middlePosX = (firstLayerPosX + secondLayerPosX)/2 + middlePosY = (firstLayerPosY + secondLayerPosY)/2 + } + + if(direction == "Right"){ + // First Layer Position Start Point Position + firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX + firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY + + // Second Layer Position End Point Position + secondLayerPosX = secondObjectAbsPos.x-diffX + secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY + + // Middle Points + middlePosX = (firstLayerPosX + secondLayerPosX)/2 + middlePosY = (firstLayerPosY + secondLayerPosY)/2 + } + + if(direction == "Down"){ + // First Layer Position Start Point Position + firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX + firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY + + // Second Layer Position End Point Position + secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX + secondLayerPosY = secondObjectAbsPos.y-diffY + + // Middle Points + middlePosX = (firstLayerPosX + secondLayerPosX)/2 + middlePosY = (firstLayerPosY + secondLayerPosY)/2 + } + + if(direction == "Left"){ + // First Layer Position Start Point Position + firstLayerPosX = firstObjectAbsPos.x-diffX + firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY + + // Second Layer Position End Point Position + secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX + secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY + + // Middle Points + middlePosX = (firstLayerPosX + secondLayerPosX)/2 + middlePosY = (firstLayerPosY + secondLayerPosY)/2 + } + return connectionPos +} + From ca3a4553bcd5d3cf684ecda8fc0b203a0d92b5dd Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Thu, 4 Apr 2019 23:35:11 +0300 Subject: [PATCH 13/44] still refactoring --- arrows.sketchplugin/Contents/Sketch/script.js | 911 ++++++++---------- .../Contents/Sketch/script.js.map | 2 +- src/script.js | 733 +++++++------- 3 files changed, 754 insertions(+), 892 deletions(-) diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index eef726c..7b04fae 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -504,24 +504,19 @@ function updateArrow(firstObjectID, secondObjectID, style, type, direction, line } function createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition) { - // Main Operations based on the settings - updateSpacing(firstObjectID, secondObjectID, localDirection); - autoAlignLayer(firstObjectID, secondObjectID, localDirection); // Process of creating new connection + var localDirection = direction == "Auto" ? getDirection(firstObjectID, secondObjectID) : direction; // Main Operations based on the settings - var localType = type == null ? Settings.settingForKey("arrowType") : type; - var localDirection = direction == "Auto" ? getDirection(firstObjectID, secondObjectID) : direction; - var currentArrowsGroup = checkForGroup("Arrows"); // Need to refactor + updateSpacing(firstObjectID, secondObjectID, localDirection); + autoAlignLayer(firstObjectID, secondObjectID, localDirection); // Making an Arrow - var arrow = drawConnection(firstObjectID, secondObjectID, style, localType, localDirection, currentArrowsGroup, isCondition); - addToArrowsGroup(arrow.line, currentArrowsGroup); - var conditionID = arrow.condition != null && arrow.condition.length > 0 ? arrow.condition.id : null; // Storage for current connection + var arrow = drawConnection(firstObjectID, secondObjectID, style, type, direction, isCondition); // Storage for current connection var connection = { firstObject: firstObjectID, secondObject: secondObjectID, - style: localStyle, - condition: conditionID, - type: localType, + style: arrow.style, + condition: arrow.conditionID, + type: arrow.type, direction: localDirection, line: arrow.line.objectID() // Need to save this data to the global array @@ -530,6 +525,7 @@ function createArrow(firstObjectID, secondObjectID, style, type, direction, isCo } function checkForGroup(groupName) { + // refactored var currentGroup = null; // Checking all the groups that we have for (var i = 0; i < currentParentGroup.layers().count(); i++) { @@ -580,427 +576,45 @@ function getDirection(firstObjectID, secondObjectID) { return direction; } -function drawConnection(firstObjectID, secondObjectID, style, type, direction, currentGroup, condition) { - var firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, middlePosX, middlePosY, diffX, diffY; - var connection = { - line: [], - condition: [] - }; +function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, condition) { + // Refactored + // Process of creating new connection + var localType = type == null ? Settings.settingForKey("arrowType") : type; var firstObject = document.getLayerWithID(firstObjectID); var secondObject = document.getLayerWithID(secondObjectID); - var firstObjectAbsPos = firstObject.frame.changeBasis({ - from: firstObject.parent, - to: currentParentGroup - }); - var secondObjectAbsPos = secondObject.frame.changeBasis({ - from: secondObject.parent, - to: currentParentGroup - }); - - if (currentGroup) { - //if we already have a group, need to specify the difference - diffX = currentGroup.frame().x(); - diffY = currentGroup.frame().y(); - } else { - diffX = 0; - diffY = 0; - } // Drawing a line - - - var path = NSBezierPath.bezierPath(); - getConnectionPos(direction); // // Getting all the positions - // if(direction == "Up"){ - // // First Layer Position Start Point Position - // firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX - // firstLayerPosY = firstObjectAbsPos.y-diffY - // // Second Layer Position End Point Position - // secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX - // secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY - // // Middle Points - // middlePosX = (firstLayerPosX + secondLayerPosX)/2 - // middlePosY = (firstLayerPosY + secondLayerPosY)/2 - // } - // if(direction == "Right"){ - // // First Layer Position Start Point Position - // firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX - // firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY - // // Second Layer Position End Point Position - // secondLayerPosX = secondObjectAbsPos.x-diffX - // secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY - // // Middle Points - // middlePosX = (firstLayerPosX + secondLayerPosX)/2 - // middlePosY = (firstLayerPosY + secondLayerPosY)/2 - // } - // if(direction == "Down"){ - // // First Layer Position Start Point Position - // firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX - // firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY - // // Second Layer Position End Point Position - // secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX - // secondLayerPosY = secondObjectAbsPos.y-diffY - // // Middle Points - // middlePosX = (firstLayerPosX + secondLayerPosX)/2 - // middlePosY = (firstLayerPosY + secondLayerPosY)/2 - // } - // if(direction == "Left"){ - // // First Layer Position Start Point Position - // firstLayerPosX = firstObjectAbsPos.x-diffX - // firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY - // // Second Layer Position End Point Position - // secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX - // secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY - // // Middle Points - // middlePosX = (firstLayerPosX + secondLayerPosX)/2 - // middlePosY = (firstLayerPosY + secondLayerPosY)/2 - // } - - if (type == "Angled" || type == null) { - // Based on direction, we need to specify connection points - if (direction == "Up") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - if (direction == "Right") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - if (direction == "Down") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - if (direction == "Left") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } // Painting the line - - - connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); // Making middle points rounded - - var points = connection.line.layers().firstObject().points(); - points[1].cornerRadius = 20; - points[2].cornerRadius = 20; // Providing Settings for the arrow - - connection.line.setName("Arrow"); - } - - if (type == "Straight") { - // Based on direction, we need to specify connection points - if (direction == "Up") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - if (direction == "Right") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - if (direction == "Down") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - if (direction == "Left") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } // Painting the line - - - connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); // Providing Settings for the arrow - - connection.line.setName("Arrow"); - } - - if (type == "Curved") { - if (direction == "Up") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line - - connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - - var _points = connection.line.layers().firstObject().points(); - - _points[0].curveMode = _points[1].curveMode = 4; - _points[0].hasCurveFrom = _points[1].hasCurveTo = true; - - if (firstLayerPosX < secondLayerPosX) { - _points[0].curveFrom = { - x: 0, - y: 0.5 - }; - _points[0].curveTo = { - x: -0.5, - y: 1 - }; - _points[1].curveFrom = { - x: 1, - y: 1 - }; - _points[1].curveTo = { - x: 1, - y: 0.5 - }; - } else { - _points[0].curveFrom = { - x: 1, - y: 0.5 - }; - _points[0].curveTo = { - x: -0.5, - y: 1 - }; - _points[1].curveFrom = { - x: 1, - y: 1 - }; - _points[1].curveTo = { - x: 0, - y: 0.5 - }; - } - } - - if (direction == "Right") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line - - connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - - var _points2 = connection.line.layers().firstObject().points(); - - _points2[0].curveMode = _points2[1].curveMode = 4; - _points2[0].hasCurveFrom = _points2[1].hasCurveTo = true; - - if (firstLayerPosY < secondLayerPosY) { - _points2[0].curveFrom = { - x: 0.5, - y: 0 - }; - _points2[0].curveTo = { - x: -0.5, - y: 1 - }; - _points2[1].curveFrom = { - x: 1, - y: 1 - }; - _points2[1].curveTo = { - x: 0.5, - y: 1 - }; - } else { - _points2[0].curveFrom = { - x: 0.5, - y: 1 - }; - _points2[0].curveTo = { - x: -0.5, - y: 1 - }; - _points2[1].curveFrom = { - x: 1, - y: 1 - }; - _points2[1].curveTo = { - x: 0.5, - y: 0 - }; - } - } - - if (direction == "Down") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line - - connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - - var _points3 = connection.line.layers().firstObject().points(); - - _points3[0].curveMode = _points3[1].curveMode = 4; - _points3[0].hasCurveFrom = _points3[1].hasCurveTo = true; - - if (firstLayerPosX < secondLayerPosX) { - _points3[0].curveFrom = { - x: 0, - y: 0.5 - }; - _points3[0].curveTo = { - x: -0.5, - y: 1 - }; - _points3[1].curveFrom = { - x: 1, - y: 1 - }; - _points3[1].curveTo = { - x: 1, - y: 0.5 - }; - } else { - _points3[0].curveFrom = { - x: 1, - y: 0.5 - }; - _points3[0].curveTo = { - x: -0.5, - y: 1 - }; - _points3[1].curveFrom = { - x: 1, - y: 1 - }; - _points3[1].curveTo = { - x: 0, - y: 0.5 - }; - } - } - - if (direction == "Left") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line - - connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - - var _points4 = connection.line.layers().firstObject().points(); - - _points4[0].curveMode = _points4[1].curveMode = 4; - _points4[0].hasCurveFrom = _points4[1].hasCurveTo = true; - - if (firstLayerPosY < secondLayerPosY) { - _points4[0].curveFrom = { - x: 0.5, - y: 0 - }; - _points4[0].curveTo = { - x: -0.5, - y: 1 - }; - _points4[1].curveFrom = { - x: 1, - y: 1 - }; - _points4[1].curveTo = { - x: 0.5, - y: 1 - }; - } else { - _points4[0].curveFrom = { - x: 0.5, - y: 1 - }; - _points4[0].curveTo = { - x: -0.5, - y: 1 - }; - _points4[1].curveFrom = { - x: 1, - y: 1 - }; - _points4[1].curveTo = { - x: 0.5, - y: 0 - }; - } - } // Providing Settings for the arrow + var connectionPos = getConnectionPos(firstObject, secondObject, currentGroup, localDirection); + var connection = { + line: [], + conditionID: [], + type: [], + style: [] // Type + }; - connection.line.setName("Arrows"); + if (localType == "Angled" || localType == null) { + connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection); } - if (condition != false) { - connection.condition = addCondition("#con", middlePosX, middlePosY); + if (localType == "Straight") { + connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection); } - if (style != null) { - localStyle = getLayerStyles(style) != null && style != "Default Style" ? style : "Default Style"; - } else { - // We don't have any data from the plugin data - localStyle = context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) ? context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) : "Default Style"; - } + if (localType == "Curved") { + connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection); + } // Condition - if (style == null) { - // that means we are creating new arrow - if (context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)) { - // if we have specified options - // TODO: Need to refactor here. Local Style is not used at all - var _style = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)); - - if (_style[0] == null) { - // Default Arrow Style - var border = connection.line.style().addStylePartOfType(1); - border.color = MSColor.colorWithRGBADictionary({ - r: 0.89, - g: 0.89, - b: 0.89, - a: 1 - }); - border.thickness = 2; - connection.line.style().endMarkerType = 2; - } else { - connection.line.sharedStyle = _style[0]; - } - } else { - // Default Arrow Style - var _border = connection.line.style().addStylePartOfType(1); - _border.color = MSColor.colorWithRGBADictionary({ - r: 0.89, - g: 0.89, - b: 0.89, - a: 1 - }); - _border.thickness = 2; - connection.line.style().endMarkerType = 2; - } - } else { - // arrow style already provided - if (style == "Default Style") { - // Default Arrow Style - var _border2 = connection.line.style().addStylePartOfType(1); + connection.conditionID = condition != false ? connection.conditionID = addCondition("#con", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null; // Style - _border2.color = MSColor.colorWithRGBADictionary({ - r: 0.89, - g: 0.89, - b: 0.89, - a: 1 - }); - _border2.thickness = 2; - connection.line.style().endMarkerType = 2; - } else { - // User provided own style - var ownStyle = getLayerStyles(style); - connection.line.sharedStyle = ownStyle[0]; - } - } + connection.style = styleLine(connection.line, style); // Add to group + addToArrowsGroup(connection.line); return connection; } -function addToArrowsGroup(line, currentGroup) { +function addToArrowsGroup(line) { + var currentGroup = checkForGroup("Arrows"); + if (currentGroup) { currentGroup.addLayers([line]); currentGroup.fixGeometryWithOptions(1); @@ -1021,6 +635,30 @@ function addToArrowsGroup(line, currentGroup) { } } +function addToConditionGroup(condition) { + var currentGroup = checkForGroup("Conditions"); + + if (currentGroup) { + currentGroup.addLayers([condition]); + currentGroup.fixGeometryWithOptions(1); + } else { + // If we don't have a group + var Group = __webpack_require__(/*! sketch/dom */ "sketch/dom").Group; + + var group = new Group({ + parent: currentParentGroup, + name: 'Conditions', + locked: false, + layers: [condition] + }); // Moving this group to the bottom of the page + + group.moveToBack(); + currentGroup = checkForGroup("Conditions"); // There is a problem, that's why duplicated for now + + currentGroup.fixGeometryWithOptions(1); + } +} + function getConnectionsData() { //Refactored var dataArray = []; @@ -1469,48 +1107,10 @@ function start(context, direction, isCondition) { // When user didn't select anything sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Please select more than two layers. Artboards are coming soon 🥳"); } -} // { -// "script": "./script.js", -// "name" : "onLayersMoved", -// "handlers" : { -// "actions": { -// "LayersMoved.finish": "onLayersMoved" -// } -// }, -// "identifier" : "onLayersMoved" -// } - - -function getConditionID(keyword) { - var libraries = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.getLibraries(); - var conditionID, symbolReferences; // let keyword = "#condition" - // log(libraries.length) - - for (var g = 0; g < libraries.length; g++) { - symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document); - - for (var i = 0; i < symbolReferences.length; i++) { - if (symbolReferences[i].name.includes(keyword)) { - conditionID = symbolReferences[i].id; - } - } - } - - if (conditionID == null) { - UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as "#condition" so it will be added here'); - } // symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document) - // log(symbolReferences) - // var symbolMaster = symbolReferences[0].import() - // var instance = symbolMaster.createNewInstance() - // console.log(instance) - // instance.parent = currentParentGroup - // log(symbolMaster) - - - return conditionID; } function addCondition(keyword, x, y) { + // Refactored var libraries = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.getLibraries(); var conditionObject, symbolReferences; @@ -1529,24 +1129,41 @@ function addCondition(keyword, x, y) { } else { var symbolMaster = conditionObject.import(); var instance = symbolMaster.createNewInstance(); - instance.parent = currentParentGroup; + addToConditionGroup(instance); instance.frame.x = x - instance.frame.width / 2; instance.frame.y = y - instance.frame.height / 2; } - return conditionObject; + return conditionObject.id; } -function getConnectionPos(direction) { +function getConnectionPos(firstObject, secondObject, currentGroup, direction) { + // Refactored + var firstObjectAbsPos = firstObject.frame.changeBasis({ + from: firstObject.parent, + to: currentParentGroup + }); + var secondObjectAbsPos = secondObject.frame.changeBasis({ + from: secondObject.parent, + to: currentParentGroup + }); + var diffX, diffY; + + if (currentGroup) { + diffX = currentGroup.frame().x(); + diffY = currentGroup.frame().y(); + } else { + diffX = 0; + diffY = 0; + } + var connectionPos = { firstLayerPosX: null, firstLayerPosY: null, secondLayerPosX: null, secondLayerPosY: null, middlePosX: null, - middlePosY: null, - diffX: null, - diffY: null // Getting all the positions + middlePosY: null // Getting all the positions }; @@ -1555,52 +1172,376 @@ function getConnectionPos(direction) { connectionPos.firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; connectionPos.firstLayerPosY = firstObjectAbsPos.y - diffY; // Second Layer Position End Point Position - secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; - secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height - diffY; // Middle Points + connectionPos.secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; + connectionPos.secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height - diffY; // Middle Points - middlePosX = (firstLayerPosX + secondLayerPosX) / 2; - middlePosY = (firstLayerPosY + secondLayerPosY) / 2; + connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; + connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; } if (direction == "Right") { // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width - diffX; - firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position + connectionPos.firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width - diffX; + connectionPos.firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position - secondLayerPosX = secondObjectAbsPos.x - diffX; - secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points + connectionPos.secondLayerPosX = secondObjectAbsPos.x - diffX; + connectionPos.secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points - middlePosX = (firstLayerPosX + secondLayerPosX) / 2; - middlePosY = (firstLayerPosY + secondLayerPosY) / 2; + connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; + connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; } if (direction == "Down") { // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; - firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height - diffY; // Second Layer Position End Point Position + connectionPos.firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; + connectionPos.firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height - diffY; // Second Layer Position End Point Position - secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; - secondLayerPosY = secondObjectAbsPos.y - diffY; // Middle Points + connectionPos.secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; + connectionPos.secondLayerPosY = secondObjectAbsPos.y - diffY; // Middle Points - middlePosX = (firstLayerPosX + secondLayerPosX) / 2; - middlePosY = (firstLayerPosY + secondLayerPosY) / 2; + connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; + connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; } if (direction == "Left") { // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x - diffX; - firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position + connectionPos.firstLayerPosX = firstObjectAbsPos.x - diffX; + connectionPos.firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position - secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width - diffX; - secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points + connectionPos.secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width - diffX; + connectionPos.secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points - middlePosX = (firstLayerPosX + secondLayerPosX) / 2; - middlePosY = (firstLayerPosY + secondLayerPosY) / 2; + middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; + middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; } return connectionPos; } +function drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction) { + // Refactored + var path = NSBezierPath.bezierPath(); + + if (direction == "Up") { + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + if (direction == "Right") { + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + if (direction == "Down") { + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + if (direction == "Left") { + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + var line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + line.setName("Straight Arrow"); + return line; +} + +function drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction) { + // Refactored + var path = NSBezierPath.bezierPath(); + + if (direction == "Up") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + if (direction == "Right") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + if (direction == "Down") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + if (direction == "Left") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + var line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + var points = line.layers().firstObject().points(); + points[1].cornerRadius = 20; + points[2].cornerRadius = 20; + line.setName("Angled Arrow"); + return line; +} + +function drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction) { + // Refactored + var path = NSBezierPath.bezierPath(); + var line; + + if (direction == "Up") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line + + line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + var points = line.layers().firstObject().points(); + points[0].curveMode = points[1].curveMode = 4; + points[0].hasCurveFrom = points[1].hasCurveTo = true; + + if (firstLayerPosX < secondLayerPosX) { + points[0].curveFrom = { + x: 0, + y: 0.5 + }; + points[0].curveTo = { + x: -0.5, + y: 1 + }; + points[1].curveFrom = { + x: 1, + y: 1 + }; + points[1].curveTo = { + x: 1, + y: 0.5 + }; + } else { + points[0].curveFrom = { + x: 1, + y: 0.5 + }; + points[0].curveTo = { + x: -0.5, + y: 1 + }; + points[1].curveFrom = { + x: 1, + y: 1 + }; + points[1].curveTo = { + x: 0, + y: 0.5 + }; + } + } + + if (direction == "Right") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line + + line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + + var _points = line.layers().firstObject().points(); + + _points[0].curveMode = _points[1].curveMode = 4; + _points[0].hasCurveFrom = _points[1].hasCurveTo = true; + + if (firstLayerPosY < secondLayerPosY) { + _points[0].curveFrom = { + x: 0.5, + y: 0 + }; + _points[0].curveTo = { + x: -0.5, + y: 1 + }; + _points[1].curveFrom = { + x: 1, + y: 1 + }; + _points[1].curveTo = { + x: 0.5, + y: 1 + }; + } else { + _points[0].curveFrom = { + x: 0.5, + y: 1 + }; + _points[0].curveTo = { + x: -0.5, + y: 1 + }; + _points[1].curveFrom = { + x: 1, + y: 1 + }; + _points[1].curveTo = { + x: 0.5, + y: 0 + }; + } + } + + if (direction == "Down") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line + + line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + + var _points2 = line.layers().firstObject().points(); + + _points2[0].curveMode = _points2[1].curveMode = 4; + _points2[0].hasCurveFrom = _points2[1].hasCurveTo = true; + + if (firstLayerPosX < secondLayerPosX) { + _points2[0].curveFrom = { + x: 0, + y: 0.5 + }; + _points2[0].curveTo = { + x: -0.5, + y: 1 + }; + _points2[1].curveFrom = { + x: 1, + y: 1 + }; + _points2[1].curveTo = { + x: 1, + y: 0.5 + }; + } else { + _points2[0].curveFrom = { + x: 1, + y: 0.5 + }; + _points2[0].curveTo = { + x: -0.5, + y: 1 + }; + _points2[1].curveFrom = { + x: 1, + y: 1 + }; + _points2[1].curveTo = { + x: 0, + y: 0.5 + }; + } + } + + if (direction == "Left") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line + + line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + + var _points3 = line.layers().firstObject().points(); + + _points3[0].curveMode = _points3[1].curveMode = 4; + _points3[0].hasCurveFrom = _points3[1].hasCurveTo = true; + + if (firstLayerPosY < secondLayerPosY) { + _points3[0].curveFrom = { + x: 0.5, + y: 0 + }; + _points3[0].curveTo = { + x: -0.5, + y: 1 + }; + _points3[1].curveFrom = { + x: 1, + y: 1 + }; + _points3[1].curveTo = { + x: 0.5, + y: 1 + }; + } else { + _points3[0].curveFrom = { + x: 0.5, + y: 1 + }; + _points3[0].curveTo = { + x: -0.5, + y: 1 + }; + _points3[1].curveFrom = { + x: 1, + y: 1 + }; + _points3[1].curveTo = { + x: 0.5, + y: 0 + }; + } + } // Providing Settings for the arrow + + + line.setName("Curved Arrow"); + return line; +} + +function styleLine(line, style) { + // Refactored + var localStyle; + + if (style != null) { + if (getLayerStyles(style) != null && style != "Default Style") { + localStyle = style; + var ownStyle = getLayerStyles(style); + line.sharedStyle = ownStyle[0]; + } else { + localStyle = "Default Style"; + var border = line.style().addStylePartOfType(1); + border.color = MSColor.colorWithRGBADictionary({ + r: 0.89, + g: 0.89, + b: 0.89, + a: 1 + }); + border.thickness = 2; + line.style().endMarkerType = 2; + } + } else { + if (context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)) { + localStyle = context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey); + + var _ownStyle = getLayerStyles(style); + + line.sharedStyle = _ownStyle[0]; + } else { + localStyle = "Default Style"; + + var _border = line.style().addStylePartOfType(1); + + _border.color = MSColor.colorWithRGBADictionary({ + r: 0.89, + g: 0.89, + b: 0.89, + a: 1 + }); + _border.thickness = 2; + line.style().endMarkerType = 2; + } + } + + return localStyle; +} + /***/ }), /***/ "sketch": diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index c4fd286..50bb055 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","pluginKey","document","sketch","fromNative","context","docData","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","currentParentGroup","currentPage","currentArtboard","newConnectionsData","getConnectionsData","Settings","createAutoArrow","start","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","updateSelectedArrows","selection","count","currentConnectionsData","g","objectID","connectionIndex","findConnectionData","updateArrow","firstObject","secondObject","style","type","direction","line","condition","message","setValue_forKey_onLayer_forPluginIdentifier","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","length","updateArrowsCounter","i","getLayerWithID","sketchObject","parentArtboard","class","push","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","settingForKey","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","views","subviews","title","setSettingForKey","intValue","state","onLayersMoved","action","actionContext","panel","ControlBar","NSPanel","setStyleMask","NSTitledWindowMask","NSFullSizeContentViewWindowMask","setTitleVisibility","NSWindowTitleHidden","setTitlebarAppearsTransparent","setFrame_display","setMovableByWindowBackground","setHasShadow","setLevel","NSFloatingWindowLevel","center","makeKeyAndOrderFront","nil","firstObjectID","secondObjectID","lineID","conditionID","isCondition","conditionObject","remove","createArrow","updateSpacing","localDirection","autoAlignLayer","localType","getDirection","currentArrowsGroup","checkForGroup","arrow","drawConnection","addToArrowsGroup","id","connection","localStyle","groupName","currentGroup","layers","name","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","firstLayerPosX","firstLayerPosY","secondLayerPosX","secondLayerPosY","middlePosX","middlePosY","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","path","NSBezierPath","bezierPath","getConnectionPos","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","addCondition","getLayerStyles","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","sharedStyle","ownStyle","addLayers","fixGeometryWithOptions","Group","group","locked","moveToBack","dataArray","data","arrayNumber","setActiveDirectionSetting","arrowDirectionField","currentDirection","addItemWithTitle","lastItem","setState","docSettings","styles","docTypeSettings","newConnections","refactorLines","lineObject","selectedGroup","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","defineSourceObject","getSourceObjectFromSelection","confirmationAlert","setMessageText","addButtonWithTitle","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","allStyles","allLayerStyles","keyword","includes","getConditionID","libraries","getLibraries","symbolReferences","getImportableSymbolReferencesForDocument","symbolMaster","import","instance","createNewInstance","connectionPos"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch'\n// const { toArray } = require('util')\n\n//\n// Variables\n//\n\nlet UI = require('sketch/ui') \n// var SharedStyle = require('sketch/dom').SharedStyle\n\nconst pluginKey = \"flowArrows\"\nconst document = sketch.fromNative(context.document)\nlet docData = context.document.documentData()\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey)\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards\nlet newConnectionsData = getConnectionsData()\n\n// Settings\nvar Settings = require('sketch/settings')\n\n \n//\n// Create Connection Function\n//\n\nexport default function(context) {}\nexport function createAutoArrow(context){start(context, \"Auto\", false)}\nexport function createRightArrow(context){start(context, \"Right\", false)}\nexport function createDownArrow(context){start(context, \"Down\", false)}\nexport function createLeftArrow(context){start(context, \"Left\", false)}\nexport function createUpArrow(context){start(context, \"Up\", false)}\n\nexport function createRightArrowWithCondition(context){start(context, \"Right\", true)}\nexport function createDownArrowWithCondition(context){start(context, \"Down\", true)}\nexport function createLeftArrowWithCondition(context){start(context, \"Left\", true)}\nexport function createUpArrowWithCondition(context){start(context, \"Up\", true)}\n\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n\n let selection = context.selection\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n // let sourceObjectID = getSourceObjectFromSelection(selection)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let conditionObject = document.getLayerWithID(conditionID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n if(!isCondition && conditionObject){conditionObject.remove()}\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition) { \n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n\n // Process of creating new connection \n let localType = type == null ? Settings.settingForKey(\"arrowType\") : type\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction\n\n let currentArrowsGroup = checkForGroup(\"Arrows\") // Need to refactor\n let arrow = drawConnection(firstObjectID, secondObjectID, style, localType, localDirection, currentArrowsGroup, isCondition)\n \n addToArrowsGroup(arrow.line, currentArrowsGroup)\n\n let conditionID = arrow.condition != null && arrow.condition.length > 0 ? arrow.condition.id : null\n\n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : localStyle,\n condition : conditionID,\n type : localType,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForGroup(groupName) {\n let currentGroup = null\n\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n // If we already have \"Arrow\" group we need to save it's folder\n currentGroup = currentParentGroup.layers()[i]\n } \n }\n\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\"\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\"\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\"\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\"\n }\n }\n\n return direction\n}\n\nfunction drawConnection(firstObjectID, secondObjectID, style, type, direction, currentGroup, condition){\n let firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, middlePosX, middlePosY, diffX, diffY\n let connection = {line: [], condition: []}\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n\n if(currentGroup){\n //if we already have a group, need to specify the difference\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n // Drawing a line\n let path = NSBezierPath.bezierPath()\n\n getConnectionPos(direction)\n\n // // Getting all the positions\n // if(direction == \"Up\"){\n // // First Layer Position Start Point Position\n // firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n // firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // // Second Layer Position End Point Position\n // secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n // secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // // Middle Points\n // middlePosX = (firstLayerPosX + secondLayerPosX)/2\n // middlePosY = (firstLayerPosY + secondLayerPosY)/2\n // }\n\n // if(direction == \"Right\"){\n // // First Layer Position Start Point Position\n // firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n // firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // // Second Layer Position End Point Position\n // secondLayerPosX = secondObjectAbsPos.x-diffX\n // secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // // Middle Points\n // middlePosX = (firstLayerPosX + secondLayerPosX)/2\n // middlePosY = (firstLayerPosY + secondLayerPosY)/2\n // }\n\n // if(direction == \"Down\"){\n // // First Layer Position Start Point Position\n // firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n // firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // // Second Layer Position End Point Position\n // secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n // secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // // Middle Points\n // middlePosX = (firstLayerPosX + secondLayerPosX)/2\n // middlePosY = (firstLayerPosY + secondLayerPosY)/2\n // }\n\n // if(direction == \"Left\"){\n // // First Layer Position Start Point Position\n // firstLayerPosX = firstObjectAbsPos.x-diffX\n // firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // // Second Layer Position End Point Position\n // secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n // secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // // Middle Points\n // middlePosX = (firstLayerPosX + secondLayerPosX)/2\n // middlePosY = (firstLayerPosY + secondLayerPosY)/2\n // }\n\n if(type == \"Angled\" || type == null){\n // Based on direction, we need to specify connection points\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n\n\n // Making middle points rounded\n let points = connection.line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n\n // Providing Settings for the arrow\n connection.line.setName(\"Arrow\")\n }\n\n if(type == \"Straight\"){\n // Based on direction, we need to specify connection points\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n // Painting the line\n connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n \n // Providing Settings for the arrow\n connection.line.setName(\"Arrow\")\n }\n\n if(type == \"Curved\"){\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = connection.line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n }\n \n return sourceObjectID\n}\n\nfunction confirmationAlert(alert, message) {\n // Title\n alert.setMessageText(\"Would you like to delete all the arrows from \"+message)\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Delete Arrows\")\n alert.addButtonWithTitle(\"Cancel\")\n \n // Creating the view\n const viewWidth = 300\n const viewHeight = 40\n \n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n \n // Label\n var infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(-1, viewHeight - 40, 330, 40))\n \n infoLabel.setStringValue(\"ℹ️ You can select layers, artboards to delete all the arrows from selected one only\")\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n \n view.addSubview(infoLabel)\n\n return alert\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n\n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i])}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i])}\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, isCondition){\n let selection = context.selection\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n \n if(connectionIndex == null){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, isCondition)\n sketch.UI.message(\"New connection is created 🚀\")\n } else {\n // Need to remake the arrow condition\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\n// {\n// \"script\": \"./script.js\",\n// \"name\" : \"onLayersMoved\",\n// \"handlers\" : {\n// \"actions\": {\n// \"LayersMoved.finish\": \"onLayersMoved\"\n// }\n// },\n// \"identifier\" : \"onLayersMoved\"\n// }\n\nfunction getConditionID(keyword){\n let libraries = sketch.getLibraries()\n let conditionID, symbolReferences\n // let keyword = \"#condition\"\n\n // log(libraries.length)\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionID = symbolReferences[i].id \n }\n }\n }\n\n if(conditionID == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n }\n\n // symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n // log(symbolReferences)\n // var symbolMaster = symbolReferences[0].import()\n\n\n // var instance = symbolMaster.createNewInstance()\n // console.log(instance)\n\n\n // instance.parent = currentParentGroup\n // log(symbolMaster)\n\n return conditionID\n}\n\nfunction addCondition(keyword, x, y){\n let libraries = sketch.getLibraries()\n let conditionObject, symbolReferences\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionObject = symbolReferences[i]\n }\n }\n }\n\n if(conditionObject == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n } else {\n let symbolMaster = conditionObject.import()\n let instance = symbolMaster.createNewInstance()\n instance.parent = currentParentGroup\n instance.frame.x = x - instance.frame.width / 2 \n instance.frame.y = y - instance.frame.height / 2\n }\n\n return conditionObject\n}\n\nfunction getConnectionPos(direction){\n let connectionPos = {firstLayerPosX: null, firstLayerPosY: null, secondLayerPosX: null, secondLayerPosY: null, middlePosX: null, middlePosY: null, diffX: null, diffY: null}\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n firstLayerPosX = firstObjectAbsPos.x-diffX\n firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n middlePosX = (firstLayerPosX + secondLayerPosX)/2\n middlePosY = (firstLayerPosY + secondLayerPosY)/2\n }\n return connectionPos\n}\n\n\n\n\n\n\n","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","pluginKey","document","sketch","fromNative","context","docData","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","currentParentGroup","currentPage","currentArtboard","newConnectionsData","getConnectionsData","Settings","createAutoArrow","start","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","updateSelectedArrows","selection","count","currentConnectionsData","g","objectID","connectionIndex","findConnectionData","updateArrow","firstObject","secondObject","style","type","direction","line","condition","message","setValue_forKey_onLayer_forPluginIdentifier","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","length","updateArrowsCounter","i","getLayerWithID","sketchObject","parentArtboard","class","push","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","settingForKey","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","views","subviews","title","setSettingForKey","intValue","state","onLayersMoved","action","actionContext","panel","ControlBar","NSPanel","setStyleMask","NSTitledWindowMask","NSFullSizeContentViewWindowMask","setTitleVisibility","NSWindowTitleHidden","setTitlebarAppearsTransparent","setFrame_display","setMovableByWindowBackground","setHasShadow","setLevel","NSFloatingWindowLevel","center","makeKeyAndOrderFront","nil","firstObjectID","secondObjectID","lineID","conditionID","isCondition","conditionObject","remove","createArrow","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","checkForGroup","groupName","currentGroup","layers","name","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","localType","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","addCondition","styleLine","addToArrowsGroup","addLayers","fixGeometryWithOptions","Group","group","parent","locked","moveToBack","addToConditionGroup","dataArray","data","arrayNumber","setActiveDirectionSetting","arrowDirectionField","currentDirection","addItemWithTitle","lastItem","setState","docSettings","styles","getLayerStyles","docTypeSettings","newConnections","refactorLines","lineObject","selectedGroup","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","defineSourceObject","id","getSourceObjectFromSelection","confirmationAlert","setMessageText","addButtonWithTitle","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","allStyles","allLayerStyles","keyword","includes","libraries","getLibraries","symbolReferences","getImportableSymbolReferencesForDocument","symbolMaster","import","instance","createNewInstance","firstObjectAbsPos","changeBasis","from","to","secondObjectAbsPos","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","setName","points","cornerRadius","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","localStyle","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch'\n// const { toArray } = require('util')\n\n//\n// Variables\n//\n\nlet UI = require('sketch/ui') \n// var SharedStyle = require('sketch/dom').SharedStyle\n\nconst pluginKey = \"flowArrows\"\nconst document = sketch.fromNative(context.document)\nlet docData = context.document.documentData()\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey)\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards\nlet newConnectionsData = getConnectionsData()\n\n// Settings\nvar Settings = require('sketch/settings')\n\n \n//\n// Create Connection Function\n//\n\nexport default function(context) {}\nexport function createAutoArrow(context){start(context, \"Auto\", false)}\nexport function createRightArrow(context){start(context, \"Right\", false)}\nexport function createDownArrow(context){start(context, \"Down\", false)}\nexport function createLeftArrow(context){start(context, \"Left\", false)}\nexport function createUpArrow(context){start(context, \"Up\", false)}\n\nexport function createRightArrowWithCondition(context){start(context, \"Right\", true)}\nexport function createDownArrowWithCondition(context){start(context, \"Down\", true)}\nexport function createLeftArrowWithCondition(context){start(context, \"Left\", true)}\nexport function createUpArrowWithCondition(context){start(context, \"Up\", true)}\n\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n\n let selection = context.selection\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n // let sourceObjectID = getSourceObjectFromSelection(selection)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let conditionObject = document.getLayerWithID(conditionID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n if(!isCondition && conditionObject){conditionObject.remove()}\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition) { \n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, direction, isCondition)\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForGroup(groupName) { // refactored\n let currentGroup = null\n\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n // If we already have \"Arrow\" group we need to save it's folder\n currentGroup = currentParentGroup.layers()[i]\n } \n }\n\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\"\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\"\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\"\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\"\n }\n }\n\n return direction\n}\n\nfunction drawConnection(firstObjectID, secondObjectID, style, type, localDirection, condition){ // Refactored\n // Process of creating new connection \n let localType = type == null ? Settings.settingForKey(\"arrowType\") : type\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let connectionPos = getConnectionPos(firstObject, secondObject, currentGroup, localDirection)\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n if(localType == \"Angled\" || localType == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n if(localType == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n if(localType == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n\n // Condition\n connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style)\n\n // Add to group\n addToArrowsGroup(connection.line)\n\n return connection\n}\n\nfunction addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\")\n\n if(currentGroup){\n currentGroup.addLayers([line])\n currentGroup.fixGeometryWithOptions(1)\n } else {\n // If we don't have a group\n let Group = require('sketch/dom').Group\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n })\n // Moving this group to the bottom of the page\n group.moveToBack()\n currentGroup = checkForGroup(\"Arrows\")\n currentGroup.fixGeometryWithOptions(1)\n }\n}\n\nfunction addToConditionGroup(condition){\n let currentGroup = checkForGroup(\"Conditions\") \n\n if(currentGroup){\n currentGroup.addLayers([condition])\n currentGroup.fixGeometryWithOptions(1)\n } else {\n // If we don't have a group\n let Group = require('sketch/dom').Group\n let group = new Group({\n parent: currentParentGroup,\n name: 'Conditions',\n locked: false,\n layers: [condition]\n })\n // Moving this group to the bottom of the page\n group.moveToBack()\n currentGroup = checkForGroup(\"Conditions\") // There is a problem, that's why duplicated for now\n currentGroup.fixGeometryWithOptions(1)\n }\n}\n\n\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = []\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i])\n }\n } \n return dataArray\n}\n\nfunction findConnectionData(firstObjectID, secondObjectID, data){\n let arrayNumber = null\n firstObjectID = String(firstObjectID)\n secondObjectID = String(secondObjectID)\n\n if(pluginData){\n // If we have database, need to check for connections\n\n for(let y = 0; y < data.length; y++){\n\n if(firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject){\n // if we found that we have this object in connection database already\n if(secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject){\n // if we found that we have this object in connection database already\n arrayNumber = y\n } \n }\n }\n }\n return arrayNumber\n}\n\nfunction setActiveDirectionSetting(arrowDirectionField){\n let currentDirection = \"Auto\"\n\n if(Settings.settingForKey(\"arrowDirection\")){\n // if there is data in settings\n currentDirection = Settings.settingForKey(\"arrowDirection\") \n \n if(currentDirection == \"Auto\"){\n arrowDirectionField.addItemWithTitle(\"Auto\")\n arrowDirectionField.lastItem().setState(1)\n arrowDirectionField.addItemWithTitle(\"Right\")\n arrowDirectionField.lastItem().setState(0)\n arrowDirectionField.addItemWithTitle(\"Down\")\n arrowDirectionField.lastItem().setState(0)\n arrowDirectionField.addItemWithTitle(\"Left\")\n arrowDirectionField.lastItem().setState(0)\n arrowDirectionField.addItemWithTitle(\"Up\")\n arrowDirectionField.lastItem().setState(0)\n } \n \n if(currentDirection == \"Right\"){\n arrowDirectionField.addItemWithTitle(\"Right\")\n arrowDirectionField.lastItem().setState(1)\n arrowDirectionField.addItemWithTitle(\"Down\")\n arrowDirectionField.lastItem().setState(0)\n arrowDirectionField.addItemWithTitle(\"Left\")\n arrowDirectionField.lastItem().setState(0)\n arrowDirectionField.addItemWithTitle(\"Up\")\n arrowDirectionField.lastItem().setState(0)\n arrowDirectionField.addItemWithTitle(\"Auto\")\n arrowDirectionField.lastItem().setState(0)\n } \n\n if(currentDirection == \"Down\"){\n arrowDirectionField.addItemWithTitle(\"Down\")\n arrowDirectionField.lastItem().setState(1)\n arrowDirectionField.addItemWithTitle(\"Left\")\n arrowDirectionField.lastItem().setState(0)\n arrowDirectionField.addItemWithTitle(\"Up\")\n arrowDirectionField.lastItem().setState(0)\n arrowDirectionField.addItemWithTitle(\"Auto\")\n arrowDirectionField.lastItem().setState(0)\n arrowDirectionField.addItemWithTitle(\"Right\")\n arrowDirectionField.lastItem().setState(0)\n } \n\n if(currentDirection == \"Left\"){\n arrowDirectionField.addItemWithTitle(\"Left\")\n arrowDirectionField.lastItem().setState(1)\n arrowDirectionField.addItemWithTitle(\"Up\")\n arrowDirectionField.lastItem().setState(0)\n arrowDirectionField.addItemWithTitle(\"Auto\")\n arrowDirectionField.lastItem().setState(0)\n arrowDirectionField.addItemWithTitle(\"Right\")\n arrowDirectionField.lastItem().setState(0)\n arrowDirectionField.addItemWithTitle(\"Down\")\n arrowDirectionField.lastItem().setState(0)\n } \n\n if(currentDirection == \"Up\"){\n arrowDirectionField.addItemWithTitle(\"Up\")\n arrowDirectionField.lastItem().setState(1)\n arrowDirectionField.addItemWithTitle(\"Auto\")\n arrowDirectionField.lastItem().setState(0)\n arrowDirectionField.addItemWithTitle(\"Right\")\n arrowDirectionField.lastItem().setState(0)\n arrowDirectionField.addItemWithTitle(\"Down\")\n arrowDirectionField.lastItem().setState(0)\n arrowDirectionField.addItemWithTitle(\"Left\")\n arrowDirectionField.lastItem().setState(0)\n } \n\n } else {\n // Show default\n arrowDirectionField.addItemWithTitle(\"Auto\")\n arrowDirectionField.addItemWithTitle(\"Right\")\n arrowDirectionField.addItemWithTitle(\"Down\")\n arrowDirectionField.addItemWithTitle(\"Left\")\n arrowDirectionField.addItemWithTitle(\"Up\")\n }\n}\n\nfunction setActiveStyleSetting(arrowStylingField){\n let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)\n let styles = getLayerStyles(null)\n\n if(docSettings){\n // We have info about the settings in the current document\n \n if(docSettings != \"Default Style\") {\n // if user specified own option\n arrowStylingField.addItemWithTitle(docSettings)\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n if(styles[i].name() != docSettings){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n\n } else {\n // Need to show the default first\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n } else {\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n}\n\nfunction setActiveTypeSetting(arrowTypeField){\n let docTypeSettings = Settings.settingForKey(\"arrowType\") \n\n\n if(docTypeSettings){\n // We have info about the settings in the current document\n \n if(docTypeSettings == \"Angled\"){\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(0)\n } \n\n if(docTypeSettings == \"Curved\"){\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(0)\n } \n\n if(docTypeSettings == \"Straight\"){\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(0)\n } \n } else {\n // Show default\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.addItemWithTitle(\"Straight\")\n }\n\n}\n\nfunction deleteConnectionFromData(connectionIndex){ // Refactored\n let newConnections = []\n if(pluginData){\n // If we have database\n let connections = pluginData\n\n for (let i = 0; i < connections.length; i ++) {\n // Updating all connections without deleted one\n if(i != connectionIndex){\n newConnections.push(connections[i])\n }\n }\n }\n return newConnections\n}\n\nfunction refactorLines(group){ // Need to finish\n for(let i = 0; i < group.layers().length; i++){\n // Here we need to go through each data in our database and delete line if there is no data\n }\n}\n\nfunction deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID)\n let selectedGroup\n if(lineObject){\n selectedGroup = lineObject.parent\n lineObject.remove()\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove()\n }\n }\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID)\n let childObject = document.getLayerWithID(childObjectID)\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\")\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID)\n let childObject = document.getLayerWithID(childObjectID)\n let sourceMidY, childMidY, sourceMidX, childMidX, diff\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2\n childMidY = childObject.frame.y + childObject.frame.height/2\n diff = sourceMidY - childMidY\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n }\n \n return sourceObjectID\n}\n\nfunction confirmationAlert(alert, message) {\n // Title\n alert.setMessageText(\"Would you like to delete all the arrows from \"+message)\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Delete Arrows\")\n alert.addButtonWithTitle(\"Cancel\")\n \n // Creating the view\n const viewWidth = 300\n const viewHeight = 40\n \n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n \n // Label\n var infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(-1, viewHeight - 40, 330, 40))\n \n infoLabel.setStringValue(\"ℹ️ You can select layers, artboards to delete all the arrows from selected one only\")\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n \n view.addSubview(infoLabel)\n\n return alert\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n\n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i])}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i])}\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, isCondition){\n let selection = context.selection\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n \n if(connectionIndex == null){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, isCondition)\n sketch.UI.message(\"New connection is created 🚀\")\n } else {\n // Need to remake the arrow condition\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\nfunction addCondition(keyword, x, y){ // Refactored\n let libraries = sketch.getLibraries()\n let conditionObject, symbolReferences\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionObject = symbolReferences[i]\n }\n }\n }\n\n if(conditionObject == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n } else {\n let symbolMaster = conditionObject.import()\n let instance = symbolMaster.createNewInstance()\n addToConditionGroup(instance)\n instance.frame.x = x - instance.frame.width / 2 \n instance.frame.y = y - instance.frame.height / 2\n }\n\n return conditionObject.id\n}\n\nfunction getConnectionPos(firstObject, secondObject, currentGroup, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n let diffX, diffY\n\n if(currentGroup){\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n let connectionPos = {\n firstLayerPosX: null, \n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n return connectionPos\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n line.setName(\"Straight Arrow\")\n\n return line\n}\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n line.setName(\"Angled Arrow\")\n\n return line\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n let line\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX 0 ? arrow.condition.id : null - // Storage for current connection let connection = { firstObject : firstObjectID, secondObject : secondObjectID, - style : localStyle, - condition : conditionID, - type : localType, + style : arrow.style, + condition : arrow.conditionID, + type : arrow.type, direction: localDirection, line : arrow.line.objectID() } + // Need to save this data to the global array newConnectionsData.push(connection) } -function checkForGroup(groupName) { +function checkForGroup(groupName) { // refactored let currentGroup = null // Checking all the groups that we have @@ -480,334 +475,39 @@ function getDirection(firstObjectID, secondObjectID){ // Refactored return direction } -function drawConnection(firstObjectID, secondObjectID, style, type, direction, currentGroup, condition){ - let firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, middlePosX, middlePosY, diffX, diffY - let connection = {line: [], condition: []} +function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, condition){ // Refactored + // Process of creating new connection + let localType = type == null ? Settings.settingForKey("arrowType") : type let firstObject = document.getLayerWithID(firstObjectID) let secondObject = document.getLayerWithID(secondObjectID) - - - let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup}) - let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup}) - - if(currentGroup){ - //if we already have a group, need to specify the difference - diffX = currentGroup.frame().x() - diffY = currentGroup.frame().y() - } else { - diffX = 0 - diffY = 0 - } - - // Drawing a line - let path = NSBezierPath.bezierPath() - - getConnectionPos(direction) - - // // Getting all the positions - // if(direction == "Up"){ - // // First Layer Position Start Point Position - // firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX - // firstLayerPosY = firstObjectAbsPos.y-diffY - - // // Second Layer Position End Point Position - // secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX - // secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY - - // // Middle Points - // middlePosX = (firstLayerPosX + secondLayerPosX)/2 - // middlePosY = (firstLayerPosY + secondLayerPosY)/2 - // } - - // if(direction == "Right"){ - // // First Layer Position Start Point Position - // firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX - // firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY - - // // Second Layer Position End Point Position - // secondLayerPosX = secondObjectAbsPos.x-diffX - // secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY - - // // Middle Points - // middlePosX = (firstLayerPosX + secondLayerPosX)/2 - // middlePosY = (firstLayerPosY + secondLayerPosY)/2 - // } - - // if(direction == "Down"){ - // // First Layer Position Start Point Position - // firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX - // firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY - - // // Second Layer Position End Point Position - // secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX - // secondLayerPosY = secondObjectAbsPos.y-diffY - - // // Middle Points - // middlePosX = (firstLayerPosX + secondLayerPosX)/2 - // middlePosY = (firstLayerPosY + secondLayerPosY)/2 - // } - - // if(direction == "Left"){ - // // First Layer Position Start Point Position - // firstLayerPosX = firstObjectAbsPos.x-diffX - // firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY - - // // Second Layer Position End Point Position - // secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX - // secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY - - // // Middle Points - // middlePosX = (firstLayerPosX + secondLayerPosX)/2 - // middlePosY = (firstLayerPosY + secondLayerPosY)/2 - // } - - if(type == "Angled" || type == null){ - // Based on direction, we need to specify connection points - - if(direction == "Up"){ - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)) - path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY)) - path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY)) - path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)) - } - - if(direction == "Right"){ - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)) - path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY)) - path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY)) - path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)) - } - - if(direction == "Down"){ - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)) - path.lineToPoint(NSMakePoint(firstLayerPosX,middlePosY)) - path.lineToPoint(NSMakePoint(secondLayerPosX,middlePosY)) - path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)) - } - - if(direction == "Left"){ - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)) - path.lineToPoint(NSMakePoint(middlePosX,firstLayerPosY)) - path.lineToPoint(NSMakePoint(middlePosX,secondLayerPosY)) - path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)) - } - - // Painting the line - connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) - - - // Making middle points rounded - let points = connection.line.layers().firstObject().points() - points[1].cornerRadius = 20 - points[2].cornerRadius = 20 - - // Providing Settings for the arrow - connection.line.setName("Arrow") - } - - if(type == "Straight"){ - // Based on direction, we need to specify connection points - if(direction == "Up"){ - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)) - path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)) - } - - if(direction == "Right"){ - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)) - path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)) - } - - if(direction == "Down"){ - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)) - path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)) - } - - if(direction == "Left"){ - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)) - path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)) - } - - // Painting the line - connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) - - // Providing Settings for the arrow - connection.line.setName("Arrow") - } - - if(type == "Curved"){ - if(direction == "Up"){ - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)) - path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)) - - // Painting the line - connection.line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) - let points = connection.line.layers().firstObject().points() - - points[0].curveMode = points[1].curveMode = 4 - points[0].hasCurveFrom = points[1].hasCurveTo = true - - if(firstLayerPosX Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as "#condition" so it will be added here') - } - - // symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document) - - // log(symbolReferences) - // var symbolMaster = symbolReferences[0].import() - - - // var instance = symbolMaster.createNewInstance() - // console.log(instance) - - - // instance.parent = currentParentGroup - // log(symbolMaster) - - return conditionID -} - -function addCondition(keyword, x, y){ +function addCondition(keyword, x, y){ // Refactored let libraries = sketch.getLibraries() let conditionObject, symbolReferences @@ -1336,16 +1012,37 @@ function addCondition(keyword, x, y){ } else { let symbolMaster = conditionObject.import() let instance = symbolMaster.createNewInstance() - instance.parent = currentParentGroup + addToConditionGroup(instance) instance.frame.x = x - instance.frame.width / 2 instance.frame.y = y - instance.frame.height / 2 } - return conditionObject + return conditionObject.id } -function getConnectionPos(direction){ - let connectionPos = {firstLayerPosX: null, firstLayerPosY: null, secondLayerPosX: null, secondLayerPosY: null, middlePosX: null, middlePosY: null, diffX: null, diffY: null} +function getConnectionPos(firstObject, secondObject, currentGroup, direction){ // Refactored + + let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup}) + let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup}) + let diffX, diffY + + if(currentGroup){ + diffX = currentGroup.frame().x() + diffY = currentGroup.frame().y() + } else { + diffX = 0 + diffY = 0 + } + + let connectionPos = { + firstLayerPosX: null, + firstLayerPosY: null, + secondLayerPosX: null, + secondLayerPosY: null, + middlePosX: null, + middlePosY: null + } + // Getting all the positions if(direction == "Up"){ // First Layer Position Start Point Position @@ -1353,58 +1050,282 @@ function getConnectionPos(direction){ connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY // Second Layer Position End Point Position - secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX - secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY + connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX + connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY // Middle Points - middlePosX = (firstLayerPosX + secondLayerPosX)/2 - middlePosY = (firstLayerPosY + secondLayerPosY)/2 + connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2 + connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2 } if(direction == "Right"){ // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX - firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY + connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX + connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY // Second Layer Position End Point Position - secondLayerPosX = secondObjectAbsPos.x-diffX - secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY + connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX + connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY // Middle Points - middlePosX = (firstLayerPosX + secondLayerPosX)/2 - middlePosY = (firstLayerPosY + secondLayerPosY)/2 + connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2 + connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2 } if(direction == "Down"){ // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX - firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY + connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX + connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY // Second Layer Position End Point Position - secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX - secondLayerPosY = secondObjectAbsPos.y-diffY + connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX + connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY // Middle Points - middlePosX = (firstLayerPosX + secondLayerPosX)/2 - middlePosY = (firstLayerPosY + secondLayerPosY)/2 + connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2 + connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2 } if(direction == "Left"){ // First Layer Position Start Point Position - firstLayerPosX = firstObjectAbsPos.x-diffX - firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY + connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX + connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY // Second Layer Position End Point Position - secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX - secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY + connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX + connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY // Middle Points - middlePosX = (firstLayerPosX + secondLayerPosX)/2 - middlePosY = (firstLayerPosY + secondLayerPosY)/2 + middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2 + middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2 } + return connectionPos } +function drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored + let path = NSBezierPath.bezierPath() + + if(direction == "Up"){ + path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)) + path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)) + } + + if(direction == "Right"){ + path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)) + path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)) + } + + if(direction == "Down"){ + path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)) + path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)) + } + + if(direction == "Left"){ + path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)) + path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)) + } + + let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) + line.setName("Straight Arrow") + + return line +} + +function drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored + let path = NSBezierPath.bezierPath() + + if(direction == "Up"){ + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)) + path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)) + path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)) + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)) + } + + if(direction == "Right"){ + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)) + path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)) + path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)) + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)) + } + + if(direction == "Down"){ + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)) + path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)) + path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)) + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)) + } + + if(direction == "Left"){ + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)) + path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)) + path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)) + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)) + } + + let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) + let points = line.layers().firstObject().points() + points[1].cornerRadius = 20 + points[2].cornerRadius = 20 + line.setName("Angled Arrow") + + return line +} + +function drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored + let path = NSBezierPath.bezierPath() + let line + + if(direction == "Up"){ + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)) + path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)) + + // Painting the line + line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) + let points = line.layers().firstObject().points() + + points[0].curveMode = points[1].curveMode = 4 + points[0].hasCurveFrom = points[1].hasCurveTo = true + + if(firstLayerPosX Date: Fri, 5 Apr 2019 07:44:22 +0300 Subject: [PATCH 14/44] trying to fix groups for conditions --- arrows.sketchplugin/Contents/Sketch/script.js | 143 +++------------ .../Contents/Sketch/script.js.map | 2 +- src/script.js | 168 ++++-------------- 3 files changed, 54 insertions(+), 259 deletions(-) diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index 7b04fae..494da84 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -495,6 +495,7 @@ function updateArrow(firstObjectID, secondObjectID, style, type, direction, line conditionObject.remove(); } + log(conditionID); newConnectionsData = deleteConnectionFromData(connectionIndex); if (firstObject && secondObject) { @@ -504,6 +505,7 @@ function updateArrow(firstObjectID, secondObjectID, style, type, direction, line } function createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition) { + // Refactored var localDirection = direction == "Auto" ? getDirection(firstObjectID, secondObjectID) : direction; // Main Operations based on the settings updateSpacing(firstObjectID, secondObjectID, localDirection); @@ -530,7 +532,6 @@ function checkForGroup(groupName) { for (var i = 0; i < currentParentGroup.layers().count(); i++) { if (currentParentGroup.layers()[i].name() == groupName) { - // If we already have "Arrow" group we need to save it's folder currentGroup = currentParentGroup.layers()[i]; } } @@ -582,7 +583,7 @@ function drawConnection(firstObjectID, secondObjectID, style, type, localDirecti var localType = type == null ? Settings.settingForKey("arrowType") : type; var firstObject = document.getLayerWithID(firstObjectID); var secondObject = document.getLayerWithID(secondObjectID); - var connectionPos = getConnectionPos(firstObject, secondObject, currentGroup, localDirection); + var connectionPos = getConnectionPos(firstObject, secondObject, localDirection); var connection = { line: [], conditionID: [], @@ -614,6 +615,7 @@ function drawConnection(firstObjectID, secondObjectID, style, type, localDirecti function addToArrowsGroup(line) { var currentGroup = checkForGroup("Arrows"); + log("Arr " + line); if (currentGroup) { currentGroup.addLayers([line]); @@ -637,6 +639,7 @@ function addToArrowsGroup(line) { function addToConditionGroup(condition) { var currentGroup = checkForGroup("Conditions"); + log("Con " + condition); if (currentGroup) { currentGroup.addLayers([condition]); @@ -648,13 +651,14 @@ function addToConditionGroup(condition) { var group = new Group({ parent: currentParentGroup, name: 'Conditions', - locked: false, layers: [condition] }); // Moving this group to the bottom of the page group.moveToBack(); - currentGroup = checkForGroup("Conditions"); // There is a problem, that's why duplicated for now + group.adjustToFit(); + currentGroup = checkForGroup("Conditions"); // log("g "+group) + log("Cg " + currentGroup); currentGroup.fixGeometryWithOptions(1); } } @@ -693,87 +697,6 @@ function findConnectionData(firstObjectID, secondObjectID, data) { return arrayNumber; } -function setActiveDirectionSetting(arrowDirectionField) { - var currentDirection = "Auto"; - - if (Settings.settingForKey("arrowDirection")) { - // if there is data in settings - currentDirection = Settings.settingForKey("arrowDirection"); - - if (currentDirection == "Auto") { - arrowDirectionField.addItemWithTitle("Auto"); - arrowDirectionField.lastItem().setState(1); - arrowDirectionField.addItemWithTitle("Right"); - arrowDirectionField.lastItem().setState(0); - arrowDirectionField.addItemWithTitle("Down"); - arrowDirectionField.lastItem().setState(0); - arrowDirectionField.addItemWithTitle("Left"); - arrowDirectionField.lastItem().setState(0); - arrowDirectionField.addItemWithTitle("Up"); - arrowDirectionField.lastItem().setState(0); - } - - if (currentDirection == "Right") { - arrowDirectionField.addItemWithTitle("Right"); - arrowDirectionField.lastItem().setState(1); - arrowDirectionField.addItemWithTitle("Down"); - arrowDirectionField.lastItem().setState(0); - arrowDirectionField.addItemWithTitle("Left"); - arrowDirectionField.lastItem().setState(0); - arrowDirectionField.addItemWithTitle("Up"); - arrowDirectionField.lastItem().setState(0); - arrowDirectionField.addItemWithTitle("Auto"); - arrowDirectionField.lastItem().setState(0); - } - - if (currentDirection == "Down") { - arrowDirectionField.addItemWithTitle("Down"); - arrowDirectionField.lastItem().setState(1); - arrowDirectionField.addItemWithTitle("Left"); - arrowDirectionField.lastItem().setState(0); - arrowDirectionField.addItemWithTitle("Up"); - arrowDirectionField.lastItem().setState(0); - arrowDirectionField.addItemWithTitle("Auto"); - arrowDirectionField.lastItem().setState(0); - arrowDirectionField.addItemWithTitle("Right"); - arrowDirectionField.lastItem().setState(0); - } - - if (currentDirection == "Left") { - arrowDirectionField.addItemWithTitle("Left"); - arrowDirectionField.lastItem().setState(1); - arrowDirectionField.addItemWithTitle("Up"); - arrowDirectionField.lastItem().setState(0); - arrowDirectionField.addItemWithTitle("Auto"); - arrowDirectionField.lastItem().setState(0); - arrowDirectionField.addItemWithTitle("Right"); - arrowDirectionField.lastItem().setState(0); - arrowDirectionField.addItemWithTitle("Down"); - arrowDirectionField.lastItem().setState(0); - } - - if (currentDirection == "Up") { - arrowDirectionField.addItemWithTitle("Up"); - arrowDirectionField.lastItem().setState(1); - arrowDirectionField.addItemWithTitle("Auto"); - arrowDirectionField.lastItem().setState(0); - arrowDirectionField.addItemWithTitle("Right"); - arrowDirectionField.lastItem().setState(0); - arrowDirectionField.addItemWithTitle("Down"); - arrowDirectionField.lastItem().setState(0); - arrowDirectionField.addItemWithTitle("Left"); - arrowDirectionField.lastItem().setState(0); - } - } else { - // Show default - arrowDirectionField.addItemWithTitle("Auto"); - arrowDirectionField.addItemWithTitle("Right"); - arrowDirectionField.addItemWithTitle("Down"); - arrowDirectionField.addItemWithTitle("Left"); - arrowDirectionField.addItemWithTitle("Up"); - } -} - function setActiveStyleSetting(arrowStylingField) { var docSettings = context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey); var styles = getLayerStyles(null); @@ -865,12 +788,6 @@ function deleteConnectionFromData(connectionIndex) { return newConnections; } -function refactorLines(group) { - // Need to finish - for (var i = 0; i < group.layers().length; i++) {// Here we need to go through each data in our database and delete line if there is no data - } -} - function deleteLine(lineID) { // refactored var lineObject = document.getLayerWithID(lineID); @@ -996,27 +913,6 @@ function getSourceObjectFromSelection(selection, direction) { return sourceObjectID; } -function confirmationAlert(alert, message) { - // Title - alert.setMessageText("Would you like to delete all the arrows from " + message); // Creating dialog buttons - - alert.addButtonWithTitle("Delete Arrows"); - alert.addButtonWithTitle("Cancel"); // Creating the view - - var viewWidth = 300; - var viewHeight = 40; - var view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight)); - alert.addAccessoryView(view); // Label - - var infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(-1, viewHeight - 40, 330, 40)); - infoLabel.setStringValue("ℹ️ You can select layers, artboards to delete all the arrows from selected one only"); - infoLabel.setSelectable(false); - infoLabel.setDrawsBackground(false); - infoLabel.setBezeled(false); - view.addSubview(infoLabel); - return alert; -} - function alertSetup(alert, viewWidth, viewHeight) { // Title alert.setMessageText("Arrow Plugin Settings"); // Creating dialog buttons @@ -1129,6 +1025,7 @@ function addCondition(keyword, x, y) { } else { var symbolMaster = conditionObject.import(); var instance = symbolMaster.createNewInstance(); + instance.parent = currentParentGroup; addToConditionGroup(instance); instance.frame.x = x - instance.frame.width / 2; instance.frame.y = y - instance.frame.height / 2; @@ -1137,7 +1034,7 @@ function addCondition(keyword, x, y) { return conditionObject.id; } -function getConnectionPos(firstObject, secondObject, currentGroup, direction) { +function getConnectionPos(firstObject, secondObject, direction) { // Refactored var firstObjectAbsPos = firstObject.frame.changeBasis({ from: firstObject.parent, @@ -1147,6 +1044,7 @@ function getConnectionPos(firstObject, secondObject, currentGroup, direction) { from: secondObject.parent, to: currentParentGroup }); + var currentGroup = checkForGroup("Arrows"); var diffX, diffY; if (currentGroup) { @@ -1211,8 +1109,8 @@ function getConnectionPos(firstObject, secondObject, currentGroup, direction) { connectionPos.secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width - diffX; connectionPos.secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points - middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; - middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; + connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; + connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; } return connectionPos; @@ -1500,11 +1398,14 @@ function styleLine(line, style) { var localStyle; if (style != null) { + // For updates if (getLayerStyles(style) != null && style != "Default Style") { + // If style is specified localStyle = style; var ownStyle = getLayerStyles(style); line.sharedStyle = ownStyle[0]; } else { + // if there is no specific style localStyle = "Default Style"; var border = line.style().addStylePartOfType(1); border.color = MSColor.colorWithRGBADictionary({ @@ -1517,12 +1418,12 @@ function styleLine(line, style) { line.style().endMarkerType = 2; } } else { - if (context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)) { - localStyle = context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey); - - var _ownStyle = getLayerStyles(style); - - line.sharedStyle = _ownStyle[0]; + // For creating new + if (context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) != "Default Style") { + // we have settins almost all the time and it's not default + localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)); + line.sharedStyle = localStyle[0]; + localStyle = localStyle[0].name(); } else { localStyle = "Default Style"; diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index 50bb055..e394d35 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","pluginKey","document","sketch","fromNative","context","docData","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","currentParentGroup","currentPage","currentArtboard","newConnectionsData","getConnectionsData","Settings","createAutoArrow","start","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","updateSelectedArrows","selection","count","currentConnectionsData","g","objectID","connectionIndex","findConnectionData","updateArrow","firstObject","secondObject","style","type","direction","line","condition","message","setValue_forKey_onLayer_forPluginIdentifier","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","length","updateArrowsCounter","i","getLayerWithID","sketchObject","parentArtboard","class","push","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","settingForKey","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","views","subviews","title","setSettingForKey","intValue","state","onLayersMoved","action","actionContext","panel","ControlBar","NSPanel","setStyleMask","NSTitledWindowMask","NSFullSizeContentViewWindowMask","setTitleVisibility","NSWindowTitleHidden","setTitlebarAppearsTransparent","setFrame_display","setMovableByWindowBackground","setHasShadow","setLevel","NSFloatingWindowLevel","center","makeKeyAndOrderFront","nil","firstObjectID","secondObjectID","lineID","conditionID","isCondition","conditionObject","remove","createArrow","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","checkForGroup","groupName","currentGroup","layers","name","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","localType","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","addCondition","styleLine","addToArrowsGroup","addLayers","fixGeometryWithOptions","Group","group","parent","locked","moveToBack","addToConditionGroup","dataArray","data","arrayNumber","setActiveDirectionSetting","arrowDirectionField","currentDirection","addItemWithTitle","lastItem","setState","docSettings","styles","getLayerStyles","docTypeSettings","newConnections","refactorLines","lineObject","selectedGroup","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","defineSourceObject","id","getSourceObjectFromSelection","confirmationAlert","setMessageText","addButtonWithTitle","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","allStyles","allLayerStyles","keyword","includes","libraries","getLibraries","symbolReferences","getImportableSymbolReferencesForDocument","symbolMaster","import","instance","createNewInstance","firstObjectAbsPos","changeBasis","from","to","secondObjectAbsPos","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","setName","points","cornerRadius","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","localStyle","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch'\n// const { toArray } = require('util')\n\n//\n// Variables\n//\n\nlet UI = require('sketch/ui') \n// var SharedStyle = require('sketch/dom').SharedStyle\n\nconst pluginKey = \"flowArrows\"\nconst document = sketch.fromNative(context.document)\nlet docData = context.document.documentData()\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey)\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards\nlet newConnectionsData = getConnectionsData()\n\n// Settings\nvar Settings = require('sketch/settings')\n\n \n//\n// Create Connection Function\n//\n\nexport default function(context) {}\nexport function createAutoArrow(context){start(context, \"Auto\", false)}\nexport function createRightArrow(context){start(context, \"Right\", false)}\nexport function createDownArrow(context){start(context, \"Down\", false)}\nexport function createLeftArrow(context){start(context, \"Left\", false)}\nexport function createUpArrow(context){start(context, \"Up\", false)}\n\nexport function createRightArrowWithCondition(context){start(context, \"Right\", true)}\nexport function createDownArrowWithCondition(context){start(context, \"Down\", true)}\nexport function createLeftArrowWithCondition(context){start(context, \"Left\", true)}\nexport function createUpArrowWithCondition(context){start(context, \"Up\", true)}\n\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n\n let selection = context.selection\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n // let sourceObjectID = getSourceObjectFromSelection(selection)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let conditionObject = document.getLayerWithID(conditionID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n if(!isCondition && conditionObject){conditionObject.remove()}\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition) { \n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, direction, isCondition)\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForGroup(groupName) { // refactored\n let currentGroup = null\n\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n // If we already have \"Arrow\" group we need to save it's folder\n currentGroup = currentParentGroup.layers()[i]\n } \n }\n\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\"\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\"\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\"\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\"\n }\n }\n\n return direction\n}\n\nfunction drawConnection(firstObjectID, secondObjectID, style, type, localDirection, condition){ // Refactored\n // Process of creating new connection \n let localType = type == null ? Settings.settingForKey(\"arrowType\") : type\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let connectionPos = getConnectionPos(firstObject, secondObject, currentGroup, localDirection)\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n if(localType == \"Angled\" || localType == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n if(localType == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n if(localType == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n\n // Condition\n connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style)\n\n // Add to group\n addToArrowsGroup(connection.line)\n\n return connection\n}\n\nfunction addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\")\n\n if(currentGroup){\n currentGroup.addLayers([line])\n currentGroup.fixGeometryWithOptions(1)\n } else {\n // If we don't have a group\n let Group = require('sketch/dom').Group\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n })\n // Moving this group to the bottom of the page\n group.moveToBack()\n currentGroup = checkForGroup(\"Arrows\")\n currentGroup.fixGeometryWithOptions(1)\n }\n}\n\nfunction addToConditionGroup(condition){\n let currentGroup = checkForGroup(\"Conditions\") \n\n if(currentGroup){\n currentGroup.addLayers([condition])\n currentGroup.fixGeometryWithOptions(1)\n } else {\n // If we don't have a group\n let Group = require('sketch/dom').Group\n let group = new Group({\n parent: currentParentGroup,\n name: 'Conditions',\n locked: false,\n layers: [condition]\n })\n // Moving this group to the bottom of the page\n group.moveToBack()\n currentGroup = checkForGroup(\"Conditions\") // There is a problem, that's why duplicated for now\n currentGroup.fixGeometryWithOptions(1)\n }\n}\n\n\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = []\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i])\n }\n } \n return dataArray\n}\n\nfunction findConnectionData(firstObjectID, secondObjectID, data){\n let arrayNumber = null\n firstObjectID = String(firstObjectID)\n secondObjectID = String(secondObjectID)\n\n if(pluginData){\n // If we have database, need to check for connections\n\n for(let y = 0; y < data.length; y++){\n\n if(firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject){\n // if we found that we have this object in connection database already\n if(secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject){\n // if we found that we have this object in connection database already\n arrayNumber = y\n } \n }\n }\n }\n return arrayNumber\n}\n\nfunction setActiveDirectionSetting(arrowDirectionField){\n let currentDirection = \"Auto\"\n\n if(Settings.settingForKey(\"arrowDirection\")){\n // if there is data in settings\n currentDirection = Settings.settingForKey(\"arrowDirection\") \n \n if(currentDirection == \"Auto\"){\n arrowDirectionField.addItemWithTitle(\"Auto\")\n arrowDirectionField.lastItem().setState(1)\n arrowDirectionField.addItemWithTitle(\"Right\")\n arrowDirectionField.lastItem().setState(0)\n arrowDirectionField.addItemWithTitle(\"Down\")\n arrowDirectionField.lastItem().setState(0)\n arrowDirectionField.addItemWithTitle(\"Left\")\n arrowDirectionField.lastItem().setState(0)\n arrowDirectionField.addItemWithTitle(\"Up\")\n arrowDirectionField.lastItem().setState(0)\n } \n \n if(currentDirection == \"Right\"){\n arrowDirectionField.addItemWithTitle(\"Right\")\n arrowDirectionField.lastItem().setState(1)\n arrowDirectionField.addItemWithTitle(\"Down\")\n arrowDirectionField.lastItem().setState(0)\n arrowDirectionField.addItemWithTitle(\"Left\")\n arrowDirectionField.lastItem().setState(0)\n arrowDirectionField.addItemWithTitle(\"Up\")\n arrowDirectionField.lastItem().setState(0)\n arrowDirectionField.addItemWithTitle(\"Auto\")\n arrowDirectionField.lastItem().setState(0)\n } \n\n if(currentDirection == \"Down\"){\n arrowDirectionField.addItemWithTitle(\"Down\")\n arrowDirectionField.lastItem().setState(1)\n arrowDirectionField.addItemWithTitle(\"Left\")\n arrowDirectionField.lastItem().setState(0)\n arrowDirectionField.addItemWithTitle(\"Up\")\n arrowDirectionField.lastItem().setState(0)\n arrowDirectionField.addItemWithTitle(\"Auto\")\n arrowDirectionField.lastItem().setState(0)\n arrowDirectionField.addItemWithTitle(\"Right\")\n arrowDirectionField.lastItem().setState(0)\n } \n\n if(currentDirection == \"Left\"){\n arrowDirectionField.addItemWithTitle(\"Left\")\n arrowDirectionField.lastItem().setState(1)\n arrowDirectionField.addItemWithTitle(\"Up\")\n arrowDirectionField.lastItem().setState(0)\n arrowDirectionField.addItemWithTitle(\"Auto\")\n arrowDirectionField.lastItem().setState(0)\n arrowDirectionField.addItemWithTitle(\"Right\")\n arrowDirectionField.lastItem().setState(0)\n arrowDirectionField.addItemWithTitle(\"Down\")\n arrowDirectionField.lastItem().setState(0)\n } \n\n if(currentDirection == \"Up\"){\n arrowDirectionField.addItemWithTitle(\"Up\")\n arrowDirectionField.lastItem().setState(1)\n arrowDirectionField.addItemWithTitle(\"Auto\")\n arrowDirectionField.lastItem().setState(0)\n arrowDirectionField.addItemWithTitle(\"Right\")\n arrowDirectionField.lastItem().setState(0)\n arrowDirectionField.addItemWithTitle(\"Down\")\n arrowDirectionField.lastItem().setState(0)\n arrowDirectionField.addItemWithTitle(\"Left\")\n arrowDirectionField.lastItem().setState(0)\n } \n\n } else {\n // Show default\n arrowDirectionField.addItemWithTitle(\"Auto\")\n arrowDirectionField.addItemWithTitle(\"Right\")\n arrowDirectionField.addItemWithTitle(\"Down\")\n arrowDirectionField.addItemWithTitle(\"Left\")\n arrowDirectionField.addItemWithTitle(\"Up\")\n }\n}\n\nfunction setActiveStyleSetting(arrowStylingField){\n let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)\n let styles = getLayerStyles(null)\n\n if(docSettings){\n // We have info about the settings in the current document\n \n if(docSettings != \"Default Style\") {\n // if user specified own option\n arrowStylingField.addItemWithTitle(docSettings)\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n if(styles[i].name() != docSettings){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n\n } else {\n // Need to show the default first\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n } else {\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n}\n\nfunction setActiveTypeSetting(arrowTypeField){\n let docTypeSettings = Settings.settingForKey(\"arrowType\") \n\n\n if(docTypeSettings){\n // We have info about the settings in the current document\n \n if(docTypeSettings == \"Angled\"){\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(0)\n } \n\n if(docTypeSettings == \"Curved\"){\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(0)\n } \n\n if(docTypeSettings == \"Straight\"){\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(0)\n } \n } else {\n // Show default\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.addItemWithTitle(\"Straight\")\n }\n\n}\n\nfunction deleteConnectionFromData(connectionIndex){ // Refactored\n let newConnections = []\n if(pluginData){\n // If we have database\n let connections = pluginData\n\n for (let i = 0; i < connections.length; i ++) {\n // Updating all connections without deleted one\n if(i != connectionIndex){\n newConnections.push(connections[i])\n }\n }\n }\n return newConnections\n}\n\nfunction refactorLines(group){ // Need to finish\n for(let i = 0; i < group.layers().length; i++){\n // Here we need to go through each data in our database and delete line if there is no data\n }\n}\n\nfunction deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID)\n let selectedGroup\n if(lineObject){\n selectedGroup = lineObject.parent\n lineObject.remove()\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove()\n }\n }\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID)\n let childObject = document.getLayerWithID(childObjectID)\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\")\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID)\n let childObject = document.getLayerWithID(childObjectID)\n let sourceMidY, childMidY, sourceMidX, childMidX, diff\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2\n childMidY = childObject.frame.y + childObject.frame.height/2\n diff = sourceMidY - childMidY\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n }\n \n return sourceObjectID\n}\n\nfunction confirmationAlert(alert, message) {\n // Title\n alert.setMessageText(\"Would you like to delete all the arrows from \"+message)\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Delete Arrows\")\n alert.addButtonWithTitle(\"Cancel\")\n \n // Creating the view\n const viewWidth = 300\n const viewHeight = 40\n \n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n \n // Label\n var infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(-1, viewHeight - 40, 330, 40))\n \n infoLabel.setStringValue(\"ℹ️ You can select layers, artboards to delete all the arrows from selected one only\")\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n \n view.addSubview(infoLabel)\n\n return alert\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n\n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i])}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i])}\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, isCondition){\n let selection = context.selection\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n \n if(connectionIndex == null){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, isCondition)\n sketch.UI.message(\"New connection is created 🚀\")\n } else {\n // Need to remake the arrow condition\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\nfunction addCondition(keyword, x, y){ // Refactored\n let libraries = sketch.getLibraries()\n let conditionObject, symbolReferences\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionObject = symbolReferences[i]\n }\n }\n }\n\n if(conditionObject == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n } else {\n let symbolMaster = conditionObject.import()\n let instance = symbolMaster.createNewInstance()\n addToConditionGroup(instance)\n instance.frame.x = x - instance.frame.width / 2 \n instance.frame.y = y - instance.frame.height / 2\n }\n\n return conditionObject.id\n}\n\nfunction getConnectionPos(firstObject, secondObject, currentGroup, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n let diffX, diffY\n\n if(currentGroup){\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n let connectionPos = {\n firstLayerPosX: null, \n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n return connectionPos\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n line.setName(\"Straight Arrow\")\n\n return line\n}\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n line.setName(\"Angled Arrow\")\n\n return line\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n let line\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX 1){\n // Need to find source object by ID first\n // let sourceObjectID = getSourceObjectFromSelection(selection)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let conditionObject = document.getLayerWithID(conditionID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n if(!isCondition && conditionObject){\n conditionObject.remove()\n }\n log(conditionID)\n\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, direction, isCondition)\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForGroup(groupName) { // refactored\n let currentGroup = null\n\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i]\n } \n }\n\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\"\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\"\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\"\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\"\n }\n }\n\n return direction\n}\n\nfunction drawConnection(firstObjectID, secondObjectID, style, type, localDirection, condition){ // Refactored\n // Process of creating new connection \n let localType = type == null ? Settings.settingForKey(\"arrowType\") : type\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection)\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n \n // Type \n if(localType == \"Angled\" || localType == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n if(localType == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n if(localType == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n\n // Condition\n connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style)\n\n // Add to group\n addToArrowsGroup(connection.line)\n\n return connection\n}\n\nfunction addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\")\n log(\"Arr \"+line)\n if(currentGroup){\n currentGroup.addLayers([line])\n currentGroup.fixGeometryWithOptions(1)\n } else {\n // If we don't have a group\n let Group = require('sketch/dom').Group\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n })\n // Moving this group to the bottom of the page\n group.moveToBack()\n currentGroup = checkForGroup(\"Arrows\")\n currentGroup.fixGeometryWithOptions(1)\n }\n}\n\nfunction addToConditionGroup(condition){\n let currentGroup = checkForGroup(\"Conditions\") \n log(\"Con \"+condition)\n if(currentGroup){\n currentGroup.addLayers([condition])\n currentGroup.fixGeometryWithOptions(1)\n } else {\n // If we don't have a group\n let Group = require('sketch/dom').Group\n let group = new Group({\n parent: currentParentGroup,\n name: 'Conditions',\n layers: [condition]\n })\n // Moving this group to the bottom of the page\n group.moveToBack()\n group.adjustToFit()\n currentGroup = checkForGroup(\"Conditions\") \n // log(\"g \"+group)\n log(\"Cg \"+currentGroup)\n \n currentGroup.fixGeometryWithOptions(1)\n }\n}\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = []\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i])\n }\n } \n return dataArray\n}\n\nfunction findConnectionData(firstObjectID, secondObjectID, data){\n let arrayNumber = null\n firstObjectID = String(firstObjectID)\n secondObjectID = String(secondObjectID)\n\n if(pluginData){\n // If we have database, need to check for connections\n\n for(let y = 0; y < data.length; y++){\n\n if(firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject){\n // if we found that we have this object in connection database already\n if(secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject){\n // if we found that we have this object in connection database already\n arrayNumber = y\n } \n }\n }\n }\n return arrayNumber\n}\n\nfunction setActiveStyleSetting(arrowStylingField){\n let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)\n let styles = getLayerStyles(null)\n\n if(docSettings){\n // We have info about the settings in the current document\n \n if(docSettings != \"Default Style\") {\n // if user specified own option\n arrowStylingField.addItemWithTitle(docSettings)\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n if(styles[i].name() != docSettings){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n\n } else {\n // Need to show the default first\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n } else {\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n}\n\nfunction setActiveTypeSetting(arrowTypeField){\n let docTypeSettings = Settings.settingForKey(\"arrowType\") \n\n\n if(docTypeSettings){\n // We have info about the settings in the current document\n \n if(docTypeSettings == \"Angled\"){\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(0)\n } \n\n if(docTypeSettings == \"Curved\"){\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(0)\n } \n\n if(docTypeSettings == \"Straight\"){\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(0)\n } \n } else {\n // Show default\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.addItemWithTitle(\"Straight\")\n }\n\n}\n\nfunction deleteConnectionFromData(connectionIndex){ // Refactored\n let newConnections = []\n if(pluginData){\n // If we have database\n let connections = pluginData\n\n for (let i = 0; i < connections.length; i ++) {\n // Updating all connections without deleted one\n if(i != connectionIndex){\n newConnections.push(connections[i])\n }\n }\n }\n return newConnections\n}\n\nfunction deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID)\n let selectedGroup\n if(lineObject){\n selectedGroup = lineObject.parent\n lineObject.remove()\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove()\n }\n }\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID)\n let childObject = document.getLayerWithID(childObjectID)\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\")\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID)\n let childObject = document.getLayerWithID(childObjectID)\n let sourceMidY, childMidY, sourceMidX, childMidX, diff\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2\n childMidY = childObject.frame.y + childObject.frame.height/2\n diff = sourceMidY - childMidY\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n }\n \n return sourceObjectID\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n\n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i])}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i])}\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, isCondition){\n let selection = context.selection\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n \n if(connectionIndex == null){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, isCondition)\n sketch.UI.message(\"New connection is created 🚀\")\n } else {\n // Need to remake the arrow condition\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\nfunction addCondition(keyword, x, y){ // Refactored\n let libraries = sketch.getLibraries()\n let conditionObject, symbolReferences\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionObject = symbolReferences[i]\n }\n }\n }\n\n if(conditionObject == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n } else {\n let symbolMaster = conditionObject.import()\n let instance = symbolMaster.createNewInstance()\n instance.parent = currentParentGroup\n addToConditionGroup(instance)\n instance.frame.x = x - instance.frame.width / 2 \n instance.frame.y = y - instance.frame.height / 2\n }\n\n return conditionObject.id\n}\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n let currentGroup = checkForGroup(\"Arrows\") \n let diffX, diffY\n\n if(currentGroup){\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n let connectionPos = {\n firstLayerPosX: null, \n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n return connectionPos\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n line.setName(\"Straight Arrow\")\n\n return line\n}\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n line.setName(\"Angled Arrow\")\n\n return line\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n let line\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX Date: Mon, 8 Apr 2019 08:24:10 +0300 Subject: [PATCH 15/44] conditions are redrawing right now --- arrows.sketchplugin/Contents/Sketch/script.js | 60 +++++++++---------- .../Contents/Sketch/script.js.map | 2 +- src/script.js | 58 ++++++++---------- 3 files changed, 54 insertions(+), 66 deletions(-) diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index 494da84..06fd3c0 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -491,11 +491,10 @@ function updateArrow(firstObjectID, secondObjectID, style, type, direction, line deleteLine(lineID); - if (!isCondition && conditionObject) { + if (conditionObject) { conditionObject.remove(); } - log(conditionID); newConnectionsData = deleteConnectionFromData(connectionIndex); if (firstObject && secondObject) { @@ -615,13 +614,11 @@ function drawConnection(firstObjectID, secondObjectID, style, type, localDirecti function addToArrowsGroup(line) { var currentGroup = checkForGroup("Arrows"); - log("Arr " + line); if (currentGroup) { currentGroup.addLayers([line]); currentGroup.fixGeometryWithOptions(1); } else { - // If we don't have a group var Group = __webpack_require__(/*! sketch/dom */ "sketch/dom").Group; var group = new Group({ @@ -629,37 +626,37 @@ function addToArrowsGroup(line) { name: 'Arrows', locked: true, layers: [line] - }); // Moving this group to the bottom of the page - + }); group.moveToBack(); - currentGroup = checkForGroup("Arrows"); - currentGroup.fixGeometryWithOptions(1); + group.adjustToFit(); } } -function addToConditionGroup(condition) { - var currentGroup = checkForGroup("Conditions"); - log("Con " + condition); - - if (currentGroup) { - currentGroup.addLayers([condition]); - currentGroup.fixGeometryWithOptions(1); +function addToConditionGroup(condition, x, y) { + // Refactored + var conGroup = checkForGroup("Conditions"); + var arGroup = checkForGroup("Arrows"); + var arGroupX = arGroup != null ? arGroup.frame().x() : 0; + var arGroupY = arGroup != null ? arGroup.frame().y() : 0; + + if (conGroup) { + condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX); + condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY); + condition.parent = conGroup; + conGroup.fixGeometryWithOptions(1); } else { - // If we don't have a group + condition.frame.x = x - condition.frame.width / 2; + condition.frame.y = y - condition.frame.height / 2; + var Group = __webpack_require__(/*! sketch/dom */ "sketch/dom").Group; var group = new Group({ parent: currentParentGroup, name: 'Conditions', layers: [condition] - }); // Moving this group to the bottom of the page - + }); group.moveToBack(); group.adjustToFit(); - currentGroup = checkForGroup("Conditions"); // log("g "+group) - - log("Cg " + currentGroup); - currentGroup.fixGeometryWithOptions(1); } } @@ -1008,30 +1005,29 @@ function start(context, direction, isCondition) { function addCondition(keyword, x, y) { // Refactored var libraries = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.getLibraries(); - var conditionObject, symbolReferences; + var libraryObject, symbolReferences, symbol; for (var g = 0; g < libraries.length; g++) { symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document); for (var i = 0; i < symbolReferences.length; i++) { if (symbolReferences[i].name.includes(keyword)) { - conditionObject = symbolReferences[i]; + libraryObject = symbolReferences[i]; } } } - if (conditionObject == null) { + if (libraryObject == null) { + symbol = null; UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as "#condition" so it will be added here'); } else { - var symbolMaster = conditionObject.import(); - var instance = symbolMaster.createNewInstance(); - instance.parent = currentParentGroup; - addToConditionGroup(instance); - instance.frame.x = x - instance.frame.width / 2; - instance.frame.y = y - instance.frame.height / 2; + var symbolMaster = libraryObject.import(); + symbol = symbolMaster.createNewInstance(); + addToConditionGroup(symbol, x, y); + symbol = symbol.id; } - return conditionObject.id; + return symbol; } function getConnectionPos(firstObject, secondObject, direction) { diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index e394d35..e0d8ee0 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","pluginKey","document","sketch","fromNative","context","docData","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","currentParentGroup","currentPage","currentArtboard","newConnectionsData","getConnectionsData","Settings","createAutoArrow","start","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","updateSelectedArrows","selection","count","currentConnectionsData","g","objectID","connectionIndex","findConnectionData","updateArrow","firstObject","secondObject","style","type","direction","line","condition","message","setValue_forKey_onLayer_forPluginIdentifier","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","length","updateArrowsCounter","i","getLayerWithID","sketchObject","parentArtboard","class","push","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","settingForKey","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","views","subviews","title","setSettingForKey","intValue","state","onLayersMoved","action","actionContext","panel","ControlBar","NSPanel","setStyleMask","NSTitledWindowMask","NSFullSizeContentViewWindowMask","setTitleVisibility","NSWindowTitleHidden","setTitlebarAppearsTransparent","setFrame_display","setMovableByWindowBackground","setHasShadow","setLevel","NSFloatingWindowLevel","center","makeKeyAndOrderFront","nil","firstObjectID","secondObjectID","lineID","conditionID","isCondition","conditionObject","remove","log","createArrow","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","checkForGroup","groupName","currentGroup","layers","name","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","localType","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","addCondition","styleLine","addToArrowsGroup","addLayers","fixGeometryWithOptions","Group","group","parent","locked","moveToBack","addToConditionGroup","adjustToFit","dataArray","data","arrayNumber","docSettings","styles","getLayerStyles","addItemWithTitle","docTypeSettings","lastItem","setState","newConnections","lineObject","selectedGroup","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","defineSourceObject","id","getSourceObjectFromSelection","setMessageText","addButtonWithTitle","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","allStyles","allLayerStyles","keyword","includes","libraries","getLibraries","symbolReferences","getImportableSymbolReferencesForDocument","symbolMaster","import","instance","createNewInstance","firstObjectAbsPos","changeBasis","from","to","secondObjectAbsPos","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","setName","points","cornerRadius","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","localStyle","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch'\n// const { toArray } = require('util')\n\n//\n// Variables\n//\n\nlet UI = require('sketch/ui') \n// var SharedStyle = require('sketch/dom').SharedStyle\n\nconst pluginKey = \"flowArrows\"\nconst document = sketch.fromNative(context.document)\nlet docData = context.document.documentData()\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey)\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards\nlet newConnectionsData = getConnectionsData()\n\n// Settings\nvar Settings = require('sketch/settings')\n\n \n//\n// Create Connection Function\n//\n\nexport default function(context) {}\nexport function createAutoArrow(context){start(context, \"Auto\", false)}\nexport function createRightArrow(context){start(context, \"Right\", false)}\nexport function createDownArrow(context){start(context, \"Down\", false)}\nexport function createLeftArrow(context){start(context, \"Left\", false)}\nexport function createUpArrow(context){start(context, \"Up\", false)}\n\nexport function createRightArrowWithCondition(context){start(context, \"Right\", true)}\nexport function createDownArrowWithCondition(context){start(context, \"Down\", true)}\nexport function createLeftArrowWithCondition(context){start(context, \"Left\", true)}\nexport function createUpArrowWithCondition(context){start(context, \"Up\", true)}\n\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n\n let selection = context.selection\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n // let sourceObjectID = getSourceObjectFromSelection(selection)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let conditionObject = document.getLayerWithID(conditionID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n if(!isCondition && conditionObject){\n conditionObject.remove()\n }\n log(conditionID)\n\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, direction, isCondition)\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForGroup(groupName) { // refactored\n let currentGroup = null\n\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i]\n } \n }\n\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\"\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\"\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\"\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\"\n }\n }\n\n return direction\n}\n\nfunction drawConnection(firstObjectID, secondObjectID, style, type, localDirection, condition){ // Refactored\n // Process of creating new connection \n let localType = type == null ? Settings.settingForKey(\"arrowType\") : type\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection)\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n \n // Type \n if(localType == \"Angled\" || localType == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n if(localType == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n if(localType == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n\n // Condition\n connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style)\n\n // Add to group\n addToArrowsGroup(connection.line)\n\n return connection\n}\n\nfunction addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\")\n log(\"Arr \"+line)\n if(currentGroup){\n currentGroup.addLayers([line])\n currentGroup.fixGeometryWithOptions(1)\n } else {\n // If we don't have a group\n let Group = require('sketch/dom').Group\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n })\n // Moving this group to the bottom of the page\n group.moveToBack()\n currentGroup = checkForGroup(\"Arrows\")\n currentGroup.fixGeometryWithOptions(1)\n }\n}\n\nfunction addToConditionGroup(condition){\n let currentGroup = checkForGroup(\"Conditions\") \n log(\"Con \"+condition)\n if(currentGroup){\n currentGroup.addLayers([condition])\n currentGroup.fixGeometryWithOptions(1)\n } else {\n // If we don't have a group\n let Group = require('sketch/dom').Group\n let group = new Group({\n parent: currentParentGroup,\n name: 'Conditions',\n layers: [condition]\n })\n // Moving this group to the bottom of the page\n group.moveToBack()\n group.adjustToFit()\n currentGroup = checkForGroup(\"Conditions\") \n // log(\"g \"+group)\n log(\"Cg \"+currentGroup)\n \n currentGroup.fixGeometryWithOptions(1)\n }\n}\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = []\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i])\n }\n } \n return dataArray\n}\n\nfunction findConnectionData(firstObjectID, secondObjectID, data){\n let arrayNumber = null\n firstObjectID = String(firstObjectID)\n secondObjectID = String(secondObjectID)\n\n if(pluginData){\n // If we have database, need to check for connections\n\n for(let y = 0; y < data.length; y++){\n\n if(firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject){\n // if we found that we have this object in connection database already\n if(secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject){\n // if we found that we have this object in connection database already\n arrayNumber = y\n } \n }\n }\n }\n return arrayNumber\n}\n\nfunction setActiveStyleSetting(arrowStylingField){\n let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)\n let styles = getLayerStyles(null)\n\n if(docSettings){\n // We have info about the settings in the current document\n \n if(docSettings != \"Default Style\") {\n // if user specified own option\n arrowStylingField.addItemWithTitle(docSettings)\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n if(styles[i].name() != docSettings){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n\n } else {\n // Need to show the default first\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n } else {\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n}\n\nfunction setActiveTypeSetting(arrowTypeField){\n let docTypeSettings = Settings.settingForKey(\"arrowType\") \n\n\n if(docTypeSettings){\n // We have info about the settings in the current document\n \n if(docTypeSettings == \"Angled\"){\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(0)\n } \n\n if(docTypeSettings == \"Curved\"){\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(0)\n } \n\n if(docTypeSettings == \"Straight\"){\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(0)\n } \n } else {\n // Show default\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.addItemWithTitle(\"Straight\")\n }\n\n}\n\nfunction deleteConnectionFromData(connectionIndex){ // Refactored\n let newConnections = []\n if(pluginData){\n // If we have database\n let connections = pluginData\n\n for (let i = 0; i < connections.length; i ++) {\n // Updating all connections without deleted one\n if(i != connectionIndex){\n newConnections.push(connections[i])\n }\n }\n }\n return newConnections\n}\n\nfunction deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID)\n let selectedGroup\n if(lineObject){\n selectedGroup = lineObject.parent\n lineObject.remove()\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove()\n }\n }\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID)\n let childObject = document.getLayerWithID(childObjectID)\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\")\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID)\n let childObject = document.getLayerWithID(childObjectID)\n let sourceMidY, childMidY, sourceMidX, childMidX, diff\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2\n childMidY = childObject.frame.y + childObject.frame.height/2\n diff = sourceMidY - childMidY\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n }\n \n return sourceObjectID\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n\n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i])}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i])}\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, isCondition){\n let selection = context.selection\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n \n if(connectionIndex == null){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, isCondition)\n sketch.UI.message(\"New connection is created 🚀\")\n } else {\n // Need to remake the arrow condition\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\nfunction addCondition(keyword, x, y){ // Refactored\n let libraries = sketch.getLibraries()\n let conditionObject, symbolReferences\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n conditionObject = symbolReferences[i]\n }\n }\n }\n\n if(conditionObject == null){\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n } else {\n let symbolMaster = conditionObject.import()\n let instance = symbolMaster.createNewInstance()\n instance.parent = currentParentGroup\n addToConditionGroup(instance)\n instance.frame.x = x - instance.frame.width / 2 \n instance.frame.y = y - instance.frame.height / 2\n }\n\n return conditionObject.id\n}\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n let currentGroup = checkForGroup(\"Arrows\") \n let diffX, diffY\n\n if(currentGroup){\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n let connectionPos = {\n firstLayerPosX: null, \n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n return connectionPos\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n line.setName(\"Straight Arrow\")\n\n return line\n}\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n line.setName(\"Angled Arrow\")\n\n return line\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n let line\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX 1){\n // Need to find source object by ID first\n // let sourceObjectID = getSourceObjectFromSelection(selection)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let conditionObject = document.getLayerWithID(conditionID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n if(conditionObject){conditionObject.remove()}\n\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, direction, isCondition)\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForGroup(groupName) { // refactored\n let currentGroup = null\n\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i]\n } \n }\n\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\"\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\"\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\"\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\"\n }\n }\n\n return direction\n}\n\nfunction drawConnection(firstObjectID, secondObjectID, style, type, localDirection, condition){ // Refactored\n // Process of creating new connection \n let localType = type == null ? Settings.settingForKey(\"arrowType\") : type\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection)\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n \n // Type \n if(localType == \"Angled\" || localType == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n if(localType == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n if(localType == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n\n // Condition\n connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style)\n\n // Add to group\n addToArrowsGroup(connection.line)\n\n return connection\n}\n\nfunction addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\")\n if(currentGroup){\n currentGroup.addLayers([line])\n currentGroup.fixGeometryWithOptions(1)\n } else {\n let Group = require('sketch/dom').Group\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n })\n group.moveToBack()\n group.adjustToFit()\n \n }\n}\n\nfunction addToConditionGroup(condition, x, y){ // Refactored\n let conGroup = checkForGroup(\"Conditions\") \n let arGroup = checkForGroup(\"Arrows\") \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0\n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX) \n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY) \n condition.parent = conGroup\n conGroup.fixGeometryWithOptions(1)\n } else {\n condition.frame.x = x - condition.frame.width / 2 \n condition.frame.y = y - condition.frame.height / 2\n let Group = require('sketch/dom').Group\n let group = new Group({\n parent: currentParentGroup,\n name: 'Conditions',\n layers: [condition]\n })\n group.moveToBack()\n group.adjustToFit()\n }\n}\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = []\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i])\n }\n } \n return dataArray\n}\n\nfunction findConnectionData(firstObjectID, secondObjectID, data){\n let arrayNumber = null\n firstObjectID = String(firstObjectID)\n secondObjectID = String(secondObjectID)\n\n if(pluginData){\n // If we have database, need to check for connections\n\n for(let y = 0; y < data.length; y++){\n\n if(firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject){\n // if we found that we have this object in connection database already\n if(secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject){\n // if we found that we have this object in connection database already\n arrayNumber = y\n } \n }\n }\n }\n return arrayNumber\n}\n\nfunction setActiveStyleSetting(arrowStylingField){\n let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)\n let styles = getLayerStyles(null)\n\n if(docSettings){\n // We have info about the settings in the current document\n \n if(docSettings != \"Default Style\") {\n // if user specified own option\n arrowStylingField.addItemWithTitle(docSettings)\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n if(styles[i].name() != docSettings){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n\n } else {\n // Need to show the default first\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n } else {\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n}\n\nfunction setActiveTypeSetting(arrowTypeField){\n let docTypeSettings = Settings.settingForKey(\"arrowType\") \n\n\n if(docTypeSettings){\n // We have info about the settings in the current document\n \n if(docTypeSettings == \"Angled\"){\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(0)\n } \n\n if(docTypeSettings == \"Curved\"){\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(0)\n } \n\n if(docTypeSettings == \"Straight\"){\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(0)\n } \n } else {\n // Show default\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.addItemWithTitle(\"Straight\")\n }\n\n}\n\nfunction deleteConnectionFromData(connectionIndex){ // Refactored\n let newConnections = []\n if(pluginData){\n // If we have database\n let connections = pluginData\n\n for (let i = 0; i < connections.length; i ++) {\n // Updating all connections without deleted one\n if(i != connectionIndex){\n newConnections.push(connections[i])\n }\n }\n }\n return newConnections\n}\n\nfunction deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID)\n let selectedGroup\n if(lineObject){\n selectedGroup = lineObject.parent\n lineObject.remove()\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove()\n }\n }\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID)\n let childObject = document.getLayerWithID(childObjectID)\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\")\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID)\n let childObject = document.getLayerWithID(childObjectID)\n let sourceMidY, childMidY, sourceMidX, childMidX, diff\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2\n childMidY = childObject.frame.y + childObject.frame.height/2\n diff = sourceMidY - childMidY\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n }\n \n return sourceObjectID\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n\n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i])}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i])}\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, isCondition){\n let selection = context.selection\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n \n if(connectionIndex == null){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, isCondition)\n sketch.UI.message(\"New connection is created 🚀\")\n } else {\n // Need to remake the arrow condition\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\nfunction addCondition(keyword, x, y){ // Refactored\n let libraries = sketch.getLibraries()\n let libraryObject, symbolReferences, symbol\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n libraryObject = symbolReferences[i]\n }\n }\n }\n\n if(libraryObject == null){\n symbol = null\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n } else {\n let symbolMaster = libraryObject.import()\n symbol = symbolMaster.createNewInstance()\n addToConditionGroup(symbol, x, y)\n symbol = symbol.id\n }\n\n return symbol\n}\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n let currentGroup = checkForGroup(\"Arrows\") \n let diffX, diffY\n\n if(currentGroup){\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n let connectionPos = {\n firstLayerPosX: null, \n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n return connectionPos\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n line.setName(\"Straight Arrow\")\n\n return line\n}\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n line.setName(\"Angled Arrow\")\n\n return line\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n let line\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as "#condition" so it will be added here') } else { - let symbolMaster = conditionObject.import() - let instance = symbolMaster.createNewInstance() - instance.parent = currentParentGroup - addToConditionGroup(instance) - instance.frame.x = x - instance.frame.width / 2 - instance.frame.y = y - instance.frame.height / 2 + let symbolMaster = libraryObject.import() + symbol = symbolMaster.createNewInstance() + addToConditionGroup(symbol, x, y) + symbol = symbol.id } - return conditionObject.id + return symbol } function getConnectionPos(firstObject, secondObject, direction){ // Refactored From a6090d6237a2401b1173b09e6e9611eddc093393 Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Mon, 8 Apr 2019 09:35:56 +0300 Subject: [PATCH 16/44] testing everything, have problem with updating layers --- arrows.sketchplugin/Contents/Sketch/script.js | 25 ++++++++++++----- .../Contents/Sketch/script.js.map | 2 +- src/script.js | 28 +++++++++++++------ 3 files changed, 38 insertions(+), 17 deletions(-) diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index 06fd3c0..2c1e98f 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -120,6 +120,8 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "panel", function() { return panel; }); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + // const { toArray } = require('util') // // Variables @@ -175,10 +177,9 @@ function createUpArrowWithCondition(context) { function updateSelectedArrows(context) { var selection = context.selection; - if (selection.count() > 1) { + if (selection.count() > 1 && selection[0].class() != "MSArtboardGroup") { // Need to find source object by ID first - // let sourceObjectID = getSourceObjectFromSelection(selection) - var currentConnectionsData = newConnectionsData; + var currentConnectionsData = newConnectionsData; // Need to refactor for (var g = 0; g < selection.count(); g++) { if (selection[g].objectID() != selection[0].objectID()) { @@ -186,8 +187,18 @@ function updateSelectedArrows(context) { var connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData); if (connectionIndex != null) { - updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex); - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Current connection is updated 🚀"); + var str = currentConnectionsData[connectionIndex].condition; + log(_typeof(str)); // Problem her is that we need to know is there a condition or not + // Also, we need to check, what if user will change override of the layer + // All the styles too + + if (currentConnectionsData[connectionIndex].condition) { + log("hewr"); + } // let isCondition = + + + updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex); + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Current connection is updated 🤘"); } else { sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is no connection between selected layers on the plugin data"); } @@ -197,7 +208,7 @@ function updateSelectedArrows(context) { context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); } else { // When user didn't select anything - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Please select more than two layers"); + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Please select more than two layers. Artboards are coming soon 🥳"); } } function updateArtboardArrows(context) { @@ -510,7 +521,7 @@ function createArrow(firstObjectID, secondObjectID, style, type, direction, isCo updateSpacing(firstObjectID, secondObjectID, localDirection); autoAlignLayer(firstObjectID, secondObjectID, localDirection); // Making an Arrow - var arrow = drawConnection(firstObjectID, secondObjectID, style, type, direction, isCondition); // Storage for current connection + var arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, isCondition); // Storage for current connection var connection = { firstObject: firstObjectID, diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index e0d8ee0..62b17de 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","pluginKey","document","sketch","fromNative","context","docData","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","currentParentGroup","currentPage","currentArtboard","newConnectionsData","getConnectionsData","Settings","createAutoArrow","start","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","updateSelectedArrows","selection","count","currentConnectionsData","g","objectID","connectionIndex","findConnectionData","updateArrow","firstObject","secondObject","style","type","direction","line","condition","message","setValue_forKey_onLayer_forPluginIdentifier","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","length","updateArrowsCounter","i","getLayerWithID","sketchObject","parentArtboard","class","push","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","settingForKey","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","views","subviews","title","setSettingForKey","intValue","state","onLayersMoved","action","actionContext","panel","ControlBar","NSPanel","setStyleMask","NSTitledWindowMask","NSFullSizeContentViewWindowMask","setTitleVisibility","NSWindowTitleHidden","setTitlebarAppearsTransparent","setFrame_display","setMovableByWindowBackground","setHasShadow","setLevel","NSFloatingWindowLevel","center","makeKeyAndOrderFront","nil","firstObjectID","secondObjectID","lineID","conditionID","isCondition","conditionObject","remove","createArrow","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","checkForGroup","groupName","currentGroup","layers","name","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","localType","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","addCondition","styleLine","addToArrowsGroup","addLayers","fixGeometryWithOptions","Group","group","parent","locked","moveToBack","adjustToFit","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","dataArray","data","arrayNumber","docSettings","styles","getLayerStyles","addItemWithTitle","docTypeSettings","lastItem","setState","newConnections","lineObject","selectedGroup","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","defineSourceObject","id","getSourceObjectFromSelection","setMessageText","addButtonWithTitle","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","allStyles","allLayerStyles","keyword","includes","libraries","getLibraries","libraryObject","symbolReferences","symbol","getImportableSymbolReferencesForDocument","symbolMaster","import","createNewInstance","firstObjectAbsPos","changeBasis","from","to","secondObjectAbsPos","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","setName","points","cornerRadius","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","localStyle","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch'\n// const { toArray } = require('util')\n\n//\n// Variables\n//\n\nlet UI = require('sketch/ui') \n// var SharedStyle = require('sketch/dom').SharedStyle\n\nconst pluginKey = \"flowArrows\"\nconst document = sketch.fromNative(context.document)\nlet docData = context.document.documentData()\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey)\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards\nlet newConnectionsData = getConnectionsData()\n\n// Settings\nvar Settings = require('sketch/settings')\n\n \n//\n// Create Connection Function\n//\n\nexport default function(context) {}\nexport function createAutoArrow(context){start(context, \"Auto\", false)}\nexport function createRightArrow(context){start(context, \"Right\", false)}\nexport function createDownArrow(context){start(context, \"Down\", false)}\nexport function createLeftArrow(context){start(context, \"Left\", false)}\nexport function createUpArrow(context){start(context, \"Up\", false)}\n\nexport function createRightArrowWithCondition(context){start(context, \"Right\", true)}\nexport function createDownArrowWithCondition(context){start(context, \"Down\", true)}\nexport function createLeftArrowWithCondition(context){start(context, \"Left\", true)}\nexport function createUpArrowWithCondition(context){start(context, \"Up\", true)}\n\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n\n let selection = context.selection\n\n if(selection.count() > 1){\n // Need to find source object by ID first\n // let sourceObjectID = getSourceObjectFromSelection(selection)\n let currentConnectionsData = newConnectionsData\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🚀\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let conditionObject = document.getLayerWithID(conditionID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n if(conditionObject){conditionObject.remove()}\n\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, direction, isCondition)\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForGroup(groupName) { // refactored\n let currentGroup = null\n\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i]\n } \n }\n\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\"\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\"\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\"\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\"\n }\n }\n\n return direction\n}\n\nfunction drawConnection(firstObjectID, secondObjectID, style, type, localDirection, condition){ // Refactored\n // Process of creating new connection \n let localType = type == null ? Settings.settingForKey(\"arrowType\") : type\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection)\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n \n // Type \n if(localType == \"Angled\" || localType == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n if(localType == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n if(localType == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n\n // Condition\n connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style)\n\n // Add to group\n addToArrowsGroup(connection.line)\n\n return connection\n}\n\nfunction addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\")\n if(currentGroup){\n currentGroup.addLayers([line])\n currentGroup.fixGeometryWithOptions(1)\n } else {\n let Group = require('sketch/dom').Group\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n })\n group.moveToBack()\n group.adjustToFit()\n \n }\n}\n\nfunction addToConditionGroup(condition, x, y){ // Refactored\n let conGroup = checkForGroup(\"Conditions\") \n let arGroup = checkForGroup(\"Arrows\") \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0\n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX) \n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY) \n condition.parent = conGroup\n conGroup.fixGeometryWithOptions(1)\n } else {\n condition.frame.x = x - condition.frame.width / 2 \n condition.frame.y = y - condition.frame.height / 2\n let Group = require('sketch/dom').Group\n let group = new Group({\n parent: currentParentGroup,\n name: 'Conditions',\n layers: [condition]\n })\n group.moveToBack()\n group.adjustToFit()\n }\n}\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = []\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i])\n }\n } \n return dataArray\n}\n\nfunction findConnectionData(firstObjectID, secondObjectID, data){\n let arrayNumber = null\n firstObjectID = String(firstObjectID)\n secondObjectID = String(secondObjectID)\n\n if(pluginData){\n // If we have database, need to check for connections\n\n for(let y = 0; y < data.length; y++){\n\n if(firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject){\n // if we found that we have this object in connection database already\n if(secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject){\n // if we found that we have this object in connection database already\n arrayNumber = y\n } \n }\n }\n }\n return arrayNumber\n}\n\nfunction setActiveStyleSetting(arrowStylingField){\n let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)\n let styles = getLayerStyles(null)\n\n if(docSettings){\n // We have info about the settings in the current document\n \n if(docSettings != \"Default Style\") {\n // if user specified own option\n arrowStylingField.addItemWithTitle(docSettings)\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n if(styles[i].name() != docSettings){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n\n } else {\n // Need to show the default first\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n } else {\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n}\n\nfunction setActiveTypeSetting(arrowTypeField){\n let docTypeSettings = Settings.settingForKey(\"arrowType\") \n\n\n if(docTypeSettings){\n // We have info about the settings in the current document\n \n if(docTypeSettings == \"Angled\"){\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(0)\n } \n\n if(docTypeSettings == \"Curved\"){\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(0)\n } \n\n if(docTypeSettings == \"Straight\"){\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(0)\n } \n } else {\n // Show default\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.addItemWithTitle(\"Straight\")\n }\n\n}\n\nfunction deleteConnectionFromData(connectionIndex){ // Refactored\n let newConnections = []\n if(pluginData){\n // If we have database\n let connections = pluginData\n\n for (let i = 0; i < connections.length; i ++) {\n // Updating all connections without deleted one\n if(i != connectionIndex){\n newConnections.push(connections[i])\n }\n }\n }\n return newConnections\n}\n\nfunction deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID)\n let selectedGroup\n if(lineObject){\n selectedGroup = lineObject.parent\n lineObject.remove()\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove()\n }\n }\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID)\n let childObject = document.getLayerWithID(childObjectID)\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\")\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID)\n let childObject = document.getLayerWithID(childObjectID)\n let sourceMidY, childMidY, sourceMidX, childMidX, diff\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2\n childMidY = childObject.frame.y + childObject.frame.height/2\n diff = sourceMidY - childMidY\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n }\n \n return sourceObjectID\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n\n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i])}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i])}\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, isCondition){\n let selection = context.selection\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n \n if(connectionIndex == null){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, isCondition)\n sketch.UI.message(\"New connection is created 🚀\")\n } else {\n // Need to remake the arrow condition\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\nfunction addCondition(keyword, x, y){ // Refactored\n let libraries = sketch.getLibraries()\n let libraryObject, symbolReferences, symbol\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n libraryObject = symbolReferences[i]\n }\n }\n }\n\n if(libraryObject == null){\n symbol = null\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n } else {\n let symbolMaster = libraryObject.import()\n symbol = symbolMaster.createNewInstance()\n addToConditionGroup(symbol, x, y)\n symbol = symbol.id\n }\n\n return symbol\n}\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n let currentGroup = checkForGroup(\"Arrows\") \n let diffX, diffY\n\n if(currentGroup){\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n let connectionPos = {\n firstLayerPosX: null, \n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n return connectionPos\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n line.setName(\"Straight Arrow\")\n\n return line\n}\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n line.setName(\"Angled Arrow\")\n\n return line\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n let line\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n let str = currentConnectionsData[connectionIndex].condition\n log(typeof str)\n // Problem her is that we need to know is there a condition or not\n // Also, we need to check, what if user will change override of the layer\n // All the styles too\n \n if(currentConnectionsData[connectionIndex].condition) {\n log(\"hewr\")\n }\n // let isCondition = \n\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n \n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let conditionObject = document.getLayerWithID(conditionID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n if(conditionObject){conditionObject.remove()}\n\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, isCondition)\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForGroup(groupName) { // refactored\n let currentGroup = null\n\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i]\n } \n }\n\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\"\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\"\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\"\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\"\n }\n }\n\n return direction\n}\n\nfunction drawConnection(firstObjectID, secondObjectID, style, type, localDirection, condition){ // Refactored\n // Process of creating new connection \n let localType = type == null ? Settings.settingForKey(\"arrowType\") : type\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection)\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n \n // Type \n if(localType == \"Angled\" || localType == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n if(localType == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n if(localType == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n\n // Condition\n connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style)\n\n // Add to group\n addToArrowsGroup(connection.line)\n\n return connection\n}\n\nfunction addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\")\n if(currentGroup){\n currentGroup.addLayers([line])\n currentGroup.fixGeometryWithOptions(1)\n } else {\n let Group = require('sketch/dom').Group\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n })\n group.moveToBack()\n group.adjustToFit()\n \n }\n}\n\nfunction addToConditionGroup(condition, x, y){ // Refactored\n let conGroup = checkForGroup(\"Conditions\") \n let arGroup = checkForGroup(\"Arrows\") \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0\n\n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX) \n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY) \n condition.parent = conGroup\n conGroup.fixGeometryWithOptions(1)\n } else {\n condition.frame.x = x - condition.frame.width / 2 \n condition.frame.y = y - condition.frame.height / 2\n let Group = require('sketch/dom').Group\n let group = new Group({\n parent: currentParentGroup,\n name: 'Conditions',\n layers: [condition]\n })\n group.moveToBack()\n group.adjustToFit()\n }\n}\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = []\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i])\n }\n } \n return dataArray\n}\n\nfunction findConnectionData(firstObjectID, secondObjectID, data){\n let arrayNumber = null\n firstObjectID = String(firstObjectID)\n secondObjectID = String(secondObjectID)\n\n if(pluginData){\n // If we have database, need to check for connections\n\n for(let y = 0; y < data.length; y++){\n\n if(firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject){\n // if we found that we have this object in connection database already\n if(secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject){\n // if we found that we have this object in connection database already\n arrayNumber = y\n } \n }\n }\n }\n return arrayNumber\n}\n\nfunction setActiveStyleSetting(arrowStylingField){\n let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)\n let styles = getLayerStyles(null)\n\n if(docSettings){\n // We have info about the settings in the current document\n \n if(docSettings != \"Default Style\") {\n // if user specified own option\n arrowStylingField.addItemWithTitle(docSettings)\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n if(styles[i].name() != docSettings){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n\n } else {\n // Need to show the default first\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n } else {\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n}\n\nfunction setActiveTypeSetting(arrowTypeField){\n let docTypeSettings = Settings.settingForKey(\"arrowType\") \n\n\n if(docTypeSettings){\n // We have info about the settings in the current document\n \n if(docTypeSettings == \"Angled\"){\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(0)\n } \n\n if(docTypeSettings == \"Curved\"){\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(0)\n } \n\n if(docTypeSettings == \"Straight\"){\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(0)\n } \n } else {\n // Show default\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.addItemWithTitle(\"Straight\")\n }\n\n}\n\nfunction deleteConnectionFromData(connectionIndex){ // Refactored\n let newConnections = []\n if(pluginData){\n // If we have database\n let connections = pluginData\n\n for (let i = 0; i < connections.length; i ++) {\n // Updating all connections without deleted one\n if(i != connectionIndex){\n newConnections.push(connections[i])\n }\n }\n }\n return newConnections\n}\n\nfunction deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID)\n let selectedGroup\n if(lineObject){\n selectedGroup = lineObject.parent\n lineObject.remove()\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove()\n }\n }\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID)\n let childObject = document.getLayerWithID(childObjectID)\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\")\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID)\n let childObject = document.getLayerWithID(childObjectID)\n let sourceMidY, childMidY, sourceMidX, childMidX, diff\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2\n childMidY = childObject.frame.y + childObject.frame.height/2\n diff = sourceMidY - childMidY\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n }\n \n return sourceObjectID\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n\n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i])}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i])}\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, isCondition){\n let selection = context.selection\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n \n if(connectionIndex == null){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, isCondition)\n sketch.UI.message(\"New connection is created 🚀\")\n } else {\n // Need to remake the arrow condition\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\nfunction addCondition(keyword, x, y){ // Refactored\n let libraries = sketch.getLibraries()\n let libraryObject, symbolReferences, symbol\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n libraryObject = symbolReferences[i]\n }\n }\n }\n\n if(libraryObject == null){\n symbol = null\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n } else {\n let symbolMaster = libraryObject.import()\n symbol = symbolMaster.createNewInstance()\n addToConditionGroup(symbol, x, y)\n symbol = symbol.id\n }\n\n return symbol\n}\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n let currentGroup = checkForGroup(\"Arrows\") \n let diffX, diffY\n\n if(currentGroup){\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n let connectionPos = {\n firstLayerPosX: null, \n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n return connectionPos\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n line.setName(\"Straight Arrow\")\n\n return line\n}\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n line.setName(\"Angled Arrow\")\n\n return line\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n let line\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX 1){ + if(selection.count() > 1 && selection[0].class() != "MSArtboardGroup"){ // Need to find source object by ID first - // let sourceObjectID = getSourceObjectFromSelection(selection) - let currentConnectionsData = newConnectionsData + let currentConnectionsData = newConnectionsData // Need to refactor for(let g = 0; g < selection.count(); g++) { if(selection[g].objectID() != selection[0].objectID()){ @@ -54,17 +52,29 @@ export function updateSelectedArrows(context) { let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData) if(connectionIndex != null){ - updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, connectionIndex) - sketch.UI.message("Current connection is updated 🚀") + let str = currentConnectionsData[connectionIndex].condition + log(typeof str) + // Problem her is that we need to know is there a condition or not + // Also, we need to check, what if user will change override of the layer + // All the styles too + + if(currentConnectionsData[connectionIndex].condition) { + log("hewr") + } + // let isCondition = + + updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex) + sketch.UI.message("Current connection is updated 🤘") } else { sketch.UI.message("There is no connection between selected layers on the plugin data") } } } context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey) + } else { // When user didn't select anything - sketch.UI.message("Please select more than two layers") + sketch.UI.message("Please select more than two layers. Artboards are coming soon 🥳") } } @@ -407,7 +417,7 @@ function createArrow(firstObjectID, secondObjectID, style, type, direction, isCo autoAlignLayer(firstObjectID, secondObjectID, localDirection) // Making an Arrow - let arrow = drawConnection(firstObjectID, secondObjectID, style, type, direction, isCondition) + let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, isCondition) // Storage for current connection let connection = { @@ -529,7 +539,7 @@ function addToConditionGroup(condition, x, y){ // Refactored let arGroup = checkForGroup("Arrows") let arGroupX = arGroup != null ? arGroup.frame().x() : 0 let arGroupY = arGroup != null ? arGroup.frame().y() : 0 - + if(conGroup){ condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX) condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY) From 480205d00fd73626141849fd815f0a8d086b6092 Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Mon, 8 Apr 2019 23:04:07 +0300 Subject: [PATCH 17/44] trying to fix the problem --- arrows.sketchplugin/Contents/Sketch/script.js | 19 +++++-------------- .../Contents/Sketch/script.js.map | 2 +- src/script.js | 17 +++++------------ 3 files changed, 11 insertions(+), 27 deletions(-) diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index 2c1e98f..036971f 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -120,8 +120,6 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "panel", function() { return panel; }); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); -function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - // const { toArray } = require('util') // // Variables @@ -187,17 +185,8 @@ function updateSelectedArrows(context) { var connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData); if (connectionIndex != null) { - var str = currentConnectionsData[connectionIndex].condition; - log(_typeof(str)); // Problem her is that we need to know is there a condition or not - // Also, we need to check, what if user will change override of the layer - // All the styles too - - if (currentConnectionsData[connectionIndex].condition) { - log("hewr"); - } // let isCondition = - - - updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex); + log(currentConnectionsData); + updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex); sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Current connection is updated 🤘"); } else { sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is no connection between selected layers on the plugin data"); @@ -521,13 +510,15 @@ function createArrow(firstObjectID, secondObjectID, style, type, direction, isCo updateSpacing(firstObjectID, secondObjectID, localDirection); autoAlignLayer(firstObjectID, secondObjectID, localDirection); // Making an Arrow - var arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, isCondition); // Storage for current connection + var arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, isCondition); + log(arrow.conditionID); // Storage for current connection var connection = { firstObject: firstObjectID, secondObject: secondObjectID, style: arrow.style, condition: arrow.conditionID, + isCondition: isCondition, type: arrow.type, direction: localDirection, line: arrow.line.objectID() // Need to save this data to the global array diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index 62b17de..5f75e91 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","pluginKey","document","sketch","fromNative","context","docData","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","currentParentGroup","currentPage","currentArtboard","newConnectionsData","getConnectionsData","Settings","createAutoArrow","start","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","updateSelectedArrows","selection","count","class","currentConnectionsData","g","objectID","connectionIndex","findConnectionData","str","condition","log","updateArrow","firstObject","secondObject","style","type","direction","line","isCondition","message","setValue_forKey_onLayer_forPluginIdentifier","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","length","updateArrowsCounter","i","getLayerWithID","sketchObject","parentArtboard","push","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","settingForKey","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","views","subviews","title","setSettingForKey","intValue","state","onLayersMoved","action","actionContext","panel","ControlBar","NSPanel","setStyleMask","NSTitledWindowMask","NSFullSizeContentViewWindowMask","setTitleVisibility","NSWindowTitleHidden","setTitlebarAppearsTransparent","setFrame_display","setMovableByWindowBackground","setHasShadow","setLevel","NSFloatingWindowLevel","center","makeKeyAndOrderFront","nil","firstObjectID","secondObjectID","lineID","conditionID","conditionObject","remove","createArrow","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","checkForGroup","groupName","currentGroup","layers","name","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","localType","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","addCondition","styleLine","addToArrowsGroup","addLayers","fixGeometryWithOptions","Group","group","parent","locked","moveToBack","adjustToFit","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","dataArray","data","arrayNumber","docSettings","styles","getLayerStyles","addItemWithTitle","docTypeSettings","lastItem","setState","newConnections","lineObject","selectedGroup","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","defineSourceObject","id","getSourceObjectFromSelection","setMessageText","addButtonWithTitle","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","allStyles","allLayerStyles","keyword","includes","libraries","getLibraries","libraryObject","symbolReferences","symbol","getImportableSymbolReferencesForDocument","symbolMaster","import","createNewInstance","firstObjectAbsPos","changeBasis","from","to","secondObjectAbsPos","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","setName","points","cornerRadius","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","localStyle","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch'\n// const { toArray } = require('util')\n\n//\n// Variables\n//\n\nlet UI = require('sketch/ui') \n// var SharedStyle = require('sketch/dom').SharedStyle\n\nconst pluginKey = \"flowArrows\"\nconst document = sketch.fromNative(context.document)\nlet docData = context.document.documentData()\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey)\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards\nlet newConnectionsData = getConnectionsData()\n\n// Settings\nvar Settings = require('sketch/settings')\n\n \n//\n// Create Connection Function\n//\n\nexport default function(context) {}\nexport function createAutoArrow(context){start(context, \"Auto\", false)}\nexport function createRightArrow(context){start(context, \"Right\", false)}\nexport function createDownArrow(context){start(context, \"Down\", false)}\nexport function createLeftArrow(context){start(context, \"Left\", false)}\nexport function createUpArrow(context){start(context, \"Up\", false)}\n\nexport function createRightArrowWithCondition(context){start(context, \"Right\", true)}\nexport function createDownArrowWithCondition(context){start(context, \"Down\", true)}\nexport function createLeftArrowWithCondition(context){start(context, \"Left\", true)}\nexport function createUpArrowWithCondition(context){start(context, \"Up\", true)}\n\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n let selection = context.selection\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n let str = currentConnectionsData[connectionIndex].condition\n log(typeof str)\n // Problem her is that we need to know is there a condition or not\n // Also, we need to check, what if user will change override of the layer\n // All the styles too\n \n if(currentConnectionsData[connectionIndex].condition) {\n log(\"hewr\")\n }\n // let isCondition = \n\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n \n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let conditionObject = document.getLayerWithID(conditionID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n if(conditionObject){conditionObject.remove()}\n\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, isCondition)\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForGroup(groupName) { // refactored\n let currentGroup = null\n\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i]\n } \n }\n\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\"\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\"\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\"\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\"\n }\n }\n\n return direction\n}\n\nfunction drawConnection(firstObjectID, secondObjectID, style, type, localDirection, condition){ // Refactored\n // Process of creating new connection \n let localType = type == null ? Settings.settingForKey(\"arrowType\") : type\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection)\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n \n // Type \n if(localType == \"Angled\" || localType == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n if(localType == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n if(localType == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n\n // Condition\n connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style)\n\n // Add to group\n addToArrowsGroup(connection.line)\n\n return connection\n}\n\nfunction addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\")\n if(currentGroup){\n currentGroup.addLayers([line])\n currentGroup.fixGeometryWithOptions(1)\n } else {\n let Group = require('sketch/dom').Group\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n })\n group.moveToBack()\n group.adjustToFit()\n \n }\n}\n\nfunction addToConditionGroup(condition, x, y){ // Refactored\n let conGroup = checkForGroup(\"Conditions\") \n let arGroup = checkForGroup(\"Arrows\") \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0\n\n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX) \n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY) \n condition.parent = conGroup\n conGroup.fixGeometryWithOptions(1)\n } else {\n condition.frame.x = x - condition.frame.width / 2 \n condition.frame.y = y - condition.frame.height / 2\n let Group = require('sketch/dom').Group\n let group = new Group({\n parent: currentParentGroup,\n name: 'Conditions',\n layers: [condition]\n })\n group.moveToBack()\n group.adjustToFit()\n }\n}\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = []\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i])\n }\n } \n return dataArray\n}\n\nfunction findConnectionData(firstObjectID, secondObjectID, data){\n let arrayNumber = null\n firstObjectID = String(firstObjectID)\n secondObjectID = String(secondObjectID)\n\n if(pluginData){\n // If we have database, need to check for connections\n\n for(let y = 0; y < data.length; y++){\n\n if(firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject){\n // if we found that we have this object in connection database already\n if(secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject){\n // if we found that we have this object in connection database already\n arrayNumber = y\n } \n }\n }\n }\n return arrayNumber\n}\n\nfunction setActiveStyleSetting(arrowStylingField){\n let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)\n let styles = getLayerStyles(null)\n\n if(docSettings){\n // We have info about the settings in the current document\n \n if(docSettings != \"Default Style\") {\n // if user specified own option\n arrowStylingField.addItemWithTitle(docSettings)\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n if(styles[i].name() != docSettings){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n\n } else {\n // Need to show the default first\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n } else {\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n}\n\nfunction setActiveTypeSetting(arrowTypeField){\n let docTypeSettings = Settings.settingForKey(\"arrowType\") \n\n\n if(docTypeSettings){\n // We have info about the settings in the current document\n \n if(docTypeSettings == \"Angled\"){\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(0)\n } \n\n if(docTypeSettings == \"Curved\"){\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(0)\n } \n\n if(docTypeSettings == \"Straight\"){\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(0)\n } \n } else {\n // Show default\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.addItemWithTitle(\"Straight\")\n }\n\n}\n\nfunction deleteConnectionFromData(connectionIndex){ // Refactored\n let newConnections = []\n if(pluginData){\n // If we have database\n let connections = pluginData\n\n for (let i = 0; i < connections.length; i ++) {\n // Updating all connections without deleted one\n if(i != connectionIndex){\n newConnections.push(connections[i])\n }\n }\n }\n return newConnections\n}\n\nfunction deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID)\n let selectedGroup\n if(lineObject){\n selectedGroup = lineObject.parent\n lineObject.remove()\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove()\n }\n }\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID)\n let childObject = document.getLayerWithID(childObjectID)\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\")\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID)\n let childObject = document.getLayerWithID(childObjectID)\n let sourceMidY, childMidY, sourceMidX, childMidX, diff\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2\n childMidY = childObject.frame.y + childObject.frame.height/2\n diff = sourceMidY - childMidY\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n }\n \n return sourceObjectID\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n\n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i])}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i])}\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, isCondition){\n let selection = context.selection\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n \n if(connectionIndex == null){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, isCondition)\n sketch.UI.message(\"New connection is created 🚀\")\n } else {\n // Need to remake the arrow condition\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\nfunction addCondition(keyword, x, y){ // Refactored\n let libraries = sketch.getLibraries()\n let libraryObject, symbolReferences, symbol\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n libraryObject = symbolReferences[i]\n }\n }\n }\n\n if(libraryObject == null){\n symbol = null\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n } else {\n let symbolMaster = libraryObject.import()\n symbol = symbolMaster.createNewInstance()\n addToConditionGroup(symbol, x, y)\n symbol = symbol.id\n }\n\n return symbol\n}\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n let currentGroup = checkForGroup(\"Arrows\") \n let diffX, diffY\n\n if(currentGroup){\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n let connectionPos = {\n firstLayerPosX: null, \n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n return connectionPos\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n line.setName(\"Straight Arrow\")\n\n return line\n}\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n line.setName(\"Angled Arrow\")\n\n return line\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n let line\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n log(currentConnectionsData)\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n \n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let conditionObject = document.getLayerWithID(conditionID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n if(conditionObject){conditionObject.remove()}\n\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, isCondition)\n log(arrow.conditionID)\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForGroup(groupName) { // refactored\n let currentGroup = null\n\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i]\n } \n }\n\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\"\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\"\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\"\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\"\n }\n }\n\n return direction\n}\n\nfunction drawConnection(firstObjectID, secondObjectID, style, type, localDirection, condition){ // Refactored\n // Process of creating new connection \n let localType = type == null ? Settings.settingForKey(\"arrowType\") : type\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection)\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n \n // Type \n if(localType == \"Angled\" || localType == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n if(localType == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n if(localType == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n\n\n // Condition\n connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style)\n\n // Add to group\n addToArrowsGroup(connection.line)\n\n return connection\n}\n\nfunction addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\")\n if(currentGroup){\n currentGroup.addLayers([line])\n currentGroup.fixGeometryWithOptions(1)\n } else {\n let Group = require('sketch/dom').Group\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n })\n group.moveToBack()\n group.adjustToFit()\n \n }\n}\n\nfunction addToConditionGroup(condition, x, y){ // Refactored\n let conGroup = checkForGroup(\"Conditions\") \n let arGroup = checkForGroup(\"Arrows\") \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0\n\n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX) \n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY) \n condition.parent = conGroup\n conGroup.fixGeometryWithOptions(1)\n } else {\n condition.frame.x = x - condition.frame.width / 2 \n condition.frame.y = y - condition.frame.height / 2\n let Group = require('sketch/dom').Group\n let group = new Group({\n parent: currentParentGroup,\n name: 'Conditions',\n layers: [condition]\n })\n group.moveToBack()\n group.adjustToFit()\n }\n}\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = []\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i])\n }\n } \n return dataArray\n}\n\nfunction findConnectionData(firstObjectID, secondObjectID, data){\n let arrayNumber = null\n firstObjectID = String(firstObjectID)\n secondObjectID = String(secondObjectID)\n\n if(pluginData){\n // If we have database, need to check for connections\n\n for(let y = 0; y < data.length; y++){\n\n if(firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject){\n // if we found that we have this object in connection database already\n if(secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject){\n // if we found that we have this object in connection database already\n arrayNumber = y\n } \n }\n }\n }\n return arrayNumber\n}\n\nfunction setActiveStyleSetting(arrowStylingField){\n let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)\n let styles = getLayerStyles(null)\n\n if(docSettings){\n // We have info about the settings in the current document\n \n if(docSettings != \"Default Style\") {\n // if user specified own option\n arrowStylingField.addItemWithTitle(docSettings)\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n if(styles[i].name() != docSettings){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n\n } else {\n // Need to show the default first\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n } else {\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n}\n\nfunction setActiveTypeSetting(arrowTypeField){\n let docTypeSettings = Settings.settingForKey(\"arrowType\") \n\n\n if(docTypeSettings){\n // We have info about the settings in the current document\n \n if(docTypeSettings == \"Angled\"){\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(0)\n } \n\n if(docTypeSettings == \"Curved\"){\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(0)\n } \n\n if(docTypeSettings == \"Straight\"){\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(0)\n } \n } else {\n // Show default\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.addItemWithTitle(\"Straight\")\n }\n\n}\n\nfunction deleteConnectionFromData(connectionIndex){ // Refactored\n let newConnections = []\n if(pluginData){\n // If we have database\n let connections = pluginData\n\n for (let i = 0; i < connections.length; i ++) {\n // Updating all connections without deleted one\n if(i != connectionIndex){\n newConnections.push(connections[i])\n }\n }\n }\n return newConnections\n}\n\nfunction deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID)\n let selectedGroup\n if(lineObject){\n selectedGroup = lineObject.parent\n lineObject.remove()\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove()\n }\n }\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID)\n let childObject = document.getLayerWithID(childObjectID)\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\")\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID)\n let childObject = document.getLayerWithID(childObjectID)\n let sourceMidY, childMidY, sourceMidX, childMidX, diff\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2\n childMidY = childObject.frame.y + childObject.frame.height/2\n diff = sourceMidY - childMidY\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n }\n \n return sourceObjectID\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n\n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i])}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i])}\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, isCondition){\n let selection = context.selection\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n \n if(connectionIndex == null){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, isCondition)\n sketch.UI.message(\"New connection is created 🚀\")\n } else {\n // Need to remake the arrow condition\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\nfunction addCondition(keyword, x, y){ // Refactored\n let libraries = sketch.getLibraries()\n let libraryObject, symbolReferences, symbol\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n libraryObject = symbolReferences[i]\n }\n }\n }\n\n if(libraryObject == null){\n symbol = null\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n } else {\n let symbolMaster = libraryObject.import()\n symbol = symbolMaster.createNewInstance()\n addToConditionGroup(symbol, x, y)\n symbol = symbol.id\n }\n\n return symbol\n}\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n let currentGroup = checkForGroup(\"Arrows\") \n let diffX, diffY\n\n if(currentGroup){\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n let connectionPos = {\n firstLayerPosX: null, \n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n return connectionPos\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n line.setName(\"Straight Arrow\")\n\n return line\n}\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n line.setName(\"Angled Arrow\")\n\n return line\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n let line\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX Date: Fri, 12 Apr 2019 00:45:15 +0300 Subject: [PATCH 18/44] fixed problem with type --- arrows.sketchplugin/Contents/Sketch/script.js | 66 ++++++++++++++---- .../Contents/Sketch/script.js.map | 2 +- src/script.js | 68 ++++++++++++++----- 3 files changed, 104 insertions(+), 32 deletions(-) diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index 036971f..7de24d0 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -491,27 +491,29 @@ function updateArrow(firstObjectID, secondObjectID, style, type, direction, line deleteLine(lineID); - if (conditionObject) { - conditionObject.remove(); + if (conditionID) { + if (conditionObject) { + conditionObject.remove(); + } } newConnectionsData = deleteConnectionFromData(connectionIndex); if (firstObject && secondObject) { // If we have all the objects, we can recreate the line - createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition); + createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition); } } -function createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition) { +function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored var localDirection = direction == "Auto" ? getDirection(firstObjectID, secondObjectID) : direction; // Main Operations based on the settings updateSpacing(firstObjectID, secondObjectID, localDirection); autoAlignLayer(firstObjectID, secondObjectID, localDirection); // Making an Arrow - var arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, isCondition); - log(arrow.conditionID); // Storage for current connection + var arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition); // log(arrow.conditionID) + // Storage for current connection var connection = { firstObject: firstObjectID, @@ -521,10 +523,12 @@ function createArrow(firstObjectID, secondObjectID, style, type, direction, isCo isCondition: isCondition, type: arrow.type, direction: localDirection, - line: arrow.line.objectID() // Need to save this data to the global array - + line: arrow.line.objectID() }; + log(connection); // Need to save this data to the global array + newConnectionsData.push(connection); + log(newConnectionsData); } function checkForGroup(groupName) { @@ -578,10 +582,9 @@ function getDirection(firstObjectID, secondObjectID) { return direction; } -function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, condition) { +function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition) { // Refactored // Process of creating new connection - var localType = type == null ? Settings.settingForKey("arrowType") : type; var firstObject = document.getLayerWithID(firstObjectID); var secondObject = document.getLayerWithID(secondObjectID); var connectionPos = getConnectionPos(firstObject, secondObject, localDirection); @@ -592,21 +595,32 @@ function drawConnection(firstObjectID, secondObjectID, style, type, localDirecti style: [] // Type }; + connection.type = type == null ? Settings.settingForKey("arrowType") : type; - if (localType == "Angled" || localType == null) { + if (connection.type == "Angled" || connection.type == null) { connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection); } - if (localType == "Straight") { + if (connection.type == "Straight") { connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection); } - if (localType == "Curved") { + if (connection.type == "Curved") { connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection); } // Condition - connection.conditionID = condition != false ? connection.conditionID = addCondition("#con", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null; // Style + if (condition != false) { + if (conditionID) { + connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY); + } else { + connection.conditionID = addCondition("#con", connectionPos.middlePosX, connectionPos.middlePosY); + } + } else { + connection.conditionID = null; + } // connection.conditionID = condition != false ? connection.conditionID = addCondition("#con", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null + // Style + connection.style = styleLine(connection.line, style); // Add to group @@ -987,7 +1001,7 @@ function start(context, direction, isCondition) { if (connectionIndex == null) { // There is no connection with this two objects in our database - createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, isCondition); + createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition); sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("New connection is created 🚀"); } else { // Need to remake the arrow condition @@ -1032,6 +1046,28 @@ function addCondition(keyword, x, y) { return symbol; } +function updateCondition(conditionID, x, y) { + // Refactored + var condition = document.getLayerWithID(conditionID); + var conGroup = checkForGroup("Conditions"); + var arGroup = checkForGroup("Arrows"); + var arGroupX = arGroup != null ? arGroup.frame().x() : 0; + var arGroupY = arGroup != null ? arGroup.frame().y() : 0; + log(condition.x()); + + if (conGroup) { + condition.frame.x = x - condition.frame().width() / 2 - (conGroup.frame().x() - arGroupX); + condition.frame.y = y - condition.frame().height() / 2 - (conGroup.frame().y() - arGroupY); + conGroup.fixGeometryWithOptions(1); + } else { + condition.frame.x = x - condition.frame().width() / 2; + condition.frame.y = y - condition.frame().height() / 2; + } + + log(condition.id); + return condition.id; +} + function getConnectionPos(firstObject, secondObject, direction) { // Refactored var firstObjectAbsPos = firstObject.frame.changeBasis({ diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index 5f75e91..28d7647 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","pluginKey","document","sketch","fromNative","context","docData","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","currentParentGroup","currentPage","currentArtboard","newConnectionsData","getConnectionsData","Settings","createAutoArrow","start","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","updateSelectedArrows","selection","count","class","currentConnectionsData","g","objectID","connectionIndex","findConnectionData","log","updateArrow","firstObject","secondObject","style","type","direction","line","condition","isCondition","message","setValue_forKey_onLayer_forPluginIdentifier","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","length","updateArrowsCounter","i","getLayerWithID","sketchObject","parentArtboard","push","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","settingForKey","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","views","subviews","title","setSettingForKey","intValue","state","onLayersMoved","action","actionContext","panel","ControlBar","NSPanel","setStyleMask","NSTitledWindowMask","NSFullSizeContentViewWindowMask","setTitleVisibility","NSWindowTitleHidden","setTitlebarAppearsTransparent","setFrame_display","setMovableByWindowBackground","setHasShadow","setLevel","NSFloatingWindowLevel","center","makeKeyAndOrderFront","nil","firstObjectID","secondObjectID","lineID","conditionID","conditionObject","remove","createArrow","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","checkForGroup","groupName","currentGroup","layers","name","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","localType","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","addCondition","styleLine","addToArrowsGroup","addLayers","fixGeometryWithOptions","Group","group","parent","locked","moveToBack","adjustToFit","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","dataArray","data","arrayNumber","docSettings","styles","getLayerStyles","addItemWithTitle","docTypeSettings","lastItem","setState","newConnections","lineObject","selectedGroup","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","defineSourceObject","id","getSourceObjectFromSelection","setMessageText","addButtonWithTitle","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","allStyles","allLayerStyles","keyword","includes","libraries","getLibraries","libraryObject","symbolReferences","symbol","getImportableSymbolReferencesForDocument","symbolMaster","import","createNewInstance","firstObjectAbsPos","changeBasis","from","to","secondObjectAbsPos","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","setName","points","cornerRadius","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","localStyle","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch'\n// const { toArray } = require('util')\n\n//\n// Variables\n//\n\nlet UI = require('sketch/ui') \n// var SharedStyle = require('sketch/dom').SharedStyle\n\nconst pluginKey = \"flowArrows\"\nconst document = sketch.fromNative(context.document)\nlet docData = context.document.documentData()\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey)\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards\nlet newConnectionsData = getConnectionsData()\n\n// Settings\nvar Settings = require('sketch/settings')\n\n \n//\n// Create Connection Function\n//\n\nexport default function(context) {}\nexport function createAutoArrow(context){start(context, \"Auto\", false)}\nexport function createRightArrow(context){start(context, \"Right\", false)}\nexport function createDownArrow(context){start(context, \"Down\", false)}\nexport function createLeftArrow(context){start(context, \"Left\", false)}\nexport function createUpArrow(context){start(context, \"Up\", false)}\n\nexport function createRightArrowWithCondition(context){start(context, \"Right\", true)}\nexport function createDownArrowWithCondition(context){start(context, \"Down\", true)}\nexport function createLeftArrowWithCondition(context){start(context, \"Left\", true)}\nexport function createUpArrowWithCondition(context){start(context, \"Up\", true)}\n\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n let selection = context.selection\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n log(currentConnectionsData)\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n \n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let conditionObject = document.getLayerWithID(conditionID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n if(conditionObject){conditionObject.remove()}\n\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, isCondition)\n log(arrow.conditionID)\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForGroup(groupName) { // refactored\n let currentGroup = null\n\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i]\n } \n }\n\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\"\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\"\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\"\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\"\n }\n }\n\n return direction\n}\n\nfunction drawConnection(firstObjectID, secondObjectID, style, type, localDirection, condition){ // Refactored\n // Process of creating new connection \n let localType = type == null ? Settings.settingForKey(\"arrowType\") : type\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection)\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n \n // Type \n if(localType == \"Angled\" || localType == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n if(localType == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n if(localType == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n\n\n // Condition\n connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style)\n\n // Add to group\n addToArrowsGroup(connection.line)\n\n return connection\n}\n\nfunction addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\")\n if(currentGroup){\n currentGroup.addLayers([line])\n currentGroup.fixGeometryWithOptions(1)\n } else {\n let Group = require('sketch/dom').Group\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n })\n group.moveToBack()\n group.adjustToFit()\n \n }\n}\n\nfunction addToConditionGroup(condition, x, y){ // Refactored\n let conGroup = checkForGroup(\"Conditions\") \n let arGroup = checkForGroup(\"Arrows\") \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0\n\n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX) \n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY) \n condition.parent = conGroup\n conGroup.fixGeometryWithOptions(1)\n } else {\n condition.frame.x = x - condition.frame.width / 2 \n condition.frame.y = y - condition.frame.height / 2\n let Group = require('sketch/dom').Group\n let group = new Group({\n parent: currentParentGroup,\n name: 'Conditions',\n layers: [condition]\n })\n group.moveToBack()\n group.adjustToFit()\n }\n}\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = []\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i])\n }\n } \n return dataArray\n}\n\nfunction findConnectionData(firstObjectID, secondObjectID, data){\n let arrayNumber = null\n firstObjectID = String(firstObjectID)\n secondObjectID = String(secondObjectID)\n\n if(pluginData){\n // If we have database, need to check for connections\n\n for(let y = 0; y < data.length; y++){\n\n if(firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject){\n // if we found that we have this object in connection database already\n if(secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject){\n // if we found that we have this object in connection database already\n arrayNumber = y\n } \n }\n }\n }\n return arrayNumber\n}\n\nfunction setActiveStyleSetting(arrowStylingField){\n let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)\n let styles = getLayerStyles(null)\n\n if(docSettings){\n // We have info about the settings in the current document\n \n if(docSettings != \"Default Style\") {\n // if user specified own option\n arrowStylingField.addItemWithTitle(docSettings)\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n if(styles[i].name() != docSettings){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n\n } else {\n // Need to show the default first\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n } else {\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n}\n\nfunction setActiveTypeSetting(arrowTypeField){\n let docTypeSettings = Settings.settingForKey(\"arrowType\") \n\n\n if(docTypeSettings){\n // We have info about the settings in the current document\n \n if(docTypeSettings == \"Angled\"){\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(0)\n } \n\n if(docTypeSettings == \"Curved\"){\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(0)\n } \n\n if(docTypeSettings == \"Straight\"){\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(0)\n } \n } else {\n // Show default\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.addItemWithTitle(\"Straight\")\n }\n\n}\n\nfunction deleteConnectionFromData(connectionIndex){ // Refactored\n let newConnections = []\n if(pluginData){\n // If we have database\n let connections = pluginData\n\n for (let i = 0; i < connections.length; i ++) {\n // Updating all connections without deleted one\n if(i != connectionIndex){\n newConnections.push(connections[i])\n }\n }\n }\n return newConnections\n}\n\nfunction deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID)\n let selectedGroup\n if(lineObject){\n selectedGroup = lineObject.parent\n lineObject.remove()\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove()\n }\n }\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID)\n let childObject = document.getLayerWithID(childObjectID)\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\")\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID)\n let childObject = document.getLayerWithID(childObjectID)\n let sourceMidY, childMidY, sourceMidX, childMidX, diff\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2\n childMidY = childObject.frame.y + childObject.frame.height/2\n diff = sourceMidY - childMidY\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n }\n \n return sourceObjectID\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n\n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i])}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i])}\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, isCondition){\n let selection = context.selection\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n \n if(connectionIndex == null){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, isCondition)\n sketch.UI.message(\"New connection is created 🚀\")\n } else {\n // Need to remake the arrow condition\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\nfunction addCondition(keyword, x, y){ // Refactored\n let libraries = sketch.getLibraries()\n let libraryObject, symbolReferences, symbol\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n libraryObject = symbolReferences[i]\n }\n }\n }\n\n if(libraryObject == null){\n symbol = null\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n } else {\n let symbolMaster = libraryObject.import()\n symbol = symbolMaster.createNewInstance()\n addToConditionGroup(symbol, x, y)\n symbol = symbol.id\n }\n\n return symbol\n}\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n let currentGroup = checkForGroup(\"Arrows\") \n let diffX, diffY\n\n if(currentGroup){\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n let connectionPos = {\n firstLayerPosX: null, \n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n return connectionPos\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n line.setName(\"Straight Arrow\")\n\n return line\n}\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n line.setName(\"Angled Arrow\")\n\n return line\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n let line\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n log(currentConnectionsData)\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n \n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let conditionObject = document.getLayerWithID(conditionID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n if(conditionID){\n if(conditionObject){conditionObject.remove()}\n }\n \n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition)\n // log(arrow.conditionID)\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n\n log(connection)\n\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n log(newConnectionsData)\n}\n\nfunction checkForGroup(groupName) { // refactored\n let currentGroup = null\n\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i]\n } \n }\n\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\"\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\"\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\"\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\"\n }\n }\n\n return direction\n}\n\nfunction drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition){ // Refactored\n // Process of creating new connection \n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection)\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n \n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n\n\n // Condition\n if(condition != false){\n if(conditionID){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY)\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY)\n }\n } else {\n connection.conditionID = null\n }\n // connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style)\n\n // Add to group\n addToArrowsGroup(connection.line)\n \n return connection\n}\n\nfunction addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\")\n if(currentGroup){\n currentGroup.addLayers([line])\n currentGroup.fixGeometryWithOptions(1)\n } else {\n let Group = require('sketch/dom').Group\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n })\n group.moveToBack()\n group.adjustToFit()\n \n }\n}\n\nfunction addToConditionGroup(condition, x, y){ // Refactored\n let conGroup = checkForGroup(\"Conditions\") \n let arGroup = checkForGroup(\"Arrows\") \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0\n\n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX) \n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY) \n condition.parent = conGroup\n conGroup.fixGeometryWithOptions(1)\n } else {\n condition.frame.x = x - condition.frame.width / 2 \n condition.frame.y = y - condition.frame.height / 2\n let Group = require('sketch/dom').Group\n let group = new Group({\n parent: currentParentGroup,\n name: 'Conditions',\n layers: [condition]\n })\n group.moveToBack()\n group.adjustToFit()\n }\n}\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = []\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i])\n }\n } \n return dataArray\n}\n\nfunction findConnectionData(firstObjectID, secondObjectID, data){\n let arrayNumber = null\n firstObjectID = String(firstObjectID)\n secondObjectID = String(secondObjectID)\n\n if(pluginData){\n // If we have database, need to check for connections\n\n for(let y = 0; y < data.length; y++){\n\n if(firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject){\n // if we found that we have this object in connection database already\n if(secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject){\n // if we found that we have this object in connection database already\n arrayNumber = y\n } \n }\n }\n }\n return arrayNumber\n}\n\nfunction setActiveStyleSetting(arrowStylingField){\n let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)\n let styles = getLayerStyles(null)\n\n if(docSettings){\n // We have info about the settings in the current document\n \n if(docSettings != \"Default Style\") {\n // if user specified own option\n arrowStylingField.addItemWithTitle(docSettings)\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n if(styles[i].name() != docSettings){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n\n } else {\n // Need to show the default first\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n } else {\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n}\n\nfunction setActiveTypeSetting(arrowTypeField){\n let docTypeSettings = Settings.settingForKey(\"arrowType\") \n\n\n if(docTypeSettings){\n // We have info about the settings in the current document\n \n if(docTypeSettings == \"Angled\"){\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(0)\n } \n\n if(docTypeSettings == \"Curved\"){\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(0)\n } \n\n if(docTypeSettings == \"Straight\"){\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(0)\n } \n } else {\n // Show default\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.addItemWithTitle(\"Straight\")\n }\n\n}\n\nfunction deleteConnectionFromData(connectionIndex){ // Refactored\n let newConnections = []\n if(pluginData){\n // If we have database\n let connections = pluginData\n\n for (let i = 0; i < connections.length; i ++) {\n // Updating all connections without deleted one\n if(i != connectionIndex){\n newConnections.push(connections[i])\n }\n }\n }\n return newConnections\n}\n\nfunction deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID)\n let selectedGroup\n if(lineObject){\n selectedGroup = lineObject.parent\n lineObject.remove()\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove()\n }\n }\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID)\n let childObject = document.getLayerWithID(childObjectID)\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\")\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID)\n let childObject = document.getLayerWithID(childObjectID)\n let sourceMidY, childMidY, sourceMidX, childMidX, diff\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2\n childMidY = childObject.frame.y + childObject.frame.height/2\n diff = sourceMidY - childMidY\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n }\n \n return sourceObjectID\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n\n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i])}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i])}\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, isCondition){\n let selection = context.selection\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n \n if(connectionIndex == null){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition)\n sketch.UI.message(\"New connection is created 🚀\")\n } else {\n // Need to remake the arrow condition\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\nfunction addCondition(keyword, x, y){ // Refactored\n let libraries = sketch.getLibraries()\n let libraryObject, symbolReferences, symbol\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n libraryObject = symbolReferences[i]\n }\n }\n }\n\n if(libraryObject == null){\n symbol = null\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n } else {\n let symbolMaster = libraryObject.import()\n symbol = symbolMaster.createNewInstance()\n addToConditionGroup(symbol, x, y)\n symbol = symbol.id\n }\n\n return symbol\n}\n\nfunction updateCondition(conditionID, x, y){ // Refactored\n let condition = document.getLayerWithID(conditionID)\n let conGroup = checkForGroup(\"Conditions\") \n let arGroup = checkForGroup(\"Arrows\") \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0\n\n log(condition.x())\n\n if(conGroup){\n condition.frame.x = x - condition.frame().width() / 2 - (conGroup.frame().x() - arGroupX) \n condition.frame.y = y - condition.frame().height() / 2 - (conGroup.frame().y() - arGroupY) \n conGroup.fixGeometryWithOptions(1)\n } else {\n condition.frame.x = x - condition.frame().width() / 2 \n condition.frame.y = y - condition.frame().height() / 2\n }\n\n log(condition.id)\n\n return condition.id\n}\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n let currentGroup = checkForGroup(\"Arrows\") \n let diffX, diffY\n\n if(currentGroup){\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n let connectionPos = {\n firstLayerPosX: null, \n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n return connectionPos\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n line.setName(\"Straight Arrow\")\n\n return line\n}\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n line.setName(\"Angled Arrow\")\n\n return line\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n let line\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX Date: Sat, 13 Apr 2019 09:38:01 +0300 Subject: [PATCH 19/44] fixes --- arrows.sketchplugin/Contents/Sketch/script.js | 16 +- .../Contents/Sketch/script.js.map | 2 +- package-lock.json | 5584 +---------------- package.json | 5 +- src/script.js | 16 +- 5 files changed, 30 insertions(+), 5593 deletions(-) diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index 7de24d0..94fdf44 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -611,7 +611,7 @@ function drawConnection(firstObjectID, secondObjectID, style, type, localDirecti if (condition != false) { - if (conditionID) { + if (conditionID != "") { connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY); } else { connection.conditionID = addCondition("#con", connectionPos.middlePosX, connectionPos.middlePosY); @@ -674,6 +674,8 @@ function addToConditionGroup(condition, x, y) { group.moveToBack(); group.adjustToFit(); } + + return condition.id; } function getConnectionsData() { @@ -1039,8 +1041,7 @@ function addCondition(keyword, x, y) { } else { var symbolMaster = libraryObject.import(); symbol = symbolMaster.createNewInstance(); - addToConditionGroup(symbol, x, y); - symbol = symbol.id; + symbol = addToConditionGroup(symbol, x, y); } return symbol; @@ -1053,7 +1054,7 @@ function updateCondition(conditionID, x, y) { var arGroup = checkForGroup("Arrows"); var arGroupX = arGroup != null ? arGroup.frame().x() : 0; var arGroupY = arGroup != null ? arGroup.frame().y() : 0; - log(condition.x()); + log(condition); if (conGroup) { condition.frame.x = x - condition.frame().width() / 2 - (conGroup.frame().x() - arGroupX); @@ -1475,7 +1476,12 @@ function styleLine(line, style) { } return localStyle; -} +} // const track = require("sketch-module-google-analytics") +// track("UA-138226597-1", "event", { +// ec: "command", +// ea: "start", +// ev: "my-command" +// }); /***/ }), diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index 28d7647..cd00d5a 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","pluginKey","document","sketch","fromNative","context","docData","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","currentParentGroup","currentPage","currentArtboard","newConnectionsData","getConnectionsData","Settings","createAutoArrow","start","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","updateSelectedArrows","selection","count","class","currentConnectionsData","g","objectID","connectionIndex","findConnectionData","log","updateArrow","firstObject","secondObject","style","type","direction","line","condition","isCondition","message","setValue_forKey_onLayer_forPluginIdentifier","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","length","updateArrowsCounter","i","getLayerWithID","sketchObject","parentArtboard","push","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","settingForKey","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","views","subviews","title","setSettingForKey","intValue","state","onLayersMoved","action","actionContext","panel","ControlBar","NSPanel","setStyleMask","NSTitledWindowMask","NSFullSizeContentViewWindowMask","setTitleVisibility","NSWindowTitleHidden","setTitlebarAppearsTransparent","setFrame_display","setMovableByWindowBackground","setHasShadow","setLevel","NSFloatingWindowLevel","center","makeKeyAndOrderFront","nil","firstObjectID","secondObjectID","lineID","conditionID","conditionObject","remove","createArrow","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","checkForGroup","groupName","currentGroup","layers","name","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","addLayers","fixGeometryWithOptions","Group","group","parent","locked","moveToBack","adjustToFit","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","dataArray","data","arrayNumber","docSettings","styles","getLayerStyles","addItemWithTitle","docTypeSettings","lastItem","setState","newConnections","lineObject","selectedGroup","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","defineSourceObject","id","getSourceObjectFromSelection","setMessageText","addButtonWithTitle","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","allStyles","allLayerStyles","keyword","includes","libraries","getLibraries","libraryObject","symbolReferences","symbol","getImportableSymbolReferencesForDocument","symbolMaster","import","createNewInstance","firstObjectAbsPos","changeBasis","from","to","secondObjectAbsPos","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","setName","points","cornerRadius","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","localStyle","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType"],"mappings":";;;;;;AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;;;;;;;AClFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;CACA;AAEA;AACA;AACA;;AAEA,IAAIA,EAAE,GAAGC,mBAAO,CAAC,4BAAD,CAAhB,C,CACA;;;AAEA,IAAMC,SAAS,GAAG,YAAlB;AACA,IAAMC,QAAQ,GAAGC,6CAAM,CAACC,UAAP,CAAkBC,OAAO,CAACH,QAA1B,CAAjB;AACA,IAAII,OAAO,GAAGD,OAAO,CAACH,QAAR,CAAiBK,YAAjB,EAAd;AACA,IAAIC,UAAU,GAAGH,OAAO,CAACI,OAAR,CAAgBC,uCAAhB,CAAwD,kBAAxD,EAA4EJ,OAA5E,EAAqFL,SAArF,CAAjB;AACA,IAAIU,kBAAkB,GAAGL,OAAO,CAACM,WAAR,GAAsBC,eAAtB,MAA2CP,OAAO,CAACM,WAAR,EAApE,C,CAA0F;;AAC1F,IAAIE,kBAAkB,GAAGC,kBAAkB,EAA3C,C,CAEA;;AACA,IAAIC,QAAQ,GAAGhB,mBAAO,CAAC,wCAAD,CAAtB,C,CAGA;AACA;AACA;;;AAEe,yEAASK,OAAT,EAAkB,CAAE;AAC5B,SAASY,eAAT,CAAyBZ,OAAzB,EAAiC;AAACa,OAAK,CAACb,OAAD,EAAU,MAAV,EAAkB,KAAlB,CAAL;AAA8B;AAChE,SAASc,gBAAT,CAA0Bd,OAA1B,EAAkC;AAACa,OAAK,CAACb,OAAD,EAAU,OAAV,EAAmB,KAAnB,CAAL;AAA+B;AAClE,SAASe,eAAT,CAAyBf,OAAzB,EAAiC;AAACa,OAAK,CAACb,OAAD,EAAU,MAAV,EAAkB,KAAlB,CAAL;AAA8B;AAChE,SAASgB,eAAT,CAAyBhB,OAAzB,EAAiC;AAACa,OAAK,CAACb,OAAD,EAAU,MAAV,EAAkB,KAAlB,CAAL;AAA8B;AAChE,SAASiB,aAAT,CAAuBjB,OAAvB,EAA+B;AAACa,OAAK,CAACb,OAAD,EAAU,IAAV,EAAgB,KAAhB,CAAL;AAA4B;AAE5D,SAASkB,6BAAT,CAAuClB,OAAvC,EAA+C;AAACa,OAAK,CAACb,OAAD,EAAU,OAAV,EAAmB,IAAnB,CAAL;AAA8B;AAC9E,SAASmB,4BAAT,CAAsCnB,OAAtC,EAA8C;AAACa,OAAK,CAACb,OAAD,EAAU,MAAV,EAAkB,IAAlB,CAAL;AAA6B;AAC5E,SAASoB,4BAAT,CAAsCpB,OAAtC,EAA8C;AAACa,OAAK,CAACb,OAAD,EAAU,MAAV,EAAkB,IAAlB,CAAL;AAA6B;AAC5E,SAASqB,0BAAT,CAAoCrB,OAApC,EAA4C;AAACa,OAAK,CAACb,OAAD,EAAU,IAAV,EAAgB,IAAhB,CAAL;AAA2B,C,CAE/E;AACA;AACA;;AAEO,SAASsB,oBAAT,CAA8BtB,OAA9B,EAAuC;AAC5C,MAAIuB,SAAS,GAAGvB,OAAO,CAACuB,SAAxB;;AAEA,MAAGA,SAAS,CAACC,KAAV,KAAoB,CAApB,IAAyBD,SAAS,CAAC,CAAD,CAAT,CAAaE,KAAb,MAAwB,iBAApD,EAAsE;AACpE;AACA,QAAIC,sBAAsB,GAAGjB,kBAA7B,CAFoE,CAEpB;;AAEhD,SAAI,IAAIkB,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGJ,SAAS,CAACC,KAAV,EAAnB,EAAsCG,CAAC,EAAvC,EAA2C;AACzC,UAAGJ,SAAS,CAACI,CAAD,CAAT,CAAaC,QAAb,MAA2BL,SAAS,CAAC,CAAD,CAAT,CAAaK,QAAb,EAA9B,EAAsD;AACpD;AACA,YAAIC,eAAe,GAAGC,kBAAkB,CAACP,SAAS,CAAC,CAAD,CAAT,CAAaK,QAAb,EAAD,EAA0BL,SAAS,CAACI,CAAD,CAAT,CAAaC,QAAb,EAA1B,EAAmDF,sBAAnD,CAAxC;;AAEA,YAAGG,eAAe,IAAI,IAAtB,EAA2B;AACzBE,aAAG,CAACL,sBAAD,CAAH;AACAM,qBAAW,CAACN,sBAAsB,CAACG,eAAD,CAAtB,CAAwCI,WAAzC,EAAsDP,sBAAsB,CAACG,eAAD,CAAtB,CAAwCK,YAA9F,EAA4GR,sBAAsB,CAACG,eAAD,CAAtB,CAAwCM,KAApJ,EAA2JT,sBAAsB,CAACG,eAAD,CAAtB,CAAwCO,IAAnM,EAAyMV,sBAAsB,CAACG,eAAD,CAAtB,CAAwCQ,SAAjP,EAA4PX,sBAAsB,CAACG,eAAD,CAAtB,CAAwCS,IAApS,EAA0SZ,sBAAsB,CAACG,eAAD,CAAtB,CAAwCU,SAAlV,EAA6Vb,sBAAsB,CAACG,eAAD,CAAtB,CAAwCW,WAArY,EAAkZX,eAAlZ,CAAX;AACA/B,uDAAM,CAACJ,EAAP,CAAU+C,OAAV,CAAkB,kCAAlB;AACD,SAJD,MAIO;AACL3C,uDAAM,CAACJ,EAAP,CAAU+C,OAAV,CAAkB,mEAAlB;AACD;AACF;AACF;;AACDzC,WAAO,CAACI,OAAR,CAAgBsC,2CAAhB,CAA4DjC,kBAA5D,EAAgF,kBAAhF,EAAoGR,OAApG,EAA6GL,SAA7G;AAED,GApBD,MAoBO;AACL;AACAE,iDAAM,CAACJ,EAAP,CAAU+C,OAAV,CAAkB,kEAAlB;AACD;AACF;AAEM,SAASE,oBAAT,CAA8B3C,OAA9B,EAAuC;AAC5C;AACA,MAAIuB,SAAS,GAAGvB,OAAO,CAACuB,SAAxB;AACA,MAAIqB,WAAW,GAAGlC,kBAAkB,EAApC;AACA,MAAImC,mBAAJ;AACA,MAAIC,oBAAJ;;AAEA,MAAGF,WAAW,CAACG,MAAZ,GAAqB,CAAxB,EAA0B;AACxB;AACA,QAAMC,mBAAmB,GAAGJ,WAAW,CAACG,MAAxC;;AACA,SAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,mBAApB,EAAyCC,CAAC,EAA1C,EAA+C;AAC7C;AACAJ,yBAAmB,GAAGhD,QAAQ,CAACqD,cAAT,CAAwBN,WAAW,CAACK,CAAD,CAAX,CAAehB,WAAvC,CAAtB;AACAY,yBAAmB,GAAGA,mBAAmB,CAACM,YAApB,CAAiCC,cAAjC,GAAkDxB,QAAlD,EAAtB;AAEAkB,0BAAoB,GAAGjD,QAAQ,CAACqD,cAAT,CAAwBN,WAAW,CAACK,CAAD,CAAX,CAAef,YAAvC,CAAvB;AACAY,0BAAoB,GAAGA,oBAAoB,CAACK,YAArB,CAAkCC,cAAlC,GAAmDxB,QAAnD,EAAvB;;AAEA,UAAGL,SAAS,CAACC,KAAV,MAAqB,CAArB,IAA0BD,SAAS,CAAC,CAAD,CAAT,CAAaE,KAAb,MAAwB,iBAArD,EAAuE;AACrE;AAEA,YAAIoB,mBAAmB,IAAItB,SAAS,CAAC,CAAD,CAAT,CAAaK,QAAb,EAA3B,EAAmD;AACjD,cAAIkB,oBAAoB,IAAIvB,SAAS,CAAC,CAAD,CAAT,CAAaK,QAAb,EAA5B,EAAoD;AAClDI,uBAAW,CAACY,WAAW,CAACK,CAAD,CAAX,CAAehB,WAAhB,EAA6BW,WAAW,CAACK,CAAD,CAAX,CAAef,YAA5C,EAA0DU,WAAW,CAACK,CAAD,CAAX,CAAed,KAAzE,EAAgFS,WAAW,CAACK,CAAD,CAAX,CAAeb,IAA/F,EAAqGQ,WAAW,CAACK,CAAD,CAAX,CAAeZ,SAApH,EAA+HO,WAAW,CAACK,CAAD,CAAX,CAAeX,IAA9I,EAAoJM,WAAW,CAACK,CAAD,CAAX,CAAeV,SAAnK,EAA8KU,CAA9K,CAAX;AACD,WAFD,MAEO;AAACxC,8BAAkB,CAAC4C,IAAnB,CAAwBT,WAAW,CAACK,CAAD,CAAnC;AAAwC;AACjD,SAJD,MAIO;AACL;AACAxC,4BAAkB,CAAC4C,IAAnB,CAAwBT,WAAW,CAACK,CAAD,CAAnC;AACD;AACF;AACF;;AACDjD,WAAO,CAACI,OAAR,CAAgBsC,2CAAhB,CAA4DjC,kBAA5D,EAAgF,kBAAhF,EAAoGR,OAApG,EAA6GL,SAA7G;AACAE,iDAAM,CAACJ,EAAP,CAAU+C,OAAV,CAAkB,2BAAlB;AACD,GA1BD,MA0BO;AACL;AACA3C,iDAAM,CAACJ,EAAP,CAAU+C,OAAV,CAAkB,4BAAlB;AACD;AACF;AAEM,SAASa,eAAT,CAAyBtD,OAAzB,EAAkC;AAAE;AACzC;AACA,MAAI0B,sBAAsB,GAAGjB,kBAA7B;;AACA,MAAGiB,sBAAsB,CAACqB,MAAvB,GAAgC,CAAnC,EAAqC;AACnC;AACA,QAAMC,mBAAmB,GAAGtB,sBAAsB,CAACqB,MAAnD;;AACA,SAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,mBAApB,EAAyCC,CAAC,EAA1C,EAA+C;AAC7C;AACA;AACAjB,iBAAW,CAACN,sBAAsB,CAACuB,CAAD,CAAtB,CAA0BhB,WAA3B,EAAwCP,sBAAsB,CAACuB,CAAD,CAAtB,CAA0Bf,YAAlE,EAAgFR,sBAAsB,CAACuB,CAAD,CAAtB,CAA0Bd,KAA1G,EAAiHT,sBAAsB,CAACuB,CAAD,CAAtB,CAA0Bb,IAA3I,EAAiJV,sBAAsB,CAACuB,CAAD,CAAtB,CAA0BZ,SAA3K,EAAsLX,sBAAsB,CAACuB,CAAD,CAAtB,CAA0BX,IAAhN,EAAsNZ,sBAAsB,CAACuB,CAAD,CAAtB,CAA0BV,SAAhP,EAA2PU,CAA3P,CAAX;AACD;;AACDjD,WAAO,CAACI,OAAR,CAAgBsC,2CAAhB,CAA4DjC,kBAA5D,EAAgF,kBAAhF,EAAoGR,OAApG,EAA6GL,SAA7G;AACAE,iDAAM,CAACJ,EAAP,CAAU+C,OAAV,CAAkB,2BAAlB;AACD,GAVD,MAUO;AACL;AACA3C,iDAAM,CAACJ,EAAP,CAAU+C,OAAV,CAAkB,4BAAlB;AACD;AACF;AAEM,SAASc,eAAT,CAAyBvD,OAAzB,EAAkC;AAEvC,MAAGS,kBAAkB,CAACsC,MAAnB,GAA4B,CAA/B,EAAiC;AAC/B;AACA,SAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGxC,kBAAkB,CAACsC,MAAvC,EAA+CE,CAAC,EAAhD,EAAqD;AACnD;AACAO,gBAAU,CAAC/C,kBAAkB,CAACwC,CAAD,CAAlB,CAAsBX,IAAvB,CAAV;AACD;;AACDtC,WAAO,CAACI,OAAR,CAAgBsC,2CAAhB,CAA4D,IAA5D,EAAkE,kBAAlE,EAAsFzC,OAAtF,EAA+FL,SAA/F;AACAE,iDAAM,CAACJ,EAAP,CAAU+C,OAAV,CAAkB,wBAAlB;AACD,GARD,MAQO;AACL;AACA3C,iDAAM,CAACJ,EAAP,CAAU+C,OAAV,CAAkB,4BAAlB;AACD;AACF;AAEM,SAASgB,oBAAT,CAA8BzD,OAA9B,EAAuC;AAC5C,MAAIuB,SAAS,GAAGvB,OAAO,CAACuB,SAAxB;AACA,MAAIU,WAAJ,EAAiBC,YAAjB,CAF4C,CAI5C;;AACA,MAAGX,SAAS,CAACC,KAAV,MAAqB,CAArB,IAA0BD,SAAS,CAAC,CAAD,CAAT,CAAaE,KAAb,MAAwB,iBAArD,EAAuE;AACrE,QAAImB,WAAW,GAAGlC,kBAAkB,EAApC;;AAEA,QAAGkC,WAAW,CAACG,MAAZ,GAAqB,CAAxB,EAA0B;AACxB;AACA,UAAMC,mBAAmB,GAAGJ,WAAW,CAACG,MAAxC;;AACA,WAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,mBAApB,EAAyCC,CAAC,EAA1C,EAA+C;AAC7C;AACAhB,mBAAW,GAAGpC,QAAQ,CAACqD,cAAT,CAAwBN,WAAW,CAACK,CAAD,CAAX,CAAehB,WAAvC,CAAd;AACAC,oBAAY,GAAGrC,QAAQ,CAACqD,cAAT,CAAwBN,WAAW,CAACK,CAAD,CAAX,CAAef,YAAvC,CAAf;;AACA,YAAID,WAAW,CAACkB,YAAZ,CAAyBC,cAAzB,GAA0CxB,QAA1C,MAAwDL,SAAS,CAAC,CAAD,CAAT,CAAaK,QAAb,EAA5D,EAAoF;AAClF,cAAIM,YAAY,CAACiB,YAAb,CAA0BC,cAA1B,GAA2CxB,QAA3C,MAAyDL,SAAS,CAAC,CAAD,CAAT,CAAaK,QAAb,EAA7D,EAAqF;AACnF4B,sBAAU,CAACZ,WAAW,CAACK,CAAD,CAAX,CAAeX,IAAhB,CAAV;AACA7B,8BAAkB,GAAGiD,wBAAwB,CAACT,CAAD,CAA7C;AACD;AACF;AACF;;AACDjD,aAAO,CAACI,OAAR,CAAgBsC,2CAAhB,CAA4DjC,kBAA5D,EAAgF,kBAAhF,EAAoGR,OAApG,EAA6GL,SAA7G;AACAE,mDAAM,CAACJ,EAAP,CAAU+C,OAAV,CAAkB,+CAAlB;AACD,KAhBD,MAgBO;AACL;AACA3C,mDAAM,CAACJ,EAAP,CAAU+C,OAAV,CAAkB,4BAAlB;AACD;AACF,GAvBD,MAuBO;AACL3C,iDAAM,CAACJ,EAAP,CAAU+C,OAAV,CAAkB,4BAAlB;AACD;AACF;AAEM,SAASkB,oBAAT,CAA8B3D,OAA9B,EAAuC;AAC5C,MAAIuB,SAAS,GAAGvB,OAAO,CAACuB,SAAxB;AACA,MAAIU,WAAJ,EAAiBC,YAAjB,CAF4C,CAI5C;;AACA,MAAGX,SAAS,CAACC,KAAV,MAAqB,CAAxB,EAA0B;AAExB,SAAI,IAAIG,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGJ,SAAS,CAACC,KAAV,EAAnB,EAAsCG,CAAC,EAAvC,EAA2C;AAEzC,UAAGJ,SAAS,CAACI,CAAD,CAAT,CAAaC,QAAb,MAA2BL,SAAS,CAAC,CAAD,CAAT,CAAaK,QAAb,EAA9B,EAAsD;AAAE;AACtD,YAAIgB,WAAW,GAAGlC,kBAAkB,EAApC;AAEA,YAAImB,eAAe,GAAGC,kBAAkB,CAACP,SAAS,CAAC,CAAD,CAAT,CAAaK,QAAb,EAAD,EAA0BL,SAAS,CAACI,CAAD,CAAT,CAAaC,QAAb,EAA1B,EAAmDgB,WAAnD,CAAxC;;AAEA,YAAGf,eAAe,IAAI,IAAtB,EAA2B;AACzB;AACA2B,oBAAU,CAACZ,WAAW,CAACf,eAAD,CAAX,CAA6BS,IAA9B,CAAV;AACA7B,4BAAkB,GAAGiD,wBAAwB,CAAC7B,eAAD,CAA7C;AACA,cAAMmB,mBAAmB,GAAGJ,WAAW,CAACG,MAAxC;;AACA,eAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,mBAApB,EAAyCC,CAAC,EAA1C,EAA+C;AAC7C;AACAhB,uBAAW,GAAGpC,QAAQ,CAACqD,cAAT,CAAwBN,WAAW,CAACK,CAAD,CAAX,CAAehB,WAAvC,CAAd;AACAC,wBAAY,GAAGrC,QAAQ,CAACqD,cAAT,CAAwBN,WAAW,CAACK,CAAD,CAAX,CAAef,YAAvC,CAAf;;AACA,gBAAGD,WAAW,CAACkB,YAAZ,CAAyBC,cAAzB,GAA0CxB,QAA1C,MAAwDL,SAAS,CAAC,CAAD,CAAT,CAAaK,QAAb,EAA3D,EAAmF;AACjF,kBAAGM,YAAY,CAACiB,YAAb,CAA0BC,cAA1B,GAA2CxB,QAA3C,MAAyDL,SAAS,CAAC,CAAD,CAAT,CAAaK,QAAb,EAA5D,EAAoF;AAClF4B,0BAAU,CAACZ,WAAW,CAACK,CAAD,CAAX,CAAeX,IAAhB,CAAV;AACA7B,kCAAkB,GAAGiD,wBAAwB,CAACT,CAAD,CAA7C;AACD;AACF;AACF;;AACDjD,iBAAO,CAACI,OAAR,CAAgBsC,2CAAhB,CAA4DjC,kBAA5D,EAAgF,kBAAhF,EAAoGR,OAApG,EAA6GL,SAA7G;AACAE,uDAAM,CAACJ,EAAP,CAAU+C,OAAV,CAAkB,gDAAlB;AACD;AACF;AACF;AACF,GA9BD,MA8BO;AACL3C,iDAAM,CAACJ,EAAP,CAAU+C,OAAV,CAAkB,8BAAlB;AACD;AACF;AAEM,SAASmB,QAAT,CAAkB5D,OAAlB,EAA2B;AAChC,MAAI6D,KAAK,GAAGC,cAAc,CAACC,GAAf,EAAZ;AACA,MAAMC,SAAS,GAAG,GAAlB;AACA,MAAMC,UAAU,GAAG,GAAnB,CAHgC,CAKhC;;AACAJ,OAAK,GAAGK,UAAU,CAACL,KAAD,EAAQG,SAAR,EAAmBC,UAAnB,CAAlB;AACA,MAAIE,IAAI,GAAGC,MAAM,CAACC,KAAP,GAAeC,aAAf,CAA6BC,UAAU,CAAC,CAAD,EAAI,CAAJ,EAAOP,SAAP,EAAkBC,UAAlB,CAAvC,CAAX;AACAJ,OAAK,CAACW,gBAAN,CAAuBL,IAAvB,EARgC,CAUhC;;AACA,MAAIM,eAAe,GAAGC,UAAU,CAAC,aAAD,EAAgB,IAAhB,EAAsB,CAAC,CAAvB,EAA0BT,UAAU,GAAC,EAArC,EAAyC,GAAzC,EAA8C,EAA9C,CAAhC;AACAE,MAAI,CAACQ,UAAL,CAAgBF,eAAhB,EAZgC,CAchC;;AACA,MAAIG,iBAAiB,GAAGC,aAAa,CAACR,KAAd,GAAsBC,aAAtB,CAAoCC,UAAU,CAAC,CAAC,CAAF,EAAKN,UAAU,GAAG,EAAlB,EAAsB,GAAtB,EAA2B,EAA3B,CAA9C,CAAxB;AACAa,uBAAqB,CAACF,iBAAD,CAArB;AACAT,MAAI,CAACQ,UAAL,CAAgBC,iBAAhB,EAjBgC,CAmBhC;;AACA,MAAIG,mBAAmB,GAAGL,UAAU,CAAC,yGAAD,EAA4G,KAA5G,EAAmH,CAAC,CAApH,EAAuHT,UAAU,GAAC,EAAlI,EAAsI,GAAtI,EAA2I,EAA3I,CAApC;AACAE,MAAI,CAACQ,UAAL,CAAgBI,mBAAhB,EArBgC,CAwBhC;;AACA,MAAIC,cAAc,GAAGN,UAAU,CAAC,YAAD,EAAe,IAAf,EAAqB,CAAC,CAAtB,EAAyBT,UAAU,GAAC,GAApC,EAAyC,GAAzC,EAA8C,EAA9C,CAA/B;AACAE,MAAI,CAACQ,UAAL,CAAgBK,cAAhB,EA1BgC,CA4BhC;;AACA,MAAIC,cAAc,GAAGJ,aAAa,CAACR,KAAd,GAAsBC,aAAtB,CAAoCC,UAAU,CAAC,CAAC,CAAF,EAAKN,UAAU,GAAG,GAAlB,EAAuB,GAAvB,EAA4B,EAA5B,CAA9C,CAArB;AACAiB,sBAAoB,CAACD,cAAD,CAApB;AACAd,MAAI,CAACQ,UAAL,CAAgBM,cAAhB,EA/BgC,CAiChC;;AACA,MAAIE,kBAAkB,GAAGT,UAAU,CAAC,0DAAD,EAA6D,KAA7D,EAAoE,CAAC,CAArE,EAAwET,UAAU,GAAC,GAAnF,EAAwF,GAAxF,EAA6F,EAA7F,CAAnC;AACAE,MAAI,CAACQ,UAAL,CAAgBQ,kBAAhB,EAnCgC,CAsChC;;AACA,MAAIC,iBAAiB,GAAGV,UAAU,CAAC,eAAD,EAAkB,IAAlB,EAAwB,CAAC,CAAzB,EAA4BT,UAAU,GAAG,GAAzC,EAA8C,GAA9C,EAAmD,EAAnD,CAAlC;AACAE,MAAI,CAACQ,UAAL,CAAgBS,iBAAhB,EAxCgC,CA0ChC;;AACA,MAAIC,mBAAmB,GAAGX,UAAU,CAAC,IAAD,EAAO,IAAP,EAAa,EAAb,EAAiBT,UAAU,GAAG,GAA9B,EAAmC,GAAnC,EAAwC,EAAxC,CAApC;AACAE,MAAI,CAACQ,UAAL,CAAgBU,mBAAhB,EA5CgC,CA8ChC;;AACA,MAAIC,iBAAiB,GAAGC,WAAW,CAAClB,KAAZ,GAAoBC,aAApB,CAAkCC,UAAU,CAAC,CAAC,CAAF,EAAKN,UAAU,GAAG,GAAlB,EAAuB,EAAvB,EAA2B,EAA3B,CAA5C,CAAxB;AACA,MAAIuB,SAAS,GAAGC,iBAAiB,CAACpB,KAAlB,GAA0BqB,IAA1B,GAAiCC,WAAjC,EAAhB;AACAL,mBAAiB,CAACM,cAAlB,CAAiCC,MAAM,CAAClF,QAAQ,CAACmF,aAAT,CAAuB,cAAvB,CAAD,CAAvC;AACAR,mBAAiB,CAACS,YAAlB,CAA+BP,SAA/B;AACArB,MAAI,CAACQ,UAAL,CAAgBW,iBAAhB,EAnDgC,CAqDhC;;AACA,MAAIU,mBAAmB,GAAGC,SAAS,CAAC5B,KAAV,GAAkBC,aAAlB,CAAgCC,UAAU,CAAC,EAAD,EAAKN,UAAU,GAAG,GAAlB,EAAuB,EAAvB,EAA2B,EAA3B,CAA1C,CAA1B;AACA+B,qBAAmB,CAACE,WAApB,CAAgC,IAAhC;AACAF,qBAAmB,CAACG,WAApB,CAAgC,CAAhC;AACAH,qBAAmB,CAACI,aAApB,CAAkC,KAAlC;AACAJ,qBAAmB,CAACK,aAApB,CAAkC,IAAlC;AACAL,qBAAmB,CAACM,sBAApB,CAA2C,UAASC,MAAT,EAAgB;AACzD,QAAIC,KAAK,GAAG,IAAID,MAAM,CAACE,YAAP,EAAhB;AACAnB,qBAAiB,CAACM,cAAlB,CAAiCC,MAAM,CAACW,KAAD,CAAvC;AACD,GAHD;AAKArC,MAAI,CAACQ,UAAL,CAAgBqB,mBAAhB,EAhEgC,CAiEhC;AAEA;;AACA,MAAIU,qBAAqB,GAAGhC,UAAU,CAAC,mIAAD,EAAsI,KAAtI,EAA6I,CAAC,CAA9I,EAAiJT,UAAU,GAAC,GAA5J,EAAiK,GAAjK,EAAsK,EAAtK,CAAtC;AACAE,MAAI,CAACQ,UAAL,CAAgB+B,qBAAhB,EArEgC,CAuEhC;;AACA,MAAIC,kBAAkB,GAAGjC,UAAU,CAAC,gBAAD,EAAmB,IAAnB,EAAyB,CAAC,CAA1B,EAA6BT,UAAU,GAAC,GAAxC,EAA6C,GAA7C,EAAkD,EAAlD,CAAnC;AACAE,MAAI,CAACQ,UAAL,CAAgBgC,kBAAhB,EAzEgC,CA2EhC;;AACA,MAAIC,QAAQ,GAAGC,aAAa,CAAC,yBAAD,EAA4B,KAA5B,EAAmC,CAAC,CAApC,EAAuC5C,UAAU,GAAC,GAAlD,EAAuD,GAAvD,EAA4D,EAA5D,CAA5B;AACAE,MAAI,CAACQ,UAAL,CAAgBiC,QAAhB,EA7EgC,CA+EhC;;AACA,MAAIE,kBAAkB,GAAGpC,UAAU,CAAC,gEAAD,EAAmE,KAAnE,EAA0E,CAAC,CAA3E,EAA8ET,UAAU,GAAC,GAAzF,EAA8F,GAA9F,EAAmG,EAAnG,CAAnC;AACAE,MAAI,CAACQ,UAAL,CAAgBmC,kBAAhB,EAjFgC,CAmFhC;;AACA,MAAIC,eAAe,GAAGrC,UAAU,CAAC,uDAAD,EAA0D,IAA1D,EAAgE,CAAC,CAAjE,EAAoET,UAAU,GAAC,GAA/E,EAAoF,GAApF,EAAyF,EAAzF,CAAhC;AACAE,MAAI,CAACQ,UAAL,CAAgBoC,eAAhB,EArFgC,CAwFhC;AAEA;;AACA,MAAIC,aAAa,GAAGnD,KAAK,CAACoD,QAAN,EAApB;;AAEA,MAAGD,aAAa,IAAIE,wBAApB,EAA6C;AAC3C;AACA;AACAlH,WAAO,CAACI,OAAR,CAAgBsC,2CAAhB,CAA4DmB,KAAK,CAACsD,KAAN,GAAc,CAAd,EAAiBC,QAAjB,GAA4B,CAA5B,EAA+BC,KAA/B,EAA5D,EAAoG,YAApG,EAAkHpH,OAAlH,EAA2HL,SAA3H;AACAe,YAAQ,CAAC2G,gBAAT,CAA0B,WAA1B,EAAuCzD,KAAK,CAACsD,KAAN,GAAc,CAAd,EAAiBC,QAAjB,GAA4B,CAA5B,EAA+BC,KAA/B,EAAvC;AACA1G,YAAQ,CAAC2G,gBAAT,CAA0B,cAA1B,EAA0CzD,KAAK,CAACsD,KAAN,GAAc,CAAd,EAAiBC,QAAjB,GAA4B,CAA5B,EAA+BG,QAA/B,EAA1C;AACA5G,YAAQ,CAAC2G,gBAAT,CAA0B,WAA1B,EAAuCzD,KAAK,CAACsD,KAAN,GAAc,CAAd,EAAiBC,QAAjB,GAA4B,EAA5B,EAAgCI,KAAhC,EAAvC;AACA9H,MAAE,CAAC+C,OAAH,CAAW,yBAAX;AACD;AACF;AAEM,SAASgF,aAAT,CAAuBzH,OAAvB,EAAgC;AACrCF,+CAAM,CAACJ,EAAP,CAAU+C,OAAV,CAAkB,oCAAlB;AACA,MAAMiF,MAAM,GAAG1H,OAAO,CAAC2H,aAAvB;AACD;AAEM,SAASC,KAAT,CAAe5H,OAAf,EAAwB;AAC7B,MAAI6H,UAAJ;AACAA,YAAU,GAAGC,OAAO,CAACzD,KAAR,GAAgBqB,IAAhB,EAAb;AACAmC,YAAU,CAACE,YAAX,CAAwBC,kBAAkB,GAAGC,+BAA7C,EAH6B,CAI7B;;AACAJ,YAAU,CAACK,kBAAX,CAA8BC,mBAA9B;AACAN,YAAU,CAACO,6BAAX,CAAyC,IAAzC;AACAP,YAAU,CAACQ,gBAAX,CAA4B9D,UAAU,CAAC,CAAD,EAAI,CAAJ,EAAO,GAAP,EAAY,EAAZ,CAAtC,EAAuD,KAAvD;AACAsD,YAAU,CAACS,4BAAX,CAAwC,IAAxC;AACAT,YAAU,CAACU,YAAX,CAAwB,IAAxB;AACAV,YAAU,CAACW,QAAX,CAAoBC,qBAApB,EAV6B,CAY7B;;AACAZ,YAAU,CAACa,MAAX;AACAb,YAAU,CAACc,oBAAX,CAAgCC,GAAhC,EAd6B,CAgB/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAIC,C,CAED;AACA;AACA;;AAEA,SAAS5G,WAAT,CAAqB6G,aAArB,EAAoCC,cAApC,EAAoD3G,KAApD,EAA2DC,IAA3D,EAAiEC,SAAjE,EAA4E0G,MAA5E,EAAoFC,WAApF,EAAiGxG,WAAjG,EAA8GX,eAA9G,EAA+H;AAAE;AAC/H;AACA,MAAII,WAAW,GAAGpC,QAAQ,CAACqD,cAAT,CAAwB2F,aAAxB,CAAlB;AACA,MAAI3G,YAAY,GAAGrC,QAAQ,CAACqD,cAAT,CAAwB4F,cAAxB,CAAnB;AACA,MAAIG,eAAe,GAAGpJ,QAAQ,CAACqD,cAAT,CAAwB8F,WAAxB,CAAtB,CAJ6H,CAM7H;;AACAxF,YAAU,CAACuF,MAAD,CAAV;;AACA,MAAGC,WAAH,EAAe;AACb,QAAGC,eAAH,EAAmB;AAACA,qBAAe,CAACC,MAAhB;AAAyB;AAC9C;;AAEDzI,oBAAkB,GAAGiD,wBAAwB,CAAC7B,eAAD,CAA7C;;AAEA,MAAGI,WAAW,IAAIC,YAAlB,EAA+B;AAC7B;AACAiH,eAAW,CAACN,aAAD,EAAgBC,cAAhB,EAAgC3G,KAAhC,EAAuCC,IAAvC,EAA6CC,SAA7C,EAAwD2G,WAAxD,EAAqExG,WAArE,CAAX;AACD;AACF;;AAED,SAAS2G,WAAT,CAAqBN,aAArB,EAAoCC,cAApC,EAAoD3G,KAApD,EAA2DC,IAA3D,EAAiEC,SAAjE,EAA4E2G,WAA5E,EAAyFxG,WAAzF,EAAsG;AAAG;AACvG,MAAI4G,cAAc,GAAG/G,SAAS,IAAI,MAAb,GAAsBgH,YAAY,CAACR,aAAD,EAAgBC,cAAhB,CAAlC,GAAoEzG,SAAzF,CADoG,CAGpG;;AACAiH,eAAa,CAACT,aAAD,EAAgBC,cAAhB,EAAgCM,cAAhC,CAAb;AACAG,gBAAc,CAACV,aAAD,EAAgBC,cAAhB,EAAgCM,cAAhC,CAAd,CALoG,CAOpG;;AACA,MAAII,KAAK,GAAGC,cAAc,CAACZ,aAAD,EAAgBC,cAAhB,EAAgC3G,KAAhC,EAAuCC,IAAvC,EAA6CgH,cAA7C,EAA6DJ,WAA7D,EAA0ExG,WAA1E,CAA1B,CARoG,CASpG;AAEA;;AACA,MAAIkH,UAAU,GAAG;AACfzH,eAAW,EAAG4G,aADC;AAEf3G,gBAAY,EAAG4G,cAFA;AAGf3G,SAAK,EAAGqH,KAAK,CAACrH,KAHC;AAIfI,aAAS,EAAGiH,KAAK,CAACR,WAJH;AAKfxG,eAAW,EAAGA,WALC;AAMfJ,QAAI,EAAGoH,KAAK,CAACpH,IANE;AAOfC,aAAS,EAAE+G,cAPI;AAQf9G,QAAI,EAAGkH,KAAK,CAAClH,IAAN,CAAWV,QAAX;AARQ,GAAjB;AAWAG,KAAG,CAAC2H,UAAD,CAAH,CAvBoG,CAyBpG;;AACAjJ,oBAAkB,CAAC4C,IAAnB,CAAwBqG,UAAxB;AACA3H,KAAG,CAACtB,kBAAD,CAAH;AACD;;AAED,SAASkJ,aAAT,CAAuBC,SAAvB,EAAkC;AAAE;AAClC,MAAIC,YAAY,GAAG,IAAnB,CADgC,CAGhC;;AACA,OAAI,IAAI5G,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAG3C,kBAAkB,CAACwJ,MAAnB,GAA4BtI,KAA5B,EAAnB,EAAwDyB,CAAC,EAAzD,EAA4D;AAC1D,QAAG3C,kBAAkB,CAACwJ,MAAnB,GAA4B7G,CAA5B,EAA+B8G,IAA/B,MAAyCH,SAA5C,EAAuD;AACrDC,kBAAY,GAAGvJ,kBAAkB,CAACwJ,MAAnB,GAA4B7G,CAA5B,CAAf;AACD;AACF;;AAED,SAAO4G,YAAP;AACD;;AAED,SAASR,YAAT,CAAsBR,aAAtB,EAAqCC,cAArC,EAAoD;AAAE;AACpD;AACA,MAAM7G,WAAW,GAAGpC,QAAQ,CAACqD,cAAT,CAAwB2F,aAAxB,CAApB;AACA,MAAM3G,YAAY,GAAGrC,QAAQ,CAACqD,cAAT,CAAwB4F,cAAxB,CAArB;AACA,MAAMkB,eAAe,GAAG/H,WAAW,CAACgI,KAAZ,CAAkBC,CAAlB,GAAoBjI,WAAW,CAACgI,KAAZ,CAAkBE,KAAlB,GAAwB,CAApE;AACA,MAAMC,eAAe,GAAGnI,WAAW,CAACgI,KAAZ,CAAkBI,CAAlB,GAAoBpI,WAAW,CAACgI,KAAZ,CAAkBK,MAAlB,GAAyB,CAArE;AACA,MAAMC,gBAAgB,GAAGrI,YAAY,CAAC+H,KAAb,CAAmBC,CAAnB,GAAqBhI,YAAY,CAAC+H,KAAb,CAAmBE,KAAnB,GAAyB,CAAvE;AACA,MAAMK,gBAAgB,GAAGtI,YAAY,CAAC+H,KAAb,CAAmBI,CAAnB,GAAqBnI,YAAY,CAAC+H,KAAb,CAAmBK,MAAnB,GAA0B,CAAxE;AAEA,MAAMG,KAAK,GAAGT,eAAe,GAAGO,gBAAhC;AACA,MAAMG,KAAK,GAAGN,eAAe,GAAGI,gBAAhC;AACA,MAAMG,QAAQ,GAAGC,IAAI,CAACC,GAAL,CAASJ,KAAT,CAAjB;AACA,MAAMK,QAAQ,GAAGF,IAAI,CAACC,GAAL,CAASH,KAAT,CAAjB;AACA,MAAIrI,SAAJ;;AAEA,MAAGkI,gBAAgB,GAAGP,eAAtB,EAAsC;AACpC;AACA,QAAGQ,gBAAgB,GAAGJ,eAAtB,EAAsC;AACpC;AACA/H,eAAS,GAAGoI,KAAK,GAAGC,KAAR,GAAgB,MAAhB,GAAyB,OAArC;AACD,KAHD,MAGO;AACL;AACArI,eAAS,GAAGsI,QAAQ,GAAGG,QAAX,GAAsB,OAAtB,GAAgC,IAA5C;AACD;AACF,GATD,MASO;AACL;AACA,QAAGN,gBAAgB,GAAGJ,eAAtB,EAAsC;AACpC;AACA/H,eAAS,GAAGsI,QAAQ,GAAGG,QAAX,GAAsB,MAAtB,GAA+B,MAA3C;AACD,KAHD,MAGO;AACL;AACAzI,eAAS,GAAGoI,KAAK,GAAGC,KAAR,GAAgB,MAAhB,GAAyB,IAArC;AACD;AACF;;AAED,SAAOrI,SAAP;AACD;;AAED,SAASoH,cAAT,CAAwBZ,aAAxB,EAAuCC,cAAvC,EAAuD3G,KAAvD,EAA8DC,IAA9D,EAAoEgH,cAApE,EAAoFJ,WAApF,EAAiGzG,SAAjG,EAA2G;AAAE;AAC3G;AACA,MAAIN,WAAW,GAAGpC,QAAQ,CAACqD,cAAT,CAAwB2F,aAAxB,CAAlB;AACA,MAAI3G,YAAY,GAAGrC,QAAQ,CAACqD,cAAT,CAAwB4F,cAAxB,CAAnB;AACA,MAAIiC,aAAa,GAAGC,gBAAgB,CAAC/I,WAAD,EAAcC,YAAd,EAA4BkH,cAA5B,CAApC;AACA,MAAIM,UAAU,GAAG;AACfpH,QAAI,EAAE,EADS;AAEf0G,eAAW,EAAE,EAFE;AAGf5G,QAAI,EAAE,EAHS;AAIfD,SAAK,EAAE,EAJQ,CAQjB;;AARiB,GAAjB;AASAuH,YAAU,CAACtH,IAAX,GAAkBA,IAAI,IAAI,IAAR,GAAezB,QAAQ,CAACmF,aAAT,CAAuB,WAAvB,CAAf,GAAqD1D,IAAvE;;AACA,MAAGsH,UAAU,CAACtH,IAAX,IAAmB,QAAnB,IAA+BsH,UAAU,CAACtH,IAAX,IAAmB,IAArD,EAA0D;AAAEsH,cAAU,CAACpH,IAAX,GAAkB2I,cAAc,CAACF,aAAa,CAACG,cAAf,EAA+BH,aAAa,CAACI,cAA7C,EAA6DJ,aAAa,CAACK,UAA3E,EAAuFL,aAAa,CAACM,UAArG,EAAiHN,aAAa,CAACO,eAA/H,EAAgJP,aAAa,CAACQ,eAA9J,EAA+KnC,cAA/K,CAAhC;AAA+N;;AAC3R,MAAGM,UAAU,CAACtH,IAAX,IAAmB,UAAtB,EAAiC;AAAEsH,cAAU,CAACpH,IAAX,GAAkBkJ,gBAAgB,CAACT,aAAa,CAACG,cAAf,EAA+BH,aAAa,CAACI,cAA7C,EAA6DJ,aAAa,CAACO,eAA3E,EAA4FP,aAAa,CAACQ,eAA1G,EAA2HnC,cAA3H,CAAlC;AAA6K;;AAChN,MAAGM,UAAU,CAACtH,IAAX,IAAmB,QAAtB,EAA+B;AAAEsH,cAAU,CAACpH,IAAX,GAAkBmJ,cAAc,CAACV,aAAa,CAACG,cAAf,EAA+BH,aAAa,CAACI,cAA7C,EAA6DJ,aAAa,CAACO,eAA3E,EAA4FP,aAAa,CAACQ,eAA1G,EAA2HnC,cAA3H,CAAhC;AAA2K,GAjBnG,CAoBzG;;;AACA,MAAG7G,SAAS,IAAI,KAAhB,EAAsB;AACpB,QAAGyG,WAAH,EAAe;AACbU,gBAAU,CAACV,WAAX,GAAyB0C,eAAe,CAAC1C,WAAD,EAAc+B,aAAa,CAACK,UAA5B,EAAwCL,aAAa,CAACM,UAAtD,CAAxC;AACD,KAFD,MAEO;AACL3B,gBAAU,CAACV,WAAX,GAAyB2C,YAAY,CAAC,MAAD,EAASZ,aAAa,CAACK,UAAvB,EAAmCL,aAAa,CAACM,UAAjD,CAArC;AACD;AACF,GAND,MAMO;AACL3B,cAAU,CAACV,WAAX,GAAyB,IAAzB;AACD,GA7BwG,CA8BzG;AAEA;;;AACAU,YAAU,CAACvH,KAAX,GAAmByJ,SAAS,CAAClC,UAAU,CAACpH,IAAZ,EAAkBH,KAAlB,CAA5B,CAjCyG,CAmCzG;;AACA0J,kBAAgB,CAACnC,UAAU,CAACpH,IAAZ,CAAhB;AAEA,SAAOoH,UAAP;AACD;;AAED,SAASmC,gBAAT,CAA0BvJ,IAA1B,EAA+B;AAC7B,MAAIuH,YAAY,GAAGF,aAAa,CAAC,QAAD,CAAhC;;AACA,MAAGE,YAAH,EAAgB;AACdA,gBAAY,CAACiC,SAAb,CAAuB,CAACxJ,IAAD,CAAvB;AACAuH,gBAAY,CAACkC,sBAAb,CAAoC,CAApC;AACD,GAHD,MAGO;AACL,QAAIC,KAAK,GAAGrM,mBAAO,CAAC,8BAAD,CAAP,CAAsBqM,KAAlC;;AACA,QAAIC,KAAK,GAAG,IAAID,KAAJ,CAAU;AACpBE,YAAM,EAAE5L,kBADY;AAEpByJ,UAAI,EAAE,QAFc;AAGpBoC,YAAM,EAAE,IAHY;AAIpBrC,YAAM,EAAE,CAACxH,IAAD;AAJY,KAAV,CAAZ;AAMA2J,SAAK,CAACG,UAAN;AACAH,SAAK,CAACI,WAAN;AAED;AACF;;AAED,SAASC,mBAAT,CAA6B/J,SAA7B,EAAwC2H,CAAxC,EAA2CG,CAA3C,EAA6C;AAAE;AAC7C,MAAIkC,QAAQ,GAAG5C,aAAa,CAAC,YAAD,CAA5B;AACA,MAAI6C,OAAO,GAAG7C,aAAa,CAAC,QAAD,CAA3B;AACA,MAAI8C,QAAQ,GAAGD,OAAO,IAAI,IAAX,GAAkBA,OAAO,CAACvC,KAAR,GAAgBC,CAAhB,EAAlB,GAAwC,CAAvD;AACA,MAAIwC,QAAQ,GAAGF,OAAO,IAAI,IAAX,GAAkBA,OAAO,CAACvC,KAAR,GAAgBI,CAAhB,EAAlB,GAAwC,CAAvD;;AAEA,MAAGkC,QAAH,EAAY;AACVhK,aAAS,CAAC0H,KAAV,CAAgBC,CAAhB,GAAoBA,CAAC,GAAG3H,SAAS,CAAC0H,KAAV,CAAgBE,KAAhB,GAAwB,CAA5B,IAAiCoC,QAAQ,CAACtC,KAAT,GAAiBC,CAAjB,KAAuBuC,QAAxD,CAApB;AACAlK,aAAS,CAAC0H,KAAV,CAAgBI,CAAhB,GAAoBA,CAAC,GAAG9H,SAAS,CAAC0H,KAAV,CAAgBK,MAAhB,GAAyB,CAA7B,IAAkCiC,QAAQ,CAACtC,KAAT,GAAiBI,CAAjB,KAAuBqC,QAAzD,CAApB;AACAnK,aAAS,CAAC2J,MAAV,GAAmBK,QAAnB;AACAA,YAAQ,CAACR,sBAAT,CAAgC,CAAhC;AACD,GALD,MAKO;AACLxJ,aAAS,CAAC0H,KAAV,CAAgBC,CAAhB,GAAoBA,CAAC,GAAG3H,SAAS,CAAC0H,KAAV,CAAgBE,KAAhB,GAAwB,CAAhD;AACA5H,aAAS,CAAC0H,KAAV,CAAgBI,CAAhB,GAAoBA,CAAC,GAAG9H,SAAS,CAAC0H,KAAV,CAAgBK,MAAhB,GAAyB,CAAjD;;AACA,QAAI0B,KAAK,GAAGrM,mBAAO,CAAC,8BAAD,CAAP,CAAsBqM,KAAlC;;AACA,QAAIC,KAAK,GAAG,IAAID,KAAJ,CAAU;AACpBE,YAAM,EAAE5L,kBADY;AAEpByJ,UAAI,EAAE,YAFc;AAGpBD,YAAM,EAAE,CAACvH,SAAD;AAHY,KAAV,CAAZ;AAKA0J,SAAK,CAACG,UAAN;AACAH,SAAK,CAACI,WAAN;AACD;AACF;;AAED,SAAS3L,kBAAT,GAA6B;AAAE;AAC7B,MAAIiM,SAAS,GAAG,EAAhB;;AAEA,MAAGxM,UAAH,EAAc;AACZ,SAAK,IAAI8C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG9C,UAAU,CAAC4C,MAA/B,EAAuCE,CAAC,EAAxC,EAA6C;AAC3C0J,eAAS,CAACtJ,IAAV,CAAelD,UAAU,CAAC8C,CAAD,CAAzB;AACD;AACF;;AACD,SAAO0J,SAAP;AACD;;AAED,SAAS7K,kBAAT,CAA4B+G,aAA5B,EAA2CC,cAA3C,EAA2D8D,IAA3D,EAAgE;AAC9D,MAAIC,WAAW,GAAG,IAAlB;AACAhE,eAAa,GAAGhD,MAAM,CAACgD,aAAD,CAAtB;AACAC,gBAAc,GAAGjD,MAAM,CAACiD,cAAD,CAAvB;;AAEA,MAAG3I,UAAH,EAAc;AACZ;AAEA,SAAI,IAAIkK,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGuC,IAAI,CAAC7J,MAAxB,EAAgCsH,CAAC,EAAjC,EAAoC;AAElC,UAAGxB,aAAa,IAAI+D,IAAI,CAACvC,CAAD,CAAJ,CAAQpI,WAAzB,IAAwC4G,aAAa,IAAI+D,IAAI,CAACvC,CAAD,CAAJ,CAAQnI,YAApE,EAAiF;AAC/E;AACA,YAAG4G,cAAc,IAAI8D,IAAI,CAACvC,CAAD,CAAJ,CAAQpI,WAA1B,IAAyC6G,cAAc,IAAI8D,IAAI,CAACvC,CAAD,CAAJ,CAAQnI,YAAtE,EAAmF;AACjF;AACA2K,qBAAW,GAAGxC,CAAd;AACD;AACF;AACF;AACF;;AACD,SAAOwC,WAAP;AACD;;AAED,SAAS/H,qBAAT,CAA+BF,iBAA/B,EAAiD;AAC/C,MAAIkI,WAAW,GAAG9M,OAAO,CAACI,OAAR,CAAgBC,uCAAhB,CAAwD,YAAxD,EAAsEJ,OAAtE,EAA+EL,SAA/E,CAAlB;AACA,MAAImN,MAAM,GAAGC,cAAc,CAAC,IAAD,CAA3B;;AAEA,MAAGF,WAAH,EAAe;AACb;AAEA,QAAGA,WAAW,IAAI,eAAlB,EAAmC;AACjC;AACAlI,uBAAiB,CAACqI,gBAAlB,CAAmCH,WAAnC;AACAlI,uBAAiB,CAACqI,gBAAlB,CAAmC,eAAnC;;AACA,WAAI,IAAIhK,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAG8J,MAAM,CAAChK,MAA1B,EAAkCE,CAAC,EAAnC,EAAsC;AACpC,YAAG8J,MAAM,CAAC9J,CAAD,CAAN,CAAU8G,IAAV,MAAoB+C,WAAvB,EAAmC;AACjClI,2BAAiB,CAACqI,gBAAlB,CAAmCF,MAAM,CAAC9J,CAAD,CAAN,CAAU8G,IAAV,EAAnC;AACD;AACF;AAEF,KAVD,MAUO;AACL;AACAnF,uBAAiB,CAACqI,gBAAlB,CAAmC,eAAnC;;AACA,WAAI,IAAIhK,EAAC,GAAG,CAAZ,EAAeA,EAAC,GAAG8J,MAAM,CAAChK,MAA1B,EAAkCE,EAAC,EAAnC,EAAsC;AACpC2B,yBAAiB,CAACqI,gBAAlB,CAAmCF,MAAM,CAAC9J,EAAD,CAAN,CAAU8G,IAAV,EAAnC;AACD;AACF;AACF,GApBD,MAoBO;AACLnF,qBAAiB,CAACqI,gBAAlB,CAAmC,eAAnC;;AACA,SAAI,IAAIhK,GAAC,GAAG,CAAZ,EAAeA,GAAC,GAAG8J,MAAM,CAAChK,MAA1B,EAAkCE,GAAC,EAAnC,EAAsC;AACpC2B,uBAAiB,CAACqI,gBAAlB,CAAmCF,MAAM,CAAC9J,GAAD,CAAN,CAAU8G,IAAV,EAAnC;AACD;AACF;AACF;;AAED,SAAS7E,oBAAT,CAA8BD,cAA9B,EAA6C;AAC3C,MAAIiI,eAAe,GAAGvM,QAAQ,CAACmF,aAAT,CAAuB,WAAvB,CAAtB;;AAGA,MAAGoH,eAAH,EAAmB;AACjB;AAEA,QAAGA,eAAe,IAAI,QAAtB,EAA+B;AAC7BjI,oBAAc,CAACgI,gBAAf,CAAgC,QAAhC;AACAhI,oBAAc,CAACkI,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACAnI,oBAAc,CAACgI,gBAAf,CAAgC,QAAhC;AACAhI,oBAAc,CAACkI,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACAnI,oBAAc,CAACgI,gBAAf,CAAgC,UAAhC;AACAhI,oBAAc,CAACkI,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACD;;AAED,QAAGF,eAAe,IAAI,QAAtB,EAA+B;AAC7BjI,oBAAc,CAACgI,gBAAf,CAAgC,QAAhC;AACAhI,oBAAc,CAACkI,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACAnI,oBAAc,CAACgI,gBAAf,CAAgC,UAAhC;AACAhI,oBAAc,CAACkI,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACAnI,oBAAc,CAACgI,gBAAf,CAAgC,QAAhC;AACAhI,oBAAc,CAACkI,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACD;;AAED,QAAGF,eAAe,IAAI,UAAtB,EAAiC;AAC/BjI,oBAAc,CAACgI,gBAAf,CAAgC,UAAhC;AACAhI,oBAAc,CAACkI,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACAnI,oBAAc,CAACgI,gBAAf,CAAgC,QAAhC;AACAhI,oBAAc,CAACkI,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACAnI,oBAAc,CAACgI,gBAAf,CAAgC,QAAhC;AACAhI,oBAAc,CAACkI,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACD;AACF,GA7BD,MA6BO;AACL;AACAnI,kBAAc,CAACgI,gBAAf,CAAgC,QAAhC;AACAhI,kBAAc,CAACgI,gBAAf,CAAgC,QAAhC;AACAhI,kBAAc,CAACgI,gBAAf,CAAgC,UAAhC;AACD;AAEF;;AAED,SAASvJ,wBAAT,CAAkC7B,eAAlC,EAAkD;AAAE;AAClD,MAAIwL,cAAc,GAAG,EAArB;;AACA,MAAGlN,UAAH,EAAc;AACZ;AACA,QAAIyC,WAAW,GAAGzC,UAAlB;;AAEA,SAAK,IAAI8C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGL,WAAW,CAACG,MAAhC,EAAwCE,CAAC,EAAzC,EAA8C;AAC5C;AACA,UAAGA,CAAC,IAAIpB,eAAR,EAAwB;AACtBwL,sBAAc,CAAChK,IAAf,CAAoBT,WAAW,CAACK,CAAD,CAA/B;AACD;AACF;AACF;;AACD,SAAOoK,cAAP;AACD;;AAED,SAAS7J,UAAT,CAAoBuF,MAApB,EAA2B;AAAE;AAC3B,MAAIuE,UAAU,GAAGzN,QAAQ,CAACqD,cAAT,CAAwB6F,MAAxB,CAAjB;AACA,MAAIwE,aAAJ;;AACA,MAAGD,UAAH,EAAc;AACZC,iBAAa,GAAGD,UAAU,CAACpB,MAA3B;AACAoB,cAAU,CAACpE,MAAX;;AACA,QAAGqE,aAAa,CAACzD,MAAd,CAAqB/G,MAArB,IAA+B,CAAlC,EAAoC;AAClCwK,mBAAa,CAACrE,MAAd;AACD;AACF;AACF;;AAED,SAASI,aAAT,CAAuBkE,cAAvB,EAAuCC,aAAvC,EAAsDpL,SAAtD,EAAgE;AAC9D,MAAIqL,YAAY,GAAG7N,QAAQ,CAACqD,cAAT,CAAwBsK,cAAxB,CAAnB;AACA,MAAIG,WAAW,GAAG9N,QAAQ,CAACqD,cAAT,CAAwBuK,aAAxB,CAAlB;;AAEA,MAAG9M,QAAQ,CAACmF,aAAT,CAAuB,cAAvB,KAA0CnF,QAAQ,CAACmF,aAAT,CAAuB,cAAvB,KAA0C,CAAvF,EAAyF;AACvF,QAAI8H,cAAc,GAAGjN,QAAQ,CAACmF,aAAT,CAAuB,cAAvB,CAArB;;AAEA,QAAGzD,SAAS,IAAI,OAAhB,EAAwB;AACtBsL,iBAAW,CAAC1D,KAAZ,CAAkBC,CAAlB,GAAsBwD,YAAY,CAACzD,KAAb,CAAmBC,CAAnB,GAAuBwD,YAAY,CAACzD,KAAb,CAAmBE,KAA1C,GAAkDyD,cAAxE;AACD;;AAED,QAAGvL,SAAS,IAAI,MAAhB,EAAuB;AACrBsL,iBAAW,CAAC1D,KAAZ,CAAkBI,CAAlB,GAAsBqD,YAAY,CAACzD,KAAb,CAAmBI,CAAnB,GAAuBqD,YAAY,CAACzD,KAAb,CAAmBK,MAA1C,GAAmDsD,cAAzE;AACD;;AAED,QAAGvL,SAAS,IAAI,MAAhB,EAAuB;AACrBsL,iBAAW,CAAC1D,KAAZ,CAAkBC,CAAlB,GAAsBwD,YAAY,CAACzD,KAAb,CAAmBC,CAAnB,GAAuByD,WAAW,CAAC1D,KAAZ,CAAkBE,KAAzC,GAAiDyD,cAAvE;AACD;;AAED,QAAGvL,SAAS,IAAI,IAAhB,EAAqB;AACnBsL,iBAAW,CAAC1D,KAAZ,CAAkBI,CAAlB,GAAsBqD,YAAY,CAACzD,KAAb,CAAmBI,CAAnB,GAAuBsD,WAAW,CAAC1D,KAAZ,CAAkBK,MAAzC,GAAkDsD,cAAxE;AACD;AACF;AACF;;AAED,SAASrE,cAAT,CAAwBiE,cAAxB,EAAwCC,aAAxC,EAAuDpL,SAAvD,EAAiE;AAC/D,MAAIqL,YAAY,GAAG7N,QAAQ,CAACqD,cAAT,CAAwBsK,cAAxB,CAAnB;AACA,MAAIG,WAAW,GAAG9N,QAAQ,CAACqD,cAAT,CAAwBuK,aAAxB,CAAlB;AACA,MAAII,UAAJ,EAAgBC,SAAhB,EAA2BC,UAA3B,EAAuCC,SAAvC,EAAkDC,IAAlD;;AAEA,MAAGtN,QAAQ,CAACmF,aAAT,CAAuB,WAAvB,CAAH,EAAuC;AACrC,QAAGnF,QAAQ,CAACmF,aAAT,CAAuB,WAAvB,KAAuC,IAA1C,EAA+C;AAC7C;AAEA,UAAGzD,SAAS,IAAI,OAAb,IAAwBA,SAAS,IAAI,MAAxC,EAA+C;AAC7CwL,kBAAU,GAAGH,YAAY,CAACzD,KAAb,CAAmBI,CAAnB,GAAuBqD,YAAY,CAACzD,KAAb,CAAmBK,MAAnB,GAA0B,CAA9D;AACAwD,iBAAS,GAAGH,WAAW,CAAC1D,KAAZ,CAAkBI,CAAlB,GAAsBsD,WAAW,CAAC1D,KAAZ,CAAkBK,MAAlB,GAAyB,CAA3D;AACA2D,YAAI,GAAGJ,UAAU,GAAGC,SAApB;;AACA,YAAGG,IAAI,GAAG,CAAC,CAAR,IAAaA,IAAI,GAAG,CAAvB,EAAyB;AAACN,qBAAW,CAAC1D,KAAZ,CAAkBI,CAAlB,GAAsBsD,WAAW,CAAC1D,KAAZ,CAAkBI,CAAlB,GAAsB4D,IAA5C;AAAiD;AAC5E;;AAED,UAAG5L,SAAS,IAAI,MAAb,IAAuBA,SAAS,IAAI,IAAvC,EAA4C;AAC1C0L,kBAAU,GAAGL,YAAY,CAACzD,KAAb,CAAmBC,CAAnB,GAAuBwD,YAAY,CAACzD,KAAb,CAAmBE,KAAnB,GAAyB,CAA7D;AACA6D,iBAAS,GAAGL,WAAW,CAAC1D,KAAZ,CAAkBC,CAAlB,GAAsByD,WAAW,CAAC1D,KAAZ,CAAkBE,KAAlB,GAAwB,CAA1D;AACA8D,YAAI,GAAGF,UAAU,GAAGC,SAApB;;AACA,YAAGC,IAAI,GAAG,CAAC,CAAR,IAAaA,IAAI,GAAG,CAAvB,EAAyB;AAACN,qBAAW,CAAC1D,KAAZ,CAAkBC,CAAlB,GAAsByD,WAAW,CAAC1D,KAAZ,CAAkBC,CAAlB,GAAsB+D,IAA5C;AAAiD;AAC5E;AACF;AACF;AACF;;AAED,SAASC,kBAAT,CAA4BrF,aAA5B,EAA2CC,cAA3C,EAA2DzG,SAA3D,EAAqE;AAAE;AACrE,MAAIJ,WAAW,GAAGpC,QAAQ,CAACqD,cAAT,CAAwB2F,aAAxB,CAAlB;AACA,MAAI3G,YAAY,GAAGrC,QAAQ,CAACqD,cAAT,CAAwB4F,cAAxB,CAAnB;AACA,MAAI0E,cAAJ;;AAEA,MAAGnL,SAAS,IAAI,OAAhB,EAAwB;AACtB,QAAGJ,WAAW,CAACgI,KAAZ,CAAkBC,CAAlB,IAAuBhI,YAAY,CAAC+H,KAAb,CAAmBC,CAA7C,EAA+C;AAC7CsD,oBAAc,GAAGvL,WAAW,CAACkM,EAA7B;AACD,KAFD,MAEO;AACLX,oBAAc,GAAGtL,YAAY,CAACiM,EAA9B;AACD;AACF;;AAED,MAAG9L,SAAS,IAAI,MAAhB,EAAuB;AACrB,QAAGJ,WAAW,CAACgI,KAAZ,CAAkBI,CAAlB,IAAuBnI,YAAY,CAAC+H,KAAb,CAAmBI,CAA7C,EAA+C;AAC7CmD,oBAAc,GAAGvL,WAAW,CAACkM,EAA7B;AACD,KAFD,MAEO;AACLX,oBAAc,GAAGtL,YAAY,CAACiM,EAA9B;AACD;AACF;;AAED,MAAG9L,SAAS,IAAI,MAAhB,EAAuB;AACrB,QAAGJ,WAAW,CAACgI,KAAZ,CAAkBC,CAAlB,IAAuBhI,YAAY,CAAC+H,KAAb,CAAmBC,CAA7C,EAA+C;AAC7CsD,oBAAc,GAAGtL,YAAY,CAACiM,EAA9B;AACD,KAFD,MAEO;AACLX,oBAAc,GAAGvL,WAAW,CAACkM,EAA7B;AACD;AACF;;AAED,MAAG9L,SAAS,IAAI,IAAhB,EAAqB;AACnB,QAAGJ,WAAW,CAACgI,KAAZ,CAAkBI,CAAlB,IAAuBnI,YAAY,CAAC+H,KAAb,CAAmBI,CAA7C,EAA+C;AAC7CmD,oBAAc,GAAGtL,YAAY,CAACiM,EAA9B;AACD,KAFD,MAEO;AACLX,oBAAc,GAAGvL,WAAW,CAACkM,EAA7B;AACD;AACF;;AAED,SAAOX,cAAP;AACD;;AAED,SAASY,4BAAT,CAAsC7M,SAAtC,EAAiDc,SAAjD,EAA2D;AAAE;AAC3D,MAAImL,cAAc,GAAGjM,SAAS,CAACU,WAAV,GAAwBL,QAAxB,EAArB;;AAEA,MAAGS,SAAS,IAAI,MAAhB,EAAuB;AACrB,SAAI,IAAIV,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGJ,SAAS,CAACC,KAAV,EAAnB,EAAsCG,CAAC,EAAvC,EAA2C;AACzC6L,oBAAc,GAAGU,kBAAkB,CAACV,cAAD,EAAiBjM,SAAS,CAACI,CAAD,CAAT,CAAaC,QAAb,EAAjB,EAA0CS,SAA1C,CAAnC;AACD;AACF;;AAED,SAAOmL,cAAP;AACD;;AAED,SAAStJ,UAAT,CAAoBL,KAApB,EAA2BG,SAA3B,EAAsCC,UAAtC,EAAiD;AAC/C;AACAJ,OAAK,CAACwK,cAAN,CAAqB,uBAArB,EAF+C,CAI/C;;AACAxK,OAAK,CAACyK,kBAAN,CAAyB,iBAAzB;AACAzK,OAAK,CAACyK,kBAAN,CAAyB,QAAzB;AAEA,SAAOzK,KAAP;AACD;;AAED,SAASa,UAAT,CAAoBjC,OAApB,EAA6B+E,KAA7B,EAAoC0C,CAApC,EAAuCG,CAAvC,EAA0CF,KAA1C,EAAiDG,MAAjD,EAAwD;AACtD,MAAIiE,SAAS,GAAGhJ,WAAW,CAAClB,KAAZ,GAAoBC,aAApB,CAAkCC,UAAU,CAAC2F,CAAD,EAAIG,CAAJ,EAAOF,KAAP,EAAcG,MAAd,CAA5C,CAAhB;AAEAiE,WAAS,CAAC3I,cAAV,CAAyBnD,OAAzB;AACA8L,WAAS,CAACC,aAAV,CAAwB,KAAxB;AACAD,WAAS,CAACE,kBAAV,CAA6B,KAA7B;AACAF,WAAS,CAACG,UAAV,CAAqB,KAArB;;AAEA,MAAGlH,KAAK,IAAI,KAAZ,EAAkB;AAChB+G,aAAS,CAACI,SAAV,GAAsBC,OAAO,CAACC,wBAAR,EAAtB;AACD;;AAED,SAAON,SAAP;AACD;;AAED,SAAS1H,aAAT,CAAuBpE,OAAvB,EAAgC+E,KAAhC,EAAuC0C,CAAvC,EAA0CG,CAA1C,EAA6CF,KAA7C,EAAoDG,MAApD,EAA2D;AACzD,MAAI1D,QAAQ,GAAGkI,QAAQ,CAACzK,KAAT,GAAiBC,aAAjB,CAA+BC,UAAU,CAAC2F,CAAD,EAAIG,CAAJ,EAAOF,KAAP,EAAcG,MAAd,CAAzC,CAAf;AAEA1D,UAAQ,CAACmI,aAAT,CAAuBC,cAAvB;AACApI,UAAQ,CAACqI,aAAT,CAAuB,CAAvB;AACArI,UAAQ,CAACsI,QAAT,CAAkBzM,OAAlB;;AACA,MAAG9B,QAAQ,CAACmF,aAAT,CAAuB,WAAvB,CAAH,EAAuC;AACrC,QAAIqJ,YAAY,GAAGxO,QAAQ,CAACmF,aAAT,CAAuB,WAAvB,CAAnB;AACAc,YAAQ,CAACwG,QAAT,CAAkB+B,YAAlB;AACD,GAHD,MAGO;AACLvI,YAAQ,CAACwG,QAAT,CAAkB5F,KAAlB;AACD;;AAED,SAAOZ,QAAP;AACD;;AAED,SAASoG,cAAT,CAAwBjD,IAAxB,EAA8B;AAAE;AAC9B,MAAIqF,SAAS,GAAGnP,OAAO,CAACoP,cAAR,EAAhB;AACA,MAAIC,OAAO,GAAG,QAAd;AACA,MAAIvC,MAAM,GAAG,EAAb;;AAEA,OAAI,IAAI9J,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGmM,SAAS,CAAC5N,KAAV,EAAnB,EAAsCyB,CAAC,EAAvC,EAA0C;AACxC,QAAG8G,IAAI,IAAI,IAAX,EAAiB;AACf,UAAGqF,SAAS,CAACnM,CAAD,CAAT,CAAa8G,IAAb,GAAoBwF,QAApB,CAA6BD,OAA7B,CAAH,EAAyC;AAACvC,cAAM,CAAC1J,IAAP,CAAY+L,SAAS,CAACnM,CAAD,CAArB;AAA0B;AACrE,KAFD,MAEO;AACL,UAAGmM,SAAS,CAACnM,CAAD,CAAT,CAAa8G,IAAb,MAAuBA,IAA1B,EAA+B;AAACgD,cAAM,CAAC1J,IAAP,CAAY+L,SAAS,CAACnM,CAAD,CAArB;AAA0B;AAC3D;AACF;;AACF,SAAO8J,MAAP;AACA;;AAED,SAASlM,KAAT,CAAeb,OAAf,EAAwBqC,SAAxB,EAAmCG,WAAnC,EAA+C;AAC7C,MAAIjB,SAAS,GAAGvB,OAAO,CAACuB,SAAxB;;AAEA,MAAGA,SAAS,CAACC,KAAV,KAAoB,CAApB,IAAyBD,SAAS,CAAC,CAAD,CAAT,CAAaE,KAAb,MAAwB,iBAApD,EAAsE;AACpE;AACA,QAAI+L,cAAc,GAAGY,4BAA4B,CAAC7M,SAAD,EAAYc,SAAZ,CAAjD;AACA,QAAIX,sBAAsB,GAAGjB,kBAA7B,CAHoE,CAGpB;;AAEhD,SAAI,IAAIkB,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGJ,SAAS,CAACC,KAAV,EAAnB,EAAsCG,CAAC,EAAvC,EAA2C;AACzC,UAAGJ,SAAS,CAACI,CAAD,CAAT,CAAaC,QAAb,MAA2B4L,cAA9B,EAA6C;AAC3C;AACA,YAAI3L,eAAe,GAAGC,kBAAkB,CAAC0L,cAAD,EAAiBjM,SAAS,CAACI,CAAD,CAAT,CAAaC,QAAb,EAAjB,EAA0CF,sBAA1C,CAAxC;;AAEA,YAAGG,eAAe,IAAI,IAAtB,EAA2B;AACzB;AACAsH,qBAAW,CAACqE,cAAD,EAAiBjM,SAAS,CAACI,CAAD,CAAT,CAAaC,QAAb,EAAjB,EAA0C,IAA1C,EAAgD,IAAhD,EAAsDS,SAAtD,EAAiE,IAAjE,EAAuEG,WAAvE,CAAX;AACA1C,uDAAM,CAACJ,EAAP,CAAU+C,OAAV,CAAkB,8BAAlB;AACD,SAJD,MAIO;AACL;AACAT,qBAAW,CAACwL,cAAD,EAAiBjM,SAAS,CAACI,CAAD,CAAT,CAAaC,QAAb,EAAjB,EAA0C,IAA1C,EAAgD,IAAhD,EAAsDS,SAAtD,EAAiEX,sBAAsB,CAACG,eAAD,CAAtB,CAAwCS,IAAzG,EAA+GZ,sBAAsB,CAACG,eAAD,CAAtB,CAAwCU,SAAvJ,EAAkKC,WAAlK,EAA+KX,eAA/K,CAAX;AACA/B,uDAAM,CAACJ,EAAP,CAAU+C,OAAV,CAAkB,kCAAlB;AACD;AACF;AACF;;AACDzC,WAAO,CAACI,OAAR,CAAgBsC,2CAAhB,CAA4DjC,kBAA5D,EAAgF,kBAAhF,EAAoGR,OAApG,EAA6GL,SAA7G;AACD,GAtBD,MAsBO;AACL;AACAE,iDAAM,CAACJ,EAAP,CAAU+C,OAAV,CAAkB,kEAAlB;AACD;AACF;;AAED,SAASkJ,YAAT,CAAsB2D,OAAtB,EAA+BpF,CAA/B,EAAkCG,CAAlC,EAAoC;AAAE;AACpC,MAAImF,SAAS,GAAG1P,6CAAM,CAAC2P,YAAP,EAAhB;AACA,MAAIC,aAAJ,EAAmBC,gBAAnB,EAAqCC,MAArC;;AAEA,OAAI,IAAIjO,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAG6N,SAAS,CAACzM,MAA7B,EAAqCpB,CAAC,EAAtC,EAA0C;AACxCgO,oBAAgB,GAAGH,SAAS,CAAC7N,CAAD,CAAT,CAAakO,wCAAb,CAAsDhQ,QAAtD,CAAnB;;AACA,SAAI,IAAIoD,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAG0M,gBAAgB,CAAC5M,MAApC,EAA4CE,CAAC,EAA7C,EAAiD;AAC/C,UAAG0M,gBAAgB,CAAC1M,CAAD,CAAhB,CAAoB8G,IAApB,CAAyBwF,QAAzB,CAAkCD,OAAlC,CAAH,EAA8C;AAC5CI,qBAAa,GAAGC,gBAAgB,CAAC1M,CAAD,CAAhC;AACD;AACF;AACF;;AAED,MAAGyM,aAAa,IAAI,IAApB,EAAyB;AACvBE,UAAM,GAAG,IAAT;AACAlQ,MAAE,CAACmE,KAAH,CAAS,+BAAT,EAA0C,kWAA1C;AACD,GAHD,MAGO;AACL,QAAIiM,YAAY,GAAGJ,aAAa,CAACK,MAAd,EAAnB;AACAH,UAAM,GAAGE,YAAY,CAACE,iBAAb,EAAT;AACA1D,uBAAmB,CAACsD,MAAD,EAAS1F,CAAT,EAAYG,CAAZ,CAAnB;AACAuF,UAAM,GAAGA,MAAM,CAACzB,EAAhB;AACD;;AAED,SAAOyB,MAAP;AACD;;AAED,SAASlE,eAAT,CAAyB1C,WAAzB,EAAsCkB,CAAtC,EAAyCG,CAAzC,EAA2C;AAAE;AAC3C,MAAI9H,SAAS,GAAG1C,QAAQ,CAACqD,cAAT,CAAwB8F,WAAxB,CAAhB;AACA,MAAIuD,QAAQ,GAAG5C,aAAa,CAAC,YAAD,CAA5B;AACA,MAAI6C,OAAO,GAAG7C,aAAa,CAAC,QAAD,CAA3B;AACA,MAAI8C,QAAQ,GAAGD,OAAO,IAAI,IAAX,GAAkBA,OAAO,CAACvC,KAAR,GAAgBC,CAAhB,EAAlB,GAAwC,CAAvD;AACA,MAAIwC,QAAQ,GAAGF,OAAO,IAAI,IAAX,GAAkBA,OAAO,CAACvC,KAAR,GAAgBI,CAAhB,EAAlB,GAAwC,CAAvD;AAEAtI,KAAG,CAACQ,SAAS,CAAC2H,CAAV,EAAD,CAAH;;AAEA,MAAGqC,QAAH,EAAY;AACVhK,aAAS,CAAC0H,KAAV,CAAgBC,CAAhB,GAAoBA,CAAC,GAAG3H,SAAS,CAAC0H,KAAV,GAAkBE,KAAlB,KAA4B,CAAhC,IAAqCoC,QAAQ,CAACtC,KAAT,GAAiBC,CAAjB,KAAuBuC,QAA5D,CAApB;AACAlK,aAAS,CAAC0H,KAAV,CAAgBI,CAAhB,GAAoBA,CAAC,GAAG9H,SAAS,CAAC0H,KAAV,GAAkBK,MAAlB,KAA6B,CAAjC,IAAsCiC,QAAQ,CAACtC,KAAT,GAAiBI,CAAjB,KAAuBqC,QAA7D,CAApB;AACAH,YAAQ,CAACR,sBAAT,CAAgC,CAAhC;AACD,GAJD,MAIO;AACLxJ,aAAS,CAAC0H,KAAV,CAAgBC,CAAhB,GAAoBA,CAAC,GAAG3H,SAAS,CAAC0H,KAAV,GAAkBE,KAAlB,KAA4B,CAApD;AACA5H,aAAS,CAAC0H,KAAV,CAAgBI,CAAhB,GAAoBA,CAAC,GAAG9H,SAAS,CAAC0H,KAAV,GAAkBK,MAAlB,KAA6B,CAArD;AACD;;AAEDvI,KAAG,CAACQ,SAAS,CAAC4L,EAAX,CAAH;AAEA,SAAO5L,SAAS,CAAC4L,EAAjB;AACD;;AAED,SAASnD,gBAAT,CAA0B/I,WAA1B,EAAuCC,YAAvC,EAAqDG,SAArD,EAA+D;AAAE;AAE/D,MAAI4N,iBAAiB,GAAGhO,WAAW,CAACgI,KAAZ,CAAkBiG,WAAlB,CAA8B;AAACC,QAAI,EAAElO,WAAW,CAACiK,MAAnB;AAA2BkE,MAAE,EAAE9P;AAA/B,GAA9B,CAAxB;AACA,MAAI+P,kBAAkB,GAAGnO,YAAY,CAAC+H,KAAb,CAAmBiG,WAAnB,CAA+B;AAACC,QAAI,EAAEjO,YAAY,CAACgK,MAApB;AAA4BkE,MAAE,EAAE9P;AAAhC,GAA/B,CAAzB;AACA,MAAIuJ,YAAY,GAAGF,aAAa,CAAC,QAAD,CAAhC;AACA,MAAIc,KAAJ,EAAWC,KAAX;;AAEA,MAAGb,YAAH,EAAgB;AACdY,SAAK,GAAGZ,YAAY,CAACI,KAAb,GAAqBC,CAArB,EAAR;AACAQ,SAAK,GAAGb,YAAY,CAACI,KAAb,GAAqBI,CAArB,EAAR;AACD,GAHD,MAGO;AACLI,SAAK,GAAG,CAAR;AACAC,SAAK,GAAG,CAAR;AACD;;AAED,MAAIK,aAAa,GAAG;AAClBG,kBAAc,EAAE,IADE;AAElBC,kBAAc,EAAE,IAFE;AAGlBG,mBAAe,EAAE,IAHC;AAIlBC,mBAAe,EAAE,IAJC;AAKlBH,cAAU,EAAE,IALM;AAMlBC,cAAU,EAAE,IANM,CASpB;;AAToB,GAApB;;AAUA,MAAGhJ,SAAS,IAAI,IAAhB,EAAqB;AACnB;AACA0I,iBAAa,CAACG,cAAd,GAA+B+E,iBAAiB,CAAC/F,CAAlB,GAAoB+F,iBAAiB,CAAC9F,KAAlB,GAAwB,CAA5C,GAA8CM,KAA7E;AACAM,iBAAa,CAACI,cAAd,GAA+B8E,iBAAiB,CAAC5F,CAAlB,GAAoBK,KAAnD,CAHmB,CAKnB;;AACAK,iBAAa,CAACO,eAAd,GAAgC+E,kBAAkB,CAACnG,CAAnB,GAAqBmG,kBAAkB,CAAClG,KAAnB,GAAyB,CAA9C,GAAgDM,KAAhF;AACAM,iBAAa,CAACQ,eAAd,GAAgC8E,kBAAkB,CAAChG,CAAnB,GAAqBgG,kBAAkB,CAAC/F,MAAxC,GAA+CI,KAA/E,CAPmB,CASnB;;AACAK,iBAAa,CAACK,UAAd,GAA2B,CAACL,aAAa,CAACG,cAAd,GAA+BH,aAAa,CAACO,eAA9C,IAA+D,CAA1F;AACAP,iBAAa,CAACM,UAAd,GAA2B,CAACN,aAAa,CAACI,cAAd,GAA+BJ,aAAa,CAACQ,eAA9C,IAA+D,CAA1F;AACD;;AAED,MAAGlJ,SAAS,IAAI,OAAhB,EAAwB;AACtB;AACA0I,iBAAa,CAACG,cAAd,GAA+B+E,iBAAiB,CAAC/F,CAAlB,GAAoB+F,iBAAiB,CAAC9F,KAAtC,GAA4CM,KAA3E;AACAM,iBAAa,CAACI,cAAd,GAA+B8E,iBAAiB,CAAC5F,CAAlB,GAAoB4F,iBAAiB,CAAC3F,MAAlB,GAAyB,CAA7C,GAA+CI,KAA9E,CAHsB,CAKtB;;AACAK,iBAAa,CAACO,eAAd,GAAgC+E,kBAAkB,CAACnG,CAAnB,GAAqBO,KAArD;AACAM,iBAAa,CAACQ,eAAd,GAAgC8E,kBAAkB,CAAChG,CAAnB,GAAqBgG,kBAAkB,CAAC/F,MAAnB,GAA0B,CAA/C,GAAiDI,KAAjF,CAPsB,CAStB;;AACAK,iBAAa,CAACK,UAAd,GAA2B,CAACL,aAAa,CAACG,cAAd,GAA+BH,aAAa,CAACO,eAA9C,IAA+D,CAA1F;AACAP,iBAAa,CAACM,UAAd,GAA2B,CAACN,aAAa,CAACI,cAAd,GAA+BJ,aAAa,CAACQ,eAA9C,IAA+D,CAA1F;AACD;;AAED,MAAGlJ,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACA0I,iBAAa,CAACG,cAAd,GAA+B+E,iBAAiB,CAAC/F,CAAlB,GAAoB+F,iBAAiB,CAAC9F,KAAlB,GAAwB,CAA5C,GAA8CM,KAA7E;AACAM,iBAAa,CAACI,cAAd,GAA+B8E,iBAAiB,CAAC5F,CAAlB,GAAoB4F,iBAAiB,CAAC3F,MAAtC,GAA6CI,KAA5E,CAHqB,CAKrB;;AACAK,iBAAa,CAACO,eAAd,GAAgC+E,kBAAkB,CAACnG,CAAnB,GAAqBmG,kBAAkB,CAAClG,KAAnB,GAAyB,CAA9C,GAAgDM,KAAhF;AACAM,iBAAa,CAACQ,eAAd,GAAgC8E,kBAAkB,CAAChG,CAAnB,GAAqBK,KAArD,CAPqB,CASrB;;AACAK,iBAAa,CAACK,UAAd,GAA2B,CAACL,aAAa,CAACG,cAAd,GAA+BH,aAAa,CAACO,eAA9C,IAA+D,CAA1F;AACAP,iBAAa,CAACM,UAAd,GAA2B,CAACN,aAAa,CAACI,cAAd,GAA+BJ,aAAa,CAACQ,eAA9C,IAA+D,CAA1F;AACD;;AAED,MAAGlJ,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACA0I,iBAAa,CAACG,cAAd,GAA+B+E,iBAAiB,CAAC/F,CAAlB,GAAoBO,KAAnD;AACAM,iBAAa,CAACI,cAAd,GAA+B8E,iBAAiB,CAAC5F,CAAlB,GAAoB4F,iBAAiB,CAAC3F,MAAlB,GAAyB,CAA7C,GAA+CI,KAA9E,CAHqB,CAKrB;;AACAK,iBAAa,CAACO,eAAd,GAAgC+E,kBAAkB,CAACnG,CAAnB,GAAqBmG,kBAAkB,CAAClG,KAAxC,GAA8CM,KAA9E;AACAM,iBAAa,CAACQ,eAAd,GAAgC8E,kBAAkB,CAAChG,CAAnB,GAAqBgG,kBAAkB,CAAC/F,MAAnB,GAA0B,CAA/C,GAAiDI,KAAjF,CAPqB,CASrB;;AACAK,iBAAa,CAACK,UAAd,GAA2B,CAACL,aAAa,CAACG,cAAd,GAA+BH,aAAa,CAACO,eAA9C,IAA+D,CAA1F;AACAP,iBAAa,CAACM,UAAd,GAA2B,CAACN,aAAa,CAACI,cAAd,GAA+BJ,aAAa,CAACQ,eAA9C,IAA+D,CAA1F;AACD;;AAED,SAAOR,aAAP;AACD;;AAED,SAASS,gBAAT,CAA0BN,cAA1B,EAA0CC,cAA1C,EAA0DG,eAA1D,EAA2EC,eAA3E,EAA4FlJ,SAA5F,EAAsG;AAAE;AACtG,MAAIiO,IAAI,GAAGC,YAAY,CAACC,UAAb,EAAX;;AAEA,MAAGnO,SAAS,IAAI,IAAhB,EAAqB;AACnBiO,QAAI,CAACG,WAAL,CAAiBC,WAAW,CAACxF,cAAD,EAAgBC,cAAhB,CAA5B;AACAmF,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACpF,eAAD,EAAiBC,eAAjB,CAA5B;AACD;;AAED,MAAGlJ,SAAS,IAAI,OAAhB,EAAwB;AACtBiO,QAAI,CAACG,WAAL,CAAiBC,WAAW,CAACxF,cAAD,EAAgBC,cAAhB,CAA5B;AACAmF,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACpF,eAAD,EAAiBC,eAAjB,CAA5B;AACD;;AAED,MAAGlJ,SAAS,IAAI,MAAhB,EAAuB;AACrBiO,QAAI,CAACG,WAAL,CAAiBC,WAAW,CAACxF,cAAD,EAAgBC,cAAhB,CAA5B;AACAmF,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACpF,eAAD,EAAiBC,eAAjB,CAA5B;AACD;;AAED,MAAGlJ,SAAS,IAAI,MAAhB,EAAuB;AACrBiO,QAAI,CAACG,WAAL,CAAiBC,WAAW,CAACxF,cAAD,EAAgBC,cAAhB,CAA5B;AACAmF,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACpF,eAAD,EAAiBC,eAAjB,CAA5B;AACD;;AAED,MAAIjJ,IAAI,GAAGsO,YAAY,CAACC,aAAb,CAA2BC,MAAM,CAACC,kBAAP,CAA0BT,IAA1B,CAA3B,CAAX;AACAhO,MAAI,CAAC0O,OAAL,CAAa,gBAAb;AAEA,SAAO1O,IAAP;AACD;;AAED,SAAS2I,cAAT,CAAwBC,cAAxB,EAAwCC,cAAxC,EAAwDC,UAAxD,EAAoEC,UAApE,EAAgFC,eAAhF,EAAiGC,eAAjG,EAAkHlJ,SAAlH,EAA4H;AAAE;AAC5H,MAAIiO,IAAI,GAAGC,YAAY,CAACC,UAAb,EAAX;;AAEA,MAAGnO,SAAS,IAAI,IAAhB,EAAqB;AACnB;AACAiO,QAAI,CAACG,WAAL,CAAiBC,WAAW,CAACxF,cAAD,EAAiBC,cAAjB,CAA5B;AACAmF,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACxF,cAAD,EAAiBG,UAAjB,CAA5B;AACAiF,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACpF,eAAD,EAAkBD,UAAlB,CAA5B;AACAiF,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACpF,eAAD,EAAkBC,eAAlB,CAA5B;AACD;;AAED,MAAGlJ,SAAS,IAAI,OAAhB,EAAwB;AACtB;AACAiO,QAAI,CAACG,WAAL,CAAiBC,WAAW,CAACxF,cAAD,EAAiBC,cAAjB,CAA5B;AACAmF,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACtF,UAAD,EAAaD,cAAb,CAA5B;AACAmF,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACtF,UAAD,EAAaG,eAAb,CAA5B;AACA+E,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACpF,eAAD,EAAkBC,eAAlB,CAA5B;AACD;;AAED,MAAGlJ,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACAiO,QAAI,CAACG,WAAL,CAAiBC,WAAW,CAACxF,cAAD,EAAiBC,cAAjB,CAA5B;AACAmF,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACxF,cAAD,EAAiBG,UAAjB,CAA5B;AACAiF,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACpF,eAAD,EAAkBD,UAAlB,CAA5B;AACAiF,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACpF,eAAD,EAAkBC,eAAlB,CAA5B;AACD;;AAED,MAAGlJ,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACAiO,QAAI,CAACG,WAAL,CAAiBC,WAAW,CAACxF,cAAD,EAAiBC,cAAjB,CAA5B;AACAmF,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACtF,UAAD,EAAaD,cAAb,CAA5B;AACAmF,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACtF,UAAD,EAAaG,eAAb,CAA5B;AACA+E,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACpF,eAAD,EAAkBC,eAAlB,CAA5B;AACD;;AAED,MAAIjJ,IAAI,GAAGsO,YAAY,CAACC,aAAb,CAA2BC,MAAM,CAACC,kBAAP,CAA0BT,IAA1B,CAA3B,CAAX;AACA,MAAIW,MAAM,GAAG3O,IAAI,CAACwH,MAAL,GAAc7H,WAAd,GAA4BgP,MAA5B,EAAb;AACAA,QAAM,CAAC,CAAD,CAAN,CAAUC,YAAV,GAAyB,EAAzB;AACAD,QAAM,CAAC,CAAD,CAAN,CAAUC,YAAV,GAAyB,EAAzB;AACA5O,MAAI,CAAC0O,OAAL,CAAa,cAAb;AAEA,SAAO1O,IAAP;AACD;;AAED,SAASmJ,cAAT,CAAwBP,cAAxB,EAAwCC,cAAxC,EAAwDG,eAAxD,EAAyEC,eAAzE,EAA0FlJ,SAA1F,EAAoG;AAAE;AACpG,MAAIiO,IAAI,GAAGC,YAAY,CAACC,UAAb,EAAX;AACA,MAAIlO,IAAJ;;AAEA,MAAGD,SAAS,IAAI,IAAhB,EAAqB;AACnB;AACAiO,QAAI,CAACG,WAAL,CAAiBC,WAAW,CAACxF,cAAD,EAAgBC,cAAhB,CAA5B;AACAmF,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACpF,eAAD,EAAiBC,eAAjB,CAA5B,EAHmB,CAKnB;;AACAjJ,QAAI,GAAGsO,YAAY,CAACC,aAAb,CAA2BC,MAAM,CAACC,kBAAP,CAA0BT,IAA1B,CAA3B,CAAP;AACA,QAAIW,MAAM,GAAG3O,IAAI,CAACwH,MAAL,GAAc7H,WAAd,GAA4BgP,MAA5B,EAAb;AAEAA,UAAM,CAAC,CAAD,CAAN,CAAUE,SAAV,GAAsBF,MAAM,CAAC,CAAD,CAAN,CAAUE,SAAV,GAAsB,CAA5C;AACAF,UAAM,CAAC,CAAD,CAAN,CAAUG,YAAV,GAAyBH,MAAM,CAAC,CAAD,CAAN,CAAUI,UAAV,GAAuB,IAAhD;;AAEA,QAAGnG,cAAc,GAACI,eAAlB,EAAkC;AAChC2F,YAAM,CAAC,CAAD,CAAN,CAAUK,SAAV,GAAsB;AAACpH,SAAC,EAAE,CAAJ;AAAOG,SAAC,EAAE;AAAV,OAAtB;AACA4G,YAAM,CAAC,CAAD,CAAN,CAAUM,OAAV,GAAoB;AAACrH,SAAC,EAAE,CAAC,GAAL;AAASG,SAAC,EAAC;AAAX,OAApB;AAEA4G,YAAM,CAAC,CAAD,CAAN,CAAUK,SAAV,GAAsB;AAACpH,SAAC,EAAE,CAAJ;AAAMG,SAAC,EAAE;AAAT,OAAtB;AACA4G,YAAM,CAAC,CAAD,CAAN,CAAUM,OAAV,GAAoB;AAACrH,SAAC,EAAE,CAAJ;AAAMG,SAAC,EAAE;AAAT,OAApB;AACD,KAND,MAMO;AACL4G,YAAM,CAAC,CAAD,CAAN,CAAUK,SAAV,GAAsB;AAACpH,SAAC,EAAE,CAAJ;AAAOG,SAAC,EAAE;AAAV,OAAtB;AACA4G,YAAM,CAAC,CAAD,CAAN,CAAUM,OAAV,GAAoB;AAACrH,SAAC,EAAE,CAAC,GAAL;AAASG,SAAC,EAAC;AAAX,OAApB;AAEA4G,YAAM,CAAC,CAAD,CAAN,CAAUK,SAAV,GAAsB;AAACpH,SAAC,EAAE,CAAJ;AAAMG,SAAC,EAAE;AAAT,OAAtB;AACA4G,YAAM,CAAC,CAAD,CAAN,CAAUM,OAAV,GAAoB;AAACrH,SAAC,EAAE,CAAJ;AAAMG,SAAC,EAAE;AAAT,OAApB;AACD;AACF;;AAED,MAAGhI,SAAS,IAAI,OAAhB,EAAwB;AACtB;AACAiO,QAAI,CAACG,WAAL,CAAiBC,WAAW,CAACxF,cAAD,EAAgBC,cAAhB,CAA5B;AACAmF,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACpF,eAAD,EAAiBC,eAAjB,CAA5B,EAHsB,CAKtB;;AACAjJ,QAAI,GAAGsO,YAAY,CAACC,aAAb,CAA2BC,MAAM,CAACC,kBAAP,CAA0BT,IAA1B,CAA3B,CAAP;;AACA,QAAIW,OAAM,GAAG3O,IAAI,CAACwH,MAAL,GAAc7H,WAAd,GAA4BgP,MAA5B,EAAb;;AAEAA,WAAM,CAAC,CAAD,CAAN,CAAUE,SAAV,GAAsBF,OAAM,CAAC,CAAD,CAAN,CAAUE,SAAV,GAAsB,CAA5C;AACAF,WAAM,CAAC,CAAD,CAAN,CAAUG,YAAV,GAAyBH,OAAM,CAAC,CAAD,CAAN,CAAUI,UAAV,GAAuB,IAAhD;;AAEA,QAAGlG,cAAc,GAACI,eAAlB,EAAkC;AAChC0F,aAAM,CAAC,CAAD,CAAN,CAAUK,SAAV,GAAsB;AAACpH,SAAC,EAAE,GAAJ;AAASG,SAAC,EAAE;AAAZ,OAAtB;AACA4G,aAAM,CAAC,CAAD,CAAN,CAAUM,OAAV,GAAoB;AAACrH,SAAC,EAAE,CAAC,GAAL;AAASG,SAAC,EAAC;AAAX,OAApB;AAEA4G,aAAM,CAAC,CAAD,CAAN,CAAUK,SAAV,GAAsB;AAACpH,SAAC,EAAE,CAAJ;AAAMG,SAAC,EAAE;AAAT,OAAtB;AACA4G,aAAM,CAAC,CAAD,CAAN,CAAUM,OAAV,GAAoB;AAACrH,SAAC,EAAE,GAAJ;AAAQG,SAAC,EAAE;AAAX,OAApB;AACD,KAND,MAMO;AACL4G,aAAM,CAAC,CAAD,CAAN,CAAUK,SAAV,GAAsB;AAACpH,SAAC,EAAE,GAAJ;AAASG,SAAC,EAAE;AAAZ,OAAtB;AACA4G,aAAM,CAAC,CAAD,CAAN,CAAUM,OAAV,GAAoB;AAACrH,SAAC,EAAE,CAAC,GAAL;AAASG,SAAC,EAAC;AAAX,OAApB;AAEA4G,aAAM,CAAC,CAAD,CAAN,CAAUK,SAAV,GAAsB;AAACpH,SAAC,EAAE,CAAJ;AAAMG,SAAC,EAAE;AAAT,OAAtB;AACA4G,aAAM,CAAC,CAAD,CAAN,CAAUM,OAAV,GAAoB;AAACrH,SAAC,EAAE,GAAJ;AAAQG,SAAC,EAAE;AAAX,OAApB;AACD;AACF;;AAED,MAAGhI,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACAiO,QAAI,CAACG,WAAL,CAAiBC,WAAW,CAACxF,cAAD,EAAgBC,cAAhB,CAA5B;AACAmF,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACpF,eAAD,EAAiBC,eAAjB,CAA5B,EAHqB,CAKrB;;AACAjJ,QAAI,GAAGsO,YAAY,CAACC,aAAb,CAA2BC,MAAM,CAACC,kBAAP,CAA0BT,IAA1B,CAA3B,CAAP;;AACA,QAAIW,QAAM,GAAG3O,IAAI,CAACwH,MAAL,GAAc7H,WAAd,GAA4BgP,MAA5B,EAAb;;AAEAA,YAAM,CAAC,CAAD,CAAN,CAAUE,SAAV,GAAsBF,QAAM,CAAC,CAAD,CAAN,CAAUE,SAAV,GAAsB,CAA5C;AACAF,YAAM,CAAC,CAAD,CAAN,CAAUG,YAAV,GAAyBH,QAAM,CAAC,CAAD,CAAN,CAAUI,UAAV,GAAuB,IAAhD;;AAEA,QAAGnG,cAAc,GAACI,eAAlB,EAAkC;AAChC2F,cAAM,CAAC,CAAD,CAAN,CAAUK,SAAV,GAAsB;AAACpH,SAAC,EAAE,CAAJ;AAAOG,SAAC,EAAE;AAAV,OAAtB;AACA4G,cAAM,CAAC,CAAD,CAAN,CAAUM,OAAV,GAAoB;AAACrH,SAAC,EAAE,CAAC,GAAL;AAASG,SAAC,EAAC;AAAX,OAApB;AAEA4G,cAAM,CAAC,CAAD,CAAN,CAAUK,SAAV,GAAsB;AAACpH,SAAC,EAAE,CAAJ;AAAMG,SAAC,EAAE;AAAT,OAAtB;AACA4G,cAAM,CAAC,CAAD,CAAN,CAAUM,OAAV,GAAoB;AAACrH,SAAC,EAAE,CAAJ;AAAMG,SAAC,EAAE;AAAT,OAApB;AACD,KAND,MAMO;AACL4G,cAAM,CAAC,CAAD,CAAN,CAAUK,SAAV,GAAsB;AAACpH,SAAC,EAAE,CAAJ;AAAOG,SAAC,EAAE;AAAV,OAAtB;AACA4G,cAAM,CAAC,CAAD,CAAN,CAAUM,OAAV,GAAoB;AAACrH,SAAC,EAAE,CAAC,GAAL;AAASG,SAAC,EAAC;AAAX,OAApB;AAEA4G,cAAM,CAAC,CAAD,CAAN,CAAUK,SAAV,GAAsB;AAACpH,SAAC,EAAE,CAAJ;AAAMG,SAAC,EAAE;AAAT,OAAtB;AACA4G,cAAM,CAAC,CAAD,CAAN,CAAUM,OAAV,GAAoB;AAACrH,SAAC,EAAE,CAAJ;AAAMG,SAAC,EAAE;AAAT,OAApB;AACD;AACF;;AAED,MAAGhI,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACAiO,QAAI,CAACG,WAAL,CAAiBC,WAAW,CAACxF,cAAD,EAAgBC,cAAhB,CAA5B;AACAmF,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACpF,eAAD,EAAiBC,eAAjB,CAA5B,EAHqB,CAKrB;;AACAjJ,QAAI,GAAGsO,YAAY,CAACC,aAAb,CAA2BC,MAAM,CAACC,kBAAP,CAA0BT,IAA1B,CAA3B,CAAP;;AACA,QAAIW,QAAM,GAAG3O,IAAI,CAACwH,MAAL,GAAc7H,WAAd,GAA4BgP,MAA5B,EAAb;;AAEAA,YAAM,CAAC,CAAD,CAAN,CAAUE,SAAV,GAAsBF,QAAM,CAAC,CAAD,CAAN,CAAUE,SAAV,GAAsB,CAA5C;AACAF,YAAM,CAAC,CAAD,CAAN,CAAUG,YAAV,GAAyBH,QAAM,CAAC,CAAD,CAAN,CAAUI,UAAV,GAAuB,IAAhD;;AAEA,QAAGlG,cAAc,GAACI,eAAlB,EAAkC;AAChC0F,cAAM,CAAC,CAAD,CAAN,CAAUK,SAAV,GAAsB;AAACpH,SAAC,EAAE,GAAJ;AAASG,SAAC,EAAE;AAAZ,OAAtB;AACA4G,cAAM,CAAC,CAAD,CAAN,CAAUM,OAAV,GAAoB;AAACrH,SAAC,EAAE,CAAC,GAAL;AAASG,SAAC,EAAC;AAAX,OAApB;AAEA4G,cAAM,CAAC,CAAD,CAAN,CAAUK,SAAV,GAAsB;AAACpH,SAAC,EAAE,CAAJ;AAAMG,SAAC,EAAE;AAAT,OAAtB;AACA4G,cAAM,CAAC,CAAD,CAAN,CAAUM,OAAV,GAAoB;AAACrH,SAAC,EAAE,GAAJ;AAAQG,SAAC,EAAE;AAAX,OAApB;AACD,KAND,MAMO;AACL4G,cAAM,CAAC,CAAD,CAAN,CAAUK,SAAV,GAAsB;AAACpH,SAAC,EAAE,GAAJ;AAASG,SAAC,EAAE;AAAZ,OAAtB;AACA4G,cAAM,CAAC,CAAD,CAAN,CAAUM,OAAV,GAAoB;AAACrH,SAAC,EAAE,CAAC,GAAL;AAASG,SAAC,EAAC;AAAX,OAApB;AAEA4G,cAAM,CAAC,CAAD,CAAN,CAAUK,SAAV,GAAsB;AAACpH,SAAC,EAAE,CAAJ;AAAMG,SAAC,EAAE;AAAT,OAAtB;AACA4G,cAAM,CAAC,CAAD,CAAN,CAAUM,OAAV,GAAoB;AAACrH,SAAC,EAAE,GAAJ;AAAQG,SAAC,EAAE;AAAX,OAApB;AACD;AACF,GA9GiG,CAgHlG;;;AACA/H,MAAI,CAAC0O,OAAL,CAAa,cAAb;AAEA,SAAO1O,IAAP;AACD;;AAED,SAASsJ,SAAT,CAAmBtJ,IAAnB,EAAyBH,KAAzB,EAA+B;AAAE;AAC/B,MAAIqP,UAAJ;;AAEA,MAAGrP,KAAK,IAAI,IAAZ,EAAiB;AACf;AACA,QAAG6K,cAAc,CAAC7K,KAAD,CAAd,IAAyB,IAAzB,IAAiCA,KAAK,IAAI,eAA7C,EAA6D;AAC3D;AACAqP,gBAAU,GAAGrP,KAAb;AACA,UAAIsP,QAAQ,GAAGzE,cAAc,CAAC7K,KAAD,CAA7B;AACAG,UAAI,CAACoP,WAAL,GAAmBD,QAAQ,CAAC,CAAD,CAA3B;AACD,KALD,MAKO;AACL;AACAD,gBAAU,GAAG,eAAb;AACA,UAAIG,MAAM,GAAGrP,IAAI,CAACH,KAAL,GAAayP,kBAAb,CAAgC,CAAhC,CAAb;AACAD,YAAM,CAACE,KAAP,GAAeC,OAAO,CAACC,uBAAR,CAAgC;AAACC,SAAC,EAAE,IAAJ;AAAUrQ,SAAC,EAAE,IAAb;AAAmBsQ,SAAC,EAAE,IAAtB;AAA4BC,SAAC,EAAE;AAA/B,OAAhC,CAAf;AACAP,YAAM,CAACQ,SAAP,GAAmB,CAAnB;AACA7P,UAAI,CAACH,KAAL,GAAaiQ,aAAb,GAA6B,CAA7B;AACD;AACF,GAfD,MAeO;AACL;AACA,QAAGpS,OAAO,CAACI,OAAR,CAAgBC,uCAAhB,CAAwD,YAAxD,EAAsEJ,OAAtE,EAA+EL,SAA/E,KAA6F,IAA7F,IAAqGI,OAAO,CAACI,OAAR,CAAgBC,uCAAhB,CAAwD,YAAxD,EAAsEJ,OAAtE,EAA+EL,SAA/E,KAA6F,eAArM,EAAqN;AACnN;AACA4R,gBAAU,GAAGxE,cAAc,CAAChN,OAAO,CAACI,OAAR,CAAgBC,uCAAhB,CAAwD,YAAxD,EAAsEJ,OAAtE,EAA+EL,SAA/E,CAAD,CAA3B;AACA0C,UAAI,CAACoP,WAAL,GAAmBF,UAAU,CAAC,CAAD,CAA7B;AACAA,gBAAU,GAAGA,UAAU,CAAC,CAAD,CAAV,CAAczH,IAAd,EAAb;AACD,KALD,MAKO;AACLyH,gBAAU,GAAG,eAAb;;AACA,UAAIG,OAAM,GAAGrP,IAAI,CAACH,KAAL,GAAayP,kBAAb,CAAgC,CAAhC,CAAb;;AACAD,aAAM,CAACE,KAAP,GAAeC,OAAO,CAACC,uBAAR,CAAgC;AAACC,SAAC,EAAE,IAAJ;AAAUrQ,SAAC,EAAE,IAAb;AAAmBsQ,SAAC,EAAE,IAAtB;AAA4BC,SAAC,EAAE;AAA/B,OAAhC,CAAf;AACAP,aAAM,CAACQ,SAAP,GAAmB,CAAnB;AACA7P,UAAI,CAACH,KAAL,GAAaiQ,aAAb,GAA6B,CAA7B;AACD;AACF;;AAED,SAAOZ,UAAP;AACD,C;;;;;;;;;;;ACtuCD,mC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,4C;;;;;;;;;;;ACAA,sC","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch'\n// const { toArray } = require('util')\n\n//\n// Variables\n//\n\nlet UI = require('sketch/ui') \n// var SharedStyle = require('sketch/dom').SharedStyle\n\nconst pluginKey = \"flowArrows\"\nconst document = sketch.fromNative(context.document)\nlet docData = context.document.documentData()\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey)\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards\nlet newConnectionsData = getConnectionsData()\n\n// Settings\nvar Settings = require('sketch/settings')\n\n \n//\n// Create Connection Function\n//\n\nexport default function(context) {}\nexport function createAutoArrow(context){start(context, \"Auto\", false)}\nexport function createRightArrow(context){start(context, \"Right\", false)}\nexport function createDownArrow(context){start(context, \"Down\", false)}\nexport function createLeftArrow(context){start(context, \"Left\", false)}\nexport function createUpArrow(context){start(context, \"Up\", false)}\n\nexport function createRightArrowWithCondition(context){start(context, \"Right\", true)}\nexport function createDownArrowWithCondition(context){start(context, \"Down\", true)}\nexport function createLeftArrowWithCondition(context){start(context, \"Left\", true)}\nexport function createUpArrowWithCondition(context){start(context, \"Up\", true)}\n\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n let selection = context.selection\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n log(currentConnectionsData)\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n \n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let conditionObject = document.getLayerWithID(conditionID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n if(conditionID){\n if(conditionObject){conditionObject.remove()}\n }\n \n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition)\n // log(arrow.conditionID)\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n\n log(connection)\n\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n log(newConnectionsData)\n}\n\nfunction checkForGroup(groupName) { // refactored\n let currentGroup = null\n\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i]\n } \n }\n\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\"\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\"\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\"\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\"\n }\n }\n\n return direction\n}\n\nfunction drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition){ // Refactored\n // Process of creating new connection \n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection)\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n \n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n\n\n // Condition\n if(condition != false){\n if(conditionID){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY)\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY)\n }\n } else {\n connection.conditionID = null\n }\n // connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style)\n\n // Add to group\n addToArrowsGroup(connection.line)\n \n return connection\n}\n\nfunction addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\")\n if(currentGroup){\n currentGroup.addLayers([line])\n currentGroup.fixGeometryWithOptions(1)\n } else {\n let Group = require('sketch/dom').Group\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n })\n group.moveToBack()\n group.adjustToFit()\n \n }\n}\n\nfunction addToConditionGroup(condition, x, y){ // Refactored\n let conGroup = checkForGroup(\"Conditions\") \n let arGroup = checkForGroup(\"Arrows\") \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0\n\n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX) \n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY) \n condition.parent = conGroup\n conGroup.fixGeometryWithOptions(1)\n } else {\n condition.frame.x = x - condition.frame.width / 2 \n condition.frame.y = y - condition.frame.height / 2\n let Group = require('sketch/dom').Group\n let group = new Group({\n parent: currentParentGroup,\n name: 'Conditions',\n layers: [condition]\n })\n group.moveToBack()\n group.adjustToFit()\n }\n}\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = []\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i])\n }\n } \n return dataArray\n}\n\nfunction findConnectionData(firstObjectID, secondObjectID, data){\n let arrayNumber = null\n firstObjectID = String(firstObjectID)\n secondObjectID = String(secondObjectID)\n\n if(pluginData){\n // If we have database, need to check for connections\n\n for(let y = 0; y < data.length; y++){\n\n if(firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject){\n // if we found that we have this object in connection database already\n if(secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject){\n // if we found that we have this object in connection database already\n arrayNumber = y\n } \n }\n }\n }\n return arrayNumber\n}\n\nfunction setActiveStyleSetting(arrowStylingField){\n let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)\n let styles = getLayerStyles(null)\n\n if(docSettings){\n // We have info about the settings in the current document\n \n if(docSettings != \"Default Style\") {\n // if user specified own option\n arrowStylingField.addItemWithTitle(docSettings)\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n if(styles[i].name() != docSettings){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n\n } else {\n // Need to show the default first\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n } else {\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n}\n\nfunction setActiveTypeSetting(arrowTypeField){\n let docTypeSettings = Settings.settingForKey(\"arrowType\") \n\n\n if(docTypeSettings){\n // We have info about the settings in the current document\n \n if(docTypeSettings == \"Angled\"){\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(0)\n } \n\n if(docTypeSettings == \"Curved\"){\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(0)\n } \n\n if(docTypeSettings == \"Straight\"){\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(0)\n } \n } else {\n // Show default\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.addItemWithTitle(\"Straight\")\n }\n\n}\n\nfunction deleteConnectionFromData(connectionIndex){ // Refactored\n let newConnections = []\n if(pluginData){\n // If we have database\n let connections = pluginData\n\n for (let i = 0; i < connections.length; i ++) {\n // Updating all connections without deleted one\n if(i != connectionIndex){\n newConnections.push(connections[i])\n }\n }\n }\n return newConnections\n}\n\nfunction deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID)\n let selectedGroup\n if(lineObject){\n selectedGroup = lineObject.parent\n lineObject.remove()\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove()\n }\n }\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID)\n let childObject = document.getLayerWithID(childObjectID)\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\")\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID)\n let childObject = document.getLayerWithID(childObjectID)\n let sourceMidY, childMidY, sourceMidX, childMidX, diff\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2\n childMidY = childObject.frame.y + childObject.frame.height/2\n diff = sourceMidY - childMidY\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n }\n \n return sourceObjectID\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n\n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i])}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i])}\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, isCondition){\n let selection = context.selection\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n \n if(connectionIndex == null){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition)\n sketch.UI.message(\"New connection is created 🚀\")\n } else {\n // Need to remake the arrow condition\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\nfunction addCondition(keyword, x, y){ // Refactored\n let libraries = sketch.getLibraries()\n let libraryObject, symbolReferences, symbol\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n libraryObject = symbolReferences[i]\n }\n }\n }\n\n if(libraryObject == null){\n symbol = null\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n } else {\n let symbolMaster = libraryObject.import()\n symbol = symbolMaster.createNewInstance()\n addToConditionGroup(symbol, x, y)\n symbol = symbol.id\n }\n\n return symbol\n}\n\nfunction updateCondition(conditionID, x, y){ // Refactored\n let condition = document.getLayerWithID(conditionID)\n let conGroup = checkForGroup(\"Conditions\") \n let arGroup = checkForGroup(\"Arrows\") \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0\n\n log(condition.x())\n\n if(conGroup){\n condition.frame.x = x - condition.frame().width() / 2 - (conGroup.frame().x() - arGroupX) \n condition.frame.y = y - condition.frame().height() / 2 - (conGroup.frame().y() - arGroupY) \n conGroup.fixGeometryWithOptions(1)\n } else {\n condition.frame.x = x - condition.frame().width() / 2 \n condition.frame.y = y - condition.frame().height() / 2\n }\n\n log(condition.id)\n\n return condition.id\n}\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n let currentGroup = checkForGroup(\"Arrows\") \n let diffX, diffY\n\n if(currentGroup){\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n let connectionPos = {\n firstLayerPosX: null, \n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n return connectionPos\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n line.setName(\"Straight Arrow\")\n\n return line\n}\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n line.setName(\"Angled Arrow\")\n\n return line\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n let line\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n log(currentConnectionsData)\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n \n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let conditionObject = document.getLayerWithID(conditionID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n if(conditionID){\n if(conditionObject){conditionObject.remove()}\n }\n \n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition)\n // log(arrow.conditionID)\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n\n log(connection)\n\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n log(newConnectionsData)\n}\n\nfunction checkForGroup(groupName) { // refactored\n let currentGroup = null\n\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i]\n } \n }\n\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\"\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\"\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\"\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\"\n }\n }\n\n return direction\n}\n\nfunction drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition){ // Refactored\n // Process of creating new connection \n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection)\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n\n // Condition\n if(condition != false){\n if(conditionID != \"\"){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY)\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY)\n }\n } else {\n connection.conditionID = null\n }\n // connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style)\n\n // Add to group\n addToArrowsGroup(connection.line)\n \n return connection\n}\n\nfunction addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\")\n if(currentGroup){\n currentGroup.addLayers([line])\n currentGroup.fixGeometryWithOptions(1)\n } else {\n let Group = require('sketch/dom').Group\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n })\n group.moveToBack()\n group.adjustToFit()\n }\n}\n\nfunction addToConditionGroup(condition, x, y){ // Refactored\n let conGroup = checkForGroup(\"Conditions\") \n let arGroup = checkForGroup(\"Arrows\") \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0\n\n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX) \n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY) \n condition.parent = conGroup\n conGroup.fixGeometryWithOptions(1)\n } else {\n condition.frame.x = x - condition.frame.width / 2 \n condition.frame.y = y - condition.frame.height / 2\n let Group = require('sketch/dom').Group\n let group = new Group({\n parent: currentParentGroup,\n name: 'Conditions',\n layers: [condition]\n })\n group.moveToBack()\n group.adjustToFit()\n }\n return condition.id\n}\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = []\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i])\n }\n } \n return dataArray\n}\n\nfunction findConnectionData(firstObjectID, secondObjectID, data){\n let arrayNumber = null\n firstObjectID = String(firstObjectID)\n secondObjectID = String(secondObjectID)\n\n if(pluginData){\n // If we have database, need to check for connections\n\n for(let y = 0; y < data.length; y++){\n\n if(firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject){\n // if we found that we have this object in connection database already\n if(secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject){\n // if we found that we have this object in connection database already\n arrayNumber = y\n } \n }\n }\n }\n return arrayNumber\n}\n\nfunction setActiveStyleSetting(arrowStylingField){\n let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)\n let styles = getLayerStyles(null)\n\n if(docSettings){\n // We have info about the settings in the current document\n \n if(docSettings != \"Default Style\") {\n // if user specified own option\n arrowStylingField.addItemWithTitle(docSettings)\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n if(styles[i].name() != docSettings){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n\n } else {\n // Need to show the default first\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n } else {\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n}\n\nfunction setActiveTypeSetting(arrowTypeField){\n let docTypeSettings = Settings.settingForKey(\"arrowType\") \n\n\n if(docTypeSettings){\n // We have info about the settings in the current document\n \n if(docTypeSettings == \"Angled\"){\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(0)\n } \n\n if(docTypeSettings == \"Curved\"){\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(0)\n } \n\n if(docTypeSettings == \"Straight\"){\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(0)\n } \n } else {\n // Show default\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.addItemWithTitle(\"Straight\")\n }\n\n}\n\nfunction deleteConnectionFromData(connectionIndex){ // Refactored\n let newConnections = []\n if(pluginData){\n // If we have database\n let connections = pluginData\n\n for (let i = 0; i < connections.length; i ++) {\n // Updating all connections without deleted one\n if(i != connectionIndex){\n newConnections.push(connections[i])\n }\n }\n }\n return newConnections\n}\n\nfunction deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID)\n let selectedGroup\n if(lineObject){\n selectedGroup = lineObject.parent\n lineObject.remove()\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove()\n }\n }\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID)\n let childObject = document.getLayerWithID(childObjectID)\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\")\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID)\n let childObject = document.getLayerWithID(childObjectID)\n let sourceMidY, childMidY, sourceMidX, childMidX, diff\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2\n childMidY = childObject.frame.y + childObject.frame.height/2\n diff = sourceMidY - childMidY\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n }\n \n return sourceObjectID\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n\n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i])}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i])}\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, isCondition){\n let selection = context.selection\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n \n if(connectionIndex == null){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition)\n sketch.UI.message(\"New connection is created 🚀\")\n } else {\n // Need to remake the arrow condition\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\nfunction addCondition(keyword, x, y){ // Refactored\n let libraries = sketch.getLibraries()\n let libraryObject, symbolReferences, symbol\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n libraryObject = symbolReferences[i]\n }\n }\n }\n\n if(libraryObject == null){\n symbol = null\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n } else {\n let symbolMaster = libraryObject.import()\n symbol = symbolMaster.createNewInstance()\n symbol = addToConditionGroup(symbol, x, y)\n }\n\n return symbol\n}\n\nfunction updateCondition(conditionID, x, y){ // Refactored\n let condition = document.getLayerWithID(conditionID)\n let conGroup = checkForGroup(\"Conditions\") \n let arGroup = checkForGroup(\"Arrows\") \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0\n\n log(condition)\n\n if(conGroup){\n condition.frame.x = x - condition.frame().width() / 2 - (conGroup.frame().x() - arGroupX) \n condition.frame.y = y - condition.frame().height() / 2 - (conGroup.frame().y() - arGroupY) \n conGroup.fixGeometryWithOptions(1)\n } else {\n condition.frame.x = x - condition.frame().width() / 2 \n condition.frame.y = y - condition.frame().height() / 2\n }\n\n log(condition.id)\n\n return condition.id\n}\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n let currentGroup = checkForGroup(\"Arrows\") \n let diffX, diffY\n\n if(currentGroup){\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n let connectionPos = {\n firstLayerPosX: null, \n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n return connectionPos\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n line.setName(\"Straight Arrow\")\n\n return line\n}\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n line.setName(\"Angled Arrow\")\n\n return line\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n let line\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX" + "author": "Farid Sabitov ", + "dependencies": { + "sketch-module-google-analytics": "^0.2.1" + } } diff --git a/src/script.js b/src/script.js index 8364548..a7c539f 100644 --- a/src/script.js +++ b/src/script.js @@ -502,7 +502,7 @@ function drawConnection(firstObjectID, secondObjectID, style, type, localDirecti // Condition if(condition != false){ - if(conditionID){ + if(conditionID != ""){ connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY) } else { connection.conditionID = addCondition("#con", connectionPos.middlePosX, connectionPos.middlePosY) @@ -536,7 +536,6 @@ function addToArrowsGroup(line){ }) group.moveToBack() group.adjustToFit() - } } @@ -563,6 +562,7 @@ function addToConditionGroup(condition, x, y){ // Refactored group.moveToBack() group.adjustToFit() } + return condition.id } function getConnectionsData(){ //Refactored @@ -910,8 +910,7 @@ function addCondition(keyword, x, y){ // Refactored } else { let symbolMaster = libraryObject.import() symbol = symbolMaster.createNewInstance() - addToConditionGroup(symbol, x, y) - symbol = symbol.id + symbol = addToConditionGroup(symbol, x, y) } return symbol @@ -924,7 +923,7 @@ function updateCondition(conditionID, x, y){ // Refactored let arGroupX = arGroup != null ? arGroup.frame().x() : 0 let arGroupY = arGroup != null ? arGroup.frame().y() : 0 - log(condition.x()) + log(condition) if(conGroup){ condition.frame.x = x - condition.frame().width() / 2 - (conGroup.frame().x() - arGroupX) @@ -1252,6 +1251,13 @@ function styleLine(line, style){ // Refactored return localStyle } +// const track = require("sketch-module-google-analytics") +// track("UA-138226597-1", "event", { +// ec: "command", +// ea: "start", +// ev: "my-command" +// }); + From 527de1b3f294ef8311d5bdc1aebf0580e2f6845d Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Mon, 15 Apr 2019 09:20:24 +0300 Subject: [PATCH 20/44] fixes --- arrows.sketchplugin/Contents/Sketch/script.js | 24 +- .../Contents/Sketch/script.js.map | 2 +- package-lock.json | 5715 +++++++++++++++++ src/script.js | 23 +- 4 files changed, 5731 insertions(+), 33 deletions(-) diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index 94fdf44..8eb7d33 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -185,7 +185,6 @@ function updateSelectedArrows(context) { var connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData); if (connectionIndex != null) { - log(currentConnectionsData); updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex); sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Current connection is updated 🤘"); } else { @@ -313,7 +312,7 @@ function deleteArtboardArrows(context) { } function deleteSelectedArrows(context) { var selection = context.selection; - var firstObject, secondObject; // Need to delete all the arrows only from selected artboard + var firstObject, secondObject; if (selection.count() == 2) { for (var g = 0; g < selection.count(); g++) { @@ -491,7 +490,7 @@ function updateArrow(firstObjectID, secondObjectID, style, type, direction, line deleteLine(lineID); - if (conditionID) { + if (conditionID && !isCondition) { if (conditionObject) { conditionObject.remove(); } @@ -512,8 +511,7 @@ function createArrow(firstObjectID, secondObjectID, style, type, direction, cond updateSpacing(firstObjectID, secondObjectID, localDirection); autoAlignLayer(firstObjectID, secondObjectID, localDirection); // Making an Arrow - var arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition); // log(arrow.conditionID) - // Storage for current connection + var arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition); // Storage for current connection var connection = { firstObject: firstObjectID, @@ -523,12 +521,10 @@ function createArrow(firstObjectID, secondObjectID, style, type, direction, cond isCondition: isCondition, type: arrow.type, direction: localDirection, - line: arrow.line.objectID() - }; - log(connection); // Need to save this data to the global array + line: arrow.line.objectID() // Need to save this data to the global array + }; newConnectionsData.push(connection); - log(newConnectionsData); } function checkForGroup(groupName) { @@ -1054,18 +1050,16 @@ function updateCondition(conditionID, x, y) { var arGroup = checkForGroup("Arrows"); var arGroupX = arGroup != null ? arGroup.frame().x() : 0; var arGroupY = arGroup != null ? arGroup.frame().y() : 0; - log(condition); if (conGroup) { - condition.frame.x = x - condition.frame().width() / 2 - (conGroup.frame().x() - arGroupX); - condition.frame.y = y - condition.frame().height() / 2 - (conGroup.frame().y() - arGroupY); + condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX); + condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY); conGroup.fixGeometryWithOptions(1); } else { - condition.frame.x = x - condition.frame().width() / 2; - condition.frame.y = y - condition.frame().height() / 2; + condition.frame.x = x - condition.frame.width / 2; + condition.frame.y = y - condition.frame.height / 2; } - log(condition.id); return condition.id; } diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index cd00d5a..3703748 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","pluginKey","document","sketch","fromNative","context","docData","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","currentParentGroup","currentPage","currentArtboard","newConnectionsData","getConnectionsData","Settings","createAutoArrow","start","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","updateSelectedArrows","selection","count","class","currentConnectionsData","g","objectID","connectionIndex","findConnectionData","log","updateArrow","firstObject","secondObject","style","type","direction","line","condition","isCondition","message","setValue_forKey_onLayer_forPluginIdentifier","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","length","updateArrowsCounter","i","getLayerWithID","sketchObject","parentArtboard","push","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","settingForKey","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","views","subviews","title","setSettingForKey","intValue","state","onLayersMoved","action","actionContext","panel","ControlBar","NSPanel","setStyleMask","NSTitledWindowMask","NSFullSizeContentViewWindowMask","setTitleVisibility","NSWindowTitleHidden","setTitlebarAppearsTransparent","setFrame_display","setMovableByWindowBackground","setHasShadow","setLevel","NSFloatingWindowLevel","center","makeKeyAndOrderFront","nil","firstObjectID","secondObjectID","lineID","conditionID","conditionObject","remove","createArrow","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","checkForGroup","groupName","currentGroup","layers","name","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","addLayers","fixGeometryWithOptions","Group","group","parent","locked","moveToBack","adjustToFit","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","id","dataArray","data","arrayNumber","docSettings","styles","getLayerStyles","addItemWithTitle","docTypeSettings","lastItem","setState","newConnections","lineObject","selectedGroup","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","defineSourceObject","getSourceObjectFromSelection","setMessageText","addButtonWithTitle","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","allStyles","allLayerStyles","keyword","includes","libraries","getLibraries","libraryObject","symbolReferences","symbol","getImportableSymbolReferencesForDocument","symbolMaster","import","createNewInstance","firstObjectAbsPos","changeBasis","from","to","secondObjectAbsPos","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","setName","points","cornerRadius","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","localStyle","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch'\n// const { toArray } = require('util')\n\n//\n// Variables\n//\n\nlet UI = require('sketch/ui') \n// var SharedStyle = require('sketch/dom').SharedStyle\n\nconst pluginKey = \"flowArrows\"\nconst document = sketch.fromNative(context.document)\nlet docData = context.document.documentData()\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey)\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards\nlet newConnectionsData = getConnectionsData()\n\n// Settings\nvar Settings = require('sketch/settings')\n\n \n//\n// Create Connection Function\n//\n\nexport default function(context) {}\nexport function createAutoArrow(context){start(context, \"Auto\", false)}\nexport function createRightArrow(context){start(context, \"Right\", false)}\nexport function createDownArrow(context){start(context, \"Down\", false)}\nexport function createLeftArrow(context){start(context, \"Left\", false)}\nexport function createUpArrow(context){start(context, \"Up\", false)}\n\nexport function createRightArrowWithCondition(context){start(context, \"Right\", true)}\nexport function createDownArrowWithCondition(context){start(context, \"Down\", true)}\nexport function createLeftArrowWithCondition(context){start(context, \"Left\", true)}\nexport function createUpArrowWithCondition(context){start(context, \"Up\", true)}\n\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n let selection = context.selection\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n log(currentConnectionsData)\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n \n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n let connections = getConnectionsData()\n \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let conditionObject = document.getLayerWithID(conditionID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n if(conditionID){\n if(conditionObject){conditionObject.remove()}\n }\n \n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition)\n // log(arrow.conditionID)\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n\n log(connection)\n\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n log(newConnectionsData)\n}\n\nfunction checkForGroup(groupName) { // refactored\n let currentGroup = null\n\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i]\n } \n }\n\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\"\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\"\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\"\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\"\n }\n }\n\n return direction\n}\n\nfunction drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition){ // Refactored\n // Process of creating new connection \n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection)\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n\n // Condition\n if(condition != false){\n if(conditionID != \"\"){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY)\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY)\n }\n } else {\n connection.conditionID = null\n }\n // connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style)\n\n // Add to group\n addToArrowsGroup(connection.line)\n \n return connection\n}\n\nfunction addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\")\n if(currentGroup){\n currentGroup.addLayers([line])\n currentGroup.fixGeometryWithOptions(1)\n } else {\n let Group = require('sketch/dom').Group\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n })\n group.moveToBack()\n group.adjustToFit()\n }\n}\n\nfunction addToConditionGroup(condition, x, y){ // Refactored\n let conGroup = checkForGroup(\"Conditions\") \n let arGroup = checkForGroup(\"Arrows\") \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0\n\n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX) \n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY) \n condition.parent = conGroup\n conGroup.fixGeometryWithOptions(1)\n } else {\n condition.frame.x = x - condition.frame.width / 2 \n condition.frame.y = y - condition.frame.height / 2\n let Group = require('sketch/dom').Group\n let group = new Group({\n parent: currentParentGroup,\n name: 'Conditions',\n layers: [condition]\n })\n group.moveToBack()\n group.adjustToFit()\n }\n return condition.id\n}\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = []\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i])\n }\n } \n return dataArray\n}\n\nfunction findConnectionData(firstObjectID, secondObjectID, data){\n let arrayNumber = null\n firstObjectID = String(firstObjectID)\n secondObjectID = String(secondObjectID)\n\n if(pluginData){\n // If we have database, need to check for connections\n\n for(let y = 0; y < data.length; y++){\n\n if(firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject){\n // if we found that we have this object in connection database already\n if(secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject){\n // if we found that we have this object in connection database already\n arrayNumber = y\n } \n }\n }\n }\n return arrayNumber\n}\n\nfunction setActiveStyleSetting(arrowStylingField){\n let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)\n let styles = getLayerStyles(null)\n\n if(docSettings){\n // We have info about the settings in the current document\n \n if(docSettings != \"Default Style\") {\n // if user specified own option\n arrowStylingField.addItemWithTitle(docSettings)\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n if(styles[i].name() != docSettings){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n\n } else {\n // Need to show the default first\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n } else {\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n}\n\nfunction setActiveTypeSetting(arrowTypeField){\n let docTypeSettings = Settings.settingForKey(\"arrowType\") \n\n\n if(docTypeSettings){\n // We have info about the settings in the current document\n \n if(docTypeSettings == \"Angled\"){\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(0)\n } \n\n if(docTypeSettings == \"Curved\"){\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(0)\n } \n\n if(docTypeSettings == \"Straight\"){\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(0)\n } \n } else {\n // Show default\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.addItemWithTitle(\"Straight\")\n }\n\n}\n\nfunction deleteConnectionFromData(connectionIndex){ // Refactored\n let newConnections = []\n if(pluginData){\n // If we have database\n let connections = pluginData\n\n for (let i = 0; i < connections.length; i ++) {\n // Updating all connections without deleted one\n if(i != connectionIndex){\n newConnections.push(connections[i])\n }\n }\n }\n return newConnections\n}\n\nfunction deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID)\n let selectedGroup\n if(lineObject){\n selectedGroup = lineObject.parent\n lineObject.remove()\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove()\n }\n }\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID)\n let childObject = document.getLayerWithID(childObjectID)\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\")\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID)\n let childObject = document.getLayerWithID(childObjectID)\n let sourceMidY, childMidY, sourceMidX, childMidX, diff\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2\n childMidY = childObject.frame.y + childObject.frame.height/2\n diff = sourceMidY - childMidY\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n }\n \n return sourceObjectID\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n\n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i])}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i])}\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, isCondition){\n let selection = context.selection\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n \n if(connectionIndex == null){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition)\n sketch.UI.message(\"New connection is created 🚀\")\n } else {\n // Need to remake the arrow condition\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\nfunction addCondition(keyword, x, y){ // Refactored\n let libraries = sketch.getLibraries()\n let libraryObject, symbolReferences, symbol\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n libraryObject = symbolReferences[i]\n }\n }\n }\n\n if(libraryObject == null){\n symbol = null\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n } else {\n let symbolMaster = libraryObject.import()\n symbol = symbolMaster.createNewInstance()\n symbol = addToConditionGroup(symbol, x, y)\n }\n\n return symbol\n}\n\nfunction updateCondition(conditionID, x, y){ // Refactored\n let condition = document.getLayerWithID(conditionID)\n let conGroup = checkForGroup(\"Conditions\") \n let arGroup = checkForGroup(\"Arrows\") \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0\n\n log(condition)\n\n if(conGroup){\n condition.frame.x = x - condition.frame().width() / 2 - (conGroup.frame().x() - arGroupX) \n condition.frame.y = y - condition.frame().height() / 2 - (conGroup.frame().y() - arGroupY) \n conGroup.fixGeometryWithOptions(1)\n } else {\n condition.frame.x = x - condition.frame().width() / 2 \n condition.frame.y = y - condition.frame().height() / 2\n }\n\n log(condition.id)\n\n return condition.id\n}\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n let currentGroup = checkForGroup(\"Arrows\") \n let diffX, diffY\n\n if(currentGroup){\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n let connectionPos = {\n firstLayerPosX: null, \n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n return connectionPos\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n line.setName(\"Straight Arrow\")\n\n return line\n}\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n line.setName(\"Angled Arrow\")\n\n return line\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n let line\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n \n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n \n let connections = getConnectionsData() \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let conditionObject = document.getLayerWithID(conditionID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n if(conditionID && !isCondition){\n if(conditionObject){conditionObject.remove()}\n }\n \n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition)\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForGroup(groupName) { // refactored\n let currentGroup = null\n\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i]\n } \n }\n\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\"\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\"\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\"\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\"\n }\n }\n\n return direction\n}\n\nfunction drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition){ // Refactored\n // Process of creating new connection \n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection)\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n\n // Condition\n if(condition != false){\n if(conditionID != \"\"){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY)\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY)\n }\n } else {\n connection.conditionID = null\n }\n // connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style)\n\n // Add to group\n addToArrowsGroup(connection.line)\n \n return connection\n}\n\nfunction addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\")\n if(currentGroup){\n currentGroup.addLayers([line])\n currentGroup.fixGeometryWithOptions(1)\n } else {\n let Group = require('sketch/dom').Group\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n })\n group.moveToBack()\n group.adjustToFit()\n }\n}\n\nfunction addToConditionGroup(condition, x, y){ // Refactored\n let conGroup = checkForGroup(\"Conditions\") \n let arGroup = checkForGroup(\"Arrows\") \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0\n\n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX) \n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY) \n condition.parent = conGroup\n conGroup.fixGeometryWithOptions(1)\n } else {\n condition.frame.x = x - condition.frame.width / 2 \n condition.frame.y = y - condition.frame.height / 2\n let Group = require('sketch/dom').Group\n let group = new Group({\n parent: currentParentGroup,\n name: 'Conditions',\n layers: [condition]\n })\n group.moveToBack()\n group.adjustToFit()\n }\n return condition.id\n}\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = []\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i])\n }\n } \n return dataArray\n}\n\nfunction findConnectionData(firstObjectID, secondObjectID, data){\n let arrayNumber = null\n firstObjectID = String(firstObjectID)\n secondObjectID = String(secondObjectID)\n\n if(pluginData){\n // If we have database, need to check for connections\n\n for(let y = 0; y < data.length; y++){\n\n if(firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject){\n // if we found that we have this object in connection database already\n if(secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject){\n // if we found that we have this object in connection database already\n arrayNumber = y\n } \n }\n }\n }\n return arrayNumber\n}\n\nfunction setActiveStyleSetting(arrowStylingField){\n let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)\n let styles = getLayerStyles(null)\n\n if(docSettings){\n // We have info about the settings in the current document\n \n if(docSettings != \"Default Style\") {\n // if user specified own option\n arrowStylingField.addItemWithTitle(docSettings)\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n if(styles[i].name() != docSettings){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n\n } else {\n // Need to show the default first\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n } else {\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n}\n\nfunction setActiveTypeSetting(arrowTypeField){\n let docTypeSettings = Settings.settingForKey(\"arrowType\") \n\n\n if(docTypeSettings){\n // We have info about the settings in the current document\n \n if(docTypeSettings == \"Angled\"){\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(0)\n } \n\n if(docTypeSettings == \"Curved\"){\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(0)\n } \n\n if(docTypeSettings == \"Straight\"){\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(0)\n } \n } else {\n // Show default\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.addItemWithTitle(\"Straight\")\n }\n\n}\n\nfunction deleteConnectionFromData(connectionIndex){ // Refactored\n let newConnections = []\n if(pluginData){\n // If we have database\n let connections = pluginData\n\n for (let i = 0; i < connections.length; i ++) {\n // Updating all connections without deleted one\n if(i != connectionIndex){\n newConnections.push(connections[i])\n }\n }\n }\n return newConnections\n}\n\nfunction deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID)\n let selectedGroup\n if(lineObject){\n selectedGroup = lineObject.parent\n lineObject.remove()\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove()\n }\n }\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID)\n let childObject = document.getLayerWithID(childObjectID)\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\")\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID)\n let childObject = document.getLayerWithID(childObjectID)\n let sourceMidY, childMidY, sourceMidX, childMidX, diff\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2\n childMidY = childObject.frame.y + childObject.frame.height/2\n diff = sourceMidY - childMidY\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n }\n \n return sourceObjectID\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n\n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i])}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i])}\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, isCondition){\n let selection = context.selection\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n \n if(connectionIndex == null){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition)\n sketch.UI.message(\"New connection is created 🚀\")\n } else {\n // Need to remake the arrow condition\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\nfunction addCondition(keyword, x, y){ // Refactored\n let libraries = sketch.getLibraries()\n let libraryObject, symbolReferences, symbol\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n libraryObject = symbolReferences[i]\n }\n }\n }\n\n if(libraryObject == null){\n symbol = null\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n } else {\n let symbolMaster = libraryObject.import()\n symbol = symbolMaster.createNewInstance()\n symbol = addToConditionGroup(symbol, x, y)\n }\n\n return symbol\n}\n\nfunction updateCondition(conditionID, x, y){ // Refactored\n let condition = document.getLayerWithID(conditionID)\n let conGroup = checkForGroup(\"Conditions\") \n let arGroup = checkForGroup(\"Arrows\") \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0\n\n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX) \n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY) \n conGroup.fixGeometryWithOptions(1)\n } else {\n condition.frame.x = x - condition.frame.width / 2 \n condition.frame.y = y - condition.frame.height / 2\n }\n return condition.id\n}\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n let currentGroup = checkForGroup(\"Arrows\") \n let diffX, diffY\n\n if(currentGroup){\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n let connectionPos = {\n firstLayerPosX: null, \n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n return connectionPos\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n line.setName(\"Straight Arrow\")\n\n return line\n}\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n line.setName(\"Angled Arrow\")\n\n return line\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n let line\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true, + "optional": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.2.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.10.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + }, + "dependencies": { + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "dev": true + }, + "globals": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", + "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==", + "dev": true + }, + "globby": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", + "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "dir-glob": "2.0.0", + "fast-glob": "^2.0.2", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json5": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", + "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "dev": true + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "mamacro": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", + "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", + "dev": true + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "merge2": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz", + "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "mississippi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", + "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^2.0.1", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "nan": { + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", + "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "neo-async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", + "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node-libs-browser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.0.tgz", + "integrity": "sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.0", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "0.0.4" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "node-releases": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.14.tgz", + "integrity": "sha512-d58EpVZRhQE60kWiWUaaPlK9dyC4zg3ZoMcHcky2d4hDksyQj0rUozwInOl0C66mBsqo01Tuns8AvxnL5S7PKg==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "dev": true + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "pako": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", + "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", + "dev": true + }, + "parallel-transform": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "dev": true, + "requires": { + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "parse-asn1": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", + "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", + "dev": true, + "requires": { + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-author": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-author/-/parse-author-2.0.0.tgz", + "integrity": "sha1-00YL8d3Q367tQtp1QkLmX7aEqB8=", + "dev": true, + "requires": { + "author-regex": "^1.0.0" + } + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "pbkdf2": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "promise-polyfill": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.1.0.tgz", + "integrity": "sha512-OzSf6gcCUQ01byV4BgwyUCswlaQQ6gzXc23aLQWhicvfX9kfsUiUhgt3CCQej8jDnl8/PhGF31JdHX2/MzF3WA==", + "dev": true + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.0.2.tgz", + "integrity": "sha512-SbA/iNrBUf6Pv2zU8Ekv1Qbhv92yxL4hiDa2siuxs4KKn4oOoMDHXjAf7+Nz9qinUQ46B1LcWEi/PhJfPWpZWQ==", + "dev": true, + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-transform": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.4.tgz", + "integrity": "sha512-T0QMBjK3J0MtxjPmdIMXm72Wvj2Abb0Bd4HADdfijwMdoIsyQZ6fWC7kDFhk2YinBBEMZDL7Y7wh0J1sGx3S4A==", + "dev": true, + "requires": { + "private": "^0.1.6" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexp-tree": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.5.tgz", + "integrity": "sha512-nUmxvfJyAODw+0B13hj8CFVAxhe7fDEAgJgaotBu3nnR+IgGgZq59YedJP5VYTlkEfqjuK6TuRpnymKdatLZfQ==", + "dev": true + }, + "regexpu-core": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz", + "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==", + "dev": true, + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.0.2", + "regjsgen": "^0.5.0", + "regjsparser": "^0.6.0", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.1.0" + } + }, + "regjsgen": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", + "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==", + "dev": true + }, + "regjsparser": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", + "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "resolve": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", + "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + }, + "run-sketch-plugin": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-sketch-plugin/-/run-sketch-plugin-1.0.3.tgz", + "integrity": "sha1-LrYRLSsIcK37A/zoMQredtf9j1I=", + "dev": true, + "requires": { + "coscript": "^1.0.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "schema-utils": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", + "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" + } + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true + }, + "serialize-javascript": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz", + "integrity": "sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, "sketch-module-google-analytics": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/sketch-module-google-analytics/-/sketch-module-google-analytics-0.2.1.tgz", "integrity": "sha512-/zSu4gTBoUidSCsXgkhoAf11XKaYHcyOZwZzZCHhnBaH2vstFjzlWTooZ6SbcN3Qabmd++tAVoBNRUY4w8YnFg==" + }, + "sketch-polyfill-fetch": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/sketch-polyfill-fetch/-/sketch-polyfill-fetch-0.4.3.tgz", + "integrity": "sha512-P1+PNGr4Y7GsPX/JnX3iVn2YKmUwDSC8d56sIUmrdwGi9SOdQGBTUdHZVAGjWDYjqJ1XfJAH3UaHhg2dBvZ7kw==", + "dev": true, + "requires": { + "cocoascript-class": "^0.1.2" + } + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "dev": true, + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.12", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", + "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "ssri": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", + "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.1" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "terser": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", + "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", + "dev": true, + "requires": { + "commander": "^2.19.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.10" + }, + "dependencies": { + "commander": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.3.tgz", + "integrity": "sha512-GOK7q85oAb/5kE12fMuLdn2btOS9OBZn4VsecpHDywoUC/jLhSAKOiYo0ezx7ss2EXPMzyEWFoE0s1WLE+4+oA==", + "dev": true, + "requires": { + "cacache": "^11.0.2", + "find-cache-dir": "^2.0.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^1.4.0", + "source-map": "^0.6.1", + "terser": "^3.16.1", + "webpack-sources": "^1.1.0", + "worker-farm": "^1.5.2" + }, + "dependencies": { + "cacache": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz", + "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==", + "dev": true, + "requires": { + "bluebird": "^3.5.3", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.3", + "graceful-fs": "^4.1.15", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true + } + } + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "timers-browserify": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", + "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "dev": true + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "uglify-es": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", + "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", + "dev": true, + "requires": { + "commander": "~2.13.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "uglifyjs-webpack-plugin": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.3.0.tgz", + "integrity": "sha512-ovHIch0AMlxjD/97j9AYovZxG5wnHOPkL7T1GKochBADp/Zwc44pEWNqpKl1Loupp1WhFg7SlYmHZRUfdAacgw==", + "dev": true, + "requires": { + "cacache": "^10.0.4", + "find-cache-dir": "^1.0.0", + "schema-utils": "^0.4.5", + "serialize-javascript": "^1.4.0", + "source-map": "^0.6.1", + "uglify-es": "^3.3.4", + "webpack-sources": "^1.1.0", + "worker-farm": "^1.5.2" + }, + "dependencies": { + "find-cache-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", + "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", + "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", + "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==", + "dev": true + }, + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" + } + } + } + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz", + "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upath": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", + "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "dev": true, + "requires": { + "indexof": "0.0.1" + } + }, + "watchpack": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", + "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "dev": true, + "requires": { + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + } + }, + "webpack": { + "version": "4.30.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.30.0.tgz", + "integrity": "sha512-4hgvO2YbAFUhyTdlR4FNyt2+YaYBYHavyzjCMbZzgglo02rlKi/pcsEzwCuCpsn1ryzIl1cq/u8ArIKu8JBYMg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/wasm-edit": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "acorn": "^6.0.5", + "acorn-dynamic-import": "^4.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "chrome-trace-event": "^1.0.0", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.0", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "micromatch": "^3.1.8", + "mkdirp": "~0.5.0", + "neo-async": "^2.5.0", + "node-libs-browser": "^2.0.0", + "schema-utils": "^1.0.0", + "tapable": "^1.1.0", + "terser-webpack-plugin": "^1.1.0", + "watchpack": "^1.5.0", + "webpack-sources": "^1.3.0" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "webpack-merge": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.1.tgz", + "integrity": "sha512-4p8WQyS98bUJcCvFMbdGZyZmsKuWjWVnVHnAS3FFg0HDaRVrPbkivx2RYCre8UiemD67RsiFFLfn4JhLAin8Vw==", + "dev": true, + "requires": { + "lodash": "^4.17.5" + } + }, + "webpack-sources": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", + "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "worker-farm": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", + "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", + "dev": true, + "requires": { + "errno": "~0.1.7" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "yesno": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/yesno/-/yesno-0.0.1.tgz", + "integrity": "sha1-/7wE/z1vmdrST3RjE06bkq5BvvY=", + "dev": true } } } diff --git a/src/script.js b/src/script.js index a7c539f..2ee6345 100644 --- a/src/script.js +++ b/src/script.js @@ -52,7 +52,6 @@ export function updateSelectedArrows(context) { let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData) if(connectionIndex != null){ - log(currentConnectionsData) updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex) sketch.UI.message("Current connection is updated 🤘") } else { @@ -179,14 +178,13 @@ export function deleteSelectedArrows(context) { let selection = context.selection let firstObject, secondObject - // Need to delete all the arrows only from selected artboard if(selection.count() == 2){ for(let g = 0; g < selection.count(); g++) { if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection - let connections = getConnectionsData() + let connections = getConnectionsData() let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections) if(connectionIndex != null){ @@ -389,7 +387,7 @@ function updateArrow(firstObjectID, secondObjectID, style, type, direction, line // Need to delete data first, because we will have a new line deleteLine(lineID) - if(conditionID){ + if(conditionID && !isCondition){ if(conditionObject){conditionObject.remove()} } @@ -410,7 +408,6 @@ function createArrow(firstObjectID, secondObjectID, style, type, direction, cond // Making an Arrow let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition) - // log(arrow.conditionID) // Storage for current connection let connection = { @@ -424,11 +421,8 @@ function createArrow(firstObjectID, secondObjectID, style, type, direction, cond line : arrow.line.objectID() } - log(connection) - // Need to save this data to the global array newConnectionsData.push(connection) - log(newConnectionsData) } function checkForGroup(groupName) { // refactored @@ -923,19 +917,14 @@ function updateCondition(conditionID, x, y){ // Refactored let arGroupX = arGroup != null ? arGroup.frame().x() : 0 let arGroupY = arGroup != null ? arGroup.frame().y() : 0 - log(condition) - if(conGroup){ - condition.frame.x = x - condition.frame().width() / 2 - (conGroup.frame().x() - arGroupX) - condition.frame.y = y - condition.frame().height() / 2 - (conGroup.frame().y() - arGroupY) + condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX) + condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY) conGroup.fixGeometryWithOptions(1) } else { - condition.frame.x = x - condition.frame().width() / 2 - condition.frame.y = y - condition.frame().height() / 2 + condition.frame.x = x - condition.frame.width / 2 + condition.frame.y = y - condition.frame.height / 2 } - - log(condition.id) - return condition.id } From 0b0a35ac61b604da8fa4aedd454b166ba5d3cddb Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Wed, 29 May 2019 00:21:54 +0300 Subject: [PATCH 21/44] added live redraw --- .../Contents/Sketch/manifest.json | 11 ++ arrows.sketchplugin/Contents/Sketch/script.js | 99 ++++++++++++----- .../Contents/Sketch/script.js.map | 2 +- src/manifest.json | 11 ++ src/script.js | 104 +++++++++++++----- 5 files changed, 173 insertions(+), 54 deletions(-) diff --git a/arrows.sketchplugin/Contents/Sketch/manifest.json b/arrows.sketchplugin/Contents/Sketch/manifest.json index 4184363..68a1ec0 100644 --- a/arrows.sketchplugin/Contents/Sketch/manifest.json +++ b/arrows.sketchplugin/Contents/Sketch/manifest.json @@ -102,6 +102,17 @@ "icon": "icon.png", "handler": "updateSelectedArrows" }, + { + "name": "Auto update arrows between selected", + "script": "script.js", + "handlers": { + "actions": { + "LayersMoved.finish": "autoUpdateSelectedArrows", + "LayersResized.finish": "autoUpdateSelectedArrows" + } + }, + "identifier": "autoUpdateSelectedArrows" + }, { "name": "Update arrows from the selected artboard", "description": "Update all the arrows from selected artboard", diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index 8eb7d33..dfb49d9 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -95,7 +95,7 @@ var exports = /*!***********************!*\ !*** ./src/script.js ***! \***********************/ -/*! exports provided: default, createAutoArrow, createRightArrow, createDownArrow, createLeftArrow, createUpArrow, createRightArrowWithCondition, createDownArrowWithCondition, createLeftArrowWithCondition, createUpArrowWithCondition, updateSelectedArrows, updateArtboardArrows, updateAllArrows, deleteAllArrows, deleteArtboardArrows, deleteSelectedArrows, settings, onLayersMoved, panel */ +/*! exports provided: createAutoArrow, createRightArrow, createDownArrow, createLeftArrow, createUpArrow, createRightArrowWithCondition, createDownArrowWithCondition, createLeftArrowWithCondition, createUpArrowWithCondition, updateSelectedArrows, autoUpdateSelectedArrows, updateArtboardArrows, updateAllArrows, deleteAllArrows, deleteArtboardArrows, deleteSelectedArrows, settings, onLayersMoved, panel */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -110,6 +110,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createLeftArrowWithCondition", function() { return createLeftArrowWithCondition; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createUpArrowWithCondition", function() { return createUpArrowWithCondition; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateSelectedArrows", function() { return updateSelectedArrows; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "autoUpdateSelectedArrows", function() { return autoUpdateSelectedArrows; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateArtboardArrows", function() { return updateArtboardArrows; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAllArrows", function() { return updateAllArrows; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteAllArrows", function() { return deleteAllArrows; }); @@ -120,28 +121,36 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "panel", function() { return panel; }); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); - // const { toArray } = require('util') -// + + +var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); // // Variables // -var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); // var SharedStyle = require('sketch/dom').SharedStyle - var pluginKey = "flowArrows"; -var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); -var docData = context.document.documentData(); -var pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); -var currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards +var document; +var docData, pluginData, currentParentGroup, newConnectionsData; + +if (context.document) { + document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); + docData = context.document.documentData(); + pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); + currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards + + newConnectionsData = getConnectionsData(); +} else { + document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.actionContext.document); +} // const action = context.actionContext +// docData = action.document.documentData() +// Settings -var newConnectionsData = getConnectionsData(); // Settings var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); // // Create Connection Function // -/* harmony default export */ __webpack_exports__["default"] = (function (context) {}); function createAutoArrow(context) { start(context, "Auto", false); } @@ -182,9 +191,9 @@ function updateSelectedArrows(context) { for (var g = 0; g < selection.count(); g++) { if (selection[g].objectID() != selection[0].objectID()) { // Then need to create or update connection arrow with each selection - var connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData); + var connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), currentConnectionsData); - if (connectionIndex != null) { + if (connectionIndex.length == 0) { updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex); sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Current connection is updated 🤘"); } else { @@ -199,6 +208,37 @@ function updateSelectedArrows(context) { sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Please select more than two layers. Artboards are coming soon 🥳"); } } +function autoUpdateSelectedArrows(context) { + var action = context.actionContext; + docData = action.document.documentData(); + pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); + currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards + + newConnectionsData = getConnectionsData(); + var movedLayers = Array.from(context.actionContext.layers).map(function (layer) { + return sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(layer); + }); + log(movedLayers[0].id); + log(movedLayers.length); // if (movedLayers.filter(layer => (layer.type == 'Artboard' || (layer.type == 'SymbolMaster' && config.arrangeSymbols))).length > 0) { + // ArrangeArtboards(context) + // } + + var currentConnectionsData = newConnectionsData; // Need to refactor + + for (var g = 0; g < movedLayers.length; g++) { + var connectionIndex = findConnectionIndex(movedLayers[0].id, null, currentConnectionsData); + log("yes " + connectionIndex); + + if (connectionIndex.length == 0) { + updateArrow(currentConnectionsData[connectionIndex[0]].firstObject, currentConnectionsData[connectionIndex[0]].secondObject, currentConnectionsData[connectionIndex[0]].style, currentConnectionsData[connectionIndex[0]].type, currentConnectionsData[connectionIndex[0]].direction, currentConnectionsData[connectionIndex[0]].line, currentConnectionsData[connectionIndex[0]].condition, currentConnectionsData[connectionIndex[0]].isCondition, connectionIndex[0]); + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Current connection is updated 🤘"); + } else { + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is no connection between selected layers on the plugin data"); + } + } + + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); +} function updateArtboardArrows(context) { // TODO: Need to show amount of updated arrows and deleted ones var selection = context.selection; @@ -319,7 +359,7 @@ function deleteSelectedArrows(context) { if (selection[g].objectID() != selection[0].objectID()) { // It will never check 3rd connection var connections = getConnectionsData(); - var connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections); + var connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), connections); if (connectionIndex != null) { // We have connections in database @@ -606,8 +646,8 @@ function drawConnection(firstObjectID, secondObjectID, style, type, localDirecti } // Condition - if (condition != false) { - if (conditionID != "") { + if (condition == true) { + if (conditionID != null) { connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY); } else { connection.conditionID = addCondition("#con", connectionPos.middlePosX, connectionPos.middlePosY); @@ -687,8 +727,8 @@ function getConnectionsData() { return dataArray; } -function findConnectionData(firstObjectID, secondObjectID, data) { - var arrayNumber = null; +function findConnectionIndex(firstObjectID, secondObjectID, data) { + var indexArray = []; firstObjectID = String(firstObjectID); secondObjectID = String(secondObjectID); @@ -696,16 +736,20 @@ function findConnectionData(firstObjectID, secondObjectID, data) { // If we have database, need to check for connections for (var y = 0; y < data.length; y++) { if (firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject) { - // if we found that we have this object in connection database already - if (secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject) { - // if we found that we have this object in connection database already - arrayNumber = y; + if (secondObjectID == null) { + // When we need to find connection between two objects + if (secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject) { + indexArray[0] = y; + } + } else { + // When we need to find a connection for one object only + indexArray.push(y); } } } } - return arrayNumber; + return indexArray; } function setActiveStyleSetting(arrowStylingField) { @@ -995,9 +1039,9 @@ function start(context, direction, isCondition) { for (var g = 0; g < selection.count(); g++) { if (selection[g].objectID() != sourceObjectID) { // Then need to create or update connection arrow with each selection - var connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData); + var connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), currentConnectionsData); - if (connectionIndex == null) { + if (connectionIndex.length == 0) { // There is no connection with this two objects in our database createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition); sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("New connection is created 🚀"); @@ -1045,7 +1089,8 @@ function addCondition(keyword, x, y) { function updateCondition(conditionID, x, y) { // Refactored - var condition = document.getLayerWithID(conditionID); + var condition = document.getLayerWithID(conditionID); // log (condition) + var conGroup = checkForGroup("Conditions"); var arGroup = checkForGroup("Arrows"); var arGroupX = arGroup != null ? arGroup.frame().x() : 0; @@ -1541,6 +1586,8 @@ that['createDownArrowWithCondition'] = __skpm_run.bind(this, 'createDownArrowWit that['createLeftArrowWithCondition'] = __skpm_run.bind(this, 'createLeftArrowWithCondition'); that['createUpArrowWithCondition'] = __skpm_run.bind(this, 'createUpArrowWithCondition'); that['updateSelectedArrows'] = __skpm_run.bind(this, 'updateSelectedArrows'); +that['autoUpdateSelectedArrows'] = __skpm_run.bind(this, 'autoUpdateSelectedArrows'); +that['autoUpdateSelectedArrows'] = __skpm_run.bind(this, 'autoUpdateSelectedArrows'); that['updateArtboardArrows'] = __skpm_run.bind(this, 'updateArtboardArrows'); that['updateAllArrows'] = __skpm_run.bind(this, 'updateAllArrows'); that['deleteSelectedArrows'] = __skpm_run.bind(this, 'deleteSelectedArrows'); diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index 3703748..730039c 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","pluginKey","document","sketch","fromNative","context","docData","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","currentParentGroup","currentPage","currentArtboard","newConnectionsData","getConnectionsData","Settings","createAutoArrow","start","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","updateSelectedArrows","selection","count","class","currentConnectionsData","g","objectID","connectionIndex","findConnectionData","updateArrow","firstObject","secondObject","style","type","direction","line","condition","isCondition","message","setValue_forKey_onLayer_forPluginIdentifier","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","length","updateArrowsCounter","i","getLayerWithID","sketchObject","parentArtboard","push","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","settingForKey","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","views","subviews","title","setSettingForKey","intValue","state","onLayersMoved","action","actionContext","panel","ControlBar","NSPanel","setStyleMask","NSTitledWindowMask","NSFullSizeContentViewWindowMask","setTitleVisibility","NSWindowTitleHidden","setTitlebarAppearsTransparent","setFrame_display","setMovableByWindowBackground","setHasShadow","setLevel","NSFloatingWindowLevel","center","makeKeyAndOrderFront","nil","firstObjectID","secondObjectID","lineID","conditionID","conditionObject","remove","createArrow","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","checkForGroup","groupName","currentGroup","layers","name","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","addLayers","fixGeometryWithOptions","Group","group","parent","locked","moveToBack","adjustToFit","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","id","dataArray","data","arrayNumber","docSettings","styles","getLayerStyles","addItemWithTitle","docTypeSettings","lastItem","setState","newConnections","lineObject","selectedGroup","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","defineSourceObject","getSourceObjectFromSelection","setMessageText","addButtonWithTitle","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","allStyles","allLayerStyles","keyword","includes","libraries","getLibraries","libraryObject","symbolReferences","symbol","getImportableSymbolReferencesForDocument","symbolMaster","import","createNewInstance","firstObjectAbsPos","changeBasis","from","to","secondObjectAbsPos","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","setName","points","cornerRadius","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","localStyle","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch'\n// const { toArray } = require('util')\n\n//\n// Variables\n//\n\nlet UI = require('sketch/ui') \n// var SharedStyle = require('sketch/dom').SharedStyle\n\nconst pluginKey = \"flowArrows\"\nconst document = sketch.fromNative(context.document)\nlet docData = context.document.documentData()\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey)\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards\nlet newConnectionsData = getConnectionsData()\n\n// Settings\nvar Settings = require('sketch/settings')\n\n \n//\n// Create Connection Function\n//\n\nexport default function(context) {}\nexport function createAutoArrow(context){start(context, \"Auto\", false)}\nexport function createRightArrow(context){start(context, \"Right\", false)}\nexport function createDownArrow(context){start(context, \"Down\", false)}\nexport function createLeftArrow(context){start(context, \"Left\", false)}\nexport function createUpArrow(context){start(context, \"Up\", false)}\n\nexport function createRightArrowWithCondition(context){start(context, \"Right\", true)}\nexport function createDownArrowWithCondition(context){start(context, \"Down\", true)}\nexport function createLeftArrowWithCondition(context){start(context, \"Left\", true)}\nexport function createUpArrowWithCondition(context){start(context, \"Up\", true)}\n\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n let selection = context.selection\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex != null){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n \n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n \n let connections = getConnectionsData() \n let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let conditionObject = document.getLayerWithID(conditionID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n if(conditionID && !isCondition){\n if(conditionObject){conditionObject.remove()}\n }\n \n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition)\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForGroup(groupName) { // refactored\n let currentGroup = null\n\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i]\n } \n }\n\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\"\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\"\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\"\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\"\n }\n }\n\n return direction\n}\n\nfunction drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition){ // Refactored\n // Process of creating new connection \n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection)\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n\n // Condition\n if(condition != false){\n if(conditionID != \"\"){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY)\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY)\n }\n } else {\n connection.conditionID = null\n }\n // connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style)\n\n // Add to group\n addToArrowsGroup(connection.line)\n \n return connection\n}\n\nfunction addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\")\n if(currentGroup){\n currentGroup.addLayers([line])\n currentGroup.fixGeometryWithOptions(1)\n } else {\n let Group = require('sketch/dom').Group\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n })\n group.moveToBack()\n group.adjustToFit()\n }\n}\n\nfunction addToConditionGroup(condition, x, y){ // Refactored\n let conGroup = checkForGroup(\"Conditions\") \n let arGroup = checkForGroup(\"Arrows\") \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0\n\n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX) \n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY) \n condition.parent = conGroup\n conGroup.fixGeometryWithOptions(1)\n } else {\n condition.frame.x = x - condition.frame.width / 2 \n condition.frame.y = y - condition.frame.height / 2\n let Group = require('sketch/dom').Group\n let group = new Group({\n parent: currentParentGroup,\n name: 'Conditions',\n layers: [condition]\n })\n group.moveToBack()\n group.adjustToFit()\n }\n return condition.id\n}\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = []\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i])\n }\n } \n return dataArray\n}\n\nfunction findConnectionData(firstObjectID, secondObjectID, data){\n let arrayNumber = null\n firstObjectID = String(firstObjectID)\n secondObjectID = String(secondObjectID)\n\n if(pluginData){\n // If we have database, need to check for connections\n\n for(let y = 0; y < data.length; y++){\n\n if(firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject){\n // if we found that we have this object in connection database already\n if(secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject){\n // if we found that we have this object in connection database already\n arrayNumber = y\n } \n }\n }\n }\n return arrayNumber\n}\n\nfunction setActiveStyleSetting(arrowStylingField){\n let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)\n let styles = getLayerStyles(null)\n\n if(docSettings){\n // We have info about the settings in the current document\n \n if(docSettings != \"Default Style\") {\n // if user specified own option\n arrowStylingField.addItemWithTitle(docSettings)\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n if(styles[i].name() != docSettings){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n\n } else {\n // Need to show the default first\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n } else {\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n}\n\nfunction setActiveTypeSetting(arrowTypeField){\n let docTypeSettings = Settings.settingForKey(\"arrowType\") \n\n\n if(docTypeSettings){\n // We have info about the settings in the current document\n \n if(docTypeSettings == \"Angled\"){\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(0)\n } \n\n if(docTypeSettings == \"Curved\"){\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(0)\n } \n\n if(docTypeSettings == \"Straight\"){\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(0)\n } \n } else {\n // Show default\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.addItemWithTitle(\"Straight\")\n }\n\n}\n\nfunction deleteConnectionFromData(connectionIndex){ // Refactored\n let newConnections = []\n if(pluginData){\n // If we have database\n let connections = pluginData\n\n for (let i = 0; i < connections.length; i ++) {\n // Updating all connections without deleted one\n if(i != connectionIndex){\n newConnections.push(connections[i])\n }\n }\n }\n return newConnections\n}\n\nfunction deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID)\n let selectedGroup\n if(lineObject){\n selectedGroup = lineObject.parent\n lineObject.remove()\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove()\n }\n }\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID)\n let childObject = document.getLayerWithID(childObjectID)\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\")\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID)\n let childObject = document.getLayerWithID(childObjectID)\n let sourceMidY, childMidY, sourceMidX, childMidX, diff\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2\n childMidY = childObject.frame.y + childObject.frame.height/2\n diff = sourceMidY - childMidY\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n }\n \n return sourceObjectID\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n\n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i])}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i])}\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, isCondition){\n let selection = context.selection\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n \n if(connectionIndex == null){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition)\n sketch.UI.message(\"New connection is created 🚀\")\n } else {\n // Need to remake the arrow condition\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\nfunction addCondition(keyword, x, y){ // Refactored\n let libraries = sketch.getLibraries()\n let libraryObject, symbolReferences, symbol\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n libraryObject = symbolReferences[i]\n }\n }\n }\n\n if(libraryObject == null){\n symbol = null\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n } else {\n let symbolMaster = libraryObject.import()\n symbol = symbolMaster.createNewInstance()\n symbol = addToConditionGroup(symbol, x, y)\n }\n\n return symbol\n}\n\nfunction updateCondition(conditionID, x, y){ // Refactored\n let condition = document.getLayerWithID(conditionID)\n let conGroup = checkForGroup(\"Conditions\") \n let arGroup = checkForGroup(\"Arrows\") \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0\n\n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX) \n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY) \n conGroup.fixGeometryWithOptions(1)\n } else {\n condition.frame.x = x - condition.frame.width / 2 \n condition.frame.y = y - condition.frame.height / 2\n }\n return condition.id\n}\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n let currentGroup = checkForGroup(\"Arrows\") \n let diffX, diffY\n\n if(currentGroup){\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n let connectionPos = {\n firstLayerPosX: null, \n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n return connectionPos\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n line.setName(\"Straight Arrow\")\n\n return line\n}\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n line.setName(\"Angled Arrow\")\n\n return line\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n let line\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex.length == 0){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n \n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\nexport function autoUpdateSelectedArrows(context) { \n const action = context.actionContext\n\n docData = action.document.documentData()\n pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey)\n currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards\n newConnectionsData = getConnectionsData()\n\n const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer))\n log(movedLayers[0].id)\n log(movedLayers.length)\n\n // if (movedLayers.filter(layer => (layer.type == 'Artboard' || (layer.type == 'SymbolMaster' && config.arrangeSymbols))).length > 0) {\n // ArrangeArtboards(context)\n // }\n\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < movedLayers.length; g++) {\n\n let connectionIndex = findConnectionIndex(movedLayers[0].id, null, currentConnectionsData)\n\n log(\"yes \"+connectionIndex)\n if(connectionIndex.length == 0){\n \n updateArrow(currentConnectionsData[connectionIndex[0]].firstObject, currentConnectionsData[connectionIndex[0]].secondObject, currentConnectionsData[connectionIndex[0]].style, currentConnectionsData[connectionIndex[0]].type, currentConnectionsData[connectionIndex[0]].direction, currentConnectionsData[connectionIndex[0]].line, currentConnectionsData[connectionIndex[0]].condition, currentConnectionsData[connectionIndex[0]].isCondition, connectionIndex[0])\n sketch.UI.message(\"Current connection is updated 🤘\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n \n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n}\n\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n \n let connections = getConnectionsData() \n let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let conditionObject = document.getLayerWithID(conditionID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n if(conditionID && !isCondition){\n if(conditionObject){conditionObject.remove()}\n }\n \n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition)\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForGroup(groupName) { // refactored\n let currentGroup = null\n\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i]\n } \n }\n\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\"\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\"\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\"\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\"\n }\n }\n\n return direction\n}\n\nfunction drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition){ // Refactored\n // Process of creating new connection \n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection)\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n\n // Condition\n if(condition == true){\n if(conditionID != null){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY)\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY)\n }\n } else {\n connection.conditionID = null\n }\n // connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style)\n\n // Add to group\n addToArrowsGroup(connection.line)\n \n return connection\n}\n\nfunction addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\")\n if(currentGroup){\n currentGroup.addLayers([line])\n currentGroup.fixGeometryWithOptions(1)\n } else {\n let Group = require('sketch/dom').Group\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n })\n group.moveToBack()\n group.adjustToFit()\n }\n}\n\nfunction addToConditionGroup(condition, x, y){ // Refactored\n let conGroup = checkForGroup(\"Conditions\") \n let arGroup = checkForGroup(\"Arrows\") \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0\n\n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX) \n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY) \n condition.parent = conGroup\n conGroup.fixGeometryWithOptions(1)\n } else {\n condition.frame.x = x - condition.frame.width / 2 \n condition.frame.y = y - condition.frame.height / 2\n let Group = require('sketch/dom').Group\n let group = new Group({\n parent: currentParentGroup,\n name: 'Conditions',\n layers: [condition]\n })\n group.moveToBack()\n group.adjustToFit()\n }\n return condition.id\n}\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = []\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i])\n }\n } \n return dataArray\n}\n\nfunction findConnectionIndex(firstObjectID, secondObjectID, data){\n let indexArray = [] \n firstObjectID = String(firstObjectID)\n secondObjectID = String(secondObjectID)\n \n if(pluginData){\n // If we have database, need to check for connections\n for(let y = 0; y < data.length; y++){\n if(firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject){\n if(secondObjectID == null){\n // When we need to find connection between two objects\n if(secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject){\n indexArray[0] = y\n } \n } else {\n // When we need to find a connection for one object only\n indexArray.push(y)\n }\n }\n }\n }\n return indexArray\n}\n\nfunction setActiveStyleSetting(arrowStylingField){\n let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)\n let styles = getLayerStyles(null)\n\n if(docSettings){\n // We have info about the settings in the current document\n \n if(docSettings != \"Default Style\") {\n // if user specified own option\n arrowStylingField.addItemWithTitle(docSettings)\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n if(styles[i].name() != docSettings){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n\n } else {\n // Need to show the default first\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n } else {\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n}\n\nfunction setActiveTypeSetting(arrowTypeField){\n let docTypeSettings = Settings.settingForKey(\"arrowType\") \n\n\n if(docTypeSettings){\n // We have info about the settings in the current document\n \n if(docTypeSettings == \"Angled\"){\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(0)\n } \n\n if(docTypeSettings == \"Curved\"){\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(0)\n } \n\n if(docTypeSettings == \"Straight\"){\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(0)\n } \n } else {\n // Show default\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.addItemWithTitle(\"Straight\")\n }\n\n}\n\nfunction deleteConnectionFromData(connectionIndex){ // Refactored\n let newConnections = []\n if(pluginData){\n // If we have database\n let connections = pluginData\n\n for (let i = 0; i < connections.length; i ++) {\n // Updating all connections without deleted one\n if(i != connectionIndex){\n newConnections.push(connections[i])\n }\n }\n }\n return newConnections\n}\n\nfunction deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID)\n let selectedGroup\n if(lineObject){\n selectedGroup = lineObject.parent\n lineObject.remove()\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove()\n }\n }\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID)\n let childObject = document.getLayerWithID(childObjectID)\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\")\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID)\n let childObject = document.getLayerWithID(childObjectID)\n let sourceMidY, childMidY, sourceMidX, childMidX, diff\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2\n childMidY = childObject.frame.y + childObject.frame.height/2\n diff = sourceMidY - childMidY\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n }\n \n return sourceObjectID\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n\n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i])}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i])}\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, isCondition){\n let selection = context.selection\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n \n if(connectionIndex.length == 0){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition)\n sketch.UI.message(\"New connection is created 🚀\")\n } else {\n // Need to remake the arrow condition\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\nfunction addCondition(keyword, x, y){ // Refactored\n let libraries = sketch.getLibraries()\n let libraryObject, symbolReferences, symbol\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n libraryObject = symbolReferences[i]\n }\n }\n }\n\n if(libraryObject == null){\n symbol = null\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n } else {\n let symbolMaster = libraryObject.import()\n symbol = symbolMaster.createNewInstance()\n symbol = addToConditionGroup(symbol, x, y)\n }\n\n return symbol\n}\n\nfunction updateCondition(conditionID, x, y){ // Refactored\n let condition = document.getLayerWithID(conditionID)\n // log (condition)\n let conGroup = checkForGroup(\"Conditions\") \n let arGroup = checkForGroup(\"Arrows\") \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0\n\n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX) \n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY) \n conGroup.fixGeometryWithOptions(1)\n } else {\n condition.frame.x = x - condition.frame.width / 2 \n condition.frame.y = y - condition.frame.height / 2\n }\n return condition.id\n}\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n let currentGroup = checkForGroup(\"Arrows\") \n let diffX, diffY\n\n if(currentGroup){\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n let connectionPos = {\n firstLayerPosX: null, \n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n return connectionPos\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n line.setName(\"Straight Arrow\")\n\n return line\n}\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n line.setName(\"Angled Arrow\")\n\n return line\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n let line\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX sketch.fromNative(layer)) + log(movedLayers[0].id) + log(movedLayers.length) + + // if (movedLayers.filter(layer => (layer.type == 'Artboard' || (layer.type == 'SymbolMaster' && config.arrangeSymbols))).length > 0) { + // ArrangeArtboards(context) + // } + + let currentConnectionsData = newConnectionsData // Need to refactor + + for(let g = 0; g < movedLayers.length; g++) { + + let connectionIndex = findConnectionIndex(movedLayers[0].id, null, currentConnectionsData) + + log("yes "+connectionIndex) + if(connectionIndex.length == 0){ + + updateArrow(currentConnectionsData[connectionIndex[0]].firstObject, currentConnectionsData[connectionIndex[0]].secondObject, currentConnectionsData[connectionIndex[0]].style, currentConnectionsData[connectionIndex[0]].type, currentConnectionsData[connectionIndex[0]].direction, currentConnectionsData[connectionIndex[0]].line, currentConnectionsData[connectionIndex[0]].condition, currentConnectionsData[connectionIndex[0]].isCondition, connectionIndex[0]) + sketch.UI.message("Current connection is updated 🤘") + } else { + sketch.UI.message("There is no connection between selected layers on the plugin data") + } + + } + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey) +} + + export function updateArtboardArrows(context) { // TODO: Need to show amount of updated arrows and deleted ones let selection = context.selection @@ -185,7 +232,7 @@ export function deleteSelectedArrows(context) { if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection let connections = getConnectionsData() - let connectionIndex = findConnectionData(selection[0].objectID(), selection[g].objectID(), connections) + let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), connections) if(connectionIndex != null){ // We have connections in database @@ -495,8 +542,8 @@ function drawConnection(firstObjectID, secondObjectID, style, type, localDirecti if(connection.type == "Curved"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)} // Condition - if(condition != false){ - if(conditionID != ""){ + if(condition == true){ + if(conditionID != null){ connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY) } else { connection.conditionID = addCondition("#con", connectionPos.middlePosX, connectionPos.middlePosY) @@ -570,26 +617,28 @@ function getConnectionsData(){ //Refactored return dataArray } -function findConnectionData(firstObjectID, secondObjectID, data){ - let arrayNumber = null +function findConnectionIndex(firstObjectID, secondObjectID, data){ + let indexArray = [] firstObjectID = String(firstObjectID) secondObjectID = String(secondObjectID) - + if(pluginData){ // If we have database, need to check for connections - for(let y = 0; y < data.length; y++){ - if(firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject){ - // if we found that we have this object in connection database already - if(secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject){ - // if we found that we have this object in connection database already - arrayNumber = y - } + if(secondObjectID == null){ + // When we need to find connection between two objects + if(secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject){ + indexArray[0] = y + } + } else { + // When we need to find a connection for one object only + indexArray.push(y) + } } } } - return arrayNumber + return indexArray } function setActiveStyleSetting(arrowStylingField){ @@ -865,9 +914,9 @@ function start(context, direction, isCondition){ for(let g = 0; g < selection.count(); g++) { if(selection[g].objectID() != sourceObjectID){ // Then need to create or update connection arrow with each selection - let connectionIndex = findConnectionData(sourceObjectID, selection[g].objectID(), currentConnectionsData) + let connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), currentConnectionsData) - if(connectionIndex == null){ + if(connectionIndex.length == 0){ // There is no connection with this two objects in our database createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition) sketch.UI.message("New connection is created 🚀") @@ -912,6 +961,7 @@ function addCondition(keyword, x, y){ // Refactored function updateCondition(conditionID, x, y){ // Refactored let condition = document.getLayerWithID(conditionID) + // log (condition) let conGroup = checkForGroup("Conditions") let arGroup = checkForGroup("Arrows") let arGroupX = arGroup != null ? arGroup.frame().x() : 0 From 22c9982deaf73ba0545b486fd013e60915a8ee86 Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Thu, 4 Jul 2019 20:56:01 +0300 Subject: [PATCH 22/44] updates --- .../Contents/Sketch/links.js.map | 2 +- arrows.sketchplugin/Contents/Sketch/script.js | 43 +- .../Contents/Sketch/script.js.map | 2 +- media/MarketingKit.sketch | Bin 1387295 -> 0 bytes package-lock.json | 1442 +- package.json | 1 + src/links.js | 4 +- src/script.js | 1015 +- src/script.js.svg | 20283 ++++++++++++++++ yarn.lock | 992 +- 10 files changed, 23145 insertions(+), 639 deletions(-) delete mode 100644 media/MarketingKit.sketch create mode 100644 src/script.js.svg diff --git a/arrows.sketchplugin/Contents/Sketch/links.js.map b/arrows.sketchplugin/Contents/Sketch/links.js.map index 045fe75..da0dfdd 100644 --- a/arrows.sketchplugin/Contents/Sketch/links.js.map +++ b/arrows.sketchplugin/Contents/Sketch/links.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/links.js"],"names":["context","getLibrary","NSWorkspace","sharedWorkspace","openURL","NSURL","URLWithString","joinCommunity"],"mappings":";;;;;;AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;;;;;;;AClFA;AAAA;AAAA;AAAe,yEAASA,OAAT,EAAkB,CAAE;AAE5B,SAASC,UAAT,CAAoBD,OAApB,EAA6B;AAClCE,aAAW,CAACC,eAAZ,GAA8BC,OAA9B,CAAsCC,KAAK,CAACC,aAAN,CAAoB,qDAApB,CAAtC;AACD;AAEM,SAASC,aAAT,CAAuBP,OAAvB,EAAgC;AACrCE,aAAW,CAACC,eAAZ,GAA8BC,OAA9B,CAAsCC,KAAK,CAACC,aAAN,CAAoB,qCAApB,CAAtC;AACD,C","file":"links.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/links.js\");\n","export default function(context) {}\n\nexport function getLibrary(context) {\n NSWorkspace.sharedWorkspace().openURL(NSURL.URLWithString(\"https://github.com/faridsabitov/Sketch-Interactions\"))\n}\n\nexport function joinCommunity(context) {\n NSWorkspace.sharedWorkspace().openURL(NSURL.URLWithString(\"https://spectrum.chat/sketch-arrows\"))\n}"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/links.js"],"names":["context","getLibrary","NSWorkspace","sharedWorkspace","openURL","NSURL","URLWithString","joinCommunity"],"mappings":";;;;;;AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;;;;;;;AClFA;AAAA;AAAA;AAAe,yEAASA,OAAT,EAAkB,CAAE;AAE5B,SAASC,UAAT,CAAoBD,OAApB,EAA6B;AAClCE,aAAW,CAACC,eAAZ,GAA8BC,OAA9B,CAAsCC,KAAK,CAACC,aAAN,CAAoB,qDAApB,CAAtC;AACD;AAEM,SAASC,aAAT,CAAuBP,OAAvB,EAAgC;AACrCE,aAAW,CAACC,eAAZ,GAA8BC,OAA9B,CAAsCC,KAAK,CAACC,aAAN,CAAoB,qCAApB,CAAtC;AACD,C","file":"links.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/links.js\");\n","export default function(context) {}\n\nexport function getLibrary(context) {\n NSWorkspace.sharedWorkspace().openURL(NSURL.URLWithString(\"https://github.com/faridsabitov/Sketch-Interactions\"));\n}\n\nexport function joinCommunity(context) {\n NSWorkspace.sharedWorkspace().openURL(NSURL.URLWithString(\"https://spectrum.chat/sketch-arrows\"));\n}"],"sourceRoot":""} \ No newline at end of file diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index dfb49d9..44656fd 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -121,18 +121,21 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "panel", function() { return panel; }); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); - - -var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); // +// // Variables // +var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); + +var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); + var pluginKey = "flowArrows"; var document; var docData, pluginData, currentParentGroup, newConnectionsData; if (context.document) { + //cc:remember place document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); docData = context.document.documentData(); pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); @@ -140,13 +143,8 @@ if (context.document) { newConnectionsData = getConnectionsData(); } else { - document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.actionContext.document); -} // const action = context.actionContext -// docData = action.document.documentData() -// Settings - - -var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); // + document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.actionContext.document); //cc:here is bug;well, seems like a bug in logic +} // // Create Connection Function // @@ -1029,6 +1027,7 @@ function getLayerStyles(name) { } function start(context, direction, isCondition) { + //cc:start#1;Passing all the data var selection = context.selection; if (selection.count() > 1 && selection[0].class() != "MSArtboardGroup") { @@ -1275,8 +1274,10 @@ function drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondL line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); var points = line.layers().firstObject().points(); - points[0].curveMode = points[1].curveMode = 4; - points[0].hasCurveFrom = points[1].hasCurveTo = true; + points[0].curveMode = 4; + points[1].curveMode = 4; + points[0].hasCurveFrom = true; + points[1].hasCurveTo = true; if (firstLayerPosX < secondLayerPosX) { points[0].curveFrom = { @@ -1324,8 +1325,10 @@ function drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondL var _points = line.layers().firstObject().points(); - _points[0].curveMode = _points[1].curveMode = 4; - _points[0].hasCurveFrom = _points[1].hasCurveTo = true; + _points[0].curveMode = 4; + _points[1].curveMode = 4; + _points[0].hasCurveFrom = true; + _points[1].hasCurveTo = true; if (firstLayerPosY < secondLayerPosY) { _points[0].curveFrom = { @@ -1373,8 +1376,10 @@ function drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondL var _points2 = line.layers().firstObject().points(); - _points2[0].curveMode = _points2[1].curveMode = 4; - _points2[0].hasCurveFrom = _points2[1].hasCurveTo = true; + _points2[0].curveMode = 4; + _points2[1].curveMode = 4; + _points2[0].hasCurveFrom = true; + _points2[1].hasCurveTo = true; if (firstLayerPosX < secondLayerPosX) { _points2[0].curveFrom = { @@ -1422,8 +1427,10 @@ function drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondL var _points3 = line.layers().firstObject().points(); - _points3[0].curveMode = _points3[1].curveMode = 4; - _points3[0].hasCurveFrom = _points3[1].hasCurveTo = true; + _points3[0].curveMode = 4; + _points3[1].curveMode = 4; + _points3[0].hasCurveFrom = true; + _points3[1].hasCurveTo = true; if (firstLayerPosY < secondLayerPosY) { _points3[0].curveFrom = { diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index 730039c..4450aec 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","pluginKey","document","docData","pluginData","currentParentGroup","newConnectionsData","context","sketch","fromNative","documentData","command","valueForKey_onLayer_forPluginIdentifier","currentPage","currentArtboard","getConnectionsData","actionContext","Settings","createAutoArrow","start","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","updateSelectedArrows","selection","count","class","currentConnectionsData","g","objectID","connectionIndex","findConnectionIndex","length","updateArrow","firstObject","secondObject","style","type","direction","line","condition","isCondition","message","setValue_forKey_onLayer_forPluginIdentifier","autoUpdateSelectedArrows","action","movedLayers","Array","from","layers","map","layer","log","id","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","updateArrowsCounter","i","getLayerWithID","sketchObject","parentArtboard","push","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","settingForKey","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","views","subviews","title","setSettingForKey","intValue","state","onLayersMoved","panel","ControlBar","NSPanel","setStyleMask","NSTitledWindowMask","NSFullSizeContentViewWindowMask","setTitleVisibility","NSWindowTitleHidden","setTitlebarAppearsTransparent","setFrame_display","setMovableByWindowBackground","setHasShadow","setLevel","NSFloatingWindowLevel","center","makeKeyAndOrderFront","nil","firstObjectID","secondObjectID","lineID","conditionID","conditionObject","remove","createArrow","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","checkForGroup","groupName","currentGroup","name","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","addLayers","fixGeometryWithOptions","Group","group","parent","locked","moveToBack","adjustToFit","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","dataArray","data","indexArray","docSettings","styles","getLayerStyles","addItemWithTitle","docTypeSettings","lastItem","setState","newConnections","lineObject","selectedGroup","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","defineSourceObject","getSourceObjectFromSelection","setMessageText","addButtonWithTitle","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","allStyles","allLayerStyles","keyword","includes","libraries","getLibraries","libraryObject","symbolReferences","symbol","getImportableSymbolReferencesForDocument","symbolMaster","import","createNewInstance","firstObjectAbsPos","changeBasis","to","secondObjectAbsPos","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","setName","points","cornerRadius","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","localStyle","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch'\nlet UI = require('sketch/ui') \n\n\n//\n// Variables\n//\n\n\n\nconst pluginKey = \"flowArrows\"\nlet document\n\nlet docData, pluginData, currentParentGroup, newConnectionsData\nif(context.document){\n document = sketch.fromNative(context.document)\n docData = context.document.documentData()\n pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey)\n currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards\n newConnectionsData = getConnectionsData()\n} else {\n document = sketch.fromNative(context.actionContext.document)\n}\n\n// const action = context.actionContext\n// docData = action.document.documentData()\n\n\n// Settings\nvar Settings = require('sketch/settings')\n\n \n//\n// Create Connection Function\n//\n\n\nexport function createAutoArrow(context){start(context, \"Auto\", false)}\nexport function createRightArrow(context){start(context, \"Right\", false)}\nexport function createDownArrow(context){start(context, \"Down\", false)}\nexport function createLeftArrow(context){start(context, \"Left\", false)}\nexport function createUpArrow(context){start(context, \"Up\", false)}\n\nexport function createRightArrowWithCondition(context){start(context, \"Right\", true)}\nexport function createDownArrowWithCondition(context){start(context, \"Down\", true)}\nexport function createLeftArrowWithCondition(context){start(context, \"Left\", true)}\nexport function createUpArrowWithCondition(context){start(context, \"Up\", true)}\n\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n let selection = context.selection\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), currentConnectionsData)\n\n if(connectionIndex.length == 0){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n \n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\nexport function autoUpdateSelectedArrows(context) { \n const action = context.actionContext\n\n docData = action.document.documentData()\n pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey)\n currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards\n newConnectionsData = getConnectionsData()\n\n const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer))\n log(movedLayers[0].id)\n log(movedLayers.length)\n\n // if (movedLayers.filter(layer => (layer.type == 'Artboard' || (layer.type == 'SymbolMaster' && config.arrangeSymbols))).length > 0) {\n // ArrangeArtboards(context)\n // }\n\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < movedLayers.length; g++) {\n\n let connectionIndex = findConnectionIndex(movedLayers[0].id, null, currentConnectionsData)\n\n log(\"yes \"+connectionIndex)\n if(connectionIndex.length == 0){\n \n updateArrow(currentConnectionsData[connectionIndex[0]].firstObject, currentConnectionsData[connectionIndex[0]].secondObject, currentConnectionsData[connectionIndex[0]].style, currentConnectionsData[connectionIndex[0]].type, currentConnectionsData[connectionIndex[0]].direction, currentConnectionsData[connectionIndex[0]].line, currentConnectionsData[connectionIndex[0]].condition, currentConnectionsData[connectionIndex[0]].isCondition, connectionIndex[0])\n sketch.UI.message(\"Current connection is updated 🤘\")\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\")\n }\n \n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n}\n\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection\n let connections = getConnectionsData()\n let firstObjectArtboard\n let secondObjectArtboard\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject)\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID()\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject)\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID()\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i)\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i])\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are updated 🚀\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\")\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line)\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData()\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected artboard are deleted\")\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\")\n }\n } else {\n sketch.UI.message(\"Please select one artboard\")\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection\n let firstObject, secondObject\n\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n \n let connections = getConnectionsData() \n let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), connections)\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line)\n newConnectionsData = deleteConnectionFromData(connectionIndex)\n const updateArrowsCounter = connections.length\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject)\n secondObject = document.getLayerWithID(connections[i].secondObject)\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line)\n newConnectionsData = deleteConnectionFromData(i)\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\")\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\")\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new()\n const viewWidth = 300\n const viewHeight = 450\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight)\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight))\n alert.addAccessoryView(view)\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40)\n view.addSubview(arrowStyleLabel)\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField)\n view.addSubview(arrowStylingField)\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40)\n view.addSubview(arrowStyleInfoLabel)\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40)\n view.addSubview(arrowTypeLabel)\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField)\n view.addSubview(arrowTypeField)\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40)\n view.addSubview(arrowTypeInfoLabel)\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20)\n view.addSubview(arrowSpacingLabel)\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20)\n view.addSubview(arrowSpacingPxLabel)\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20))\n var formatter = NSNumberFormatter.alloc().init().autorelease()\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")))\n arrowSpacingField.setFormatter(formatter)\n view.addSubview(arrowSpacingField)\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000)\n arrowSpacingStepper.setMinValue(0)\n arrowSpacingStepper.setValueWraps(false)\n arrowSpacingStepper.setAutorepeat(true)\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue()\n arrowSpacingField.setStringValue(String(value))\n })\n \n view.addSubview(arrowSpacingStepper)\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60)\n view.addSubview(arrowSpacingInfoLabel)\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40)\n view.addSubview(otherSettingsLabel)\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40)\n view.addSubview(checkbox)\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40)\n view.addSubview(autoAlignInfoLabel)\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40)\n view.addSubview(pluginInfoLabel)\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal()\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey)\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title())\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue())\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state())\n UI.message(\"Settings are updated 🚀\")\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\")\n const action = context.actionContext \n}\n\nexport function panel(context) {\n let ControlBar\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let conditionObject = document.getLayerWithID(conditionID)\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID)\n if(conditionID && !isCondition){\n if(conditionObject){conditionObject.remove()}\n }\n \n newConnectionsData = deleteConnectionFromData(connectionIndex)\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition)\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection)\n autoAlignLayer(firstObjectID, secondObjectID, localDirection)\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition)\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n\n // Need to save this data to the global array\n newConnectionsData.push(connection)\n}\n\nfunction checkForGroup(groupName) { // refactored\n let currentGroup = null\n\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i]\n } \n }\n\n return currentGroup\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID)\n const secondObject = document.getLayerWithID(secondObjectID)\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2\n\n const diffX = firstObjectMidX - secondObjectMidX\n const diffY = firstObjectMidY - secondObjectMidY\n const absDiffX = Math.abs(diffX) \n const absDiffY = Math.abs(diffY)\n let direction\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\"\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\"\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\"\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\"\n }\n }\n\n return direction\n}\n\nfunction drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition){ // Refactored\n // Process of creating new connection \n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection)\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)}\n\n // Condition\n if(condition == true){\n if(conditionID != null){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY)\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY)\n }\n } else {\n connection.conditionID = null\n }\n // connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style)\n\n // Add to group\n addToArrowsGroup(connection.line)\n \n return connection\n}\n\nfunction addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\")\n if(currentGroup){\n currentGroup.addLayers([line])\n currentGroup.fixGeometryWithOptions(1)\n } else {\n let Group = require('sketch/dom').Group\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n })\n group.moveToBack()\n group.adjustToFit()\n }\n}\n\nfunction addToConditionGroup(condition, x, y){ // Refactored\n let conGroup = checkForGroup(\"Conditions\") \n let arGroup = checkForGroup(\"Arrows\") \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0\n\n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX) \n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY) \n condition.parent = conGroup\n conGroup.fixGeometryWithOptions(1)\n } else {\n condition.frame.x = x - condition.frame.width / 2 \n condition.frame.y = y - condition.frame.height / 2\n let Group = require('sketch/dom').Group\n let group = new Group({\n parent: currentParentGroup,\n name: 'Conditions',\n layers: [condition]\n })\n group.moveToBack()\n group.adjustToFit()\n }\n return condition.id\n}\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = []\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i])\n }\n } \n return dataArray\n}\n\nfunction findConnectionIndex(firstObjectID, secondObjectID, data){\n let indexArray = [] \n firstObjectID = String(firstObjectID)\n secondObjectID = String(secondObjectID)\n \n if(pluginData){\n // If we have database, need to check for connections\n for(let y = 0; y < data.length; y++){\n if(firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject){\n if(secondObjectID == null){\n // When we need to find connection between two objects\n if(secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject){\n indexArray[0] = y\n } \n } else {\n // When we need to find a connection for one object only\n indexArray.push(y)\n }\n }\n }\n }\n return indexArray\n}\n\nfunction setActiveStyleSetting(arrowStylingField){\n let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey)\n let styles = getLayerStyles(null)\n\n if(docSettings){\n // We have info about the settings in the current document\n \n if(docSettings != \"Default Style\") {\n // if user specified own option\n arrowStylingField.addItemWithTitle(docSettings)\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n if(styles[i].name() != docSettings){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n\n } else {\n // Need to show the default first\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n } else {\n arrowStylingField.addItemWithTitle(\"Default Style\")\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name())\n }\n }\n}\n\nfunction setActiveTypeSetting(arrowTypeField){\n let docTypeSettings = Settings.settingForKey(\"arrowType\") \n\n\n if(docTypeSettings){\n // We have info about the settings in the current document\n \n if(docTypeSettings == \"Angled\"){\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(0)\n } \n\n if(docTypeSettings == \"Curved\"){\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(0)\n } \n\n if(docTypeSettings == \"Straight\"){\n arrowTypeField.addItemWithTitle(\"Straight\")\n arrowTypeField.lastItem().setState(1)\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.lastItem().setState(0)\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.lastItem().setState(0)\n } \n } else {\n // Show default\n arrowTypeField.addItemWithTitle(\"Angled\")\n arrowTypeField.addItemWithTitle(\"Curved\")\n arrowTypeField.addItemWithTitle(\"Straight\")\n }\n\n}\n\nfunction deleteConnectionFromData(connectionIndex){ // Refactored\n let newConnections = []\n if(pluginData){\n // If we have database\n let connections = pluginData\n\n for (let i = 0; i < connections.length; i ++) {\n // Updating all connections without deleted one\n if(i != connectionIndex){\n newConnections.push(connections[i])\n }\n }\n }\n return newConnections\n}\n\nfunction deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID)\n let selectedGroup\n if(lineObject){\n selectedGroup = lineObject.parent\n lineObject.remove()\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove()\n }\n }\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID)\n let childObject = document.getLayerWithID(childObjectID)\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\")\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID)\n let childObject = document.getLayerWithID(childObjectID)\n let sourceMidY, childMidY, sourceMidX, childMidX, diff\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2\n childMidY = childObject.frame.y + childObject.frame.height/2\n diff = sourceMidY - childMidY\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2\n childMidX = childObject.frame.x + childObject.frame.width/2\n diff = sourceMidX - childMidX\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID)\n let secondObject = document.getLayerWithID(secondObjectID)\n let sourceObjectID\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id\n } else {\n sourceObjectID = secondObject.id\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id\n } else {\n sourceObjectID = firstObject.id\n }\n }\n\n return sourceObjectID\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID()\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction)\n }\n }\n \n return sourceObjectID\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\")\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\")\n alert.addButtonWithTitle(\"Cancel\")\n \n return alert\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n infoLabel.setStringValue(message)\n infoLabel.setSelectable(false)\n infoLabel.setDrawsBackground(false)\n infoLabel.setBezeled(false)\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor()\n }\n\n return infoLabel\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height))\n\n checkbox.setButtonType(NSSwitchButton)\n checkbox.setBezelStyle(0)\n checkbox.setTitle(message)\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") \n checkbox.setState(currentState)\n } else {\n checkbox.setState(state)\n }\n\n return checkbox\n}\n\nfunction getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles()\n let keyword = \"$arrow\"\n let styles = []\n\n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i])}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i])}\n }\n }\n\treturn styles\n}\n\nfunction start(context, direction, isCondition){\n let selection = context.selection\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction)\n let currentConnectionsData = newConnectionsData // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), currentConnectionsData)\n \n if(connectionIndex.length == 0){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition)\n sketch.UI.message(\"New connection is created 🚀\")\n } else {\n // Need to remake the arrow condition\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex)\n sketch.UI.message(\"Current connection is updated 🤘\")\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey)\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\")\n }\n}\n\nfunction addCondition(keyword, x, y){ // Refactored\n let libraries = sketch.getLibraries()\n let libraryObject, symbolReferences, symbol\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document)\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n libraryObject = symbolReferences[i]\n }\n }\n }\n\n if(libraryObject == null){\n symbol = null\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here')\n } else {\n let symbolMaster = libraryObject.import()\n symbol = symbolMaster.createNewInstance()\n symbol = addToConditionGroup(symbol, x, y)\n }\n\n return symbol\n}\n\nfunction updateCondition(conditionID, x, y){ // Refactored\n let condition = document.getLayerWithID(conditionID)\n // log (condition)\n let conGroup = checkForGroup(\"Conditions\") \n let arGroup = checkForGroup(\"Arrows\") \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0\n\n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX) \n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY) \n conGroup.fixGeometryWithOptions(1)\n } else {\n condition.frame.x = x - condition.frame.width / 2 \n condition.frame.y = y - condition.frame.height / 2\n }\n return condition.id\n}\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup})\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup})\n let currentGroup = checkForGroup(\"Arrows\") \n let diffX, diffY\n\n if(currentGroup){\n diffX = currentGroup.frame().x()\n diffY = currentGroup.frame().y()\n } else {\n diffX = 0\n diffY = 0\n }\n\n let connectionPos = {\n firstLayerPosX: null, \n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2\n }\n\n return connectionPos\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n line.setName(\"Straight Arrow\")\n\n return line\n}\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY))\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY))\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n points[1].cornerRadius = 20\n points[2].cornerRadius = 20\n line.setName(\"Angled Arrow\")\n\n return line\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath()\n let line\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY))\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY))\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path))\n let points = line.layers().firstObject().points()\n\n points[0].curveMode = points[1].curveMode = 4\n points[0].hasCurveFrom = points[1].hasCurveTo = true\n\n if(firstLayerPosX 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let currentConnectionsData = newConnectionsData; // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), currentConnectionsData);\n\n if(connectionIndex.length == 0){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex);\n sketch.UI.message(\"Current connection is updated 🤘\");\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\");\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n \n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\nexport function autoUpdateSelectedArrows(context) { \n const action = context.actionContext;\n\n docData = action.document.documentData();\n pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n newConnectionsData = getConnectionsData();\n\n const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer));\n log(movedLayers[0].id);\n log(movedLayers.length);\n\n // if (movedLayers.filter(layer => (layer.type == 'Artboard' || (layer.type == 'SymbolMaster' && config.arrangeSymbols))).length > 0) {\n // ArrangeArtboards(context)\n // }\n\n let currentConnectionsData = newConnectionsData; // Need to refactor\n\n for(let g = 0; g < movedLayers.length; g++) {\n\n let connectionIndex = findConnectionIndex(movedLayers[0].id, null, currentConnectionsData);\n\n log(\"yes \"+connectionIndex);\n if(connectionIndex.length == 0){\n \n updateArrow(currentConnectionsData[connectionIndex[0]].firstObject, currentConnectionsData[connectionIndex[0]].secondObject, currentConnectionsData[connectionIndex[0]].style, currentConnectionsData[connectionIndex[0]].type, currentConnectionsData[connectionIndex[0]].direction, currentConnectionsData[connectionIndex[0]].line, currentConnectionsData[connectionIndex[0]].condition, currentConnectionsData[connectionIndex[0]].isCondition, connectionIndex[0]);\n sketch.UI.message(\"Current connection is updated 🤘\");\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\");\n }\n \n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n}\n\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection;\n let connections = getConnectionsData();\n let firstObjectArtboard;\n let secondObjectArtboard;\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject);\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID();\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject);\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID();\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i);\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i]);\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows are updated 🚀\");\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\");\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData;\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows are updated 🚀\");\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\");\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows are deleted\");\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\");\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection;\n let firstObject, secondObject;\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData();\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject);\n secondObject = document.getLayerWithID(connections[i].secondObject);\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line);\n newConnectionsData = deleteConnectionFromData(i);\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows from selected artboard are deleted\");\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\");\n }\n } else {\n sketch.UI.message(\"Please select one artboard\");\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection;\n let firstObject, secondObject;\n\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n \n let connections = getConnectionsData() ;\n let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), connections);\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line);\n newConnectionsData = deleteConnectionFromData(connectionIndex);\n const updateArrowsCounter = connections.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject);\n secondObject = document.getLayerWithID(connections[i].secondObject);\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line);\n newConnectionsData = deleteConnectionFromData(i);\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\");\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\");\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new();\n const viewWidth = 300;\n const viewHeight = 450;\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight);\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight));\n alert.addAccessoryView(view);\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40);\n view.addSubview(arrowStyleLabel);\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField);\n view.addSubview(arrowStylingField);\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40);\n view.addSubview(arrowStyleInfoLabel);\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40);\n view.addSubview(arrowTypeLabel);\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField);\n view.addSubview(arrowTypeField);\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40);\n view.addSubview(arrowTypeInfoLabel);\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20);\n view.addSubview(arrowSpacingLabel);\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20);\n view.addSubview(arrowSpacingPxLabel);\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20));\n var formatter = NSNumberFormatter.alloc().init().autorelease();\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")));\n arrowSpacingField.setFormatter(formatter);\n view.addSubview(arrowSpacingField);\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000);\n arrowSpacingStepper.setMinValue(0);\n arrowSpacingStepper.setValueWraps(false);\n arrowSpacingStepper.setAutorepeat(true);\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue();\n arrowSpacingField.setStringValue(String(value));\n })\n \n view.addSubview(arrowSpacingStepper);\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60);\n view.addSubview(arrowSpacingInfoLabel);\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40);\n view.addSubview(otherSettingsLabel);\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40);\n view.addSubview(checkbox);\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40);\n view.addSubview(autoAlignInfoLabel);\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40);\n view.addSubview(pluginInfoLabel);\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal();\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey);\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title());\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue());\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state());\n UI.message(\"Settings are updated 🚀\");\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\");\n const action = context.actionContext ;\n}\n\nexport function panel(context) {\n let ControlBar;\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let conditionObject = document.getLayerWithID(conditionID);\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID);\n if(conditionID && !isCondition){\n if(conditionObject){conditionObject.remove();}\n }\n \n newConnectionsData = deleteConnectionFromData(connectionIndex);\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition);\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n\n // Need to save this data to the global array\n newConnectionsData.push(connection);\n}\n\nfunction checkForGroup(groupName) { // refactored\n let currentGroup = null;\n\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n\n return currentGroup;\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition){ // Refactored\n // Process of creating new connection \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n // Condition\n if(condition == true){\n if(conditionID != null){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY);\n }\n } else {\n connection.conditionID = null;\n }\n // connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style);\n\n // Add to group\n addToArrowsGroup(connection.line);\n \n return connection\n}\n\nfunction addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\");\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nfunction addToConditionGroup(condition, x, y){ // Refactored\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Conditions',\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n}\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = [];\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i]);\n }\n } \n return dataArray;\n}\n\nfunction findConnectionIndex(firstObjectID, secondObjectID, data){\n let indexArray = [] ;\n firstObjectID = String(firstObjectID);\n secondObjectID = String(secondObjectID);\n \n if(pluginData){\n // If we have database, need to check for connections\n for(let y = 0; y < data.length; y++){\n if(firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject){\n if(secondObjectID == null){\n // When we need to find connection between two objects\n if(secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject){\n indexArray[0] = y;\n } \n } else {\n // When we need to find a connection for one object only\n indexArray.push(y);\n }\n }\n }\n }\n return indexArray;\n}\n\nfunction setActiveStyleSetting(arrowStylingField){\n let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey);\n let styles = getLayerStyles(null);\n\n if(docSettings){\n // We have info about the settings in the current document\n \n if(docSettings != \"Default Style\") {\n // if user specified own option\n arrowStylingField.addItemWithTitle(docSettings);\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for(let i = 0; i < styles.length; i++){\n if(styles[i].name() != docSettings){\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n\n } else {\n // Need to show the default first\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n } else {\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n}\n\nfunction setActiveTypeSetting(arrowTypeField){\n let docTypeSettings = Settings.settingForKey(\"arrowType\"); \n\n\n if(docTypeSettings){\n // We have info about the settings in the current document\n \n if(docTypeSettings == \"Angled\"){\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(0);\n } \n\n if(docTypeSettings == \"Curved\"){\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(0);\n } \n\n if(docTypeSettings == \"Straight\"){\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(0);\n } \n } else {\n // Show default\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.addItemWithTitle(\"Straight\");\n }\n\n}\n\nfunction deleteConnectionFromData(connectionIndex){ // Refactored\n let newConnections = [];\n if(pluginData){\n // If we have database\n let connections = pluginData;\n\n for (let i = 0; i < connections.length; i ++) {\n // Updating all connections without deleted one\n if(i != connectionIndex){\n newConnections.push(connections[i]);\n }\n }\n }\n return newConnections;\n}\n\nfunction deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let sourceObjectID;\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n return sourceObjectID;\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID();\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction);\n }\n }\n \n return sourceObjectID;\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\");\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\");\n alert.addButtonWithTitle(\"Cancel\");\n \n return alert;\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height));\n\n infoLabel.setStringValue(message);\n infoLabel.setSelectable(false);\n infoLabel.setDrawsBackground(false);\n infoLabel.setBezeled(false);\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor();\n }\n\n return infoLabel;\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height));\n\n checkbox.setButtonType(NSSwitchButton);\n checkbox.setBezelStyle(0);\n checkbox.setTitle(message);\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") ; \n checkbox.setState(currentState);\n } else {\n checkbox.setState(state);\n }\n\n return checkbox;\n}\n\nfunction getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n\n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n\treturn styles;\n}\n\nfunction start(context, direction, isCondition){\n //cc:start#1;Passing all the data\n let selection = context.selection;\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction);\n let currentConnectionsData = newConnectionsData; // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), currentConnectionsData);\n \n if(connectionIndex.length == 0){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition);\n sketch.UI.message(\"New connection is created 🚀\");\n } else {\n // Need to remake the arrow condition\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex);\n sketch.UI.message(\"Current connection is updated 🤘\");\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\nfunction addCondition(keyword, x, y){ // Refactored\n let libraries = sketch.getLibraries();\n let libraryObject, symbolReferences, symbol;\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document);\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n libraryObject = symbolReferences[i];\n }\n }\n }\n\n if(libraryObject == null){\n symbol = null;\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here');\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y);\n }\n\n return symbol;\n}\n\nfunction updateCondition(conditionID, x, y){ // Refactored\n let condition = document.getLayerWithID(conditionID);\n // log (condition)\n let conGroup = checkForGroup(\"Conditions\") ;\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n }\n return condition.id;\n}\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\");\n let diffX, diffY;\n\n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n\n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n\n return connectionPos\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n\n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n\n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n\n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n\n return line;\n}\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n\n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n\n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n\n if(firstLayerPosXwxE z(V$pj%QL=;x#4WFJz)Qn)uJwV7L@0L`}3JI7x~0k2!F}TKjUiiK9hQs&0QRjOxjMQ z9vWb+4D(SDa z-d2?~K;(MHkb>D2PgN;+5)9N6$7TgfZ0x(y`w+vaWSxeanh*<6&ZMHXnYI!kFM@H8>&_Q~j^h6|#jWw$iO*twj^4(Q@j zUd(VavU9Mn`EYHRVBEndeaoO6DanAdJ!@+oyGQL{w^nWxw5RA8q%r@e=;jiVeY4VO7-CMx9gtfz#%nLz6Mcwikg}p7e*ml?w4pzMe zBTVldPh+)3qD4M{(PJp^fUP&JXH-*`EU%~$gmJ~2glz?mlQ$zX7E}svq3-xE!GYR| zRCSucG>D8lN5B;AogcHSs35!Np?mUf-b+ot7@*>Z3EV?gI;4D8ieOr!#94WLpp{E$ zNkzh+%`H%ANxD2{*>nhv`CVAvWw%?$=wDUwoQokX2*qKeaCG$@q^R#&Q>*OU`sZg%R|rPExDzek+9T-r zYgAj;%a2ZYyUUuljwJldz&7_yjbU4IKC)h)5v@L+DZt#;C8;y<{;p%jnMVnxF3Rb} z*5J&3gN~zx<^lP=XKf3v{xHsO`VybBXEW{#*biblJ40JB3$Ig35-aM{;B{|}BXq5v zJET+6wW=(WjMKj{r_dHR@v=^^OnldK}cJJE`@wnV8KBBJU-U|-CL zR~BgO>-%hXu<_*K;S65%bb9oD{kEEl_ZEVME802G0E_A?(zE1+I zwDG3#D3t)QJVTPEhGZ|Jk|-u84cva&a8mFg*E7yVYF+wpOlvHNXH zYySK9XZ5pias2MegBkC8%?nfai#|h}r_y&?^5`~}mQT8NR)kMG%ZK-4P~6dlx|6o>}VmMG@Z;ZQ??e1Y3Az>LkSz4>dhBB?hiK} zjrQB<`SJN)6s51TJx>nH>*(TS<=3V=Q~u7|`Q&?B^+J*L!Mv{d+)jAm%`JY%$8=;T zhHlQ!snY|)4s#}DmA<{V&f4&k1*_E~9xVFd$tfROD&MH=(_Yuur6g9=_;}OHjort4 zTY8p{O~&Kn;bbLY=a;(|%h%A%Yz^Ovs1M)A`|RTUTa}B8^~c+TZ*)1i@9&4tvpnTv z!{_B0{DEb+=4a%Es;;i2S>smm8y()y*J5ep`SYkOm7rp=!}+w*hTeu&6l;lm zACL;@bOTjF{^(c$Qr0j5yTlE!*$>R3*3_Qqqq#( zb98zK8>2ef$&IaK;cE)@PU8%w!nUcUf({+-GTcmJ$cJl1l3; zN+JAAjb-~N+Vp2(Ec)TS(a)+dP5Jk?GRj`ZxRhVx@Kywl~Ge>CEN8MBr;6~B1v5~F_v*JQtV ze$#bPu{D_*2%re1lNP%+%k=xxgA*C6?k=D7G)}i-hCA+&!t_SQLBUBRU|b%mMfeI} zKtOUvxP@-F5Nf zNyO7*5jFhx)rM>-6AFE0zfOi1cR^_ist|Xk4(-sZmju&??b7mUs{U8``>~UU_xy7H zj#^^M{_`;1Vebm|b(oga2>N#6b>(KKFB z_Lsm#PsYSA*6&B_`LhwqriYG8K<7eM<-M&c_S)bA$qWP9NwaW>y66catRf<0l$m8j zf@VFqZ{-~DHI6$*u;iFv0k726y(oFDgz6~Xl7g={%eU$3ssTL3LpfpN zWBx$w3~5nT>VQQ^7P5@XS$Z==9g$T0IF-CcmKRq5;d@!)-r(Cs#Ex@29OevPHr!>B z#=A^&D(ZVvavo6_uk3nHhWM%UfVYkCkZ4Ipq_)zNRMozYmRZR_D z2jkC|zE2|Od4Ppx+0COR6>08VHggY-PF9Ytvz=b?R(jrddXF%$tYTJhqsg1&^;Aj; zbRVZjrfn3eww3QO)*Zo>-pQIFAd5|$FeuWr@M6q>$!OJfMR1N!mY0pb?)Cji>*DNc zt}l0X)Nd2>Bwwyfi?+?og_gu&;>pL=MX853w>j7CL22aW_?=0}64)$20%+@uBx~XoNUoWdFG<<(p$HQRi_}${LlYri9ZmDW6uh%{jjJH_LH6EVGf)Im#dl~$A{l;aT=|vK)IzfI zhFvF9!P%K1LkRy&kx}#fl=z0kKJE6b0(zcDO!jgsbldz{c?Mobzs8j zX!rwnEx1XYY}nSZl-C+|6bn;auF`l5DHhbCbic_J@46=t?_9a9*+l#5aJgnb^heG6 z70tov=vR^3mDz4)+!SV>a;6I>0jsaUQWGVHoe2c$?R7G@r7=|7L0}PxIgL{gEaFYy zNnny<`K>&#BZ&bAQJxH(dr}7_=&YP9t(e*$SJ%St@839WQhRQ4V5SV3RqME7Yi;Lt zMLPfO{LHudE^Ol-DK;^+%TPfFg$cpuf8wn8Pb*HSx++cZa3?eG&W`$arRn6_+CVS- zDN~}R;&2F&w?C0Aw;D!ZyO$q}>t*mDBIR2V_*3mSmAvdBqXMv>wkVoF#x`KTsDK`6 zw3fvr;%MFuypDvKKUKdd0%SMMpT|j}TbhQP$^OkvAj0MGnm_S(*5<~Ttueu66x_h( zWk>~KLbYy#GG_#RXpw8_(LEIw-(P6&ngH=zj$i=4?e-YXILBR_b!5zHKPP`N9aLbS z8oCHxFM-oa`NUQyRdYOg$;KQVMy)_aON<$bMwLKAd#0~R^;|=nA=S;z(`aZRMb1L3 zw%#*(+w!Wlw%#<+U0MIp%uwEMN?aMkBuDK|grP9u7_<$M(7W)=Q#D#TOv~~#XisAP zH5-d5AI_8bSJL8IXZ>a3B~!J9&8H(XxDS0p(v3QqwZH~f6{x6rONG339+#kCgzi#-SlNh*0Nk7*trzlfk> zn?}YFgklGK}n#7)y;XHZRPoQA*)dHgEh&m_88K^)7$ zqM`XZA-xDna)I>8*SN@{7jI7E3@X0JxeUPMxe|M_SVc>jM*qFg$j^iWHj^w^Y@vv` z2vrNeeXpB{bN5nVE-ZytQVZe{PuL z0Iq6uCFtGl2xn>HyT57l(FpUHaDCLvtw17iWZ;b~ko36vAE$`EXh3hMEE$f3G$jZ( zEN-yp`BsMj9Uzd%ImrWPv%bcx)C6C#_;jNFK;Q}|W<%9q2az`~Z2*cZ02k#MX&08n zcAADD-8v*hWfKeorkt3Ro?SdOrBG9^V<<3w`X_5o?({-4Q!2~uBe^%pKn=~vaa>kV zq8K&u4`{%TIpdO!$Jj}OC4VH~Sx$E^1<=OF6Hsn?No zRzPBi{fLzbT=-vDp-3<`b`7d8zt}4irW_YJXZOrX#jhx#rpMd60C5Sz#yC-?BVw_O z?k)8Dgk)SX>$A|Xkc-T6p(y2p?z52)i#-R4`YUIM8)_<;nL*_fCNNfTLji0f0s)~XdtZkc-6$yMV%Zl<@aveJ=7Fk2 zLSR(Zy2L4MyATG+C@nx`6!;DC^Pn>OHwfAbT~J{o z7~Znvatt6P?JP^CO7i7Ot&^~36P$u8QBr8qC*LLl#aBf-$>mkaW0Cn9Ee(G=GF3nS znkXzupU0-d7@1f@qnke{4r=XBbJAr(QIw6LhFe=Cw`F71T2*^S^t$TU6)wk zpBjLy*TrWC6v8!Ul;?rn?^BryqtHy4)1a+gx|4^p9~KlCgJ9z(VGgp(g$@N1Uu2IL z=E`6r1r_Hl>06@%-Sra2hE?fEEC zUFl0Ftzl*7q6qC$yYR({j;>XCcF)532dUQ#*FlA^ejTlzW$9U>obx`2VWF653qsbgWO<*PZJ-|URHcG^Pm zQfea$bK;r}az%qmBerj2D(_+im0H03cVmg33l~M1@uNV|1OWka(Sozxdc_^Ckg%S>efJ>I6Iyj_VJ>o|j zgtt}@FRcJRdj7xWQDHYZkk!b=>nD)nrxB0opsD!$$1#DZaA8p>x{$E`_f{EMlbG3I zq>Bh+Md(?asTC>f(+I}{`tk|c$bK)Pl7XejAm?oOS!F63Ymt}*7|X3OPE+31&>v|5 z@Ado)!;TfLoW;4H>Xk;`1@B{%C2xz}#-+IkY15Od6rfE`=EPuvrCaS>?d+V~Y@}K9 z;5_e|Y`jRU-%k+HCyscjXpxwFn~dBT6BUTRw=EdoX|B z$vuurBTXFK1@i3wz%{u^v7c@OGb?72S?689yph?y)~yuUTQ?+|M#p}e9u%$So&q)$ zd;h$xP0p9O!fXEsY^mGg{j~jZXKeg_rF$UAE`v)bK2y~xDLDP!emqqX9AFgEoQb5yhHN zg*5woWd-8I^1})vq$fvVWKLjWvxtiZBX^(}6=3nQV*?b%fSaFSIGj#n0>P>Gw*nLT zi+Z4jfpM4P_fpqGp2q`tP1^h)3ersW?`h}=y!AC2oYOfPToTftCEeD*;Hq_LFSBW; z(Yo*-t9hw6AQ*3IYLseqSilpdmo)dEl@+Vhnf4YV^$c3}Zk{<{B;Rwe8`x_SZzzo} zAw$cy#ZR$2l?*N$sln~>IKVsP5J7M&zp?eQ`m*V895yIh;&Lh!FaG-Au0%9=Q2b27 zdp+{uwEgkBp!E`!zI$X~AaIF|9JE)X!qQ^}Qco{XY%oTElxzebP;_g za`)b!*?bpur!?7ap4+y#6`?ENCA*t{!2(U*9!Dc%qWEYRV7nQs&|MCh(h}!5HR%)_ zm#Y{L-j_AcyXJrV!;+q{w+Z!5VF8}AV!g(W)a-<;EIh0)NT@K z;~c%fR7XZsJ2jo7z*85Q6t?g+NO$=U@2_s~V}4G*4(GEDTzlg$zUjZ1f4B!jnV1E- zS2wK_xl%T>$655?#v_T)3HxYAlB;UD6god@Usp{AReTFu6TppmrX{L2!JG_OFQ=NuM^Xel*3NAwcPaQQiixipGO5Ax zvuUM}-Y&aib`MN&AX(1O8}J=nj5A9W{BWt9`sCUW1#3pF{xau8lYZ+I{^qou+`w|s zGta=Z8NlMRC=IMJvN;%<6e$hv>#^fp_5-@%!P75I2X=EE1b1_7#>mZTlF8BJUWT|c z?Vl8RW`>IJ%`)5?uI7;DuIjJ9Zmu|;vws)>kep#@_J~vo%h`qgf|nt{!ddQ!Qwp`h zm_A-Wzxl#(=*Y{adUkxVoo@qj!>9Nu#!;rpF$sBF#-~TC z6NmtB%OAkeLHXp_-IKLGykgy+U3n}Uw4k?$n3Hj7_V01eh-2$MKQ^^&wtDVu=CrM! z$~T5B&Bdf7jysVoq%KEyLKwKSJc4uM4|WoZT0Xzqe&{1bBtdp^Rx=7J<-}*VQiH&@ zh{Z>2^Xk6~o?KpV(R_>*QcOjt&3cs$c`d|~M#}St<;~%1;mCG#jC0{fD6ympN%Iv% z)9b-KErs;9l~EaV&c53~-Z^s|oEMW@JkHka4&zboDLTrpnwo960-7a1DyU6cJo$H*i|?3QslD4k#d_QC{H6^3YZpvLM1SX^_vcXhM%IC(E`s zG|lSU8oU2aoPOMJlC#)d*yEN}@B%zCLWE#K5oBm3^;)+(nfKqMs}c{YGkv-DV3cQb zq1BksRYMXKCC>J;w*MO3p8g*h3Fg(xi?wB?bW}E^PG)B_axO2+)!;*L>ReXK?3RV5 z=uG944qF7<%L{&K0?2Rs>8@l}EW-kp+g3UE4UmVLa z4hPEzmT=s_e>Aj~K#P^cBD<*{ASnQdd?9!d>gpW-uDu*)i)rx?7?>d+l)*N~P#bA1 zR!l!>ZNh3)?WVFd*1)uc!rbkCm*o%DQll%UPf5tsBLu_+#?!YMn8Ayr?OY_2poH3M z{x3B^dKgrIJY54+u?5F6Jh?w5rN})Yg%#UJ7Eusx?K#K{f($B>*ucr0^{2?}Ij%C@ zI(TtyFfesA9h&CTm)w!%6Q!?_7Ni^N;Y#?jE{?p*SC!4Z_j4Nw%$0a*c>CkHLb5Lb@*&e-w-Wa zA3_?Zzc8Z1neiG1y5Hi~(106)QU<~K9tYS_hZHVF5^s5?ZZ49?V0u+^Ui5(#5fJd;Mz# z&y@Cwp;lw`4~-ue)s|!6?D@JG9D-iSBaE40GAZ1bm>)sT;oa~~nN1B^?yl!r7lj!nYV;IxFlF5r&t^|$+9F_Xq?^?LI1}Siu{?XE*6xU zX%MMmI?&(&`=gO>`ULm78nZ{a?j&$JbWg1#-?u>*GOnHQe*A2xzyQz*vxO!=|tbE8sg94X&q zk~~LiFRx24dIsCOtCgX+pS)oGkuWLZP9-;iaL)K}b$a2T8wr85=i}qG5rpk>+`tWq zF!=-l{th;LLAs2Z>Cd9=nDo^)sz2-NQvG&ogE~+i_I$RZhw)6BuTE+Ln z+BspfNLDdA80-u=Ix=4(z@ijf`ea0+EB4{SUmOhjEg;IS=3t_%JT^8T6LVf(np#V{ zd9JU`ZDl=owLrcNd%#-Yneu+Nm$}p4K3-KG=?AWNxz6ZtynPFKWs#zCp_pkA9nscT zwSR<}sKQ%J3ME_CKXCTX*E=a{7?nztc?!ppP5Omr#%zelc>!07Rt;{qOm7vZrbG%a z7FZY~2^nvYIBkQ&*Ka0vR$rB=&puDGJLnYVjF%JuFa}6On!mDN>pOa+3uFSVSJOVO z7Fa8I=Qfy6K-2@l!YdB_IF80bg5--8Mc}J@GArPdEk^>VOzgDSAUZ-|Lu42@l1luM z$z|$fb5|WJaw=Yxx=Sy3lyA#DWS2k7e!SBLc%}BKgr9evzq{4&h~-}dxRVi;S*Ste zV2q*=6Cl^e$W8CEER*}mO^m(EM>FnvZXU>{`~-xO2P>_4S4+yW{x&K-*5tp80kP}h z5%WXbT7lI+-V1lL_drazw12Wkq@+`o_hvRfwW8tJ^H8RvtqU8icVZ1m5;hW=ryvGV z%P)$0LoYejcV46i3O*haOd_FF^*tA_%`NmPIK-F2gLO-Fu>z^sy5B-knaR3y{%6K^ z!)(tXS|dW)qFg6Q2y-rdw9fNL59$DoKKRJDMwiqBur_n@*WXm} zR^=-KG?7-=<4M|JiJ!aS+0FOFh_uMR!ziyI`3YIe1Y=VtWs>vq5V5;zb*|;tL~u0D`IfFFakZZ^}Ism%50G=^Rjzu}d&p73$VztBZ|9Xnuw3EEV`IEY5 z@x`rDchV8hvZD*tN9~&Kq%#G#ml?(CauC)-j_uI~hwj~5ns19GfpIBI)o7Y)Q+ zSB`o3^z6qSfAo7UHRNQC{gVs|%Cl9WPnLNf=_Xy|>s297z^nga_YSknYdZF*sZUGC zPpQ*jm|&+L4m0Ri6CD_9LCNMmg1RFqxQ(OOjm}}|<t$N`p~ z=RK3b$34!3?szQPYtI?KC2fv9d}O}5`-DDhG)YW&Y0xv+x*UqLoE3lx_(SK#IzL8h zAdLT68vFg2cf}l<9epC#INMci#iR$bDgbUmXdY7kqvEC?CSP8`gEUHBx~;7LCmUE& zVKs_2Z0ZC+>TyqKKrIZl3+O^C7 zzhPX~958vEp7v%R3TuQKL!wFl0XQF@l-UHQDJ{L z&P2T&EdG{=o2uA1lKH8tf>qEyLNyN4P85e=A0qac$zK#r!kA!xKtAq>=q*VF9{+Ue za0AO4h#8~)C~EOXl4Sda(ls9Y^FJ=K^_~&iidX3QYbunCJUQ-{VFse*X_aIWn2KHf zB=kW!2Cpce`RR6WEYH*VCmkG1N369u(7P>3NUFpZp?U>gv77)4RC zw{Y|bVa}rCSyVZMWJZKyg9X%j24p}4x-{=quzkR637Er{+w665!X^_Uk+c;7EmvJo zy>{Sd>PMP38t?#Wo2JF?m6aEgHGqVv@O|CYc&}hvZ-&a7j(zqA!t=S{Q%ShQeSP$s2BkrUkX5 z28p=Ke0aJ`<#^U_$9-g9JR5$AjPR?S5P;~3A%YF+W89NLBmun+&R__Sa;{#DdS{Cl zPZ!>K9nY&WcFv#Q$!cQP)d2%gXNU&@GC(s?kU2zzQxOb297F>ME-8}%(FEsUl&jJ$ zK)%z%8w3^diri>KftqdJt!nU>xnqAx&?Abn>e|d+cmMWM+&*#w)9){-tcf~ieAHTO2hiY1;PHZnxPh@H& z1GD0ayNpo*!Sxk2Aa0lBmLith?T441JyTm}k z*{V-%IylJ;!Ul@XL~Ga30AFba&*c^Hm=A~ocL=W+JvOVUvVAtCRH=#BQ6vegk=$Xr zP_G2(Wg{u|-)M5pSbwWAV3@+8-+cW*m(=L^5%{d7;65-DAdm*FW! zuSzNfv8YA-um6FotEd0zgdkW-UK{~u2CWXio>5t)s9NAb58H3|`!2~MTsD$`<^{TW zG2`uSJf*zap&BtzK!ZqZI{hodRcKNp{Pj-vmuTAh>9)i##P4(?UijMb7dG`eD*p$l z-&)VO(RC1oQMe_@bCR^k_t6QT5J*ngI7(vp+TZ9Eba#ES-~?!pKN~~DwFW=IaHN=- z>Wl?Bd#V0onXpnEdn5Mbib%0+zW}3Xmv~XAk90%z30jpqU%m1#xlJwjh% z_gLt2%+)|=h0MNYPIRf{4OT)R;nf7i<@D1{GnfME98v%WT=jmQ4f-piJGW~+x>@VF zl_Fo;n!(L0Q&=h}k8xM=TDTi-HwH!Ixi)Q236hXVCEHmJ#_4VS8d=9$@A}#rod2}BLs-+IqGn0n^2l-9G6e06{{yb?10+j5A2b3aJ;%=YyB z_Z*wVqWknZKQ)RU)!vp~D#B&{iO;LROWjK+nopf4SPRA{pA8RqX?_^Md}9JrIR(A9)6tKlOTMEn#K`s4xL24X=~6Cd^#-9?ot%UPZbs-++7aaCel=!y@U+-_eMctf|2rI$ZB z(t=LOLUJ0$01(sZpQ=AL-X{39$1e?dbhW&`3~67@RaMj40C6_)|KP zw|9=7I;nEa8K%Xl<}r+mL}-&xUNy5e@zzJ}Tbd~v*nT&P#5=F?mK91p1c*K}0M(5r zy%3Dz8WeOOaKEY7ClYV)SVB&5XcEQEGKSkf{3pYuU#lUZq8U0Q2Y2rc6iR%C8s)eb!#w7Wv7$Yv+Oe!$y zIsI8>snN5fedr*aG-XWDgF?-2_%cZ?p4t$PJI<@B`%rgKq#0GP|87{K=_JhFVNe@O z5yk7pc2HSjbNe`KM^F1{HUt}uBE>ep42e0zBx_LKL7Qzz3Fyok%i$jONkC^D;bQC* zUILZFjdtuJc2L=OP2|0=R-X-o?D5Gj`1cYI5JSkw5dMB7429dCa*BRQaV$lpjNoywwR>B2$@*CZP zDvoYGOB%{S#>-LmY}sOt+(I!h>1ACxu$6WR&`ii4!@a(St@X+TbN%f?Pu9ALdlkSF z*n#%e-GSB`#jIv8Vo;BB$(a^9fXnHy0>~jBi`RS?Tj!*ETM)JIc3tCniBouq9BM5t z>sCM1Fs}Ceh1;%IGRtOR*^WLLxEWYR$G84h9%iNr&EM^-G?q+>wHKPAGzXYY2$IYjeWc0_BztZw$pv@BYY@L#A+78w<^Vx zoWv&+ERQ?jq2IX0?>MPk{6fT{I$fcity}%vo+UkSxj5g}ysCR@;#K{HPxjtAqcT&} z^|=C%jP!CjzdJiyGQ9vpVY;aM%UoSzy&e(WY0jmNv6XqH_qp8sa-P`iYAK1Q-unyx zUn{YNIV5+z|5adz{u9W5;_PVb@Ee+5qj;;>ag zA-oKduZzJ8_dGmPv(hdGHk!(yg=Pi8(}UV@1i zBAn960p5q<(MSQWKyoo)0~%?_MMT{H4;${u!b@9y#D0&VhRZ~l&h^CBRSe$BHUA+l zC_^h+eV1u;9g=HDEd!fZWOW{hEe&ZG*$AV!3K9MYd!c18MS1!~`3RQ`>`9bbmHW0{ z1(tzJgQ<3__N~kh&X=oGuxfsztRz5o%0h?0tNo1M1FAPQes03#8s63$NZF+Vx73-Y z@&Q*nPKX`E`|(X`!ph#IQ-Jc^F3kNreqiP(d+@t{BlkNuZ-c=%$LMhOcaR1U4sE|2 z$ME!Z^!hEIZ~OOB|594lr18mv?kG@s zykyLIaZu-ljgLYS^{=qUH{gH1H~|0a{}?Om3P9Tz6ac_~g7WXhv2!qXF*kN~r2Ahd zw01V80H41g0O4{nqOed{Q2*|M6&Djy_|FbN^&!CiwIHn7!2eT#jtZgz05vl>=KuhI z0mOy)mD~WYy1Qpi#8PjlI~jWur~GA3oQxki;ZXomxu5&Hb$KROe0hl(Qi+1^2Wn&a;^ zzXTY#NAVwQVPryw_7YlNFk;C{qTelqr>o32zHQSDKdyF-t(kQa&`e{@3VvRvLM-;D zX*&hIwL%v-8czi96SJCJRmXT`e4%n(g>w?tefxU@w@XX_v`oG_l3^uGxK*|7gqn3 zQVz7@FKQW(avqeD|Nq_CZ3pso`|LfeSp6u?^-ap{&kQYu88AsIKF=L>YnTL!B{zsb zq%o|0|KfZBoxPL7dsxYr8X$XtgW$m+Fa-^S) zvFH9S9eTN@$XKTtv1ungwDS}F3)b-)zWx=Bz-zkN;#`3qh36)T9?v=HJ^Nlh{`F>P zlpAc4SgDaJ%y1}EG;op+bFXDx%#`zfyw9bkl~A{?Sjk}kZXGZr`+?hZs4gbc7&9?o zH%=t=F{BCYa%`(R9(r-+3x)XPV9g_Ox6T6Ef1A6MyD&+ki}5qVvGdKBrZ{`No3=jl z`jjyvo;^28owGG9ONX)h3cs>p8^8p6e^(1wETaw3BYE|ZiLLwg_+zh`8tkCmL9yi* z%7-!2|F!O$rWKhp5uN?hVhU~d5Z<5D8#FA}$*_?N`-urkuLiAGf9i|gQ z8+TVcXApzsiYNpCOy_Z(Bkfh|j>;8pLz`d3Nal3pkEMtMwr3TC)z~px>w9+5#^A6V z?P;KSPgJ%u@eQQYZ&NEOh~U?W(p%g9PY$2a-7Uwb9(Bb_Dj(qixF%vEUD$9w7(g3R zq3qM{8X%F-3@9wC3vXsk;}glxP)ur1UAk7OBV3=F?XPT@9obp9Bz&4x3DC@ApuUPl z*Y~DR4kUs8EZ+%RXjszMdv*X*pzdR*U!NuZV#;$c-l!Mr*+XZpBDy+q>q^?W3g6wJ z-Mb?3=iAUN)R)vG`$=P8C?DAR?I#<2y9_|&Yzh3562Oic(&KpU*wQQH--^dkxC)k% z| zaUNl`R1Wxgy!i*#7oRRsR}i$`By#yORBANR&nGL%Mc#v_K@& zK&;Qe{Rz)u;%(=93y0r9qL|q*c<=FbK#LsQJO6C#n(&t@x^sAmk$pNkAMkG;Hdv~? z8<2whDJ{ah{B z(=g!B*){ZqK^8zOTzELM+^in?EC!D6uwCaUN&5p%(>H6?Bn#s=iiX<|Z~dmsOjQrY zUWW3N9T0JhJVTFnP`kI&y06HOyGo+qP}CV&ABvu*UqK&J`O$Jxu@d{=B(Dfr;ikH( zqg!?Mp;^(Lqi|n-|GX1elfx{ztxz@eH(lcHcks$jR~kLU3x4(;ZNn~}DPthI-<;4P zio{2h!0UFXxvWUo6h`t~Ad~Mj-^2AVO-B9cZ5+!b<5^@kOSTc!9|FVEZLXgaU|LAo zJjuO^3-To&2a*)-7enzE5$QBfmo@zYx?*y?Aa&jMdc?_=QQ?&9x$57CP3enCTNFW} z>?6gqm3-^j2H?AgPpc<)-h4N&==t0CyWAqY{|i0jO4*(0(&o92l`&6FGTYU zDqPIuB{nwjy@680bK^mEq__nXe-^J+-A*9>lsmj@A6^*L9lP?0cHRSeu0yt5a7ycv zv%*FJZyxU^Njpwou0q@G9{}1u_J?Y}aKz6vn9Lxmgf(T7d`+;{0XTq!-l0p@AC$5l zQo+f5+hqz*U#>9Z+s&=a7_DVV5z+UUuywR{wVF`D2HFLT@N|feIBHMK@IZ8 zyr%^c4BWcLYpq??%kmGE)B1k4L5A)%XX>gxM!{$D23f=H^(UahTr3F7Um!hJW)CW? zv!5G^KmLUKi?}tGx~|{H)A|Uswdv}|pXna7(xq2U7R42V&U6H`px0DDTHVx-Gs#@F zy+Fhew4l-E9lg4JC~m!JF}12EI=%~=Qb!FEQiHbD9PI@?B3oXve?_>^i7c;k__-?o zKgj+6z>AW9WuNU2pda=_X)cC|d0ulM4eUDeTL!}h+*VLYKQ?mByIIIFe}x88oJD$IfJ zGyMDtuj*^|cGd*%7u)aCyNYahpYbWh9D_k&>5}7v)~L(HIbT+)Z_Grg@-oR! zJH*E4d8{4>nTmH|J-`W|AMHT8)8X`wGvcwD=NUXVFA{K7Ge5cyee+1RoMHxS;m+rg zsjC2E_h2nISMYB?{0#W7Dew4^VyfK%m|I%2`6=@ZvtFyS{hV6PYwtb~1RsPgFUDPB z=^-G{1gpbIC`L6~ZU#ezUFT=jf1hY%zrg_*=|1D`4GEI_lZlxzjPit|v|yIG2NT3k zrqfYmz-5foT*e@dFvGU9n5YJQQ>ec8bn)@vVY_otu0GpYA2Ck%x#JDFOdNN#?oL@x z*mQw=?At<^E);Ep@Y}$}>Q8$-N;&O@38k?WMSd)?T@mc!k!|o)j+(mIKw`8 zM_QZ%JP*!yTg;1>HvOUieJ8$$g>N{|NXHfSA@kKkl(Vvp-IUnDGY;e?$8|pnjo0U{l=2ZoKo9 zeI$1VIYh~>YJz-ZcfJ@*9$$D(~6=+SDiUuTK2+xj^)+I8&#aQ|HjGoO}d>$cAxGavZc z633`2L~Kzv1P=7sW)d;Bl(io6zkj)vvP0z*N4Rl+2d-JW_kNM3#k2IPqZ3;|1%IeS z?8Zdjdk)uyPaR~4MjYv6XK=%&L`oNaA9HL-u_```G#ZMvnc+eKYlb*v#MJ*m#}ytCIDI{YTjUEneRn z^##~-q<$V%o~VoCP!Cat8JKau!gO;7ILrSZl-*}klkK)QdJriB5)l=U5>zB&p-L~o ziU@*$B1$I|kq*)X5;`JP=`|=w6DcCS1PE116p$h%^w1L$APH$N&sux!ecmz7INS3v zUz3shy5{`N|GY(ov%WG{E^`lO6l{y(j!$B~1Q))~ICX0oA8GYo4?hlbj%B{W7F}at zqt-hbd?~G;rDdS(=KRVtP5xc)2Cm`dNbsaY80`9Dv38X~1olmqZs@z`Za>dr*>Vn- zH`ge!x{6#v;FfDAza&1|iRb*{sviECx-vl-C9km04%CXQLiDn=2Llo$sQqbH7tK(c$aJk5Y#nDPpu|Za`(Vsuv{mmO$9<<_KVJs%?okt&yLty zGMIe>c;yi{4XKb4jHq_GAuKiMzuJlFrT9gaoiaH+S^pq`H0a(;0i8r$_w+&{s-w}e zKKzcsgq_JBK*4@-otM(JA%Jo>IFD#n^fPrakks_jyw_OCqDTdMH|+>74?CJqp6ne%FEyTEH1Z zZJ2#mNiKVR=78(*#k%Vh?*bE&QrLFVP9Qs7=iwC&)oATguNR1vepsMp@G+SIYSAgw z0y`YrI}Q?^me6fvpUs#4l3iyS}XCdWnq>1m#80vbD!J>&hq7wZ3dWMM5sfk%fpxadbh<(W>c zflHER@<|Y4z1~Aomu8V}1 zi3>FSOqMWTpuhijo>O#ia2kOqThcj`^E7`q%WaSSe z?%zy3x~Q^lk2`*ej!(CW`!t1TXRN}rjIv4F ziTa*`F?hGOs}G!<(||(3MF&$pX%BOas;y+vHAIX_5v@H7VJ9iTHI*K+>a|y+$S;dCP;7H=+H>8L za0XD18dxEQlKt-Xx#na`+Hcp+-t9o{ExI{3C5v0T;E zln;U^zk9DUCZeAk`t-wOf0lAL;y~8gUglu4a_Mo#67)l&`Jl(w;GOy7Y?>#>Wd=DB z4KjUn?!^x!vn9p+EF28EEiv4RmHyKdTONeg-8lFkz0`NB=Y~x9$U51Px&hM!#j3WK zwQBGA7=4V-4CQ#PZ#YHC7x&Plw{M3LL5&e<8n>YGzO1??6pUM#*Ig zOeVO!H)Ihkk&$Vz@d)7)6VV${T$D&OnAMrlICPmZ5b>ZM5K-&NH>BJw*)8ujb}RX1 z)@ikx2UT1%rEAojH&~;NJT!R2KNjWq@tmnCUd^=e@wW(4tzmN!RvL|HY##e!JqPq{ z0WT(MR99F&7y$Q^0b1u-unXExcA{a!)ul6}h8+5eicbuh$#>BB?YE&jYEth6P%~c{ zv%h2Gh#D|>8yd_M@%^ni%T?3><2XG8t#QIyzWJ|92zNBS5XRgNxd!-p{SWu|wi1lZ zjHzIh)63q9aCRTfx$;UTu~%9}?-#nN-Ra-R=gh9|N*(R#c!KQGpa!0)kmCV+n%c@p z7a7oJgt5O0lJ-L03@Az40AR1C(iHs(-LPsYV_`G1iW>B*en>kBKd`L2D)9Vm3zg{a zk~sW0a>wId*OaSngv!mw@lL*xDClcuLuj0^&vT)-+;OdwcZ#hCdj;vvhyILrB73Z) z7yLV}TH4@2z(uDqUp!wBNy)-b2ux=7$5%4dfy-s8@xfuw8X;VWsVcs8i`^zj_FGBD zh_VEE18o!gG0xOM=@jSMnS~n0FZxMBzkB`wRzSnz4+O{Sc6bx9sl3M{Sg=WTdnQ2x z{D`UonKub@-<}gw+oOv@pTjt0@^qfHh8p5p-Ulot4YP=x(xqE+2j zaP?lni?Kg;*BL5tF=sS!o7Q5H?RlJWG4$&!o(C59Jv~p)iKb{vLk217x}FsPZo<-( zT**{@faM&n`ip9x?@ES9$TZ`4%<|n>4luZ4$h1O*8dJ=BV>5 zx)r7qJ1a2O2hfa&0DoiD8)i!nOe=NXnE0m)8}u!ALz81s{A)O|qu(z}AT2cPeU$+; zY!)bp7l9%S2+~DC_rc1?>f*03L|I+K5(9X0WLwp28b-JR=NLsxqtTPk3u{t3cc#^! z=8%?Zya^}9{ANBbira6k!o8pU-I=U))|8dL3_iLgWw51YJ()!;ym2`X9kP38BY^O| zvT8FSce*B7ipsN#lULrdoWk6ndw~wpyBi==7e0a|C9luRzr5rrDe(9m%uj9n1VK35 ziwuHY=&Tgm9nB^rW9HQcXJs;n+!KHYl~?*kE@|TyKEgy$`mMWgXeyN4{}ex|MB9QK zx|JrP=fN>ahU3>$l_&#=qldrjNxh2T!fJ*;>)v#|Ro5+aU9}l3*`|k&F_5T%MHxC! z=rpeOVWJAt0%zNg$*i6evi$(Y_7AFbKFa!2bhBTZXImE(2P``)2vSUvVq7a#v5a46 z$}*?RK72qqdoyEF^DsI#N$VY~U`4<&NNX5Xe7+~$C5+4=vEUuNFrgL#a#~Y88g++GsT)|VH5g%2s%c)4zhMHGC6gH3A z=8zXPR6ss;#Ffr0R?Z zc^IM*$raP;(&TaYztYlw9%m-=OIA$QMSDK7TejDIf-)_f9(O->QP0xnT@B4NS}oJy zXG&2^4Cl22VAN&Q^d9<;_EzPqu6vS)hGrG`4n0bThs>Z&ix}?UMqWQoVbnRToN?pk zGQdv5Q-&Y)LUzc_599<*n&$T!l!}64ichsI`G|qryqM_tmH}cNN|^;zGyLq z%XDORRFXw91hyfn>-rYl!i1^(0mN~xPct!Qn@H*VyUiaO!=vwYP-x)}*G`?|#V=)` zjsfWc=kBO1`pwhy!vjZ96nO?8*O0c|M)op$h>Wq`nktl+!2AQShx>MxaM&-RRGi+~S-FGnL0J~j~^5H{RFB1-bdEW!THwaso~ z;yyll)72Y!##ycJR(j*#o+wA|2Ry2^e_w=L27DKIY~Rp5KWKTf_hxezMZauv{Ohk2 z+v?D&gstT(!9m33tAk9%SoP%Ig#VZZ9}xPueb-I@nFr~2^sWvMCfg5xwpnD5jZNWl zv~n(hF@83Ld3I}-x#Ki_S!jN-2uAz}DxDYkmuSfRM>KS)g_^at*;%u(6r?mQ_p;Y6 za^;Cu8XtWq-Rie6)Mn_Bb3F^QKpmDO=@WiI)iLtC^B_osV{x*+9YvQ08wxF2P_vaB z@iDS6d|c5_&~wlEZO6LsT<%_T;ZG+!G%Z6_-K`?k3{m|onKiYm_fMsELZEr`{%Ae& zvVeLptS?Jon*nH<+Yo*yc1Ac8jWOlo^H*>O?winS07cRdts;d>Ix1x#`{w(apFUIw+Yg4nO z54jhv*gHRO{xl|oGC#}_&6N|$hH)MlZPhUPB}uJ|Fl zUb;$yKoiH#8LrvK{nL&*3AyR`^ zdRtgSP@eB|afPrW(x48&IU_DXds%v}mwpyK!EK z(k0Ef|N6_{c4pCS6c#4Y8?td(K5TmOWm(=)$%A<}AKUfSJIaw>?r85^KiMGste zm6}~nXolCYbsX<=Hu&+y{ljIT+TBH>NAd%b+}d*a7J%M;(GAwuR4^3#xlgy!NMA*` z%OD0&Jb0&JfVzWusie8JO3a*AIk^*~5b|>dk-)6%v{w#g4XO^J{cyK<`|$I)p4|u* z&vmOd(rRi!Fhsa?@LLOYNu!o`{d11Ck5i+Y9qp%z3Pjz<<`NEvYz)vm9B!T!z+^>; z?oik{hf?u5z4=j0t1szd8R#ZBcBYGD(I8-JJZ#oXiuV3uBE5`RDWS8EEw&6`AR_xSEYE6RlYvs2#r^?Zaiuz zNOhGs94?4vtK$-n##tR}*wsKZeBdhn7lVW!?(=4-o=AJKI-$;Chk3i=`?1~Ameys| z;N7FEdX222hEWvrU;JH}X-Ap2axwjlQSJVz{kIn}(gB&BNqy0Fb)_RMN>43v#QN&! z^`Wm4=ix5g759e~`lFoV{BU*s|G37{7(w^Wg2{cCZ|Yr_2>!c?hnNC3tdVF(+H!8nA}v$;BYiJsb49yKfR4d-N5ih z#%4wqS&xc0D4z3R^9pT+Tc5wLurCb3n@Rnn zyG)YULLihmX@!-)_@)@NL1qZTY{d5wPGx%x;FS3EGz z*o?Wq-~8Mu$FutQ{EO|K>T~+JIHwcgu>^ZfmfGX-fr+~7<_|nhZ1F5tEp+Uh7Zu*3 zWV)u)dIBJPDim3m2~+!sy9m!<$h3mLFzDO*jS^j`Vt1a|;nW%u%#6*vMwA@bKN1ea z`N=J1FP^?_P#uI9Cm~f_ca)tSCwE|N{11PraR5C5YHJIRXo8;+dv|m9*FDe$o6@~I zJYM#I=+~z)x2DbZ4*b}$rHqrQM{{!A9n*}Q-5jdqe5qwWR>P8r?eKhEi;a)ELY@1K z;ioTOBS|j<5<*LJOY1kD?VSE0t7+lRn~qj~l_#SjF^piEWzy>h=4q%w3+jMkr%QFH z;qyy?HW&pB_{Aq47j7G#yid)8^>u?wqhUP7RCedhF3DCcZU#WvRxXTr2oWr9?Ky-9 ziiU+5buJW}#1T|HPjJ5c>rtPYV?YL12=#_BAXDAuhsTdL5p@j~$r$ampt+z-|Edf_ zC+pP?M>Y)VjINEE@$`jsy@$T4*0|U{SsjikyrH+A1bgg-LciVS|E3N$znSF$8>x|( zOU9!_8mOIHeW52Sv{0qG9kJ`A^?qkQ8Rk;f{dV~@K(%BpZGbO)PkW*EZSu+f-An&PI5)H=2J5MOvZ_Jk$+?co}=Gk#p&Cz+$ zL#5k2A)OH8Ps&X+pk{v=@R+4vSlMY9on!~g5`O(lI?4`o3f+j(eYMG|qQ#qWORu`9_G*qecK>5k2bG<Xq= z#r}dpOg+rj;nBO=oOz9Z(1Z9t=;0SX))bjkqfurxD{>_ciNYG@T*oXi{27xX^BO0% z%}l&M zB|+Cf>TdNOUa^Nn))=D5Jd(ZjzOpA*V>fN`2~W`%B4A zp0fGuTW}2D83421-q__Ar%#qeqys7BR=v1OgJ1&?w9tL1x7KH;{#YluL}E8~o@IUo zL5t4G#b&`iJkZ~G(zda839G~L5FR~k^>y{wFSacBoWqHUUSiAyFVm+bJUgtlOyM!J z>D9IT-=|>-Yc;<6oDcuHas--Lqo;&JLY1LPB(IpUaG!F~WuG|&?R4MhtlsA;@Zehl!&lYst`KM!B zC2H+hEZKq!dF$lcdu%-ZtMokh^0Fg*9=*&ycum6!Iz0rd)&~LrtS8pT?9C^RI`}o$ zym($D1SXP3`R5Gi^QNdVJ!n!@E>&O`J4NkpV6J3n7&m`PPV}abmqFH>e_s6;fha*O z%PIAVgqEg$dAE)B`+}v$2hpP%b2($5gV%GseYgY$D+2KyPnbJw;Y_5n?C;W5ER0F1 z6&1NyS^BXn@q`ME^Ar3UH`>RS|ES9t91Zb&NuOiPl^Z;Y3xc+VKYsD=^$Z zQA2X>>u!-vrp(zl>sz0SCZ8mA`dL9+A+`^)P^BmISaP%a;#Q%4rSo|9*1*5LYh^H4 znPN+gqYS*WCC>o2u=&O|Cs0x$UGM7?u=x1sbe~>RZ&{j`7XTcJ${(0d0H*hy>#M0} z<~*voQ34)r^=*5tD_`T z6*g##^G<=8AMt(%&QC0@WaBZBi;f!9hPpiJwrchAWWTeXE=}HymR>q zRWXN)c{7m>=D4b3!#k*7epry*0NAO?osK+$lZHv27?yn2%!x;iQ7F4-KQ=&H^DC277%p6ua9GPk4}(tbe5d#-9hO z1o`G@@@X>@HYXdeK23}{WM(u?k~EM|e0VnP5{*tA*y%TCo}*&Xu=Xd9IE4$YStH2R zt_h^-0FhjulMF{12EoE7zh2|kR`J*4Z#!p6;Sxca2l2v=*4-{KlF1Hwgp3oZQTmm^ z+@^wYw8Ks1Gph~o<(f9`iYm69*@c0s^feq`0V|N4m(-ZYV*O-EjXGA^DYEtfNMA|0 zY`SQe&0=>6`pOteYV^EcGnG6%-1%AkmF67j)9;u6-jF=T#+eA1ont+FAP3%+cWA)3)HnPz?W3T!eo5GG*#Qo6-p&ztggl>v+eUPsD z!ieZ;I{NvH&t4-HlJ}uu6yqMu7z9tf3l^-qbauYvXLzyg?e>b5rmz*X{JV4XnA7pH zPle*&0+T$xqL1a6h{(28#=ip+(y{27$eZ`>b+j07A-aKqw$I}GnOLC-Q|ZDj(eR?i zYiH;xy+v{VViDfxs}j9OE<)&~mZ*su2W@q2(oir2-tD;H%cOdf%bYrw$>$$0I#@t0 zgd5zieB9cJc}c*!BRaZNHgOnQ^`;! zEE_k_EuZ+S4h?QhkFZIHAbI}Szk@gr_#BwsaN@pW1*hH;7W7s3jN3m% zQdt%i{YM{qMwx2%en%0CXTdF7F}uJ_ZET%zYHBS%R)UV_D{j?nSNIp(QiB*m$wB*- zB>_1(&zOYL?QIpWP=MR$b|4z8$KpvADF7W{vI@RT5fQS{nzv+wW_u0j6T}>uewfU> z0c*WLE8^CBOal?eETaW6X^r7KI5HBH9DsaeB$6&UK&L=YDe4Jp@bD9N{LHd1H<~@Y ze-=nel#1T>l@=&wul~!2R6Eu@6fS5a8#GeoT=Xal6tGbkDsV?~sJg0p67=9gVE??{ zg+#zi`QUt4?fsSQq-#h;g29~lyb@zf;EG_UyBKAL{hTs>=>h&^h{mOxnRS-?%9=NX z39_*70YPSj7y7OkDc^~s3H2b+T|5JI+2Mub`Ne8qKBEj9R8XR^oJmxf z69k+Wz@&3IZxjGUZS$Lb!VeJv*rMaB|6c! z@3x_WCTix5&FGZc?x-=Q@MV1JD|oGOS(rR8M@ zhzSUvY&fgg@x1e3WvKUd3OfWP;})0BC}qkq*IAa2?J$k1T7~6sqx!tpj1edAMp@mu zsQ@29#JE5Z`^-5K5djzIL!CW@LWPm0W z1Fh(PFB@u=6ordIC%MX?fAmk#1WC# zqu-mw7~p&S0CDrT$fZ+l!O^8gpYJSV2qW~yG+syqYc;$W=06QY;L{k7-g^D{Pl zf$VnP7jZ>*6#eeSreAm#<@jmPg8zf#3CKTo;{3tF5ny$qmF2cukvwC(cE3wovf`Hl zZ#MHsrncjYmre_;xSndcPN~!14}1U7fdm@;xO!sp4^B`i@>{q~bg<5OIE?iOzVfto z0}<4WT-Y2X!aqLvl}2#?FbgGURe7$lF}{N$n zASt-xL5_3B&_mWjdWvNTYdX^uNSpt1T>QXAz4;YThwfo+p=s+EJ`RW7WjDGO0t<5{ z&!Y!#EZ{3U?zvm&h)4VQ+$8>y*cwyk$?bR_yg733lz1a)YDPlC+!Zi>qL4?E@}$&& zmBq{3pD~^qmy;S`?7^|!cirDUX}_vfCmoFy<#1jkVuSKWCl>hW;k8(q!y2oD6_vDw zshUr0Jr5*|EZbmD+-u}lKfUOJc~Z}Q*Z&5^jWQ&(#-9H5k&@qzI`8YGs$j{c|L@#~ z+zH6TeeQg@i^%QJsmxdL-QiaLi36T^y20cyQ(-yD*e@hUwL|wUCSJJ&B+z9m zNYTQP0J#}W9&L49y4-HYwCYQ#*S*l0nGYH+tr&2CbX+9gvLa10Y#nslM<)`=k8VI$ zpwQy^!TAa5lRZ4jejptJEb5hoZ|~yai)U|i9ns19qo4sm|B6BUR`O-&M~|_?<@#-0 zv`z$(HVV?ss0r@|`CJC-+G>*dG7mMGla6s$#{90taXpnPXu+Zde>`dvno)i1F#acK z=0zTxIpXEXl2iUU2*HC#o@M-|oVh-SaOaXw;p7-Emn|cYa05-7=C{x@nP!vo@{ZR* zaPeQ}xzdQxM=?H{O?rteeISLX0Yf6i@whj9(RR!7?|u|qv&p<8piC|TfBm6+$@_cZ zASwAlRmZIp86Bys=8$I4rjGja6Te-h&%chpb*F*F`nZEl$HXKc9|_=uVzWOEETCi_ zjdPC)!&|mQkGU})WkR-bfW+ZwSTkpPyW7D|h_&HLMTn`w{+@zj(wVX=QiuDvJ3GP~ z7wO~O@uVuXiTl$=p_@RV95XI8uph@&nU668xM<*O`y|x!W_GLx=e1fF9roKf#~-B( z5A%=kTDxJ&A6uuRTX_MAgNwcN1BBy?%i|yCJcnkfbDl>X#RADa9h02Vbeb&)DZ8MQ zd11txG%KO$HRFx9Ygg6`INS9cYo~rB$roD{U-%!=PpgPe7O13SDKMsE5>M=*3+yPp z*zzW=_OjQa1kv9VKWef<9hI)?6U^ixYsusB+)>}gE0|0drQiq(VOGE@<;UqRnh>N5 z?d)rmcW`=VPrF-Qb1YEvvX+~GP2zihfquA z%Dsk@rv+Lo@Lh8-%yS6X5Km@*l4l^ha1nXu;mL_UG*DeBH{O0cm7SJKCI5JO^gq)T!y=R&oGVOi?J()HcV?@Sq_-9u&R5^{Va zljGc#pPsGMV`@}yQ@V`scHM;rAD2Lh7KY0uaWT$Hy)dM|CgUYi^2QsZYn1S{L=j5Ib$+{cMJ`jAP=)r z#Kn2^4K%MP9RUiUZTO)t#xOhcb9c%6iB;A7yuAt$t{O~a7T?;81C zFq|6rxz18TZ)QL7zYK-%U_V%Je)Sq12QWH)!A=JT1i(gmsk=09Q}|zt{WNOut6ce5 z{si$+7ojcyOjk>|nykJsr8JiiB&8Pew&*1xx{vAj74RynvQvd% zutZYRxq*pF>UiW8&Fd4?OVA5?$0vK9`TDboX?x7Ws?U6(=NfPil$cntz3Nfc?bT?$ zFg*n9WfO(^Ez(6$d~_`{7-j%E7vgMEVXZA4IdtdbiI)jG7dVd1&Ebb*cALf6(>n41 z1Jpnhi*?wic3#|Sb_AQrsr1`%7KB3CeFmA9Y!Q*Id22ZcpPct&kQcFm{sSh@CX)Mi zqnoR@qOFQO`--)$_wP9kz+IS1+!K}4tQ1y6%{qz$wwFlXRX ztH~9{POvFdjtgGbI-r~=t4cX| z#ZRRhqMyizb{zHbqDszPr@EQOBt!SPf+tI_rUn2Qck`P`?(}uS*SymUs9{5E95N*+ zj5Jf5TXE~Z`6QZ2iuC^g6vMy0U4NtRvj5i?i-AE`rO5E;x=q4toBI+bY&tC z&iM`IV3c~*ColI40}0MAJt2apsi~Hkq-LbW7xt7(SC5P`4crt`KmiafdBnu{)3xr5 z3{9(c(ye^$1oj63px~BO{&scW7})Ug*YO>n>T~li)&5Zw8Q3fFm|6u-?!@6;NO8sU zMa<8?z7dqSqXv_Pdm)zt1Y~R`Mz&&Nqo2ybLtljTwDvka`7A7>ZZ}ZH6}xKoEt}CH z2&~86=m^k=$)RO{uZ8Hg#!dMs%doh)9G>d?!#o{Y^AwfX@Edt#qY+RY`m&PPQ_&rz zTvb-yq-g`T54{(ymm-ay6J>{gi_Gx-<0l=$E&x%~qxr_m=&AV|#QV9^#mJWb@e^_* zB6gZaFJu@qgnp34qaC^38QwkK_~MY{Z>Im!lMAjJ)kk{rf2Bj#HUM*U=#!n(BWHB~ zl?}17%sng7t4tfXCG;WhDMoRxAMA7#4jC~H`N_Y|jz+}u(V{HdlqOE?TF@8X=Z#fu z8!df=d#5cPy&q~43D1~9@+R|gzeLmMk`DjE6RVIYRqD9zZ?~D1mSP+tuw@5^fbHSF zlY5Bfe|hLrp3FPe4#~XIB%76SXWA`xjBLdX{P9aF5@#j7pR$U2UAMEQH_U7cPqh7T z>e~t=|J-P<$D;%$K@D#cL+L<=H$9dB&v(aVqLGMOW=C-1ehYrRY^cP|@r%Zx)5X#! znCJt%fn;%z?P`J5j_l#*yq8)J$5phEp32ax$sw_7zOPcHbC$fgUv>o?h1TZ?)Kj2h ztg1W7k->R5!eC3_k|Ko5bD2-&6k{f-mi3CAQV}1z8ktu8;xoptmrM&y#N>1uFz)hH zK~g>oyUeWp(wGi96t1LzuA;%WhK3Yf3uAtg7t#||l?N+P^y-D9O8%_CgtCk|6ti^e z(i`LJ=_i_K$=$P_T-v&)AN*$*fEs`AsR}MOnwQnDbC()JiWC>^-UsV@s989kuBhYD z^xF^%5QWpG&m|0C|G)+jtnEYE4NO92_g!ju5Qk!EZ3k-Wr!>Ii?Z-R9+y79?r+-t* z*+@|#arvGVI890*g{SK|oC=9@As9Rc{Ow_5eHI5~vR*9g_^s~H)}{6SLQXU+!S2*b zM@q1>#WYWaaQ=m-Y|jRkF3cQOO0$vVuNXIZEC33pG_>?DTNmGVQIQu{!`x`!7rH_1 zFu{rUK@Zs}cN_A)_E5PO2c_M1`J_WuV0fQBTKA*qNs25HdUriinRUJ&}mz zzQu8^JS z+f{F+c;UUio#Y@S?==oq9@CScqcZ0HT32ZNO!v9itg^hFPJb>iR+VFdqEnX4n*~5C-TN}bOsimPK6Xvwit-crzMLA5Hjlh5KCLFcfDZ&7 zHa--+AK{t&`W1KkUhw=$*9_wUyEqz-18MP6Z>=+x@Ln@b5__G9;B|>ULk|W|Dy{!? zU*oj1^;uXb*_7LvCaim3lVRwPxR)igXw%D;IaDC8L%xFJ`u z9}0s^J?#+wE(PO6V%2RWXOU=Q;P5s`F+c2|aLHR3YSp0Uq(2Rt`R8nIP|h?81ZEyr z5eCxx<)0|m2!W;3W|lqkOhE2vbi_MLYCY(8J!c6l*Ij>Or0w-^W79pcGC45zwcF8q zsJ8f+5Q|#7Mq9$Wlr1rY1_qm*Q?lz6`pr49XaAl7SCvAeVjG|P%=E-Ix;8@h#qHXY zS76tkvKFPRY#V-l=+6E?C>8vc^EEA7%52!9HCOe9_O zIGVX4Mt*YzO=v3T<84l38s5vG-F!c}^OsLBgflDjAZ4A0SJ2HV>+_v0=fI*zg8EJ% zM;>m*cLy*=(DG|)$bR6oPL@<&dc4&IQ26@^wwln*SrdRz>LqCO=>lb2_^p}J^)XrI zO`^w6+Dq|2Z^%GK){0f$*nN$3*zi@4Q!$X%Ko29wSKftFK(jXwS|2jzmD(1^+a7DH z5e$l`{%~T>pSr$LbXbm&QT+(WX~V$vR3zBvn4cHFv*c@e^S&usBh^{AFRjwfrKysz zfTAeCKAfc+{v=XwA5g$fL`uDM4|MJ1y!axKFvVd0qr9Wvf|l=fIh-$(?Imz`@ymOH zym?06_)bLHxW>Nrsa?Rkw||m^d13zyEYx83GPO7}ta^u^mcG#&b7XPXxQh#nqAjy4 zQMBK*Av*GcS^WtpBA>a(Y3Pn@6~&tXx#XEf;xot<@P^M0LC3HOZ_Vg@jOPHKsBL`m z{=Bz_pT*zLu%hYh^YNjhl?b`-wn;07^9J%iNA#TU+6qUes$DAa18E{H_XgXqHa-+X z^L>+My04%)Rg=azc@u*?ijWlwgyjr-YgVWrzatH9jdg~&HO3j#Syhvq5Q`tB`m&O$)vM7fbe zWDCT0Pa4trPxhqW@Sp679hNI8z{{PnGn^4^G?5N`f`FNa3Giy3iJAK>Kw<}{RIm(2v4APY^X|$f+ z9pjySZ zZf&7Dbb4j-?c)Fmq)2c_SQOIqkK#7|PNJu07a(?G+Z9_A8E{7ttbDuyT(9_R0LB9e z`;hpG4?%cBSeMHf7bhqCZWKfrU-DO+ye}P|OO&4Ifw1>d{mm1}KH0r1m(%Rsh>ioR z3xQ#SLW7q=c<0Z-UU^@v8vwr68}sZ?xn`nBeDK{BsqnG%Uh_R(YcC|@zf|R_$T=X> zQTW8On;pErZZ|!u$xD)A*yBIKma?=l{Z$xTZeul4xshOaEJTGDTv- zghpz1pW=ZTqgw`{0-c13eURpy;K+UR#`m2ZI7p}N2Gv`Q^^}}aIt&Tc4DQ4Sy@QX3? z+fA$+@yn}0!b~C?vxJj&?9_98;1Q1R0R`2=vCh23;}(1 z%echDFrQ8FyCZoYV2HD5wV9YQ{=2z}cC1Ax*k52J^tAD3ICLn4$H_ss&ie+N{&~oD z{=>PWN@D=WogMX(Eq8#YE#hN;Do!d*&RXzQd9o(hPpcmJ%~OOje#hk@Z*G*sF%OO7 zb{e5$=b}HMw1deUd+O_o|EN4>8=Y z13bi+&JONRGWc37&GJOtfHH5<8q#x}jN z?-Mi)RnedJ#QM*!3uy(u)hPTj|Mc;Qpt3<+)ND>|<&A9BQ0uh$A}Ip6OrB$MI76&Wvd==ce^YFgSs!wq4}d;K&5ckhZX=)-ZEx2N=Y@?H&=;azmP+j z_22gSvTN|}oIEypewVEOtt)2T8PuK7Dhcp<^HxxPJZ0=Mm0g$G)&G(9O**kmEZV*j z4W^pviK7UClGHkarJ_iNHRn0taP@EnNd*&lLwn8VLg1&UcIv~|dAc29;KI(>TrT)u zZ{e!qq~`FZI_R92Y2~}j21`&M7dWSdtjJApnpY6u=6L=`$%?Ng2OzN(H=|xM=86|g z59q+wYzCQg3S8Tb7(9T`lX&YfTl!|=V&@Xy>8}a5uQI>i+7$O5dUrvewlsOPWUGs& zCOtU`f1Udquq#wZXEzp*=v8xe=4dx{V{m%>_nIxmG>V_wtDA_WbNljIhwhp_d2|pr zA!vS*&5omvOrW3e)Le)O80gKjXNUnI!`q6v+ufiWM=A&PPDQ8tAXTjp+g(oI*-m#t~#aQV4x-F}2R8=X2b-iXe!7!0K6SHb2e2_X}BU_K;tvc9{I*x?487WWQeoPP=scXcO!lKDEU?YDW`Z zyDZ%t9b(q*Vr{KP{dtrIEwy!3?f;x?$h2^?Wz(;XS*n8OsHlCt)Fm3|>+?Cq;@zrat&dk{hOi>_#Y}|90N^sx>RrVe}}U@>uYGz)NNQD1+vkRf{dgS59Iiv?%(; za?3_8?Y;{p^hA}nJa`Ky zl>G9|Iq_Rj^m)+nK)guY`|f!e>f9~|JlB#VdnG9U-|M$NB7a?cpzCJ}VBp(RP4UF* zIlJ#cd&@E4m&zbW_>?l}bqm|i4glqY`#&L->Qca`n;gM-$+bI30R5}|gSd+!$?@9- zb&ZIuJFn>d#e&^n(=M(l^&hmA^rIz|ixg?^)q)bMUMY3u19dgsgRj{n<4rG#`)JLx zId7*hqWj!zdHQAXH8g?C<6Ascm#2gj?h}_~w3~Viz7Fk*fLCvX%oxyRBY5Byi8f1C zQ0*JT5p%@afIpVp=RJO}5(DyE^B$|W^{f$t$dUP1Zs||bDq8)OtoB8rFhJ+0xasx- z*t;Y(^!wJq)x&Ba&DE&y(pzj7f?n(Umys4y@KK+Gi)rXE9qzx7i0A7?s=-@FB|l(S$bjkc2@4C@>7By7uyxvz9HqsRKo6% zVn3Vis=)=)yhMLLmG60;0z3?CKZyC*jxwI6L zyl%oy4WgR&{q76$RR&pUnX={QNKUM}{C@RkXNZ4aOnx4I9B^onV7RISA#5fCJI^w4 z?=pIb?u(x!J?SjR3oCKQ(Jx6i6~MT23hx4+-K zloaTKKU#g>Rjp;)t{(>_Yj~4?!h#kvAAId^q<)g;>S>p3_qoiDxf|4RdLQY|N#HvP zZIjv-;)mgo(ve$C)eCC+~ya&D_Rx{m~Ehtnz}t4lSnR z+{1X&(lZJYnU5nyar;UA@z;jP=B%Ba2)j4YjE~P$Tbs}^nKgk0JpP)5-Q>i~T!9EY`Wu$bp=cYUA^3S6 zTh~XzB0Ww4K@o&xH0c>5M#z?MZN#3_5f}}V{rfEmhDQ}q2)mvUBvJ7HQ1;&OPzQee zxDk@ol9f?Jg(%tFkxD2;Rx&bD*4g{+ND;DE14l^q%I1#5*=HXaN5`~G{s?lqpz=W94yUBUcEg29Do{B*D-EPVVrL(KTymUDjyG63UkmkeTc zRr`+wgKk&xL~~CKX$CB6cq`%HtP4U2AHj^SO^r3iaJ>dGRt6ON^8S#Pe%-q34+ z;L@)o>YQArLHM6lc%{)m_u~&Yq6N(%qJN61KwHTug1S(i9Jf@R=ITD%Daf5~_zt&+_KRTHVc7YZ}_jZ`0|_IhTWMrtnU7MA>UJL(=OBy=l0k0BS=COQfOeMC*{GQ`W%;1-+U9%W2}0lQ z{L1?yiGLG6<9B=FIu;IfkS`B5?5@{Vehs3lNcK{t4OFKZM=C?>|1;Y%ZT9RaMxa#K z`qcN^m)GnF(IOD%g-Y6@)I0v+!FB{gyTdRFLu=rDONt`??fs zhTuLHM{Y+rWf>mmm7z=ZZNa5t0$vV|z!O=Wu5Ik09#C-SHA38z1}d~jrC)BlcI5i` zBOVg(WR6SLG!@<|N+4cbgfs~PC=XBRY8-$}|Ghil`VJfIVIZr;mls>l*3ovWFnQRG zXRKz^>;SCZu-8XM0c^0VmtrW5Nx^(c`t{I$Ll3XskZ`~aYX-~cK!)}+d@XZEPguo1 zjCCTQrrGoLx%b;e3kno^CeC*x-NGAHN0y&uaew0172;7aPqD7e{~&2#{NmNQ{f)!Aif?^joKzjs;T_`z49ihopg!>ZKm4xcoH-b(U>{Oq^M>&RIi_x57_P5nwoe~z^a zGMq%F-|XkFy#6haw$fk-%>o`>J^tbGne`OrtZ`#~@%{SXs@fmUp-yXZ$km-T%|B=C z;aKPqVFp9TLTQIYdiROtIxt5D7#bdNxZeO>h0<4M?8tWX-UbAX2su8qpf}hds4~I} zpHPcLSlbBVhZZW@?u_B}7fSk-T|viY%Z=Xna$6h@I?bd2k7LxU`>+U) z3oi$Qd&c!rYaBm@4g{Xf%$pnTm+`;~+MmDS`=HUAo=qBC z+$YW%_M)W(a> z2<{36%jj98?8lgL8anXp!%rsp1|P^y-bfl4M7Zl;9Qre_AfS(VOufP&|J|}qcn)|n z_%c{vet7UnI1JKYn%R0YQTJ+=(RelFR|{bG!UNRu(d8E%w(lY#-+G?j5eUuL--Dgu zMj*s>=U0Bxw7;jC4k#Y}D+_qi1;--@xve|86VoxK@X6sw(I8T32%jsPT9t}zR2UdF ze!Q;! zrYPLlh!7bB4#H@T9LJf@J4DePUuuugQP+0`)Q^`nnYHuIa-b5Akgp_}T0ayTLRK}N zJzSJG2*d35JJU7ZlTPnnj%QDJ>TmKFaFHwwe6O-_gxxt7X@GZ3>>OOFd)SMlr$al~ zuO!lrv^lcNm>)Dkqt{^si^tzuBM*UeYv|z?f@VaU20@8-R0Xah#Whi~`jON&s zd)l$}BEW;&^T!`LGSF(5sj?TfQ`z9bAMb7QJ9X7i_$^$J z9;d4RHqeFv>zG|;$l9WfBuN7gX5MLo5G4*Ap*#hjVVx4G2!_#QQdcCBQIz^}vPSaq z7X5cj{XI*QzuX9JC-Eq^CV1B`P23)NwOM44cjBLisy{&)wV>iTH_W2!KYm^H9OM72 zUp`ZNlc)4Dev$W_kW$QY7Uyu|Y$4)}X6MlHF6M(UeNW+&qqFkBAh1*K$xe>~P*s2v zAUS~9WwUlp9@3_mqJA~i>t!%1GtOdlRP6!>&WVXRIu?_3&J_ySNaq7?muES?viiQvrW45aeoeI zQm6Jmr9~UOj9~``JUFfMWmC9x1H5hU&IMqb2~!WCmwPQ5GVUev@(=Z8A?xUSTX>2z z^mqn(45RsCXp@Lzi@UQ$EPrXE8Y);2+0n5;j^5pas0Zyw8_*7+J7_pH8;V6CsBZKL z;L#z7!bit8AoidGKwTh&c9uc?G{x-{5al6O5B@L^j8G=SPhT}00g!Jz!wLmuhklMC zkl&PJHQDajrD@xM<)H1ay@urI&8@p({~Z?6#9&xdoDS&rKO~v8TCVlw-bnze3(4bxYx`YOtija~QZpiGE-HMotesvn?>O&VO*U84gxOtC@i}Mr|f0hWT>k z7DxHcK0kH)-0u0u@>eCU#@kako;*GszsvKDF@EIiBgc<|@z-zPzIXTcl%S(-#A(^< zOiv<5#ry*O`5yS2p$l=(CRANubzlfep_|<1yIqHxFDhv&AO@koVEFNk8jh_fWg^XG z;JCbdnX|eqzt1kiwb{`Wb~6i6YM`X$KkTB3lL8RwcVOcR)Xn|}jn_2_E4C3e?raqd zUtqPgU`fNzB<*b)iqsb%E5j@PGKlZF&7U`u?j@`^s*VDci{uYk5t^7~Q(&GM|3#L9 zbV?)XBpdvp)_f$S=|?==33qUfDgsd*L60$n$j#(oJt=iiO8SyG;_u2*COyJPM3mGI z>ifW)v(Lx^_|%EAIh%&dH|L~Z+CIF%oVF6acYHr;^jcEFLJh11gWx`=O9ho27cJ=9 z5t!d2iD}=Nye8Z2tqooq!dB(CI zSy2cP+J1KL%pt_=xvsTSK?k)DS^)81HYpCY5)GH7ONbrTuDO07qrO%6j+8=6 zvdmlV* zOxK~BH*)txTf>M)V{{T*0v(TT-TdPMW;iINsb+=-T7;98i6tH>eLE9d76WQqP5BW$Dq4PKj|xv zWSJx>i;oaz+C1?@KZBM2ao@r;e3j|~C9cFmq6?MK<$&t>fVm87+UG3?sf3@NwT_;e zP_!48Z@pH4H7eqzJwN}yJQBznPv;}m3nYy>t3nng#c#4c#VR{G`)~Hz@>KBW-)`-* z+&V~I(9H@gkG+y8AmA^*f$?!hbc#(JwftMFPyWgxHjOi^sKrK&?b<}tGZiz-gfO^M8&&uK1@^^;VUh1 zdq{ovqopNQpwu(9d4sLEk56~~Mx74^eR~byDRl|lTPjAh)||LfI=9Rkh_y>%GSQ!? z^ooICoP)juwp#)5z#qF{83t&ib<;t&e4{pEXRmV!anu0xqLjmk6v02CNtILAcn$S= zj;QfafQ0dFbSEtxYrFrF0s2VGi229>L6}(D7i|utyaiGOf~_prPNjvAc8`-uy;d=m z(1xMMRll+$jTh925D4<@>etv5`&#tSr_(6`R-zV{h!Svr-`R%|jqt0=dgZf)3iv#l zhbpTvnxna)`EEg>%{qG>&esjh9Yr?F2N%mZc4ZN`lD>eswIYab@g!5O(dPRb&)$86 zgy^(242d1bTe&Ep{Z|V-bqgB~1*)!A;A)ABeL#nQGwXl<0H>J;t|^rMVKe2dK6>El zZ2W5CQ1NSL_F3c$?w86^oi{x~b5uyX++E-vVi>e21!Z(Dd>MYp7-@IGy3# zvTQ5raum5$0rO4i4hGqA{lWNI1n_DF7+vgq>_;Y&Dyli(Tlvf35sV@p4{q3$?#{7( zx-P4lEgXY4Eu`gF*?$KBz8(D8vxqWy=Qw+-iHm-m+b>GpCJIAw*vTEcJjg6muT22G z0E235wGbB;cSo_H1Pj3ay)8;x zV>=u0A%5m(>?4MLKjX-WS3HqNSBJBqzV7F5zJsSPjSsce!Np73W7bL8Xe}3i<`%%` zy$ip(I-!4m*gYXqk+X3-`yXvS+&z7k8+a#Bv>WXy8}{2Zn^3n4v;Dy78pIG2O(p)a zSZ8|e_Oco7e(R=`Pn`G9!*Qg01Fyz-M=!59?Gb3>FEL1Y=SL`yF!-PCxgg-Q0B3u} znWo{scc8~yA`)~vZS>xPMV3y#QwxD}OT%w02l&3EU3jDIet*e>NMl$ z#<965Adf3PW%iL|BXxsQa%Eg1iDgZ$8bYW5WebZ5$Yzo=?y z!zLGS?s?~r=~{3l!k}|L%a6^yH&E|~Z{2-=E^VX%be@}s<6z(>I7uPw?U`^=EC=It zF85G0ij|M{?AaIeHF`;M(y;Ek!_{wjdYfXD4QyHB6=~J%@ySQ9cfPL$3?GDV<}U^U zy87qw*Fq!& z^eM3l54>mGqZ1eoQK}s|7#G4Q$I_R&lGM`3b083yHihkN4OyV%ipW1`OBGt z3!FBX67lAUgD$$wZCuE$dHd%sR573T5#yQL0AaPve+|tiKD_WYf-Ism;U}{sHJJGm z>Djx(&cmoKB z1q0hQ^~*_*b8p>}wDL}t!VV&g?u)-WAEysWD+ZSZT&&1CC4HTMHrM|Kmhfs@_-WE+ zfgrJey_oWpRtxF6WG>(Q5XqLLR<>HkAz)%CRwmWzYI2K^ZOa(A0Z`YepQSJR76Nl5 zMyP=C`-g0_MZN?)-DMseBrj*dL$WpzrE0>$a7QG>QTJ|6qKns)FxMhoQXWMbHhO^( zvbTC<1w8pB)h>{J^cw}G1>w5(BN=}0JU?>XV56rKMKQ;qu+1Rt;DaDtWp2;pw&5Qa zhf$+t7M3<2-YG*6610b&I?L$ZI5BQIp6UoqZ1n7JFy>`6g@Xucwl<@3NIaPB7ye^8+k%H8V+|j?~iOOmTJXYJ}Jwpmrko0 zVj2(O+AIOEo!01l_@=^6jeV2Z>*U}gan?Tr6I-^9yDGV28V3-uwwvBibUA0+lbc#f z@|1Ov9$z-rB=lM}Z?v=sr{w$$gxQ$hA@oi<7*#&+XfWaB7_+53HBo@qLSk2@N?x;+ z{o2v8RC7XqjtSnObS{x0GZxFqv@=9wxI~C8PhustA0%Q&js%fxC#pxqy=dAS^DRjA zzWkl+B`S2kV|QLO)QfT?7rJ{yVZ&GEK^-ICL-t4KmOwOLyefPJc&z7~GRWJ@|K*1- z;q#3Z+s)OS^Z5g67&R&H8d=B;f}uw`M}JpyKW5mn;v!cWsoEyGUO9rdBp%n8Uk+%h z^Qpa9C9~x{V08|P{<+cUbYtTi0GlawBLiTNEsE(EJzC!FV*@~1aa5SfwkDl4je0<+ zQ?0IeJTtk`TUl=nR!4PS1g6W9Ws!)-pfY{!+0bqD8p&6w|Hr@8*Z--+QFoXFMIf6x zAJb{uWjJj+9n@l2l5blM4J){G0bDT8^e{_rM~4d%M-Bfvd=3+#f7x z!}fqplX(4=<{dCOieB;rdj_SI4H@zLk5AjF!to98jVl_yOD(NwzvHNyUEqEq0ur_$ z4oZG}4V^Eeh8b?CXngHl8Rni~I*f#Gy1k2z!GPx;KASBmqAWf}7YrV(sXJk#U8(q|jl)GZlKh)&wOBu!N=_bO6rEvUFY$fdq^(%NO zxyHz2Et2%`dYn$fRU0_;0qeo9S1*;;eQbHXB<{A2K$cWdh%pCA)&EqO(RcUE(e*`Oy30|b)nI65L zg4yAlR{`wggC>gCrQ1}x)hBF$BkOXaoVn-P^uyLrhzbx1qYD2a#mJBGo?+u2pV5UZ zl_Hht@WjvqSc1{x9F}%iwmqYsv|3c+IAwq9WE&64=(V$i<#cv5r+LIWhAE67CJgkq z?2W-hnMqekD@Cvl&E1zhOA35qbrWd$9s}qy{ZhM(Qpv*pnrE}$L4{USe|RFwss`x= z9g8CaDcy8RBYoE8#rLdU4*|~+`$Uq!MVRsAtqsSf3YbXMSR976j~#76NdK}AD=O+3 zFP!G|EOrp8xp}qrkTfpwJ^w8a%mwVhDLhTNCBuT5-O&zTI_j`HP63?C1x;VLnR>0+ zHthOBq-d~L*dULl*T%*#2tn4(R!s=ImQ%K*_Yo$MYtzp||12khLVPFkE0zptR=w6E zqbT1p6O`wnMqz89G3D=+;!6+}P~}eLqmTXyA^e7sR2nW!1#>TRx^Uwnzr|Lz*5WjL z!x`E3BlRv@WFPUT};LCf9XdId_+CBplgOr4#bOYbX> zHg|341P}nSj@V%vS_G=h@ucvD%Z_kOp4V9)`3n-NF4qkmhpnC=-uPR&TR|>|V?uU( zEH115Gn*mL86*2~$p+cNH<8-vtDyop z1X9@&@kfC)MfAbQUH${d#ZnG6M^rzp#+UV>pN1d+r@^daFj7#GCRZ z1x{kS$+==X02;5)h_}HKuY)^O%c?o#i+9gnhg0&{tbN`NL4QJ2RIaqovo^0-QehDz z=F&FNq?zNwC97js`@*}2QPcBTz{sU-DY&LJc;hySyulN?OiO)g)l7s^GuxK)TB3LL z_fi?shO}r+Y$s_H-9UfCt!{NNc!Ai&R6L)qmCE1z#4J$h((Qg9{Fzn%L~GQCnXeXLpLlgDpyZhfctrbF@$L7(ryKj zMzEZGS?4j=JE5#bB^UOmT%R&{MLa|&JeWUh?rup4lIRYp%TLL%`-m_EDY5wxXNZ-Ihh=~xwNOg?S1}5Sle@akk<$Y48(#U z@(#R=R%KLXxK-| z-9q@=r@}f8D+WP7ZgKz)46js&rv7D-bd!b&@>_tF-n&$B7Ib*U|MD@OV4G;u+n(~n zei^!vU6B=?dFocWU30)h0;i{yiJmI`Oig??PUu>uzactv@QFXweevNJXm(wrb0&%V zT%#lJA1rjKYw2ha1oq~d6KGY?QTnzV4P6^tI!5t<4%s`NbZ0cG3r=Cv73wP;6^5lQ zLH81u=0a-P<6t8&-lTHets65g24TgBx0%|YSMqoVsH}dTI2#Ebc zTs8^0dvbf`_bv{CL4?dgX=8WhYf_#KazsnGKe8>$Xql%aJlGB)!z2O+Z1AnZwQid! zDu=cIHPSy3Q&AD|5fpZYRhw1~zngE`q8@9eHD`nlR0Pg?&JYgAPKU@jSoYW?5_-|y zu9Or!xgM_xUsR@FnHU{5R^pL(pP}uz;fMoKi1z1&Y%Atg2t6JzWnZw?C@$DqrD@(S z2r*mvlVz4=G{{{hay}^d+NsO^33deO`ojtr%|mV%zAVAvo2=tgH|vLfi7D|`!)|x? zMbz(0Wu|4>F&3(~{LS};w4lo?-8n*A7Blt=bV)3X+bqx zzk?HVED1+M*pVwKi){5pF(UTjsY@^6Spp~|q#?&5k*hu^n7x)Li^=CRyG>_$CoFX9v3ZX(Y{E-6!@ z5!A*&e9>!3IijR+@Jwk)m^&qv;#nkkUkbibfg~-v`TAN{PL;s0cC-#D$0xu4hXmQF zmBY}!JTO-KWSjYiTzZ1ABU%U~`f)<5l+9XX^c*_4C82yvcGqqxJ^tw|no7c}+8&j_ z+W+Q%e-ZVOlPhNN{WXl*5Q7|gYKcuuIDy{&hN(@zTc%Uj1sP+%}(!-rUZGz7>74;oNgW zmErz0X{z6F4qqN$!?@zo(qr38;}$>tcs^FIr@tT!&Qr}UKjr7u$}s~kFPVzMq1^QJ z(as>i>77xdxyy1;C8;5{Q!irf3`KBVQk8M2+O3h@R@w56lZG7xf)670N!9da0*rY9 z&)IrR!%}vjOQuu$_Yp=Ot6CwSFTjjKHmxoXAf)K;z)Sni%Z&5&(h<+Pi<^ysm6paVkhOLOl6n^&nd2Jo< z=fAzQbMHDEDo*79*@ZCGAZ-b*rK4bKpB4Xy1bCNOvt{y=<+go zb2F|ys+%fa^V;_1A~OMxOs>ySA13u@D?)m#Uj25amaLOv-ES#LxO;fALvY2Q z{tW+h#0N7}!gh|=WbiFqi#2gv@fM|z;~C?Yiye!riVatIXZaHM-HiSg+H~z02MXI@ zXt<4c!?$5ywncB>aUO={(JaF5C1Uv)(u=!lDsVTvdk}B}URJW}R5a9SU9sN2n@Dlv zNyOTs*&cpCl%S%SL|QGT_q=VVtX$IPb5Cw$&(dWRVmGa@$0OCt#;bQ2>s1jOFFhHE z;ihk-h1>8kAg%L%>I*HvGS3eL2Q4Rskn}^J`QK_01qZS&MdyeSez zO~*)w=6yYSqP!rRS+d2{GM{JkYsPmt2GoRAnonIeU7DEAd8bVKcS6YJZA3p0!wa75 z++2@_k!qg$fHp^Uz9!rj;yX)X@O8Rx!m}M@81f8IQ3tYo8`}RCyWrJjmZ^= zrHWaW$=K2IfGbY6F4P+TM|FtNRynLWbS|)I)->I(tvpW`C$&?C%JF^h{bkfl@9gXC zNm()l(x)?Ft@}JF^ z9JCG##c2nxCOL;Y@2!WtKH4Q9Xoy|;L^=2U)BZfeY6(~JJSGqmb&T9+CX*gzhibu^yE?UGtv5|Hb z{#_XQoG@d0Qux0Wc!Mq^VZA|o}Cq!(@>)zl$$(EJBWWFVgCu#AXKHGC*=R` z0(kNJc@$m$G2?X2Z00!N0YD~+N622BLgOPaGW1p?ZlVV*hU5QkP!^6y=q3Xf7)Imm z>LuD8C(W;~|$Tu(loi@j- zG7ktS7&r6ZG_x}jjMeP5lTYNu-=$}FD=0e!pAjH1BbJR^oiY|*cE_qUUgWvp_9=rA zG}`0pN)j5t!Z_BLmiZoj{?So&XDWGqsxq$Myo$x_j(mDbM*r4=((_lj&0jU{7P9lP zgh#kDgw=Pu>NUlslb%V&C-3!vSk){>*XNNzR(AC`5+M1E1LBAEv03MQ>^iBKRWc@d zr-k`Fy-_`i0!NoR^}Q(#yQWEhFT_LE49_e^M4)DmS0N!=M4h^|MU9}GC*sppX`Opw zcIU|=VZDh(DOF$8-o9kA8L%l;e9`-CxPQ0Rp_Q4FP@Ag+9~H|#r^yv5k(RnHi=OS$2Z*eF*4{{>4Kd) zT0qhBmT11Pl2xa9)LcZ5jS;DEO9_h9G~8Bgp^fok3a%(qJA_0bFWy)4{G)0ti~ z>2zsY=Njv)wMV!=KR4ev81%RbH{p&vt;zNSYDYF{zsfSEZC(%sTjsSB7y3u)V}rNn zfZN(PnIAkXm4W8}xf5DJ?imSLEPMI=aP8;I8P}GJ5lO%L%fD5*Cr#ZvRU1v}m1@3o zQ?^B4*>K~gQMX8a^Sk~6V2uez{uWQy`>2M4jNL64Nna4=5!0i&JpxrF`!F(fz8TtU zhUtLIA6--GpU8%J`aBF90BC(1u87e|1GOr1|1ad9qqa^W5N< z3dSYIk@5(KUvFO-%CseN!SKlqOwV84So;(p5dNzqbc~1?9c)XvbW!zrxAvxgmpwM1sETNlO(LJS za4k-_GnYenJ@ajbgmx+Jo3c3;UvC4VE7AZ*Iu^5YEtR4~48hd>VAQ^PWA`P)v#1ys zj^9qV`wk2hH9n0OC`Ed3Me3b?5ps)R#yea7&qVvP6qrQ+cUb$2Q$>xHTp`>Vp=*f; z@>2{4yn-_bw9zB<^~WK8)b0FDaCkY#m(Az#c=_1epUZyfAov;P^=Pm8jL4Tfdt znX!uYd~ZS(iyOw2tj04tsrTv)-trl`;qAG~Yl@bGP~^;agAF3L)u&$uR0W`Je=d~p zP^wF@JkY%f%_UhX^ZvPzr>`(Rt?iDPCJeuhIk%88^A^BoTV}0X|g~33fcwn2f zExL2QKH=EMsp0MHfdza!n!_ye!31s*$o%jZ1f6Yw~+$TBR0BMV@j@`0< zuk>E#3iQ0FVRPcF9~MU{3j-|g|iRs4jjS8`Nc*o!)WY+b(jLZsd zo6wsBmh^q<&kSiDHbYh}Rh0T83UE^STWgxe8aVZyEdy(5NJIrmHFU_1rCF|Kp|D11 z23t-to1tT&WFKTm^|OEcd=%FSU5OJJSMWnMkQ6^y@I#pv zhV5y!qRpVYtn{5zOcoT8oeSo2hr5}lbOCb58Vl&|NU+{t%vp$|Kb7Wt3I*O9T!I5~ zs|+!}lV_UcU!+|ptj%1Ri+i=qiISE9Z1z2AW|p?Q@n|`Bv+=l+>C%1m zhB21&r${Tjw(N!w0H@a3;5l8iRCoV!KF-dQ5fJvH=-R2fF>4HWAN7m9u;D?1(XCgc0LqJJB0dF(W;drB0GNd%OlKAXUn7VUX?rh71Fj@PAmmmYyP zvk~ieRF(2Ne5kdV{iOGKw!@eIa6Mu&U7uVpo6AoAbRnAieC<9=BjF=z>zIbxj;|0p)GZ9R`dVujC&{OYIof*^)y2mRpU42sCIbbFmiTeI;8 zm+_&Y_cgtV_|-ynBp>3TD8osw5~IwGY@REvJA8HqmHw|ut2tkxk-T62@>M;nw>2SA zM%2y<$o&0qJAC01Vko`x>nppEjnq-Xio0;T2XBpZfgxJ_fy+6)->)<6*!%2%M;d-4 zLP*+xf+cJ6RQmVC_V|vM@`ZZAx7r;uT-h20W5$DH-GUW)sbj&ifn~^JIZ5YVJ4vO> zfE}i|iK)acgQ;d)q{aMTd_uVxd<%9ZztV8u%XCsiko+TP+^E6nYhqUG1ot!k&q1Aa z#-0KW0pqbOrF+fJ-`2f({i$3!5h6Y3E!tkBP2Ds4r1a_$Wb(eRqT{)hMVXj3Ck<5Y z-~;N$1FlmK^sE)8>dVh{`bI>q3~)A7&)XvYo&)$D3OrI6t`~m@YX0gwC0tZd@p%qS zn?|izAD_Wr2?Iva2^M%^*s&GSPjvqi#5Z510CjCz^i-8m=<0+)(W%B3E}Kd;d?gr2 z6P<&;)f%;2fi9w;L;m24HtnsJUb$VoinOUidl~d}UZsQVHz8fE#q$Rxu20oomDrBU z$&me~@9jFxbkAZTC>CrPe&LMG?XCcX5oM5WW(V!o5#_GlWeZl$;lWEwXu|Lt zE~;zK%Hsp1EZ2BzQj6`X+wLPxmY-W{8B~Df3}MDWd1jESO@5gz=Zf%E_^FaoJj0xA%SsW70*(!tWXe+U3pZf7{J~kGSn}wO(E4 z{ux?vwY~-NR@2>%ATVTdpYP(mvhQ#k{=j|~BCKQMOQ;;9 zaoW8dve{|uaisGLzOvZg{ipkT`bj?_@Dngdw%gYdF+fmU7I& z2l>whQ^+_?KHTHC*`|;vJg{}QcJB!4>VW^#LxzQVX%H=da?wePDVdwpM)E#|olz9A z^_s@3ye)IwXtgs%9AMqfPqk>WS4}$QbNUfacK&Omjf1L&>fSGo(tT?nMyjTadxBuO}6fziJ#Y5RF5{r^f;KH*SHrE~-=+&@?F=2Gr#9TRJ{wuFF zfya{HqqDG6w&&QBoxDDOd(+7vc;SxaHBlE9iGd^SZU*B7d+Sk9x!w9uQ#rucHfob( zS%E_fIAhBWcx;E_B?|Xe`j1g#7m|FXs*kIm6fc{OsH9{PieoDC-$JeI06Mx#h^U&S zGSS%5=StlP?*$VpEPbi%JZ+G$Be~WL(7J;4cc(TA&vI7_GLgQ=mlz%Li$Y?Hw5!q_ zMohkmw4AA2w#GMwQpN*Yf4tbW^8T#`-+)sv(7ncdo{}S~c+x&IhnQoi$E(oiWmJ=0=@iFB0*n_;=B{v)%M|Qt;{+cXr4; zA@DWp;WJ@`&9FNEH|NW}XVXE4#2qfL#E0id6L1ILnPdA9QkruRnM_$Q-^Y zU05yjwsB7q80mO6#b`C>NuI2L9J!Q~jbA{HgK~u80aYXFI{rlQO%S;fkjKNIF_3?> zvXo4vT0)`@K&{yMT}Q-5;Zlb|Z<}=ZN&Tt#(Ygj@|5ZK-6t*zGyAE9|TuNXFS;GT) z!tLY^uz=m}-M_G-pG!i?0D-sBz%$|It(Fli*DC99MV0&DGurK?c0*&5RewB=6C5!_ zj=BwXxs%KoKkV&7)4wr0UKzp;YJW6+`CF5fA}wZlqN>co`ev( z?UdMiXCEcaN&hW!6KDRv_C=o{+%eAAOeOmY14~_1#Vdet*I3uJ)hkz;mkj1F{il@Q ztymF>Gz1x#%h%hU0JTt9w90{PdOt%of|`gCe^7O~B>O+XSdt% z<*iRulWcoQ(0?>knKMro=SirfrUKLRTEoZ1|=rV_jP{0R0O1uGVd_V>31H zIno~C0?RUmq6`QOI}{yPro#+eILSgn(_}t+3v5`Z>>NX3(xF-OH!#ir;q)z(5rlN5 z8tge0pjFr7d#m~4=Suum6I;>7j;#d5+9n^bdJC)H9VimcGjH#lO}M}l4LQTGH4dBi zN{aE)_ll`~a)wtXZQ1wr*m*5;g9A_DUJkqd1UJ1f+@6Gi(J!pWsD{&;{SsiN8!sJHUmVH7pUl{zcvI4SCY+8lh+Y<_poO>3TN z+8wEX=EW^jj%?Pk_utYHtYvjPFJ7kp&02VX%5B&eEiuCK13LWQN{mbhoc-Eg)NKWO zuG*m{^ofrkWXJt-6A+%g^?W6*YEH=}WqWoTfq9jYI9`Ob=Wp{H$|OB|jEYH#eg{|H z+2rlbJ+?l%5G@L$Wn?Cx5qnLFACWlFn!z_rs~_=bDiH41ic19v3eHw6n{od(zyQ{Sf z2)Z?eTsaZxMk;UwhH_^tI*)$?(-dlshLL#JN$Jv> zgou$>*>n^9mCa^U`uuLOiKak_A39~5tPNgQR7A<19H=!8oUphUT*_B`s&;t?oVpS5 z`t#Q4d;FJB4~FqgWFK>Xu-#Gd*QHEqC@_E`iXh?=zVZdx_1uz?fO0dmAqwdvGF}); z&P4cW5W72<3K7(WAlk`RabLS(*x4Xcqs$;%Z1C>(?!rV1@+-b2aJC#t72@E0Nf<`B zRYAAK?KEsjI-+KpLpM1<`j-`_SKC5z5J$e@4x=7Js7Z2|0V4W0yof9J!vj&Z_@sQ= zfg8XFTJeSSCH?oN9`|i_PbBSWZ!&#sxZyrdT8V($rKE4|VP>VjARHy%e#s>>yf@P&)#PR9Kkb%G;(pCZ~@7#b?lA+ZXgS+yUYvWEq14(oBVM&o>N={;Ha2O7{(~ux~lr1{>+C~(Awq00+ zmaFoOywaBId7wgKUqrbfkvwLk)MINwVuhs)LpwDdZ1*f*xW6$pp z_jMC9-7qjodEym@T!H>1b$ZQ=Rn|C|7;19)v!qX*)>S_Q{nRs3Ax2rTP94PZh@HA# z#pu963!$^T<)mj}+44QM%;d#xP1%ebdxT7XAPOZHSeui>a`x~f|5%owqB~F1`uxpk(I{&0ZxvJ9b$j-)NaKcIY>YK3o>@J=SptO~ zsek`_+06UX&$n0JOFp-MW`q9ygKC9f;;r$Cd0GCP3(e|en|0gU8JDD_oIqTe-S|2a zYejv7uc(h|wd3+X_xBdZwFfkY-#oSqKgP?gEAnbh4oNZjhUaahy8Y_{v1ZhWbC)0X zmAxqLY==pyh3%l)0>W^jM{B#Ye1wj0!FfD$DBOQbit)OCLq2f_v9*jby=+EWXIvJ_ z-@`*U2}?F~8joloun;I^|Mrow9FtY+&P7J|ibt3ka+kVRweH#8fL#|DESWU@x*w@`hoH3H)9rKor!JC{UN#*~ALA=g-3&zmiUd-m$@N}HH zI0JnAcWT;PkeNgZ8GowI7b1az-hT$*U5nKR8x@7v!E}fD9 z1GgSWVDGGDVoqo%p51BbVm7kof$m}4yv8Q<|Y(GNCkX*U2q-#kR@5 zN~ELzvyU;`+Njc@Oi0Bf_hO`M%;wysop8 zMJSp7@OIU}y~8q8$EVEH)-t7Fe*HYdlugi!&?8KQtWd6(39}<>(?R`S%X6&0+8mi* z4%Z)GgZPSsyMB8HnW$=TXoi$TSnZ~)-Y$N)w5E>w9RNq+f0!Be8ES?5gg9($rdVOc zKDT-A$^yMPoBE})KLyfzz9Jh=2J8XzbQj=PDaM6L3*bB^5|XRb!bY3P;W>STI-M3z zr7C+SWYVG&$<_2gAde7JvZf~Ehmtt+=IH4f@wOUW0+l1ycd0_xNEuxu?$W7AHUnJn4;jujDhX@Tu`==w3^%*Jw*^Gi@k%Brn zGHJi@q%}2WhJaiF7az`$opTP2J0b9*!H+46E5fv?7VF~LbEeLC`4JD%-q4QhAA7a8( zam7-63byqC#56@NJ_REu?+3~T`$9JQEg2fET#WSOL;nwDZxt0+*F=lr5;PEkyL*7( z9)c&hd(hwn_l6K4xVtpLU4ugdK^k{x2=3B2G}74NKjYl{obPFk{kqqvT2-^=oOR4# z#;zbi0mR;;_>sddgqS*KlkAv7&A4{EM}Ga}*=p{3+HGO``}wSDt97Eo!~gQe|LXQ= z;(q&l3h)#HCI%f?nO#%`qFywe6CyB(Z>#RY=es1agK#9z;qdz?0DJ}<1vuIQQ&Qd4 zP#>;zDvNu4SASr97Eml!ov(CP0&kx#Cwk^~X)UT$57BjE~%?>-lhc&2^hrXAY+-E@9*N=9Uzc(g0y^b46yK&&b05`agwQF z;#h(RT&o(yEG6C=12mpQVP4J(ZyODozi|C~YtS1cfzW+5rrBQdr2yTCQ9NY2Xe=&E zU3~nxFmXV4a_a)PZ5n~P-ta2cCjPX6561|4iICa3$^NqLF7n2#DXS{D3_+{|mcbW4 zeqNyy&b^opOZS;$86nI4n+NB@i+&T9_j`7P-$BYAg+&B?>m;gyJ8xViGJL-p=>LZ+ z988j!3#aO8BO~>bj9E^%^?VORYq^<%#1TLJv56yo|Il?mC8#CCJO!jWi-^x&l3WJRp5Fo# z*XE8NA$ukF0Xq-YbTR8F=<5MPeHq;w&AjhKUd@zCKUQSLJYTG=|BeByNy*<)d^{yV zGCOT(3-s70$v%jY?2&$wt@fkuN`AkEcH4mawEn|O)y>vKiA*z1K+qHR)o&@t`DNz8 zX6ug{Fm#)vM?jFOcILE!RLK}RYx zHV8i}tvp&s3efuOYnkL@^)H*Xa970aN~Ryfq~^_`xXW2aVy)fy-QTfdkFj+Yza}h5 zuR6;>Vrf4iRB&%L?c}oLSqX`_g}tnCs1+8v%44Gr+CNx)C+g;_ToI$*#~kye-9LO zGU+^p^b(&^-bh}qd!NkU#rgq#E?aKu1Y?PxruSm+0rxm=NcHH?6d}G&13KcN-{Tl2 z=>jGZAtsA%P44a&_@&#owrC<24rgXD8h7zncYhb0Fmyk?KB@);B1)?<=>o&RLf)e%~++KHSvi#tRe>z88L6oTKWbq@+J9;0p z<4USooa*g7vX8`3-m#w<-jN7 z^nZ1~bmuG5Eh9-Swe@^^Yb`>J;qC2q>U~fX*i(aQ&SAW-%4190`F$_fC1k(?4MXGe zjq>m7+Uz*QNtuVXzvE5n3BonLZ<=76KSUx@3W>LL>^fi1ix;zCZWDMncK1X^kFP`= z55#>Q?4mviy9`A&dMk3>m!yDwl3eK|oBPJ?TA>SnSEqYU&omf$rM0Tj?HIjsgt|(jVn4DP*ZJQAOsUjDerf-)f&SVT z{!tlRjsHrW%-8ciPgL)WWRfbLPG%{h7VcLVSY+Y#_OWQ9S}~^xi@+J!GYw?& z0fE;k%lH_JDL|*Yh3cVz?*tOJ29$;x^q9$uk0UD_z&L&2dY-LsyRwN*b22_dCAxmO z;tD5XEX=v4I}FYW7x}$Kk+`vXS&B1_j(p2U{@L(w9=|>D3z02x zQ4{JIWoO2OS)w;Tj{-E(2~!GsjE>!@3yr(!H8`2_RyD^zB)AOH#BXk=BgvLIpQu_{ zSN@%_R=+F?k8&jGaOP#b8Q?wDMan!LpU240?5{%mQ;D_Bcxys*LBmo5`g!iHk z;=V3#yw7c@PxgE1NhpD|l7xXxXho@k=D*PU2ZzEDNN(G?v5#^-O5U*q`OyN?9QwX* zy=yLEaKNxbQWI%)s`$>M`7HwW)I;ZtM2DR|$tU60D_YQw0l?{OiKo2@EiY>Sbffqb zp%Wh8FMZKSt?di@&D++o>D+`Tb=HgnUo+h!VQ0Xsgdi!fjyl?HR{QMF&Mhga0ruU! zB3G-Qgu@>rm&V_0c{;9%#sD0;$gls491t5>OjIm{6)#um=8bY&xH98Zjp_YlIl3s*-@f`qB2Hk`c||^DmS&F8<6NqdtWH~KkV?al z7zKHJPPh@FJJtYRW+uv`V^&mTy~C+SLz+#OL|t`ch`#MLrm6c@?yRy{LQeqUQ?7j> zi@3-dt#@LsBX5J1X?iXLShfr{n;#nP=CjrcK`9_;w}Q| zE!T8AVHv&d5fMx_ye1WbTpyp$k3Ui|~ae6VTiB z2p<68O1=Lk#kj`>K+CJW4GOl$!m`JEPU=N;MZ4IDaI4OfN5U)~H=+Y4V( z<_Kp7AE5|7U@2gU3m+oRl$&}&bUE)8CM8?RaSrZ5W_mF4sC5RGM7r@)&0>ky3jvTf zs_9QWx&i(J{GJC3-mMvl`w(u|TH2hN->Gj7<>CWh>+(=S5?=(xv_2d5i{Cg2eS93L zT_K{wdk16xr30hEo+U(x#6|loUifDgxsKn#d~+v=VL=7A$$;2*DOFR+!VGHUP&vTW z5$5Pa2{3#_*g3ppX+{6q*IaGjApXO#0o$K2i`qcidSP(A$q)N?cua*3LR(I8g28y& zQO}i989Y|oys+c@#oxmc0oc+anO|6oVIaslcd!#QLBLS3pC~q-Nz2i>+tJfi*#dmg z5%DRtXjg!Cog7$3?kY~~sL{KO(=3F9;scm~-i)?hT!ysSVpZCb zZc&Ng55Faiqyk|3@=t^{)c)h&WF;u_95)KGM9CwRsgG4EM?F-#+tZ*OcW9Tq20SVZ~*{gFzS0r7KNSPu|*SBm4_q0 zZp-_3SEoHA*@nf<6;c!~6qX+ylPvk2l*!3Lg2wv?*g8~>I#MC$&2xBa)hq22SRFwI zYg=;E|C}tni%AF35pq2hJj7>tJ?!&Sf@dYt?N)lLc738w+c;mSI&Fi_*(LEgki_I7 zKHpiLwNDaPf`8jlAH3d2kGyG;Cm>q{UXuSFvP;*iR-FfIwQZj1FThTU^ zh#T7@6-Q~7(cYIe2e(#In*u{x!Z+PuYZ06{P4t5sUjR9S2xVED%c^$UAOp755P&c| z1Oeq-V22M?&{tiOnnqz)IJxR?W{muyfrg z8;Yo^=Ga6vICT~V0=wESNpIEA;;#118Ecy6Dr?Ke>1cAip~}n~t}_X@-OgDSjz$J& z0)}8ZM-ZoEbxGUxoq@ovCZp=)zZduoe-KO^A?6C&A?1v9H&WO`QR%78eK#(zTA{v=#E(cS9i=j12yP28dNlmZVqJVWtbw^zLrM7 zmMf4j3CJ3Qf}-1;z9rRx|3ecV6s<>v85NSdZz<%Q@r`Ni+p4xGZ#o+R@6S#a8gkYj zLeW~BkmRG)M9oe!^zjTG1$B*^gP3NV6TMKAT%eKIy2(6BaM8~zS?McZKuh3G8!6(# zUTy4WAk>T(2rJ8UUhoPy6TbzI>rTK%%p_D175sDG^k^cUP~N;>=qjN)IXr)S2+1#p z!TAt+%+^g=0zU+8CN~ETLhw%GXh+dMZ%4(LV|6Wneq$fUFuIg-K4lB*SuIKGtw zhc^snjcsykZllJ`62as;ok0=63Q3k%aeO$0HFtR$+J)Bi~LFJ9Whlh`(@{Uj`hRheDAFbP%AMx3Zej0~G_+iq^5ui>#Bfb4e#&vCx96hpxI-3|C~ zwwT*oY3cs{J$7inc= z|9e{n)W<$c*#g((Zqj-^o|Bs9miS4Z_!gXqAN^0%N3Qve%IsAy6H`2ujCJWk?}8pF znhngmsfpB=&8rBKH|I0m^UdkSV#4{CRZv?{%tlYyCrtE4^yvedrv`Gc@vK**G~a&8 zVXni)SuS!K~{&LQ#(sb==Y?uIkQ3wYLig19O{j2Sj1EAX6w+3y?T zkegaf6OJ^=Ep=^tQMQMN{LUM^jfWQBU}iC(R#ZBXw;Is?;u_bj#3rgMupQyjQG~Z5 zv__h;Wm%HUpMTmF{EqV|suowmN^t5T^^ALIwv)!IGq_#A6|(fqu$ZnI`Cm{AzJ4iC z^+O9iUxx*)m-zfh&)f`l-F3RLa|hd=&w4fYa}vC)8;r9;rul`GYB;Dqgc)g8IoRs%6}{;F1tQ&fezjt>el?M3qh&b*P(y$vk?VWITQ? zR@Wvn(VEFpig8fzaYWQfv+M@J-bFRw+CjAQuQQ76LH|IJ4Go2%$i7o1!u5e@=heOI zB1Rr)i!34_exEzQet|1T+W&?iN9g_05GIYEPWQd^GbtP$d1aC8R`RNg=+~_+!lN|O z@uT*m*1ID9D=*c&c1!QC#YUda{j%ll$tE`(Y|R3-qhoF)wzELrn$ z#E`W|8(1tY2Vlvw<2gg0$+J>smfM^?DC@a~7o|lBNubn9V9?~qo(5F=4@$`i%5d+; ze7>4fvWQrN;Z~5b<$Va9skiW41cCbnTTdzomIgdezd+jMs8L^3RBLsA1^zv4t!LOs z%?#&qMMTZ}m3nags<4>6=^+vUrM?u4x6D=lQ!~?bS-dE;NF#sI`$^5a#>v~H4|c0{ zb@ue}?J>`7xOe3E094_VdbL=Vcg(Xixh)7nHs`8(qSc3@lV*xn!WKrlMGVwMx==sE z3w35L<2$PY-C^e@oN(~@jR+L{r}_GhCg_rKAe0z6z_uKSk#BjE8;7=S6Cl(bu=|LA z(&P*$C!Q@rA%Ccc8!0WH=7eyK17L%Iv&f(aQY_Sv475tWmWfGF-~ux^;p4sRtU$SaQf38wL|+Lddi zM7IE2r}&OR+r<{niAu0NWmLzptTp(^7yJRimrxqpw?@3#kv{yNee805&`wNwCkcxa zF~;)d*N2ckcbHJUE2?gOlcjjo2C4&H#d@o+>COxdBNq7k zKGe5%d82|&0dGuszA1B#eD&$S)uayp5p4LlD+n71gNfm(}#a^BAT{IEsrJm%`iQ?ySXDio~Q;lSJrR zR~wC?K#i|IvTWC-Og}V_eJxxkSsl1U3Ef;lWEp<{wXn4cj-BtuZM9DR41MrLACjLi zrlxbXi6CM~Z#+BWK?JwWdk#S1Pw^k%?Zu&;_l@@*6JZ>{gm&(mZEOQ2Ra7$j4bmWl zP9&O8S~0-iAijZZ4? zhs5Ba4O%oKOYh6#RxteO5l}+MidN}(RU3CT?8SAS^2{Llg)(Zjk*vmXutY!Zs-kf2 zeg@&w=zl29y1O6w(>H%ZWXhqxW|AJn&+IUFtNlpAe}&oE(?O(lWrXlrNZJ~yy8{|) z&Zr`~E(onl`}~A3DZY@s%Uy$y2LT!v1DM9dV61!z?5_htI!Fgzy5V8>>90(%9w_~SQeaIB7(Y}* z{TYWxHh1wPRFYtIQvHe}6|I0;%L}CvMv;}AVymuSXvZE@xnya94_>)5x6$b4M2^uv z))CfV!`WSIkjxETV`vQ_;fBxiK%~-`seADcv3IArrN}`&6m~fpCllhL6^Ck!)N(H3 zcRik6DM_Th`jOb?U&U{LncB*pHRTgd;6owZeTx1dH1h$DyZ5(o>t()6t4#^6 z<;lc}x)b|_*Uf2sEzuSwbZeZRP2AX&`q=Mr*ln}m(kA|zMxkPb406Iwt=(3x+>6$P zo#Dr}mq$_M&C9rqMNW5I-gSK9r6E_TYzM;p-?J;wyH4ikgn};#Gx+{CP4{p)m@l)x2 zRlmAsd4>Ok7rs7}OFRV$VEC#C#wfhjAJjGZP-h$LR`(lnsxKKx?-|q0!W7U_ zb&cqw-gRCEbiJCtX|y+P%Cmb_+_<}T##K0YaYu7Pv=reofBJW&PI*K11PL3muRiPN>h3~(~=0F>88%bSAp0# zFAtZ{)hyeSiTj`M}rbsafR}7~X_Z7=Y#=KT>i4iE#Tb?x}B);RxMJRaA0~44#lRF5D|WRLTN zT}87A$L2go1gK*b^mq_48CFr{CJqCU-l5d46PSt0d=)Slu+qeM^`gu9LmXB<5|~+a z$M9y7mx8i2c9>K|Mjw29%}1Lt_ouvp$^%%qfViBd9?(5I0D)E52ro;9ca=^IY#=xUQ5&cAcI-VX`s)*8aiQKmgi6!sGaKBQ_Nc!OCCJ9$$E&R~ zt9f3w1NgU3bC`HT=pu|WY3NYgRC;}Fpb-AfXw4&gdDt^I=;q`+R8>5ln_|k@c6j8H zd;UJIwEWb`z!}#Fpsf}VfFXsc0ADwHIMYH%wXH`pfU#}mhzR<8gs){!0=hWnWv`=8;W}W?b7y zzZqW5BAUBzHtDUAaG_o-^6u?xwBBF3h&6D>T5%hCE|0;_NO~P?E4@n%ft6`6(fa## zl)RMf5!`Y>yTsC;KF-G`xJ29v5!3{FHRrW_eu_SLXPg?ZQJVBH{4)-I1+DeYl>B?7 zA*yRDS?4JD;f6)Zf~0X+%Q2G2OjQ#v&h(x-VE=aR`9$}H+gW@ctW819HYj)=+8eGK zR9h*@s3t-sL9s6X#8>X6YzPt?L-n}qO+u_s4aLKlOdG2wP>vJ9lh6MH$Ho+eV9Q-1 zKOvb2_27Kir0(<-d?Ady=Y8AurM04TUb*wFDmK8pn{iVVyX#Z#%D<8=CxK8RwaCvqP4z-w)kl^Sgt&cG#FNphg1byz1-izaI%G4?eu(65$w-^ z<)3RNMCaD3(>x^*LvXl^4Rv?y)S!sIdUkt3G_K@JVc*QjK3C4$jr^Ruh}p14C?;}a)T64 zJRZUo_L1-YM>V`$r-CC+0HW9b=LO*V)q~P42E1Jzo;si-wba2K)VW)23TYo$ETf5DE|?+DH?o{L!|ox zkxk*w1|5z4R5%{wAynl)6Q7J!kS4zfoY&ZaAWA8y@Q;u>7R>B6FVZciXK2LBFGQ+i>1HGJc3)Hgye-S@Yan$o||3vt}HDH+F3r z2L>E*zfdFGo)?+py6(WHnwFh4cG#3U0;XNa*7r$b!!uxL;><9yOzdiLLjTGhd zmW6}^0I(9GCP0+Z7{PO&advNj*_7&m274fuY*o;e5l=hKX`#){M`zPmjCGL$WbfxD z92s!qvg1Ak_S2p`a6WfQf}vuoAq)EN(e%y?ExpAmeHOVW6+4s4XUL3PgBzUsu`5s= z$&fqDlA{pax`=!xcRdZhgB7H&9h6(-W`*Bk05z!{ShEa z_X{r8*s?+(wG>f!M6q#k((2*e{|G@1#jiN%<-)F>C~ZXB{lU6=rvgs8a!9i6bkz{o zGrp{>QFs{w5pwTEpyh zaPJs)A+W_{UBxMdGL@?Bhq4Lj9*+r>dgmzEbfq&?#-SDZBt~oa{MHJwEc^bz)Lxz-;8N^kNLzeX;9qM?V(um z+T+D)uuV61EBE4kG&AHBuwkhM+<5%FICSzfNofHbm*L)?i(h-nx(W__H;dQrZcCX^ z>3DkCEDp=59#rPC8vCV6`i@z0b_>V5Yy*jXMR+=)xsxTVQ`ar_>T^;-ky(eq{PhSS zPT1^-|L=#3cxJzU#y;0=aFKma9tGy?h+3fmtMXwcWKur++951>a{@UXWXq)au-F1L zUx@vS{`*4l90IGpFH&115h!=9x{?wOdm(udW%V%GzFAAVP)y25-%)8p6nkJAgz{3` zi|o^K30Wa0Wmne(9NJ_%2$>s0aFV+m26R*u!8PQ=)!=$9TDIFX*bbljwuou|iW%hQ zHRXD-)a9ZEkSvbNFo%SC4>?YEFnSd9>DA|EjqMY)UI*CauMq6DiT34;gjp|>;r4CW z0O5A#$lRMQmu+TX{Q#@mO3Tm99^>{dF1dS(ylV|In=czlQ+v&sNKmm^NIOx*J=eRd zrk)VFM^-v|(x-$cGe0CLq;cpyXd`rs`sK<39-^LSCWJx9g8wrXiwG%RwQD)`4;FI+q=VF;E-Dq+ zQ-ll~D*lpY4V3~cewfSr&7Y{b7j#dR%6HEcyY*|>%ST-TbbC;umrL;*_Eb+9CskEd zt8)1Cwx%hm0)byfT-NI{;wptQV~5q8yCI!u0_vERr1seS?qg8li{W3WW#$wY`=RN1hdl1|;rM?RRIuuc zHG)i&Cn+hH*7=*K6|Bcw8AK*#O5gRGQjqD167i9D6tz8=DQ zuVjo$(1o*KYo7n$XTV@MzLB9EaT&rTd*?HEKBqeax6X*MGXU%ju%usha=iBej z-JH`evD4`A^S`Kg#9j*YASNAq1x5+6LN*iMZrH*vogIl|t1AINAku(WP6Ul;$1scNLeA$g#jm_41b54n;J**lLMCx`W^8j zhiVg-i;_0PWab$cBItE;+9)HL(ireGZjh#fJp=yORk;mkx#yP?zlX#*&bjyC1ot6% z5gnxMp`)nU9r2SFO+N#!SH%wNk2p@3)^ts^J+$KvoyzzHGZ8Qu@Iz=8P>_3q`|-op zrSzC$b5M@Vm`%Qs|JO#y=e&%)kr;Mv37Vj3fBU z(Kv}^4|ZWeysarujDAc{8lFlVLw^8eiVt!D!^ww8yNr-*Hx&TlpGt!;(;q?D8blvz zEr|#)Z3r~a7b3o~k6zA4fWK>~pqmS@I-4pF?oaZbO})XLr;(3ol{la)cZjWiZ|Rz^ zARB8Wr*bswUiDssu+zgQfPcUnI{wl&I&%xSZVpny=AW@p@l6~0D4R!D49z8+z`0f7-?h&ht zVA27)@O~cOCrfD0oMXF>f*+Abz%6lv2LohMGOy0rEY1W|eZ!uO#J`*pzI2@xERY7Yf{ZZt+_78d>Dz6j;7SFsXAee32lgoSk6@@JLUyg1;gweveP@2}{#}7P36$_bD z6Rrt*#I!@%))(BomDVL$M`?5`^LD+*s6+dQ9yEdswV*G1jF{}k3BK`3%H)ZU-Svm< z7;0}Uz?E^IXt94nFFus3jA=dor182=K5x==sRH?5U_uw{ z);AwH`BR2sITfs7xPLv(XKZT+%d2L8@wgm#n&+1$DX-U%fyiac0!@wdAi z*3PSW&l|sI6bo&=nEw>1U#vVob*z*dz?88|!tXrnW6hoGJiPNU;9qa%e|PAQ+>PB! zNLy$9O!v!fKwyOYE;50Anw_eh7_7}h{)F{Q=eqSebo-*>&ipQ4IajAC9M1YDfjQ_i z2b-)OGaH_yJjL#DK7mKYZn>nhuH6M)`&++WZHu}j(*e4Hkzk?2>Z?9A_7|!UJcEMR zf2ds@C{em$lsGfSmr526o#^~=^t7NEn`mTSMjhZ6cPodiFL`N6t;yCl{+N_KD)i0W z6I^px&>QX?tF3TLhPBA0CwU_`L1h5ls+^ate`gc0#5dl09^vix@#iJO8@kip6N0iU zpF-v;8@|FP-+<|w@zxnpxkRi1``ffvzL^qEXZSlR+5VouKja9@Q1^8)(3xBH`Avv3 z!2JP^w^l%oL={0!*xiG(-!1uUeBOX)Xt88i$eegEdI!6|dRx*5u^=&yA*ak%s%Wtd z>h=vm+$(YVQR_!_hA6+|Malca>DpjOJs5~|7K0_ArTvx&YN^CY9$}G`*f{X0y7A20 z{5SkxqUQg_mlQ^~r)t65QMhkL!;V@F(u-l8u)xR;5BiwvqTt@5e0`emMDeREj|QV_ zD>o8YqpHZbCV>z8Cf>B#Jx^C!EQftm3cw&-mo%CF-H&PmyMY zfv9^r0uU7~%#3qG?l-i<^!%ZY;0b$ovgDzfp@rEom^v!WYds%27fjvNRtcV1_eX-M z^oJ%zgQqXEg78fDYg&Kt)AB$OOImP}J!xzF7ai_<4oR}fF4>7`M2SHt5^ScgkZ=D% z*?-r{amB!URcsxDB83()=%M;G%)&~^-Hm?Q!(d z&BSNtcKG=ibqflB_iq)M`mT`3*OLiS-xA(SnRJQM>U@*=cxU%E;Y8I4K|L~=>Wj?w zG17?Ab&8+xNaXZLwr;V)o<%UJ4L5d?1^>$r^QMv*mq_d!^%2lsugu!1cb;!n73Nam z{HGV_|Grg5yBKGeE5y`R?Ig@iib}#WTk#rcqs>#pNw75x$yutquc|+2EbV?SI@ec7 zFQD0CI4fZEH4FE-dysB6hWYo|@bkXK!X;Bg^^2*w)bWRZq;+7Zg7<;P5cb(kzxL`H zC~<@|1{7fe*xC-+Oj^xVZ^JT<$qDCK?!wnJ0OQ2c+Tln1xO0Nl8|rsr zJ@RxQc83b$sse^0&ikLQ?p{_q-MuKA9~vQX$Aq)RjivVHKxX*d%u`RUUmf~=&=us! z5XIHg_r}yW5Kc4Eb*+V5AswMnWMX~O{c8P|*X}xBZ2#9q>NqYmJhJmE$m6DHp77;I z;^7w+GJ>}29)!e)i{$^cM2P9$2@MKdHz`mkO04<_+$Ol>FdaP+yCuj{;ny7%n-I2X z^=E6kXvHHHSGFbKu(6aIYlyDCN)1uVF@DQSY(0;Lu^9ike*Ao)LQpgf$qK&}e^%LF zSXG$f1XeCL`=zSJj{AIo>7mlpj?U75KF{e+%l}0y`^Z1>gZ1xs_vh&bfQ8d=JXF zhq~w$)<1VFM$E^v-hAwt~Ni|G3gGC5+|M?O#NH!_7XWRi}d({2yd|QHLwXaG0Zb7mn?H? zZQsb))oVz2RtOutt&iL(QmDt)XS(3Y7DR=Nb zkUUN8PVaB##bGhhZ~WA8ASPwF#3lY44^3UYziR{g(y>#9C?b0rl1cX81&Xb)btmBa z=5Y)8B?@Ytv$>WY-musjHx&dee{I+CqUzo<0;C8&pT03zioW%Dp(BRy&)CWGnnt&I ziQP^DtwJGJhH{Duok`0o{CuZ_RQPr^+;YCwQCtF!nF9?`7q%Dh#DCs@H^wJCgKlvo zNj`}}d9v22i~mK4&+R=|>-_y=6*%M~kRAc6%hOa~v8q5qMDh!F=e*w@9p4G{(6xP#ryDr+ge0pjCr%bHt%3rBVt}@pfN-H~8Zlxl;Tkpki_J8&IpqO(OIFX+; z#w&4+jKXUhODHn-bKgy_$#Cq8!5=*x+FgAWh>T{jY0AVhd+3MZgQ0DpIWCc-?0*QL zuP*oHD)CFdu~D2p_IzkpSngZ`7<;VeVv^kfN*uEs%G8^@yUX0+p0s+&KuRL+SX$KN|4zjY`YH7 za^qW{V|||S{h(KPi;QRdIlle{G5)3SmF(ga-}Y~4JKJ#JM!?}=}LZgL|!r=3r-0(@#ybF)x% zkTZY?lUXRPadq5(5I>q;+tdi@g>su3;d5?9@n!Z}M7Ys-%I}W0nJc~>=@0cFGMIMm z(>=DLuTLAl<9+Twy1n`@C7S^Lg1)J9yq2uVT!*4>6?zsSUvGN09*c`o=!}emRo+lD zLt7=A@Z-!ermFI4WT`>Q1P;f?tQDTJI2wyag+F5gS99%;Un!M4g=jB+RlJg2{ob1j zv`+Oaj>%3AIvb|Jv9RmYVzt^%n zRLfFrzohuj(oZ!9MaIvwc=h7f)P>i+0hzz@2t!Aw?OhpObFILi*jbPQ+$)OW#4F8( zh^MeXjO}M^D9CdSpnkEu65=qvZHG|)$Z6L zj1X+o@2NtP+}!B?{*11K2pLegOmb!Ti41qwirY-gD}!gn7<&2U0d~;E!1+Z@%a@M( zG%7OZr(f*@Ij2IOo8d_tKc#Nolkbgok<-BH0gkhtqHZ&x{x~jdVhQZ{`l%TDf11Pu zo1CdI7+2kfuN6aQl&k$yM%>_OFVd5X+U=^Aa&4T}VBYKHf6jT67$m_hi0k=<+6kYA zRs1+FezUmKIJ)dgpvF@9hgye{opY*N_pI!?d_(5Ml2*Q~!cJ z++!XOsNYxJ;wW>I|5JzhzgnA16~!}=b7VzEjVM7oNDS9Dv<9;@D&9mjVz#`EIJ2U; zQn%5Dz#%oQvk(wE5^n5>uE~PA`8j(1x3(^XOgprW7qiOST7v(rK3mDum&L%u7-^jk z3Sm5h2ctAL3Z4TW4y}L{@Qo~|YE=}|LqFX&vaS*7E5-BI1zi|}X!JI>_|Sbd5vH4? zuSgMbt??1@`5DPIvJ_}rJh($Z27ZQw;l1EWjV&z=_F5A@Y!1$H;uW32Ii*h7k zdF6;MLerkNoX*vyBl?eZjqtUoTaaO^bd@lxQ($1-k=I6NVCu;RFwHB zq!@zI{8Pss=f%4?_o_x=Y&<3bAPtu(JG{Wa!b(eIzPdUUzs-H%$dva0rAg$)sB#=nV zxg=4Y6V|n98EXSyi_VR%I)B&3rS^Y@57sBxk$l}L^D96Od=WgSLPM-cs)Jc;84MLI znTjdA4P9k2j)cBL%8waynf6<~wQl1L4qK?W4RPC6HH8YU?>};eWSb;v-D#nm>JHQW zpqH%kCrR#R&mC@J!_~+)d}|MDAYP=8dhyR+fc6!>35-m+-QU=Y?quW?_{9##miEUY^-|_K)z_dUD|5v z9SIQ9z!JYR-3ARkx4oABJ6KcTuKqpR;wWcr=DfgO?6Qa%tn0rQH6Zx(Faj>|ADaPR z*Bt^ga%K}cQFvEz$SZ0(boAtY6l|X0M`YtYshC%LSjx+P>Ys~d+bOpYq!b&84eDTF z)1B)HGwK~T;K0=2y5H^CI1N;4K3IbOdtW+2gt%(_EL0FZ3V(Z`#XyoUZ_FY4+C=fY zPnirCrIm5N^K3(#`wrg(k$=JuqG2(BBBFH8hOCnxd&)GebfoC-YZG5oVpfNGar-Ju z)}OS%emc%Zxed7Ve)S>x6jy~sMnw)$nWFn`D5q<`?VvaFPu|&$#{GL(N`Yya6Q61n zL~~<9^Vi8D>>$DOZ4_j#;nS+}qQ$d&X-{x~-N5*?ufuz4rqEE5ozEL zv-5bhV`1I74=-yESSce&GlGcddf#$0+yT!j;eAPXlAptGoHbLTjQY~OYxKr8icx55 ztBv%aa)@^4g?S2ZoK>+HL}a&?;Rf|EY<1LTvL&bJ^#!-Sf{icZKKr&pQnR=M~&xEIX|Yea}7Lj^?& z2>gm-cb_!rwwQ{x8gUbwok-(xOd&Ddp(t|1yH-qdzK;w$#;B(xOn0B(5PzxER}D}4 zx(GBbYb{q@+b}D-*&s)@EG0*&@8f-K4xXKqypMR?#ht&Vj#X|}AGQ*Nl6&#%UHV#D zzEGA^;dQ_wQ1qPUQ5W0Zk%`5Ux+I~GMKE{wH;FpK9Iow4ACu&nJ9&9b^D{TsLrY_u zKl`JeIIfb3p&{oj*G>(=SRG;_?vv)=@{?n(<`XFa!~8KK6;{jJ}yX5Drzf{s5aKYfkN+gDH{ z;p0R%#X*9t{(+vl1HO?RoiUyX*TstFL$BPClK%jJj!+>6=15?aU?r$zosCK~7zJiA z5W%NYCXzDPn+B`L{IfiLKY)*%helECXN_WZM3#xS$ZDEjVJBvJq=eNn+7Xeivdem- z@q9KsVDKj>-;iyBX1HM>e=MN-SdxrI$i;Zh zjgh&`*Q%n?dB;VM9bsfcjenNC~6~TN#A69ammJoQIQZJU~eKfO#`q02IC}8o+Bl$LwHYz!KKLOfEo->@&77;=@%i zddofz1|we@YqC!to*?dy8Xwm;pFXh>(x<`_VK9eozJB;8ZvJ-gZ0jC&=Faep+rNi^ zRZMrRu*_>)DyAF;;@4pyccEm{F{}3UXU600Sz@{oWQkhB+ z{;#Da4BMoZB5;|F%GeS|`}aJZEya^~MJ=__qCs)V^Rd$y@XWrqI?Lgb&0)@(kLmCb z-=N73om9b~Il&K`IlOjiQgA|c8Sl4Ii_JK`A+iY#dU4(BG=6EAl;H#?i@VZudqAzScqEV4}vwwP9|XL+<*6h z{H-p(NyNv+=kC%hwkPiXz~-2Tt~^vC?lG!WPp0z;7A59v!k2#sPdtQ$l0JV3UKrkS z+aS|aaU!Ep>%2hamRP0dvj;6Mo!iGo69-=NZxMp7(C(fW$wa|T;F715tO54tEt_bs z&fTYTI5m9zcKtMm_qUv3)>TTP-;VFP^DzB+GvBNE%V^WPWRQEMGDuHixP@yx`m-!) z#mTn$jq)tmrgfS@#}|74j}x8$i>IL=iSm`WD{44=X^HHccA#T}F!J$zD%~0NP5MX= z#B5|vkE5`s-?AgDRvveCl`$x!!vt-fEvvMJsR*L75bJ*~$mHiVnV8M5V$vJI0%Dx? zA^vH?a4JdT`ni~b699Ydir-jB2X<)45%(6g{cQn{Kw#=ZhgVYLyzE1}#)w;0)4_;< zV%nXqK7Hj2a|wX81=lrFc7aVGk#3fOMw4Iy0{=O}KudN99oWj;G~i>n^Y$f=2qxrf z7#;R?%HABb>?!o-H2xK1FensLV?(3gB?Y%jV=h|pBJkZ!oy()Pgs3H8xm*37dChfv z0l8I7sXPO_;xa^eSpOhGhH^sg2=DM{x z>5dWQzQ=REx|tUgFC|A@m2?WY45@qmi<8c0w~LfKx`g;)r{WEIyFTW26kyncY_evN zo*H7x6u*Mox_q@Zn5JIAdS4otE#S6L=4vB;lXStRsQmAPw=`iSU*zsjbkZM)rjiFo zca^_u*O9)7qhz;AFw6j5IHW2kI?WNH=?F%Zax&y@8i$0)^(%7_LuYVo zre&4Tm3nI!J{l+WVo69}I1P!VvAE%P>a+NLOdHY$&_yK3R`VTYK2;Vl5s2FWn0zAk z4o=U$5ne=ah6OG!cAS<3tboU zLhS3i*r z+NN6=OR(S&Ah?GRAV6>#2*G87g%I2m+#Lo2!QEw$AR)K~hrwmA!QBV+T_nmX9 z-t*(B`~JCW|Jl{Ouj;+K`esLc_^g?rbk3>!s*DQi$JsE>HGRJBw;-7uJK4h-S(y6V`$cEl2rI4{3 zdbT2c^xMEE5n^%aVrTo04+76jCOB?!JKO$_1)w`4<5C1U9LlfRF>%x)%Ea~)RHK3S z#ru7@7k`mq`=>zN-%qr(EV$LVuvRO!l)apUOJjv_)!TEN>%LP^Z3Mcfh*G(@)>O;$Pho<5^lLuvtHaQ}9Vt zs=SVOo&S=)_$C(z8D2Km#VxGyd@&~F6l zHsAOV>>&bpA$7#9`sOo2M^edpUCmcmk(`Ni;5#^?bL#UepK;SVL)B*SU>OM3g8 z^+98yp&LaD3!8Z*%RGEKDNw<0t)032uA0{vxsiTNUlYE}S7KH*;C(L@dU)aKCBY}#?7-max9E!?QlK7JPO#;F%u5`sTDgB$P}b)iF%D&D&`lWR(-iWq?OI1Ki#I;+cbDu4`P%z%MYxuY$b*bS}D53qU7%E)GPVCKR z6O?8=!f-f-hHqg46)<1JJ8~%#o#dWi(Z^-+suK>E7$#_0ofX1$q%Jzt4Y>lHQXF6B zmh?u|XVPU~wE^B|IqnOmZR|fNmOcPGCJ~{w^L<$IZLDqh_CsZtKs_y2AYG4 zE|LrPDJO^nZkg>r&e1mv0l(KRSiivxRYrfrn3UczB!|aa#@irzK&Gid3FY!aLp3dH ze&2K&t$U4=zh}7GqUX-?53_~$SH{WCE7&`{e!!11=`6=J*6-) z#?NvwURDzF-cGW#B%Qlm`P(;1=@K8Wa~)pgbBbTIZnu)Dsi?iB&Xb4;bi8dkbX+-; zIXN?H3w^wkIR~5{4Ccao_OS+z&*%QwP2t^8^2PpJNO*YfrACyAr3ag?f9fPYXb4zc33(n-m z3^6T0sbV655Bq|VDSkJ#@M|q_?VvpvP$TH~(04>#L4Jdr?ehMCd0;|uEc0CHWd#4* z0@J!u=?CObIcOFWGf;&~fYp#=d{em2HCb?xfO9GEFF*X<;9po%UEGY19T%Rnzoz&< zQ`P)`n58#{o3ha}Q@8K$@Z$`6R5x1`)M*&2G;>|ZO9Y(1Zf5L~e<=0g`koS~@K=%W z>}dI>%G<#JOs84d{}DWSCje};wy~$Fva`IKUE|usS;I2k7xL_`DfS2 z2)RXrheKWnJ0(+_cZFo_b3nT*HP-{4vcsfsPDd4cAvOj2T7hsUQYY-4es908Tbq*2 zEeVWid5hBaf}wmvyp?5j#c%KeuGDq`aqK!=3?d8?1pKUofS&P%vJ_fk-Hp!uM&~JM z)%eMv(i4{>n`S*+y75zM$~_1dTAp^Rn&7Lc*vEM>lVF+GU@JRGHv(J;%s}m}y>aTBNvXg}+;R)%G=8ki&6s(Vu_9(BPE25CD)yA4oy`AcH zA`{(ArEE~2dC^vN>C_XF0Dxww^YZxZ58iKloZGKLPq!Ht~K#I%X%$B5*md*2|8&Mg$Gs$ zNzi&g`X9-uY3RI`tE$}priW{U(7{3~h;9{*G~5}uYbtcK?*c5ioT1HZb$wKAYfT9A z6`$;=bF#-Vs*Bm|4yI*n`r5#Q!a+~uTBwHRDG?i+d}e&9$#mFqk^!V!21};pPis(? zM8Ce>+pU~QrDsJkWV|Z|<2}N^{5I1B*pTD8B8h zpoJ$OpBxF;e3vfZ6o3f_N_+>_M-U>4+S1xR&~R3q z{=SL{%}!aYA<5&Nd|Osg7?E+-9V}h&RQD5cH$xmt>#RnQDO^4&10iaK(*L}{dsJp3 z1fW*Nel|%_He(rdVJALRzx?T-i-Yx+9BcG7AE(NRZM@s$>)&N&us^%nmyCM@Npq$e zM2|J1cqbd6pq)P;!lBJB<*@aIH_kg zQ`mZ1%O64=g5UYAl$2B0-=**OcEL6+f@a^Sy~x@#q^cdsDw0#{Q|PAlHJzn!OCC`z zNeyp9_Vo2G(Yf0!o^w5rq6jLQEuXScxh7*^oL1PO#YXwQd>Ae_MY=hs(>psde=>|> zyo*{^cPTL3M0prR;m-% z^cEb981P^uf)P}MxLeML=iH6AzhHYE56UcG4FCA`%rE~NwUp5g!_`LK3t6I1xK)Yy zn!;(K(kY{9f8&RSBn?HTSqz7wVF{EWr$srgO43rfT5TDR<@_YDl3`5ow;_uLQmd4L zN&a=5AJUup@#(quZP0%t`NSgs>?zzbh6G+m^*;LMRXTBs5p zW;c#Qk~J=0)|6|Es+XnRBu7&atzQVBI|*mCtE`Ok@R=c3+4i6N1H=kx|B`I3KW&~_ zo1NcKf8lFn`}W`?<05u$S!In=1oh~gGTy6cM$5a#-!v~q_yr=7NeH{bkE*tJ&NFG)2YD8uTzmT{)3%QKD>Wd@Mg_9Y2 zw;Ei5x*C3DJ6vN$`Who3D?SeQkKD_7$F1;R&9F%OheH_6g0_#@o_G?c&ngW;ls0Il zERYJtXQVv^H(AH@rkQy8aRIm1c6WWkI?Z`K17+Q8o-Pyi4vNJDs0p^-9GWkudS;;y zB?AsUMRt!p&NV4^S&zBe?pBv0yQqgv1LFHH4xbNWB?-oCk35^L*V)(=B_>ue|2Pg3 z8t{cQYb*tg4D!)0a-+VgYyBETz2v(GDYxVcTRK2#@zDb6=$FYh#W&=qd z{SbNQ-^o+AtVDdBOLhsPQ-|h`X(CBt4q_4rXd~eS$1w!rAWLv#Z#_l7wCRB3)^`$} zx8kh9qBFwLw7l&RCs-Ce42=OOs5?>AnRQDnXlm z*Te@}C9oYYSAM%6SirqtqvH>&d+Qanf`ANnwRX=7pJ88&cWWR^XxG6pi0X6IBrp6;>!NOjSWhM;5TdunLB3sx2?rQIZl3h&aQI5Jx)#;22ae@hcd4o zJ1Q_|M9eDjN~ur&Z0Z;K`Q5f$Zzyv3o^tDz+n@Q}HqtivN6CIp;TD2_4kAVQ6B6!Y zb)0`xC{!8ZlKN`f#O<2(P5d-rgYogt%zR2`Q^d6#FAc*S9DcyMpZi3C_baxK zvC;a=SmPyU5N2l~Mi3M6l#-q-otxp{xN| zlag;Fm3YEbTFTckbk{>AeG{;#FOQ}gw4@%byAdvnIz*n;7?&V?nxCZ5IjdQ2?K%2l!CYS(Vbev_1R%+ocIS6i_k2XpkpXb+ zn-#CfUOy>eM>A}D2-vD?q@*u@c7;>-%7(@Gk{^8s!t9iwJ4h$>T-g!dCHaQXl|1$! z(SO)3La#2J-M_`4BDrqPg$RkGKSW%rOS*rP(ye2^Tk`W?uzi#PQGL-7HpQNSlOjQy zalrpHtr@5pH$x84-LUC}6Tyi$ncJncpZ&U4T4l-{NWQf{Q? zE04@)w9~~fkBylnf_`_jH8|wC4LT9Lu{UfQ!^sRCboaff4b*%6>>y3hLI%cya_Mln-#pEw=j zQxxM{dccgCE|g7t(se+ay1q@L_sa!8p1|(*`3;@#tJh0hmCikv*MIGwlqIM8_7n@E zTy{u;D~HFbR>Vklv-^E-%nHxZW0#y3`z5hlCboXzU@a7)NjUxhG!?rXy+M=!Toydw zNY`e&525(Vk9T&sYrVt#oqz3~qc-2(m9`B_Msq}FSoX)Ir#|gqKZ}$HRf(rSESwm* zvDK9GY&K&IcO5ty4>bPt;DHRK$2V)uQff!>kSs`xWdp%~JV&87g4KQ^C zCWYQ+;-h0Y0AeVzVBP=Vv@1Z8%T4o)n@3CX(6W@%2mLRz1CDRcBQZ9WkcOe?J0pGCH6)q?(Jz5hHEFYzoP zzXiA=&Cf9O5G0C&Mp{9uq8FUt>da9fpi@dA!5Tz1a=Et)N~rpJXMRvE?sBFE2mo@_ zE+oC{)w()};*iMau0Q|^3UBFxU8cX_{@E+>G_R|FVMZX_LCTo&NR_n8>=gSg+VC{K#?%*8#D?~;WxWTs8fF8{r_+?^*GK?|v1I1aJ5AP1UTu57 z^WfZ%S3o-M#~;>u+g;+La9evJe!n}mBf5IX8Uy*t(n>_u62Lp$xyq<3gG-tAOwspt zo~{}6;i=KDZwC0Cu^m%XOzl4cm%O=7UVaX6JTI1MCnmf@JEs*2*m041ewBHAAbG5| zEra`U)A7xLD-m291di+WQ*D_{0yu3hofqoug1LP;mQ_?+WBZiQ_!TWKT(P(M{YQ%t>&*eT8@8*JK0A9QD!>ldHmXiMLw z?$5}(x9XJ`%y=+$-k$^D%3JS7kTWlLn_Z*|tK`QU1kpLgCX_lFQK=0n(QG*^=qpJG z89mJbaynT1V@P;EaeqYn-G;>9kf||XaSCo9cv@&2%qBt2l4zTW$mdN8frNcimZ{+wyWkcaG#(YW|vQ~Q@DyR8M*KWCNW86Ud< zyh4V(y%JJ#Hw6(*Jkn+wuB{THQIK5u(iCtF^kS1G(|+I+s)W>mB~SL5M;2g@X>C6^L-AR@!M%z!yg$8~Vt=divS3K(K`VROrdK;F-7$SrxklN% z#B(BBpvt`2`ZPZOzm`svJ0u3m|E#TpGy$1EKcR&&roJS$3UtM})bNYw5-F-(^AlQO zS%qk}C5B3?q)N7%bImDlILAAgCt@06CI3s$kT;GV#G!4d}cfWi!Uq{i{Dr_ zzU;P2jHcvu4Zt_$Bt1Jhi*9P$l*Kwo11G}nYA2$zBgVM79I<}&&*6-aQlS5KIBPno z0UBr|Id`}#5?=Q`cU;+q-WLc(8>yjuG%}8cn2D~Zm3tg*XA(}z*{=AU0_=E0AF-=L zUd>iKq>O|y?ece?aU&-zV=@e$q=>$$eGAJjRxJqcV_NqI1H#>d42gBmN3GMQwA@gn z7d)V9F!f~lG4#o4r+LK#>2cw{#Czni&7PfGOy}#kl_K|vi?FLShx!|u-o;4|CXGg1)|*kr`! z2RAZk?PSS(+T^3ih7;ezFQ2IdOO|0@twGl8Cv$WPZww4I9UvqRH@mXfmj!F4am`B6 zK*z{$d_~xCZ21cR^1VXdiM73Go*>G{o`K`E$yZlx=Q~2>+DOBPj$PRRo7!S{$`K@u zK3iW-Wm_Ux?!x1p>QW0y1(Gdg^85$KDcMyPo#1_k&c#k}l5~u^X^H-zaMlj%Yahn8 z~otb51?h^!FDummYg7 z-8G@eH}=hEI|l{hRq^#st%PGOQIeh#kANmGpG)M)kmErT^{Qr;G|A& z2?-8uoszr+zMEXOk#EX0z$LFM79<(HUG}ugxrWowT`z?w->=*z69`ugux^cUx@rTF z&DNqHK~2^9r$u6e1m&cKdjvj9F^No^T=#b(O|}zN(#w*Mnwn zt!>hcF=y5{8@4L^PZ{K(L$u!wE%(NIgXm=Vs}na5m_lW~PX>k=?eoc=e&Ch$xE7K! zA6eAu@+0k}^{i7q&x^Gf^WIhNqn)P`Y=NI&j}BIdwTOG$L^T60u7w_V(j0rF86DQZ zWBcu5(k8F9W-g}$s!6;UjUsDiY-7%5b}o=79jZSV4y@e8o}!bt5*_p%S6w)Mb>F70 zhk^KJvLS$X^FuJbuQb6;o4_BL>2d4tQIfcs_ky=!QNeU_p=*qX+Kn~%BpGM39-Dxw z+3W3WiqMBK`^|_9vdRP|H_$=)A)*mE!PghjwwgY4H(BVte32T4yn+}2N3AieIEcZ; zQvT#&bSO8k@GR3!aR=L9?#H^phNpWD*|D!6+hd6I<3`u}<&tA9A4r=28Iu5L;iLH1 z3uSwe?qL!G4|}P#84+$Pv}>lhX>a^@oDY4F7VW|bh!BD2$jOkEux^##sw#S)P?Zf8 zpTJaY3{#aiW{KE;0?#4n9HkIxtsOo)Tb$Bkh|Q^On3Qi3uRruzLi}H}x^`HlZKx>K zc&cGHAM&t@((=<4c>3R-sZ+*eyS}DW&8lH7;d{=Prx(ZJ#sF0e;pt0nb1AL4|8TGs#q1p1fw3IR3a=r+VyU8XXPKoakhUA*H?R!Q0}X>L($IBlysV~B3b;|NSlA`8i3**jwT?Y$FD8bn`yFz3l>`=wQ(kvl-I$~^J@8XXvy&W+ zeTPsIUIYyNf+^t4`Oht;E@Rv_#+MBk?NZ%sgoE%{Ub&|`cR}`!yVdbL2>&uFa3WqT zOEaW&`4#N(F9{s?aoaMg#7?B?{8TeY?noHmcOiO24LZjqD60j2mvzyRpU6))d}o3A zN+^(pL;N|Nx}No5?c0at#wJhyoI(NGrv0Jof@2WudN{i&a7C@3`8>brD6oyRDVnPx zjCrJsXjsP(q6czylFW2H=brOs$XdWyFGO!BG6H5(Xw8_H<{(fzbiX;;E)kMyB>}(;E2vke& zTTfA`_Ttd5I1T)8?@X`8^&@>wD7x`BR1I9|x^N>LqitRiWNIlKq{p69{$M>s)ZjWU2j9|%SLjcy_*#mf!xJM+ zY$A?9Qy^dXbz+-aD}8!+>3}%HuB1E3{Uz|piu&BwJ%%r4=PTh?lwlyv7dJy)Q_H(A zb}ZK4dDXHw8(YP+b<=H~OHbbFRp+&y)yA+*uBT6!670(Uq-(Kl*^~pkbA$b$xp9Ss zG=G*!vEP?{kNw%e>OLh5NfpnfG>ec*gP&M*Ph1KwTi3?&-1wjB~#RWOwi(SSk3L zfcF)nmPy5Ja)!ZnG9}J*m^kRV4 zKmr$m{5_B7w@Axfg#%MvxO_p<$oU()SAq}oOp3bRB)>{?7%jR2O%FtQHDdKcCzrN+ zgY}6{4+IrF!dcbQSxf*#zyEYAj*GQl^iQiDD#84K-EP+yV@mcALHbu}1{ixkDJYaS z`Nao%0q_{>Yp3Xu3sePSHx{kU3%h(PZ6 z!lT{6r>>F@^fescH5bQpax-k4P-RM>G?43dn6nWww{vO_nMW1$#O1tV{joNcxgk=^(vrQY9NG@&;)Cy-q-DT3kN z_5(HGRl1|0Ea(4DOHjXVCbiRPt;{g{_FFm}db&J|_2OVW;O-}+oOr=1zSTdzJ6$`6 zw5!Hukuw#9=QM>bQ77Z~1Rz{&cl`&PMoKeP2NdfGjS6P5X1~xz_XVic;C_3!zEMtx znzPcNhcLf>U>0Ql4NepZ-8^x7wp;vTa3Y|;jsEvo{?tT3_UXz3fZN1*W&;!pWmb#y zk-3VeU;mUx9(McV*c;Zcxgg;uc6pyL($K!|HAx8{s&P$dSGwx0ZF83`$x&GIqI7wo zL&rD#iLIq&{E^o4Xw2glfMz4t?Rq!#=+Uc7SA+ld`rRL5r_wUVm8Omk;B^g5-!vXI z+DUyAl_N)gvuo(lv{yDe5svNg9N2MZi~2E4{&E=QV0a{`gagGyQ=3U2lQfjpECz5<@Cg` zVXjFJe}2UldKl7ihzjE}plgAQB-NbsHNtez(tp{!vXtF?(<9s7%e%PkK~2FA=1h!5K1Iu+@uqDpMdxJmz9TlkIkFmvk0fEFK=E~Z=8 zq>wrydXb0zc?9eyp?Q_qRJm&$bVx>NgeR%cf+W6Cu24he^vnh6DZYEWl2`ZwCZH5! z9e2)ZhL`R&zTEjdt|S9xggP>#4W5k10^N^Sxo0l(1ME3)D39eNF1v;NtUzE7WTO?k zPtvg@FhM)2;c0KfPFG8t^Qs`qNjLKAQR&%vedeVKikKAbU7w^eB+_A{f4Ko_3}jin&-W zHmn`Bf|`oF@-2_+_Qam!?^=js-tAL6mdIV~Cp%s}D;I{kSWcietIn`sg3yoe-LIkz zAIa-u?p6vjq~6!n$58C!TqYo!LX&TgbS$M^!vQPPGMMY<+jrKJ+6TPT5ZNVekl+Rm z>Am1DGCDunE|1raVD?9eO*uv@mG;6L=#^%!B7TWGcuW3L6<>7GjE@ZD@|F1fFelNrGfHoGo}c(qOpSLUX07t^c+CEJ>6e#^V6Bi(M^7i zB;<9z*w=;tm)B`&YLM?E7BxldFOLhBj20v#_h>GvOQE*yga3P+f z7^BnG#i}cODvL8C`Ti_%Q*^Kf|3QovCUD1)Vm}-rFG{IcPpNC&j4@@U&a0q|CDkCK zp78}wY9VCVP|dff&M-DbCLD9Dm4ngeN)os(Y99|?{FJkJYq`wh34-p_kl)xG%5l9~ zbDzXswfK>6EFqqC!M!4SbgRpKdN~_@XEf5n{5Wc<$8UE(rD3}LclOh+$`C6-B%Ld} zjsmSWSKFJmw=Cby)=dcxqOJXqrQX3`EX@j&Th))Z2}Zsgzr$B-XRj2$+Rm*7?uIvT zwMLlfGs0buRO1>uScEs+>>FLdO~8uL!Un5e{*QGwPH9Rcv@Rr^Yvh6Z zeO{c01tbP{&hJ^yh2@vQ7}1F7^9hn|)0m`+ErR=_BEN)h;4Qwc`{`pQ6-t?i4c9K{^yFy}Y z>{pX~*?g!3Tjn7pNzU&ItLb6DHKAeNM!FIJ7Gs(55Ib0Jacjh_1YpOM&lsyJpT*VH zUHHf1Y6nWjCqDwo9C9t>~C3*)0hArXOn4n0gSSOqt+m z9!Oz6+gB~G>y)nyv0gs^<@l)M9*GILpBo_n?%d(LpFo$ud_rIYvx_oNKEAg{u=+h2 z-J~9*yqZVePciyeOq49T2DTG(X9$?|MA>_3UMS!*;Br!#@yT97O0-X$YtZLZF5`oe zOh*$zJKsldoOZDd@#xrDgtG=xx*3PE7!BVXq@c!k1!O;4Wy3mu8FZM}`P=SmdjJFI z5nEGYu<7%8^*Phr1%e9BVtD-*@e_Hy<#>*9evv@eYOv=)05a1x2jy9iwqRsQQT+}>+-qwbuPndS0qj^g|J_KRFgVw3o13UXWRog$o# zkJnVVt;=RrigsyK7NP0kU$Y#0TV9A-Yw_L0rnLOu9JwrybE+t#MKv+2zIsYgke9H8 zL3vNne??~hXQMEP7m#TLvlv$(B;7Sj#xp4903@|6f?*T8q=#e?MOL8 z*VdUg4KKFGtdM(5@HJqomEPTc42GeS;$?D{pR8_E-}x=b;K49&U2P52wNEE?%61vb z=CNCF=QW=-r`zugY`H2${~~qriZ8Jg`$`_W^)Fc;b;Sb#=pB}sX)o=wE`oS(=w58Q z-n66J@zCs;3W{8v3kcWMB}B%TF)W^_BL6r1kc8syIjWU02_Xn!53uyv0$nJ(KWgG% z-H+`eYCy-yj>nvZrs!57PGgu@m0L+SdNPq758~Uwf|RQf&qM`%uG2eH9v$mTOEm3c zD#==1n5CuBMv`RSZ){?eSS+EOoakHjRrnz9`i}31S|7h--~DJ?y!Lirg>F1qa&Yf5 zi^Y8o4=$FqlhCHQ!J;s%B1JW8OVC|s`t%&E)_kxw}+a%${t6D^Y$iv zULy|{o>bEXhQO)gJqtvgcKGQ7HR#1~WyIr(URL1~%vV(@?mAf$F3I$7`e&;|Kln z#ijiX!>TMq=@*OS4OrR*>0X^n=n9Y^H~zg(N@Z>AkOJ)#0~t1AMdftGHdU{-=a4$o zXRCHS`X#N@S8Ekc-j0~??4{~ltCPQc-M{6(^_)~y3;}0=s0T|PK49;Tr1uWrR^1<; zSg$dl5Kp<^wrLgJZVMaB5+Y&I6zn;ox`-mF@Pi_Lt}CfNi?Z){I^)IZWylU~yhuON zL(%Z@l!d$N2Cuz37XS36jRH+|1mSCObEas`()VILehAJM=J_3d-}M~~BDt*1DBO7W zD_9h|_+LM>?832vr$NrX4sTS`lB+mIOF~2wSNZHK!`rqNhn5XM!$=*QH$7~@@8AeA zxN-xjs?a_Rl+n~Rce>l7w{j{8yFW;}(^fuEjf;ni_2-?h4nNE9a2;A;qe$!|{lQut zpSlm6nS9yazZT~Wi<$B3JAAT8^V42@K~H0c7h^X{y1yYb)sP(pvr=a$T@m8^X?pXoMKfJ_q z4j7c~9O9s%FF%`4t8gGS`^NbTLK<5kY-2U^roEibCxoTQ>72P1Cv9f3yIX+u zJru?ncbNNYD*dm5h)B;|DhtV?dnO``CH38XzkO%r9V{<&jH)e2gyaFTD@ZTNWRO=& z-1e(zf&)mNqyUEZt#qPUH(}%usLA&|#?HK}Ogg~TaDDXE6D#Y!o;;rN^;{zRT}2mP zD_WOO@PK&JHdfR_pKC;jyY|ob&JRKA8ok03IPHkb>=te&IGB2;DI%w_dQWO(-^}^p z`aX_;yh8f#(leor;TK?ha06=ZOeN{qpBEV1s4u_SdW+h9`{PVZTk=67#??5tdc z4q!JEk8_HRVtp+B?E+yiV#>$T4ON!Q7?s`<-1a2)1SZpS>StZcOPG&C_=JJdeb!q^ zY9h_K8sWBaX(hVYfBIEWyW{yL!t%vWf9Wq_oXEi;NJN1tGBwK~Mf^0M!#m+FFWbY3 z+S3d~-D)ogMPA!p^1+rU<#@BN5{uI6V23f*%a?zcdH--b6~S5q&k#Z4R(SiKd%8}= z@!#g;@S924s1@_k(^?dCL@iwZl#ib}N%!%qzMB35NDo3L!yels4?ZeOsXfa#O> zEpbl-;y4FSn{G-yAC#h_xNjb}BTKS9-x7;K;h28=lhopwD_e_e)9?uF!J8OP6pN!~BI& z0t{hOCA@Al7%ADeL<(%xN;bfus&a8L7)OD$CC>|-RSY2a&rT*V7cpv1BZ7U(^_27# z$&LDNO!p!KLA@L>GvaNd+Tgp{?Ys3hp<0KFnrTWyu= zD0z2tG%|wEa`vKpS(kywQyTY-@nnN3Y`5Y{!8V&$6F|^yk||Pga~%(**gHp8Vq_(M z1_>|W7DW3pa+6*U5Qr}ID__n(IC}Iv)C#Ke5lh8o;veC?>@3a{ zXHkEa(DNqZ%%tf`7N43TerUo;N;Vdo^A85L^+3^CzWe^U=Z9-oH;u+054fA_9)6!5 z<_*}tsdm_6;_iCplx0qp-5!wsVhh)|1XJ|l*FVm24$(U_v6tdfYEHze279qeqF)7n zij{vEAy;}wVj91sG%}?RCS|1@-C8F8;o2l?)wfwobtUt?0?*TtUuUQ^B#Y2*$L zxu3~-Mo^CuH`4o~v{ns&TH&}g$aBtl_asbjQ}T0s;6*r&Th8RSgSDJkony?|XdJh% z2$P3A&QsL>0U{?jMepj`Fnsl<83{uWUTPCE3su73nx*d#n)$gALjclkH@S2ETdB8oSibtE8qB%>$(hH6KSMI# zU^CS!?~Uv5B-lIE+$IuQKlDdMp6MgsgpK*uPpqGdu3dh&ZCE|y#vl4xl0lp*@2f1> zMuwrkF%Swg)+v+VMg}8F!cI2ius*yy<5)LqLlD7@yeUJ`)uy2=1RM@HI=DpE2+~DS zJwH*4Zc_6XM5Uer;)3se4bp(Nmk#glaeU`?6eg-cW`Y}8E!CV@@Fco8W4xu)Nnd9A z2*&~g|76$vvY9jOA0FZ@_Z!p|fpXE#A1dw`uL6;>DIeQvoNL;bXQyDOp9DsjF2DHR zuCzG%Jl2a_+Z;FG?q*+m>_peV`yfYGea(JrsK<2cPuh>hBstu@8*mXdS$q6Ek6hUw z@Wm#1=1;+fNnt@*^}E|&vE`^>POCGimIMh?G6k-gYJ5sGfJI*dt3CdcA1cOdbPQzU zDug5WmE##&mF@y$nAt_iSB7CBMY&454bfTKugH4Z1H(FT#&XT95&TL&5ctgTJp0rN z>Gqdq!pf}FI|n$;90v8rM~ z4bD;|6>p7RR{i5MzRD|S)c0iAB~Pf*FC#=rUGo(+!IpRs#M*e`&=N^TkSFKy&fDXg z^38`T5sA6m5%Ge>gP5Ty4yT(GdE}g`@}?f2#aJw^BjyczCYYf*@PNxH0ZsVx8ZPsB zKvPb~1mZKP0(HO%7}sppvwGf-FpaT%6J_nNZo_-Ct;zOa#lz>I^?L8muSLK4ufL{_ zm+?g59c?~j<|@t85OEI7-3q_6JT*a*YRPz79}45T@N9~x!br% zfv49`nHPKdVSTSW4g&P&)fBL7gK;RX+n+IlQK2+6n06u=&&|Qu+QCp z5K1iSeX2#nd~19)Z#N#)ynh$(_`K&9Ny2ziuFPxoc1Gu|8pdvnE=!u}p8!s4PCV`& z^N;1TG1JJwY2!anpu#_gc+wbi41+-6DusA5Idvj?<3WKbWYnYj zG2_Y5$uz}IEn-pHfIpIxdX-ZJl71a2yNbpj?sulF#v^F^0fsdSafL4P}r_A0JSZ5Gn% z3hlEQBkq>yWpAy6IuI}``LCS3*V-VL>z9kyV;*6lQR+P0f+jmbW3PhRIG|w!OV!cY zxTBs_+vgfseZ3=LJdl&-EK$2hTt|%{y{t)(yEce-%htlh0CK5;h`Ha#%6y`nE+53N zCLktMR?FoxXLE5>c#veuu#B)c6cugPqpW^@ciBH2pHjFf&S9x%@8RE97pnzJ*9SO8 zV5m~&!iqjljp>YK&teKF!lTiFgMB7Xmm+6a_Rc#ow&sCF?xyQ8u!Y3k1de5kKttk4m?21WXjyY^q7r2*4LpVf5K9>y&lE36G1W@eI{708WUG2d4Sx@Bp%Kf;b zgUs^BRp#i@Djnbko#UCvHu$s)JiX*oQ)a zH=qZ?b|KG01fl?N(&9M5w#VhqCQP4gcm-P)T)s4Q7bb4`L(xhfK(~2OB^6RoF*)IG z5=xh+*WXKpS_-72vIKpgep!{;K2^~#ho5(*Ufh52Y1FuTZMSeQEnwVpR%yP56;M{$ zWPrf4qz#WDYP#XX7-3;*IC!GE%)D?*FMZ5K4LtX#jq#Mfv#ys2`anq^%)3-Sg)9oA zo*VFO#b+w-E6pJz?+q;^t?vGfmgf@d#G~T*-><|L{28w^TyQ6X?4#n-{{QmKb!*NVQ2x)?u|7mV{XYmeq? zL!-DxZz4?U%#AHoek8H2y4S6nzc{aQBA;TH18|n56>b%^wXjIOT)(Cjbus}rm|BDH zJFcRbu2;Ef7i+!>s0 z6eE+FI(m?MU3AGxUYG(a8yX!q%QuP6tX{`s8r@BuTS6kbZN`2}A0G=JXUW-FIijbk zr7dx`b6rf=c*7ot+*Un~%D(*#z&Qns3tRrB>2AAXDBGWFXLuLJX;pS+SEgX`SEOrE z-am{$R?G+WSGODq5UFbf^Y~~(c$~mlT*$rVdZu_;(C~(6hU%gyqXc}&EaxTdmIdBb zL%z=?x2W)!Vyvsq!z8Hg1J^lJ@;BGV*qg_S9!0w5S<<3@Q;$E>({F1paRvNdM zbe+VZ(ux#e-7Gx^_YtrqC6#Hk)bjlZ|1_AUOgf;8+S}l1_@Z3LB<6p@t^f521>?t@ zZl%AP38}7DbrNG{e45S0BnWEG3f^M3 z_U-KDo4-wMP|>kgovAa3!l$(A{Nm>GLu}d>wJC13TXZCnWf~iln*`24OU^)P zkdnMD0c}Z}Zclrx8!E{Rw4cyglN8NIXAlm^BA36};!vy2i6;pk?r>tBQ*?9EB6@6o zXe%uY`E$fr5!JjpO(gi@`G>G}^vOmpWUHMgB3RwCuVIZvI}&-`2XGTRG<`x58CSz- zfJ?r1_t%CG4~~Ns5<3PD-K`w#S*$*4Mb*0b=)TpBHe-I%WF2;*htj!$x=S%6Lgc}caZ}Z~I%!2bZ4OL-F-yfN+DahB;fy|?5%?0dZTwu+}$0526xwl00Dvof(Ccj;O^E~@J55X z26uON3mU9(ZJ?otGjrzD)ZF~@yV})NUHf8x^(}qZvlKx@ekNg(&#(n79oG}|ia5ct zi$ArMxW4CDT(?-gAr;}#To&~v557nW`~{qf@E3d*rYB-v)u}f*gq&YNEiWcR+$O89 zyZokFrKe9cZEfgr$ZByS^H5B1q`66Owo%l>1G$IjRZ{{f-}j&nw2bu*A!@k8a%0JV z;QEG093JS*O@P29@H1nOAQ(m-WucT|R!!xncgI7H>op{&amjz{Li|vfy?j@#<|X@L z)2C)f$5#Bp<3bWd*^~78sq1)6op%O<4}MbWe}43+=LEH!`OZn*l#!{Zx9BFvJ-V1y zRk%%pE0;jUsXK+NtADp^6b*kMu%Nd8IvuTd zt?_$U34mCMy)t;j7Pxj8N%gze8y|-(vFxS>xI%@X)KsI4EV6prPNS`D@yCS)t7uH_ zDfwV#J<(mME*>=TITZK2_SXkDtpM7>jin}-;k()xN!0v|ZqBW}t53T_dq;kjk~6a9 z=x~uSJ{>g@Ka6iXv^K;f9s>MkTXvczRsNu8Np##`#>Y`VMoW@ibZXVmComta=pONRVx8QLQe=hLPNCvu37@f+(@2s$)He@W}l*C&sR zc=$nBoA_y40`ZH4;oF{HvhANlF7?zsAUC_ab_{BJUd{c3+wnhR2skLMH$3R^kZc$# zeq-eD{zoZBNc#xpsEu{mjeGHcOVx@s!k0=)TiRkf@f3$)Yx}%AT`drhTfZth;+{8G zx5iH3Xt|j^3%KL*g5DoQsw{ktr5Xh67K~gaqDN$4 zp6IWC9bO+9XTdTv|~Nm3F^-W>1k%593oS^H{LdndoFZh8IKxNN|Vees|ycdHC{ zUm6vTWTG$=J0xRsmh!X<^b}7|?n2?^te^20+0^ z6k{woUvLg-gb;M7{!~&uT!3i?J$INS?K_^<4Y;PV9*S@nx{4p!yYJ7hObzdfd-tHM zS`_*~+}rlR0F$HooZU<6I&FnKL=)j zy=`{Fn${$)a6SU`az8x^-9O{vxLH3Z_+A|u2ZwIA&>czUgMs$&B_6dss|YYshgHs; zPPn_Mg+9-y*9lWXDWfW-t>+CPh4(HZWJ$K+fuRy%Tmp7UzDCb7aQwsrpt5SW`@w-Q zym4`4tns?iYtIl-OCmjG6s^XeIBd=Jf4<`X+Y0okXTrLLS;|G9XEv=(Pvwo&RemnF z(3o6IWC5tRe{<=|>TnjF z)5UTv^(@zN@f@so<4_zs)_oKMUOa=pyje}lUpdiK+0x8wxh^y#ii%a0c7lomI-Ri` zCfFAF3Cv5~=Z{F^yHk%>=LOE^5nKFI(94&-BjxOq%!QMHPm|z?1!WJ|AG&ER^k?to zzJAdoz^S8|d_)Zp07l7hYobK|Z4;{4bwhMshM1t}E=-`chHpped2}{hA!3SIys8bk z`4Uqc!Ytd-!{c7T$L}c`zTCb|&Ojh_0Z98G@@{C-Lu~FVasW@+W=AMD)V>+g{0L-Ld=c`u0B`N4Ed-&+H3menhQT|{dB8q z5))5{WcD<2C^)HFhRr-W2ch{_la>hA#`tFKf7FaD2>e}bW@}&)8k971t$Sy##rq!Q zmd7!y)KQ+4VcfW+qr5QIguRWUop`9~wWPvY4zThJmuU;wjb0SgAU=a(M+ zJbxWNDe&y%(dzvzkp-c-6w`(1POlYDD@0)Qm-8+U?7!Sk7_=uUesj?nPak6P8cBg* zQ=ZN!`Fv@m={d95)R+Rn(`F=Ow;Famk$u8dWyb zPli!D#h_56=V@`eT`6P(_Ns+SlkBh62#hq6&n}SRzV%V_->LT+)GK7%j5cx^Tn$cB zxSiLXt`Y(LI>6>GOu;GjdZ9K`BEm8Wioec*TTvX%2~qM+RZ3#M7G{cKE-Hx#a|_S`3ET@|man>^DiV(a@XGEXC+ zscy98)f0cC{;G*kp7ttNvZ(f>avWiWUrZZCEJPLb!%1wQwOLqT+lC4pIBT0N&yiS9I&I=jsut{=MdHp8EgK*isyJb+d%?>+Y`-_|Fnox>as zp>8Mmh}vdLWZIK?=>pq$)Lg}%0{AFw*}pswXGLPk@Xli@kZupF!=`VJ(-8tzZOf|! zmrFOiBEJ@CSYK3O@yVXQnO-q*SZEy&N?XHH_b;k$K0CdO&hKqZm*=&wHAC!5Rg zPXhksAGQbZvFy_CwO7@Ldl1oaCj(5tjfg1p$R~SmJ7o7#44u;e)s6|n-O$wL*yR^c zb1T4e?Bn2JoO{H~2Rj%4NXKfmYJ@yBN2`Qx9@al|iF$4q-Bi!rPbFHfz`Mh?o?69| zay01BjL~NdzewCAZFA*)3*P%VmxSy_*4C6Ev@9%OEWrM!YecQjd?f>oB-y`i3 z?XPKElpWa5AG3&;2WQ+gp<0MhrjstmGUbk;LTy$wv}QbcN+HcRV}hv^ZtZold{l^K zS(^w936KgMrKGy+16o+JQ{s5eHkG%HbjUnPiUYnUPOrb*CMrYZdT)-NS67qe`3&!b z{Hl(ML;+ZOzT1CV@ivkqU9N8mASqk3Eqqf)4z8Q7=LA-g5rS1ls(S^aKb{hwuPxPu zzxq^-4!n}aG|nqK(<2Fltdg!ydYtXmNRB%XV3S`tP}DFue+3QIn(?5Eac)55NK{}F z*b;_HUP2CI(*kB2I=XZEcLoct0-!1n071w`h;r0{WND!gCq`6gio*hu&sW(68L=(n zX_KdMG(6m6R|{x|TNbAs+ae$NL1ZEN)D;@<1Z7t>){H<7L7))FMIiOzH?g+hTVxa% zlRChFjyap+e9LY~L{L{;?v$=i%!-3~V3~MmMz`s6ngQ=2nGUR#jxg`D2Fjewi}T+R z$O|DLIMrtWTgXV97BSHD%iad@)Zbfcff8salrvNKKL4K&Z<~2qN)JYrlFwtjT%FND znQwF>r6SIdWJR#uis@8~M27z|jeHSM(W=(^bDFHerBzRSg;6s!&r7kOfq+n3=`*mh z0+!x=u~2+P6od}Lrt+ZByrHbr9>|49<4HxxacC2{_Jt`}v~Zj%dpZ{DclTMo@16s= zCGVXS-B!#n@xl*@5_H(zSZqFRIzU{o8xrFOB@KcMHTL{OMPK>k2*1&6Cc*_SED>A$ z!X=x1%baR06TWlP62q238SGy9-}RUmG4T02AapvOgMAKs2?-&p+!uCE63&+j6_ps< zTn;f8A^+Wq3#x~X^F$PDi8;w>d?j}iU?+cm+v)vk__BM?WJ(KTzMHH?JlLYb8Uo zI$~yT>)U?Yoi!^puhxz!Yw*9x1Zv>NS4T|hh^+KuYwHcCg*4+vn!zI$$jalv4?LOG z%3&d01_jCQnwNY^cRm9;oc~~Ieqj)84{+C;+q)NMi@`a)I#3+R=C)0f1+ADce;1wE z{^nqS{IM{J7*pJOKt!1M|jJo9cQf%ZJwlJ2sWFU2%Ih9Do6%0vhgU(y+tI3F!R6#7Wg zvA>2S=v)V1Ep{z=jusz-b3c9d#=&_;AC8fDbobGp-bsAsjH8B*z0p)&XZMsh4}B1& zs`U^)=x#VqUkYdN_bP~g@5Qht=9OS8@P7o&LQl*6?E$fkAkANHQ!}foha}ZXio0t_ z6y(3?;e6z?xX?x$2h(bDlZ|M~^4|jr`>EAW!}1&>ZQ>I#`HJijmK@xAQ4iwc{Z@kr zyGtTDvypb-6(WO6$xpM3_9{{da==3w9}(zL z^e{qy^^8_dYY9EfCs&~gns{!GyR{xOh`$<=B?z(54Mph zWfrHosV)23s8?{|S;lH%*19ECnWay+5C*U-x)p`8v@LV{OdC^n16YlJG!6+g@x8D3 zbwaQ~0XQh<-Jy{zkSA{H7=6hCmPe!#pPFzI%V|?`@wiWsZgDe7{noBPwY?HKYb}1K zG`^%G%v9T-xk8%lIWYT>5JR}{&gGz8no8?kU^Kc!B4s-*g995+lZr=q<>}8Q9tL|4 zh*Z%up2p4a5LkStS8Qi}JA@A-#Vq!m(cn2F$!+z@>q!Qqdg$(hlZ+ZX+pOy^ z9^tX&Y7AKkcrMx7bnL`&s5bnnghu=K0-V8@Y*jY;=sF8W{4GxjsZn}d(5_?VU13)9 zN+_l7F86p}z*os9YdUegT0y3qD`T1{Y*9m!Uw#N5^HZ9pK0gjQDtgg8Fk#}f_@8>b z?8)JgfWH|uS~Q7%z18wTcPqWIrff|BVDAW?Mb&UVAHzpp_u@5QN|886HHfO6i|gf4WVHT)Gg_9I>;jVf-&L5e$yQY9S=PF4O{F^Kb(8F-?r3OK@%M1H_hiv4Ep?H~J|%i@6*jCz6qz*lmKFVY zuiQz;<5Qwo`I@U9rR#=gL4cz7z^k2tB7ov9>Z?~#Jy}*bON8C~DYax|k3rsiTufgC zr)pN=uU-s+_I{QEv1?xpc`trTibznT-E+k8wt2qWwPa0OudO3||NhxqDew-_sOpwC ztyZ5U7A{|joLg9vm)K+Zo6ww0S)%D?b{xRwZ8@2HG|(x#2By{@km(>vlKZg9Nj3d? znTh|nR`UGkwj~o9zd5Z=fl%5#!n`|tAqQC)gc(EZoUn@*qIxv^nLgg9xj#*;>~<_8 zCLah)G6Y=fv0s^I)=^-5HlQ`d_z>F*!dL%;VaonJ$U*k=bLzp_>z`hs3egkJSoAg=sp)A+dxF{@4sCeoJoT-X zdc#_K4Qd<;J#^S-`q4!Gr%wxV1`h8l9vvx%s2X5QX%It}iB3Uxhzxqcxb=D*twZMYin@jMKgL1mrs(?@ase1vgvBLN!selJA_ zgc_fez>EwNizVo-TE*Q|ptHG9PP*B_neRw$CQq{&GNN~{B$329;dv!@eY?jb#NyGv zewSt+muR>zzm`r8Z+JncIl>}Qz6rLakesIukZmJK3u5+iA?PK@1*%!F`SMbyD*C$P z=3?ag(IgtintiqT?yMGTpyFv*Qow|h3-MkOU$?G|J|dOFv5568HDsR8+vTe zTi&;|Ir9xGKL>w}ZBV}~j1@9C3S=*+6?nB9t;lm3C+J7gHCW2S@R(d(?;aS0xxa3X8s9gGEKR&jrSReg7a_UcMU4>4Y zLm!f-$Wyfou#J^VPO7H(X?Ae62dVa?5cd27*UP)+Y9oMgJPPsBM?i2nsiHw#ay$qd zdv#&Nn~p<;QOYu2jK31ZaWz5*_9%3IzL}2aeA43dQk#TIJ{Cm`Vf#Ij4~0EkngvBl zgIhdJ=oQAaT+J-Rf`=UY&fzm3`j^)B(=6?kv#Z2Pv;6@QZJGZ zF-!P8Kf&bXr_D9M9;zF?CKcgR$e+G zJRAI5DfiX?eC4*8r+PAuzH8h>AE@(px}bh2Di;3h#$TaYE%%uEwms&K4_>^7HMdX4 zIPKi!K79F?UTr~{)_tRUfeILlaEOn-LRev%T%*i-{G58Y5!YdLEfr!lr!_B-3rCav zQYhZ9e>aT0clo&nVVeUS?TFsw9C72#m}x~KXRsJ)E~mb5gr>@nU_LtTKFWO2C0L4; zgZNGQx$PM;_h(0FMD&6(cf<2EKzu;TX9E=@ThZ5uj&s-pg9N3ulWiWBsbWOu;i`dO z(}?QW4X&vfC%f`TuT%@C$7=(&9`!JL9S#XP6=H9#LYi-Ms7(!a?KN)CU z+R|4AcCyO-#M#`NUC z;5s`9l-q&BHtlv`qnt=uoew{bNGk>A+It?vnIez4YqrB2U|ax^vMof7+IS?_#1=-c zm2`R`nig@cB1HRkvTy!9#jKHTH4?O?>mXo&pE*vcqr3g}&nKKmI#aPt+F`1oYy=yL}z9L84V(9e@6DE?-Ym_PP^@V&rBxFNZ-)OM8w@Q`#!@$P?aH9WMQ9h zQ#Et>9qkeB{qaOhQ9(@|GhUaqB7le&To0}mtWf-=!LVFcGfZ9YdaMuVH&)|5 zp`6mD9|uPd4s<|5)ipi5J9BRCT6krTi8R*Od)S{zEJuXtDEGl|gU8?{o0H_wQ5fc| zZRq0lQgpccnaPpTM@~epFNVyx6}YxoWs$nzrGO0Uus^@RLH=FH<7eqsBxkLYrbg-M z`wb&-4?J8KH?0K8cn)EQk%gVtQltjSjgM43=T9g3bwJb~ZA7OryWfFXi7YjKFM_>; z@AxU?GP!E95zrL(L+iZ$%Cg+tVbfQ1y45$u#e5}!p&t$l(+B(l=&JwAf{@wC>XJ4If4Gk&V7=zD*|TYRN8vs$1*y?s*sw;0ej)fj*j8G2 zXILo>gULEzV$Jfof2%7Y)$Hmw^~yGF#NWVWC6?Ni8t!FK%6gKnrcKIJ6RJ?V?>qxXl9x^e7476Sj0f+c(gs7n)e(o!o3-zk!?Y*cKnVxmxtk1_`%&>#J=dCJd*|@t(IK>~5QWq{4c`F0wp8lEts&c0){y~!j9fX& z+NT{$R0-TxKUC48WaD?CdWot{l&qUWlDxh`>7s;f>4?mGUB&e=T#@rG51Q|pJU5x_ zPTOn|_}MWt=_9*_YKzW=?c4il0q)0s(#bW(lcsfu3c*o~7*`74!>|U70Ee>3q~3d+ zT+}mhg*^s`%MiL(ByC|cw6cnfi>RSa)m?juELzSZhc($a_=Nh*c)5 zY?_-jil@b4-~IpO8UJH5$5YZmYSWrbXZ2fo4jyj-nQFsfXw`nhtVTG$BPF2T=e>I2 zch?^b>vz%m$LXZspYgp(wKYGO7Dq)=5N_2P|9ZFB3+pKR8D0;(mQV&vV16%i9eHd* zA+SL>b!fy%r4#Te#78nS>soXv4A%d)6Bxhv9#e>{IT(HB(-c_3@~EHYlzWrAX?p5| zKX`@g!zrK>KUKP0t?~V^L~?z;7zjLL&Kz6vUkAiB5xb zpqY;wc{i*CGwoS>S3kA31YXA^+Z0u_K9`_4D-9by#d!d>AYIRT*n=6SgEYk0Xzstf z{eyRf1(~BWGms>nOisdY1PE)34&!l^tciQ3co=WG>tpbQ^Y>Ad!I{f?$RGFP%esLi z=+L!L;{z03tdq(oemVc0%vt-$RXoY-o~8sAB5iK)rcH`JAr8CCH!1-psL-&vr6Cl} ztSI*7ccpOF-e;^XaM(&pshN?tP`GBsG=_nZIw$-%OZ!=e8wxnvw3TK9Sirg(r|zII zJh8HtJ2T!>kEZL|@=*65tZg8yIBcGXs-2+zdk-gu?;@?n!DVuf2d79WSPUEuK*7rf zVXaQK=kXRu^L?0WYpavZkVB`k5ioN0M{>@O@o;|XMNoSZzZ?sXYJ-q3S2Y4_PmV4) z;`Vkisj!R!^DD4;k?js>b}M)D(o$=mQ}Us9eAws^fi(I{$0vG7JWHKd>#LOf|-vira4!cRil% zJp|ka9TB=3{8iq|bsb$!XR|tE>T1psjfhVF{YpAAHU)*l9REa*v=T(6U@o_fuld%BXT!*x5w2}kdE}m2K$#+GE}Nq|3vvV z?KEAb>1{}VniTZD$C7b%Z{?-%<9D;Rm%|q#t59V289U4et{Yvo+%`NPx-~LbUSDr zr$*{Zj~L%Y*;?pD&fGTi9ycnSGOk6EqFF6emVp_khm1y(1Wj^)*pK5! z4&9eXy-3OXE4k5{+Ofld$h$XxKihw*XpHTs@I@Cm<#8PJAXG2QMsykcetpe3SdX1K zSnW?LbOIu{EXj%_#)gqn?c({;o=}@HMIY!oL9zf`eg3UP1#kD)F_Y`=%Eog*K!Aj- zvD%XfV%~u7kQBhe`(66}zXVI$IuEn!Jj5k}8Tt4c?tJxcG)j0i(?)l7MHh=9qCY}m zxQyuT=N`p<932RijB8D!2fHwzeHi&~FY8Mlj`&?BO`ojm+x(d6mY$!Crl&B!4w@=2 zILpU3Kd5H^?#UJM{y|Y1N)pAzx=y%?fC0zd{<&nDEXsBL=we+$Sc| zWkh>yk z=T!0TX|anUR<08uECT8b+y(1^-AnFntRS$MTJAyjbEP?*qP`rr#9d|%uf(mZ1M%)% zY)m}mn*wXCeR#9`x;7YXOCAyF+y0o>R~!}J_nF&#)L%KJR~}5E&Mczro8Xe_-ybMd z0unM%VdfD@*SSLn-QLM}|3yszedcfh++jh56exJuJ1ugh;W|zrKiflARSm8UL8ka! z*7=x37^-F1)IKtQH01__pxP_R1@;A96LZ3@udEUvZ@umwJ26(Sp(oX=mjTq0r^PwPSE(%=U@5>%bGjdSI&>;|u%?kt!S zY`>Ry3*ttP|8SS>k)}Qc*e(9h6&#&V;?Gm2LzDE#S5~(OQ4m-xT@z>>a|>TVs}7bl zCGOEU%|;d=6ZXomJzqQA`-&;)XeBV$ib*IZNJ*GGBF8uG+A_*wNR~<*Pt`mfM0Ub= z(Ob>Pt&M2O_LpdpZgDKL76tV}BK|G@Z43J)NOVu;@X8{QyATeyYR3`&Ij~E9(_Q47 zZ;n)L%>iT<_e#KPEm}yebm!t1|73vd!bQ=xJ%N`QZ0^P5@2uu?QRWugFAg+SeyhNz+fezoLa;30;=P zAE(_&KKWjrvSsgQ;mIx;(_s#vb)Th;73$etD3^?EUKLvW?%M3RHjOsI$0tvoSt z#d4oA%{ci-;GYyv|H~$eHIi;?I&w=jM1QqCP#@A%Vw&3Qw!Mu%XWZ;TAkJGRbQCq! z`rusVw#qP(g(i47Rs{@M4HcLgGn4FhdVv1%=Xax9b9oS)-0h3tCQIU@#rDJY*s>@B7AHe()tK6`|-$tEm{-k#r7mV^^W0z$)T50w8LUMvuv<=^tur`iJ?me+M3%#-bWz7oTGXUk{nc_Q8@8$&T)GhTGfN4dAy$P&uh& z&3vx)W_me4Z~s%)s$tdfK{4_D@x|@$YH-O(FQQ%nnF|x}#~dosHz2fUq8%Db>JiqC z%EEeZ)yYM=#(G+=BpY}xTjiOBcZZzQ z+#LSEKzwKAgAog6bYeJ?ezjU&>s(L=N>4rDV$1Lehu3Ak@@}I(9Zge$b*S2v(0Pt- z8j8@fewQZkQ^tLOl}75*zHj5;m$%g0E1Lgo=s|`PY^iKaW9UU3NVGjHH6q1@sR>$0 z^P61p&h~CUNmze`t_4Ix)4n>y|9h@#A%(HPKD>HV9!{)ZbK<+$ft%7|aa74capN6( zzVLNw!uPmm5d%qCxMo>1E1z>Y7(S*E+hAYBs7n5d^pB6BaKX&`_?5vr;AvsV>)fo2 zAXl2KweGsthr9>*wH$6|@zbwIFGSxcOw4V@(uT!Ww3VP5c7Q%1{zVx*RC&s zujF&Wb27Nzv~VBzXeH{1$iKze+b!AL(<;WdUJt^~qEw?(kA-JkG)O{GeFKI)@x)iBS;~FW7_KQX-P~FQPTYX7wyG$&UB-cutI%R)w4m^aJBL z5c1qdKX#FXBzziZZK8JXrMJl?&iBr~4qlnqHnn)gM<0%)7Piw%Ej%Sz+XNSC8=0S* z;g$cuMc#3MtmIZoI?r!zFn&;kM5^ObaM{y(3Lh$q2da*h* z7^+EQgqXQ&mUsNd>asE(EnISVwU#0um)a0)NkROfzuZcNiL4Pc|I0bikVJmZuy$%y zWHO#~5U@7ny$8u^zjbIP%Ye?6{JdNB<_0y27s^ykc&C-~0kN$HY0x(3A>dbD+fx!$ z6*LU0(e4s-m<^+aE?~Z`*6C@E@`}?#Kyq+NWdoxi^BDz7vPpCF8+#o#?9JY*hww@g zeU9WzWEDJR%g~++^+8CK9vJ2Vw4#d|e>CyYIP;)Jpo)&(k$bgmu0eX};(&_;Ye>2d z^=M4Klq%u=rr9d*wuwTAFI6IjT?v#|LFzHU;e-^f4-xxABLJDXA1XoQ50HDGVQl|n zYJl8DyOmf++5JxgBPq(n%+RiWi79?L7r+e_h0Go9y58WNdzX}yuM-gr0G(-!#T-H5 z{TBVynh#2u+ounwU?bsPE{@m9+&$!6Hg4B}X!v;H6S(mA0=1OuE2pq1rY4^t$NK1p z^;zp9%zaLAdwPftCTr^Mkku?{hyXI5V5sS^R`<}IX~_DjbhT*$d_L*x*`G>3H|3g&c zjCAB}YernQv}pBl!doE2rmo(@6&oYA%I{HGj8xm56e^_?_q{{L)xM%C;6Pnzif;2= zSB(R^N85a1f$%KZ@2ZehWM_)7uFB!n@)%zp z6OVwN4;_xbo3)V#X(>FOhS5l4?F@WW?+RkHV0`ztJcqyw-OwOYC`=8A+|hqBWN*v= zj5=OXW#1NQE?btTj)My122<`DU?}N&$OM0wFUIpV%2dBgRCI!_Mnud1nv-@?bt2FugpWn|q$zA#9k(9Y)L}j4q68TRF;1|!cn-UEIwHX*Q z`KZ0?-}h|#$Lf@D8(Q}q7#TxLUAs#E|IZ8+$hDQWuK0KJ`QVDQuvs-VXPu&;wW(iG z(*Q!?D>yh?8(aLP)|%z__k>jPuX;V8p;Y zogH+*pAH-bNAT_$NuCGC3n>E35fwIy0xYr$)-)JlJ-=OK$?=Bl5>m|EHZ$;MwY?@= zzeE}OEQ7}l?Mfaah+`s;*o_n4Xn; z>SxD2Q6^b6YP`kOG~2rg(dsI=krR6qY)Y|EpO}57BueBI2 zEq+e6;Wjsj(5H+wKf2W3RY5mT9<|`+m0;w3^U4>T?or2E^j`D7JrLE9i$Tib5`$hx z=viA4OW?x`P7cOI_|earrXSxiA_SvoFjkQ2lhRi6-|z$asz}rBywQWIKPEfa8*Ws_ zyw_PZwB}ep4q(_@;{W$BRD)!D@IkR^v6clFlXqMp@Yu#LAC*CWbnG{o@#$=9L3(zr z&4|XsN}cArF~P~Sl?n>?>vxf|tGPW%H2U&?E6*V%kJPak!?($=;S{hr|QyR2%cw)3u`2qsv)jd>ZE4R`F4 zreP+bD3o7ZIT(G^8R1+G{zDmWbnD%)Jz>svVY6lDeK&YXD7#1e*5mSn$g97=-zeK0 zJ~{RE!8IgdYpOW(J);d0^0P9RE#O$%?S9ooS592*A&5Gklq#KG7m+u@P`+cZP!?D@ zjjF;>iu)(8c5Kzg<$cCJhusxxzyXHwEFM#lFd=7*pAoJ{nJpzXRUcVq_T>;p&4_4i zt-)@?Jj|ylru_^zF#hroP{ySL?>p36PO|IR?_h&Wk zX8P~U!bOBH=)erVY)(pjRY$IirV+2F%H9LJ6$@?^)PkS{bMk{ z<=Qr?&(I_|-Mi8a<+mV)E!u*xNPB?4#1%~4-g+rX57REyJgf=~;}8`|Ti|xz)t=p{ z5@%Tm*64kcxkQ<}kVcIV=x%$$)!w zboaF5j28?`+5M3a@AI?B)}HTCBet-nF>(opYlTjk0$m1CRt?Dl5%)xZpiC8%C^FcV?ru88;>ASwc(kXT={OEG!_;`<#$kDtOoSogT zZp&Z%1xEE)1;-UE*%s|KUipKmjdNOi&G zk;!K=YPfA|bl{7w9^Kg0E88mA>#&_xy%EC(x5C?PBr?5u!a_RVXUdwH5xZBu6uLUi zdKNFH1u+ySddXw=H=FmGQc8*XeP}j+>qiz8)6_9sN22h_n%BVdMg%v0ecT7c`IbAM zNg<&anyy$aLTZL=U|7O20n%c=acnVSSwTscy>(OPTX|YEdNcZWX|(>Ht)tZPX+d!;0I@uh!uEu}9<#~B)51s3z@)3f=LR*%sZ+G6Z zwcPp!i`GL>HLd$;>CD1F_>}d|71eqa^)?JPO0W9hrl1W!J+*0!Htue5~7&0@WG+1e7^q^%^ zz5HBZdA(IIeYTtFqcn`dftgAi!r^!N17&m|DmytiL4d-CF{$S=Ubcm6-B>ktJn zA)BQjYvWXL5nVEBCfekLlok(qsx)6>zc5)_35>b)jkd6>B@gC6zbSubP-@37{Qpr_sx1`m=~?EOl*wC z@-!>SqP?G+q@GE*crV%5#p37=RgD7lG0f39=<=-SrKH zA>}UQ!=BS%%OWA2MmJv79LhsN_fmGb*n(9iRB@R%c+P@H);FoPaOnqpb^jwIS2J^z z*=YSXeq*q(fS?Rya@vt={e?kQJ`|~bCt~oIq};30E`y2lAbE4PT-KhFWPBuWmW&tjm~eq&HOR;_=biVl}uHq$?y0MSL}Eie4H2_kglQ z2;OqzuAu+mD`t&N&O1(0#VX4ZF0qffARDsw)<&1jAov2`#!}gI8A4V{f$z^%nRbm9 z7T+8+rpq3GIlS(?T_`nuU}Qj)!5T zR9RHjVPjJ^4ijaCyzu%L!PI=(CfA&`3eUJ{raG#I9>x>!4e#4NvFBB4OnX8tcK_M z!Xp7A!P$o>0^CE7ejFy+N`XE-Xt|gqPEScO2DIZ#g}nS$w7S2~MavxHgy7SJUKTzZ`F@&P*6hws_FyrG1g<$c`ZFiK3??a6OCCJMWRcKFh}omIcqGo z2k{d>i-_`o#`2cRN@|@9ex(t~S zx5HMJ>KmvC|IU9rGG9JW;|7$IcI+)&Jqo9bOsQD3F{~*2OxHrzz?W&ydIT@7>~FX* z%O*KzdKn*w^;e@#r_Ie8!xx2ma%Ey1Z>g@PJ+n2l)6C(Tg=u)&8&nNNWHnV@d7mu! z$MsjRoHIQDz{u@hmx)0jcXWLWr;4Y-G6P2emASc(bUhq!dlyL6(A``ULwjozTCgWA z&ah*(@t99OWcWNq94DF+AieLLJuKLL|LbZm;6iDykIvac=s2~^l7{W-bK1cduaf62VcCEDc&bMab z^oK^kgj3y_Utn~yZ?sEP=no^q_i5lwaYnCh9uC<)?)BNFq<*Gt6ZLuwL@|In<&SLqt+=9; zywp2nA17aJuzXT4Jyl{aR`ayb)wmz-gh>wFWMG&nTd&U0;p%bh?#oe6`K+B}rBh8m z#oR{u6b`k^r_nu^^Pa~cec7t)Bxx*<;O!uv-@gt%?pXF*@TBzjC zUhdBUDb}L?@1!$L(Qos)0eQ=C3H^rNi%NU*(5suF)yz*5NhIAj{SR@uZ-O1%cje5j zG+QhHZC==@hefc59ml8beoDwbD4Q{MrEUz;%b&JFH@|$CD-v6<)1NM>ZMF| z?^CESdC}e=F+ZWq$sX8`=)U<)V+Rrw)f#WWBO7FMt;OhAu&iWw6(P3tn+@N%c==fw^_!=Lv~A$ z58SA%;h?+Coo!jD(gCXXd{yQ( zmIy6T{*}Y~?V}td&9Y@5Y)!o>J-Q-P-N<=Z~S$v2=n)k0$5CJRbKf$ zvCqv21kRN)Te8{V(IIPBhmTxAJ9L#swNfU?S(%VPZVJgIhFk$-8Zmhmm0lr*VEn&E z7g-#ULdfY|Q6T-(SV6aI?F>RY)pud7aZdQtJG15}O0alDcBBWid-!k>Ky@+2r~p@Y zG`8Vd#n3ualmg!=+kIsU4nJWJrzF$siwtyQ9+DuBkw^o(@q4fr|xJetvO=N z!S&r`)XOhYq^T2Eg2<5nSP`A)kRU$9fNw{KFaIC1|wv0rWbw73?_ zYep#AuDht3`NSvxa5PibO5tB_kz^N=E0kJZAT+66F=T_~dg#xe;pfqcVJ$S(@O{vA#H!Krp?WFOwxBs$YVUo zXCLbG$K4nL*6K7DyBt;lkWX!#>giSB(E;$8m{;a=7V?!@wTPv)gWyp?j#t0hP>gw0D6yRUF7IqYp6P*T&-8C^heT-aZ!;gYrwzWC=iDJZzd6DW^s5;uohG7%+ z2jj1CQzoOp(V-Kbp6fFxq>{d{kvLc1S7W=&sRJy0NOYQU zC`N7mfpUCJ%&NX_G=m=-1axOAe0TJm8NAFJz_i<}pv<*j1;(V9&YBMM;qG32%-K+6%bkW}C)>^lDn4uxLn?DfAsQGWhk zn5qjg9{&^DH>HO7hzuI(Cw!0F_F|z(Jm6_$?d-_V$wr#KmB!#ufPjLQ3w$sWfzqN` zwQDP@wBvkaw%!#z(l{k`$cXbbO72L{L$p%0rSI*oNZ_0{VIcs6NsK)3*8F;@r${Qb zn;&8yW_--=TFn52(bV$2eHzQ#wI!rI%=Fjgyox1CHxlmp@bcU%Ow+GyvudLcqpO{3 zb9+SFMJ;N)fD?{2_xP!@G4{3uOX}^CIS6a=qzvR=mHTHtw!3mLG<;wbzp4q=l1c5H z?&K1K*9MJwh>BWK|Bn*K|Bo1w66ptQpe%p(5x2(HSo9nG$*rV%X(EkMYtBAe8K8m(<~N z9_j>RRbGnQhpIfX8=sSeA+Pb`T(2*J-F_7McrJ@oVpb$1C=R6pEwnhr2`v<8@fLTA zOVQ#XSkdC{v{0m2aEG7?PFvh11d5Yj354YGzc%;Iym#*Nd?7PTKK*vGdv^EiIsJ`X ze<|)6-sYXXMPc!{2RQHkWO?SNv(w7%y!oqbthMloRi}54&rj1Fj(^cZbVunE=uGY@ zeo&*R%F(dVKe-(sR{V~v^``w>yXo5R$eiUIG}-yoMU$6w?SSq9&f*8Y6V()QnY?Im zW|W3ZwJJSt$S{_P1`umU1WqS5yh(+c?#Z|mtY0KK#Y4AIqQScu_AK(9aMC->{qXbp z;tF&n_Src7C^M~joj+$Aabcp|LQ#?_=6#HRRoU`rvuwZ@GQ~a)i|e05yJP{1K9y_d z_PLX$crdojEP%+oh4jwfE9OQW1+m_hpL)!y!1`l@?uG-JaBdCsU0-FkNVz3LL{Z6` zn5A990KmMxr%{_=Qfq6*tn~?f4Ycqr8M}UV%S)xh-_Ep6>$8 zWNB{eQYxnWO>Hkp(pQ*?`*7Yx6JkI+IyM{2N~y~{bf?kv^yMuf1l%9~p2#`0xd^$G z(CPq;IlP1%5a(k}@zkpU?%1i>71_hA{zYpV&bghE<8p z{zRGg)||ros$+Xk9~y0rup|tBLsfJNz2YTktu^VTd*o4fAO-qDeaoZ9#wKk;9av+6 z*GM$QmI1JmQeq+P_YvFv{b`7oeGuH(d#5TN&(P?syu0-F3`Q7w`z&FRrgI(Ry2;bh zjdiPrf#wZYHMu-Wh#26(u=)G~Ux6a9OhI-bUvQ^gb-%qDNq2YLgB>B{&TUqrvMcqzEB`=x`!8uTQVR}Gz8=>CD zJX>S1lrOLROSQ)MbO!_CkzuY}{r-lT*Hxkgo$fc|7dwci&vgoF5p&_ zeq5d!eW~P|ke9Q46|u4Sxx4-3m@5ZgtMn@0T~gkJh#;k!r?o%AX6PN~w;`|~nsV-r zaV)|TARTe%8J0XE&YI!HcK2Oo@19y(JK%_|nE@>yu>4_&KwXyVoJapMWBKFpdl2U` z2)%^|J-kh}J5gYp2*GAioFy|r{8}4& z#F!-zd%LFlqK%3uH?y@m=<4M&n|X6fsOU+ZE-s(|pJC7f<+HM-9Di}PB}w(%`a4zN zLb3f@vrv?cZ3|UZ1qVE`{9kO`$K-{+@etVSe294?mi>H!f6iH|_+UR^`k|ehH_HcB z8J}%ulFL7AIqJeY`w8m16|~SUlMiwBb~^jfJfDX2A_UMC;t6(v3kUGt_5|3QK+d3J zHyLzf1~dS_|0__O{QX;o2r?<3b8`BFw~dwc*4!*<-%GWh30&(w$}i!zIg#*e|GT!u zjgbi6B#V!55|wkWX^b8o^uE=hg;Dh~x>pNy5N{29#FF~g;03b--Lrv*8XYsvlf(7ri2i-; zuep@fXNcn_0I~#o>aWQ(Ur(PXh-<#9cZz$f=q%M&4+`#!|5m5hFWE1+iv-1pN2NjX~ z%Ps!#;$m7#FC`vRdqoWkgalZ2?D_D=2AG}9wV+jA8ar(KbpIP+w>9yG(50LAC8}j4 zUw1k|bEUS*tO4=v;d@e_3-W0_Y^gMcN>tV-D)X1v~hMe*p- zN)M=fd`C%04>D>C(v$d{7(%Mq?w0iGo##S6q}O8!l~i?s4qlT4@!aLV6S$r?G+#`7 z#jfC7oU;FAX=UBKgBXZGr#;T3s_b)Aq13>R+YtEVUNo2jE&+-m&9BAgmI@5iLiY9c z`hD0QIg=bGu_-noj78ik&Y;UuBYH2Lt_V!yGZ~cL>Q_J6ZT-h%m~YH2_lVmy2_&j+ zH=b8V=#15WPY-qU6%uLkonC9p?E>ys_FXxHNxZXti8@}>9hTVTGEd-7>*1s~eOSka zQ#`ByH`)hR2cV99k7OfHNAfg8W#Q9=zjJ^5WRL!%bskPow_KVe8337%jkB%$pk*d1 zYg0@w0#0oOG8@8_c8h5#szejQ-+D?CJny5=%V~1?vBCP3EqYIF;}s$Fb1L)73S0qy zIeD|HxXgk>r8l+-4^xGNxGGL8B`{#zE_vIZ$NWL{9y z>qctbTykV0X!?hbv1#}?&+YC{MC3;(P1!G*d9lW&gwI+=uT0b)bO!bI!mUE$L2*?HFZv*M?^UGJ?Ib6~CY-ti56q4MGj`Wf@J)#TzN3)) zh2uAiRBib$&VkSU#=M^@kBz?_9$7am@J8qfpT|a5dF}8=`sfCDB-Ib~`F7g=tCGp| zsDL0buiR0v^%0N1x0LrUuQdMqV+L(z`L(kK;ythHqza#_^*7qiJYCJ^@xEPcE6}M< zH}P$+k+hU!e5D0ohVs)qxj2Ae(ddICe=YE>UnhHF4;>NRY8B~O=|8-wzIWQO+fI(} zvImN(9k_N8{+jJtZ`;%GWXTnjS{ca{-Vh_E{X^FK&G73p<-jZzW$$!BRb`QkrGm3M zRwxe$?g_1z+b26Hz)DETa6pjDM{E$>@=?qj%|?Hw?+v5qgjIptw7i2~;m0%@eA(wx zE5Irorz9vq^lOlZK!WTZ0XC=F=%B~a?z#KJdz#@7rX`fQ`ndE2CB&&hLIwTqyPXNb zL2-L^UAG|haUL_`cQxn2TYC8i zruTnF4o1T~>^{Bv7yV)W2F2!!mFXXaeTqd6)2XOS5B1XIS&HXmg`oeX1(36M7O~u$ zjs63kWj)zjwZ%=_NdG3G-(dJ7{er{i4d95*mBlA;G!Blx?(#{P#aH+wxHGA1tXUl^ z2B+EtJN{izjI<}Jz?dF|=`a7DNa19&U?NgC@{OzfeCr{Z(4@4TGuvakoj4x9OOaM& zf#;WBO7IBjb0`cn<_V1ijZczv!&9tAz#97!Y|re z(rQUnTlTvT%U)e~s65!Rr!6vu(ZEvbNsI>)n6i|6KXNF1b;yy>qY+rx5`xLq^wKTF zrf}7M#fFS3FR>cOVMWa#ppcEAgONiv$dzAnLZ1lc4#_JB@`Eco__`d9q{ZJXNPYv* z-4Yk}*E2tK+I|=4xj>Z^m!b@9-bi>GHh)s(EAZN2HPvBk*;|!xM|-|7nv%@lPLNU2 zj*Q||VTj4Je5GNsq_xcpeE9H|5Zk+vGnt+zPe8G`8S-B{te-_^HqN7sP3r0l$HEbk zh`qDn)1enWyrwFZQmWUR-HR3fIQy<$r-q2A(#74WSl2x4y^iJqSrLrZLlZ+Xx8^{fHp_|olH9H0M=$Gtfk8C^mz+C=iL*Ow*eyo6Wj&38w9y`EnRao|#oa?D zS8S{?42B)Kf~kVeWxH;DoO#A)Myri1q>y3G`taN;;e`@&fycvp9|YrWd40FvshxtL zrO6)Ln|7suJFr%}_irfzJvMvE;-+qRlj>x1XfLMcYC6{TIG1F(>7fkw`O zPTI)rPWtLr3SOwc*`5Z0^?qGzOuoTmgrw>1@RolweoLgto!?2&Rj9~TJ1r>}u!)TO z=C3bi<+s9+JZIo~orZ6x(KQS&apAyz}@?;xk7j)za698Rz!Ve(G%vXgr z{%SckUWUsO&~=%uW18?{FdRlg&9#+v;G64%$KEUxcq4rc8hqrRcY@I4A9 z$c!+fmgk_Qlk6?(8KB_Ag*PW8T%t-7SY0L}<-hqS!`A}@;tTMR7qNh=Y2`29p4+OC zPQBQT2S;@7{fSWObTw7ZBN@F*WZ$(&!-gMvDEC9(AgP=$UF|8#Dl%VTP}J!YUrU}} zxJ)eZke;xi__beX2z;kSwCHXP_MR%50dK(Qsfd->Hc;|iSlZ-$A-VO2)AhQH^~Nyd zT;$;dY18}U?-_7pX&y5ebF)?f_?}HdVb@1TEE9g$@T82C*uQ2{uDNA~5UPW~o-c~3 zW-FCNy2)QoEY4fqKJ~nzF-rTW6jzt}RH80Ls4OLfMfSDxh)cfRGcDz=%wo<8gY0tDM@cq6v9(oOoc^!ZuZ+nZe^S2|D5F!EyN9p42TAyQu=3BT z9k?EO@1TkiCGodTERnGlV!x})8I@kMxCTU3|JB_{(v*_QpQ-=J^9B+8wo0|Y#nXe| zaF5;$zp<}=1)s!av_qXBJ1fXiz{Q}%V0v*Mkt@zVQ|YiFu+>Mlr6y$7C3x%pqjGn3m(??{}iIpA|S`67L?EW;_emOhUM~eWo`xp`lUqy`zb+{c?O3PdqK$?a_D= zA9&th7+pZyN##7BU3NMnwd}JQ(#k}3&po!%YICRy`*!Gl{L$3o2gHt#H2M2$R3eWP zJpE;;sG;a$Ffe_fUNkF_&|InNq#>T%9N356alPtB_L>7H(0`9QgO)s2pYW`){Rt8L zsOylJE4)rfTcIydDeyV!))aB?VU4NIy;I%y3*mv&DviJ|5$dm|7h+N~M!&zd)PxBr z^TiE#-J1+NaB8I@*_>vf)BO6bxBlFszMAE3WR|;br}Hq3Do4T6T!=&RM*-YH_9Us$ zqx;89v1YTRB;)$o|1nbi|FS^zD9WCgus?g-tX}FUte)a%VFMo;78Blq1=2-@g`_Zko4SEh8tQO7GfRh84NH_2GPX zwpZljP_C;&E&+#E&!?vKmb`Fa0;*Zw41$+zP9O*Tl|jsUv1&uqLc$EcJq=-&R&Z*& zN^xOzy_z$Ij(|3Mkd}bUHHj<5Ia;zuc$Nla1+C~we+VL!EK5yzKX@{lwy_r?mpK$E zKqC= zhy7*jK9GW_{sQyV#4agALzBu$unTA zu)x6jktBF_u&C5mW_+a$V0KRG6OZ5jdc-6yC(C(GlT>hu{QC!qKER)JA)QvejwCuV zTcw^RY7D02j1Nb(RU%t$*v(ZD`ram@S`?4FvGZCqac+g-LC*K2_L~3X()MC=ekA6k zo^dn~C0-W}XR8Q?yWf92xawYJ&8QfeHzQ|`wwL{sTh6j_uZ2*6Laikiemk#V6_;%H z_x8Qpd5K?o3aI4jXC*!3U`8*;4{mVam^7>a1pNd@;89)3S71MI@Ae+em%gY7zs<-S zm#}0;m+bHt+t0cyvA0U`FeEe0X6<37oHX;y0YH-0t-lf1leeu%FwEk-85e zHTv2Zxa0qC#=4;)BEP5JNmb8$Ua0e)E}4dY_jeU@g_~AIH#hny*L{i6rR>V%&fCls z^ys=`ychdu7$-rYXL8+hh}_EZam_;;~dd)TuoR_ve%H2vT)YccjoiYc&XK4i&~^)ajPbFl<6SD6C-1hNGr5n_@fy%RLfMx5TFbhu zikGdeklTzVtxIpB#0kX)5(J0oUaC?G+{Mp)i7kR#r7%^x75Key@@=&27I50+Xe?{p zl;o*K(puUY?lylI`03|l{$(1di@lQ`Jc|y>I$7G9x%&U6<^R1lD}7GvZtQ#3|5CQB z;$_b;*w$X=Q)l|8pI!Ht7i{hFavbZJ18m%~{5gF42HY=PyYy$;>P^^3WX}c*u2DJA z6a4TC_&|Z*;v4{?jvBtYAKOy@Cl#kB3(yrWv#dph;nNVIlB=DF?2%!+OVDFq5`e@N%q8*0{8!yO4at6!Flu zHi%jVzvMeouWUt z04(B5?t(W$00mp^*RD6U_zL%iol1ZsZdIEOBi?mo3g5805%KVe;dvqLF4~fb1s$cwlu)!N>FTSc-X5Pe525+IE6iX;wgw<0Zv$vI*XU-mnv-=2IUaK-9#GwOkGFdc#R z-lSE*?r3$Pd?tliv*NezIVc{b#{@P+X0#n|yCZY&#*3O#-<w=F%z;Fq&?`V?SZEvAy(Iyar5zui;xqa=K(qC z-<=;okPMvJ<`h9P|W{5q@tix8fQL+E-pw1E(2o5Tp~PMj)? zf(th`e_~KIZRCEm69{hW&ppx_TJ`C^JH4jFbA3rxr?i1y{$PiNF@k&l-@)NA0dM zC$pUK5?^9;Vm~nEO_8#12?&rx31cXGb-AN57`%PX(c4Wg&Xxn@2_{ z;@&IwrLw1_D~g&3cXM|7d74HzYcw-y{vMxjl&p~B(Nl?sQ(sJ+Chk8MZaU}Vyz5Qf z4}*%78|inLdcv|Z9XQj#6q+Zp>P;RyHveg#(2a+!v_to^&CUWZ+7s&SWJH=^r8kyB zY6QfMl0V+sGuS`i`lN02zES5LYh(2LpD_>LL?;>*Z(0=t9UY#1LUB11DL%fV7)L^6 zt@3Sy?Jj3GkF!-~EetMMa6T$Gx^fkGg}t2`Cv`+)Er}7H%xvWLRzFvzL(c zadZpnCQI%`QS5+>rZzDGZGdI!fZMA9d#Ej+RaqWcZMouC*n-PNS2NK06(ECnxD19l zRUZBs+Pa&0+rMRSu7#{nMH_-M>NpEKnv5LL$3Ba|UGSTqnO^YQ9mR7AGIyo!)lzqL zV2AOzepD-U$8!V6A^$r2hy#w}^r5NUZ-EqnPu9ohU9f7VcTAjYRmXBM{b2+`*3bf# z)5@O6labxGHI?g`-j-m(8NaC9TPrnoYI?#RT5rPP(hN5Tm(n5XR*!2@n#v#3$=rN-wS-(ORK?grQJc70A&+)r!HH3ppo`P=)gDF_IdpHLSV9sVZf)n<@M zu{8S#bfb94=TB98c`=l+#_jkxJ!s2@Vgjzly||%$JMW>iVfmerEeTc+3gA17p`KMh zbdmQw^qL&LY&)`A6=y_h~2;Xa>t3~K1LbH8k5@T9WoS@Gd&*Gv-~rwmGlZR zqG@Ul+H#d`15N;ZuTT--PWh=9jD479;E3r6oU`Lz*zoPez7rr#_a};KK0b^mZzb05 zY^i6l>p*No9|V)V?67S;zVtPNr@sLbQfUUFhEWxO)Bauoydf?Pa3&Nx4Po-N6QSp% z%#>>2*6!7&3e==kZYl7+6|l2^ILM?$cbDz!YW(a5$1&&X9X7PxJe5t2He+&9fyh}& z>^4?d7X2shbSj%p<+FFgjpk8+MJx6f z2Jty{Z()m^;Lv{^is~+{zWja*)^f|nc2=sT>$&UYU>f2K;_2nLn{#Bw-*uh)X>R!= z#vNMlE!7-d5|Dm@Ut1ngI0^*$!2m(tlGn+&^Keeu8?z6j_nBfV<4PCJnd&Q|ZV%E~ zsUHg$uy=1!l%SbRU2+2FQ6FjfyX>n9*C%Gtxd8ly&~eCnDxw2%8ZC<{<%)i~(RERC zbFXeT;NF+1-M0E~h0jLf+A7Gtjc8q4cd#!0IJEjt>E(ag!2I7I-RvXXS($v(ZnrtO z=ZVF2iWe#J9OVYa%R^?4oBwc|$7572mkAP$C26%i7UKB)px{6I`AvQn24OGv`}B#b z_4>bgP;|iLMLoS}v_!>k!~FYK~kk12p-~6U&>MoB1qC z=xNxmGI$qQf{_@HUt2+Z2Y@b)hW4)O1ziPXF8?d)*nZSd0q7OD!p@BYBA(F3L`|;G z&!A0=dj%QaN;Lany~e75TZ>F#w%yZ+YmZk_F zB~q!l5?WL3h33TcX&fY(FYvYzG%)s>SWU6F&O8uiAow`kn8Wlr+Te{&=u_)BVi&0N zmO!`{@q^lm2=(B-M3<@hyXF@kX5H5QOER#vTPM z9>`j|$?R23%3S~C8zILbZ{8iWi$Q1sNbKC&&$m(tXJ0vCHS##h6V7JWk@5;Mid@pv zv~vy@-WJsPR(~~tfv?uGn1rR%>%SxcCb}aOmerKG!7rgtPBdBiB7AIYCVaia`V@A` zI3?@G4F=PQVq3r=tYsmzU|a^6P3~NOwSz4Wa6lL|7N{AXgXi%Db3lE^w$JE-YR)$0 zr|*xdJ~M~u#_IU&y!3!@%eS(%-koHm}5h@*B~DM z6VF;M@?dNATl8oX*eutO^y6zu^n`1#XQQ7f->~x<5`BUnq&IT8E-iQ00;jal z%pYJ@jj7)+{z1p^KffZK6#^^;s%JTtr-qexD)9bBIOLpHE%%8==tVcPhfW7q?B^@p zS6Pl29YaoEy57A>cps#2k`;?*q+j)@O!xE;9eVLY2_|N87`h38qsx`q$h{jXspyx$ z?Sgh!3>xA;?pGKWhG@XWbhCDyS0gCRgJw~`nwRQj%FNNLC(wHFSC@ZsIIh-4M!@)@ z(u~Nna=c>@g>TyUk|1#0{2Pojb7H-U2)LKb`Ij`zd^5myoU=%IXm|{6KQF72zR>sa z0LK8(=oNmOGR7psrgfqDlDGsMIrgf2Qc+#oc*mv z2gbwwoU1m5%L?bOna+^CL1<}V z2Cd!sCRaZZ7W8MG&uc-lh2&}(FAaWv5przUzmpqM+E3#Dkm2S z9HTRP2JxD<4Pr|EgTSH>UZwwuLS7>Ni1{ z5qndAELJK}DmZWCVF-V;$uZbdzVuZNL&|qWZ#{&K-KPW6T~qI?5eIasi8o3&masLp zuvd?%X|*@VSZhEJ)E5Ro2)da6^ZxPBnruUpU`lI9L6Gdj+uQX|_E09Mx938!*%9x< zI};EuMBW(SJ!1mGDHg`NR z#aKIT!zm*pzon^Teecj{rR@7Y>#CP!YXM|-+~RzsgQ-jS7=MPp+CiLfwpqu^GL=$Y zJWT`23{Ld4-WfXzkr=vCjK%!CoF4Acj=vFvZsxue=~Bd56I|5d`iWf0Ego>FzQpsy z0e209A3>PqImAq!m`PCwu&V+4CIjB;t}_!NcId*9skLnaqF$k77qxdQs}nD z-Y}>D)^MsuI}Dkn(lV|iV(0tZLf-LApU zM~ETrey#XP{fuqMPOk@|>aq(FMiviGp0jAXFI$P4x>$mAAPQvRKb#6sZXaa_-F#be z+YlFe-SkD@S|B(wmEs_Ns>PuSAS!*xeaw}$vE}@1kxvvo`_@!eS78fXjUp*3RtrHwk}p zV{p7!rEU?0(Ow38t6%fA#pH2bK#BaS)WKQIHR zQ*&5XNAb+(a{elt{?*pP%~=KrRIX)WVwttbmmOb&LknYft4{Z{q)u#B{#Jq3HQ69% z$|GX90We-Hknyio&=w9c0B(mtaIm;koZ_Iz*6ungBEjtZK@i8`2gZ>nQVzr4&l^|n z2_8Sr?euNw*vT+6tL{MTdLVBATJ>^(|5+85DLz_GNJ|ab`n_$*qDQFLVFPAqA=vxumxIeC`vs3e}LDl44HT%JH&FX*wXL199 zkE)Rm_n5CL75GR%Y;-rc{Trgm!+=Pyd{1v=(nG53m8ho&0nh%va$}LLL1< zyY9lxH1I^mwVB0#tm{d_()(1CDQB~dhkUNFb--OnU_Iy>{MkeJ^I;lpjPuVie!(a{@{-^l z-QsxH)}4Us2^T2$elL7BqkZ*i!(*pnLV$6#2m<)7kE<__N0}c=vV(DqM~9D7vSI1~ z`g_-^Du5N#+7aa%iW)b|?)Bnz%wF5X+&let(GV+_6biPXpeV|D`ya7wzn2er2N%MR zBTw)nqx}co%bKrvl-lx$a!mGo!!rgySimGz)pb%fcZUwm28 z(XDOd?5kLCq$Xdo%KR!9YDJS3_J&eImSScN>E8MAdO-Q?Vg~X$Wf>s9hw_}w(A+s7 z;l$K#r~RBROm;X&U<#`nsabm{ta)*e!*4Jnpt5*Jkg=VQtbeDI#UxE4OrY-#eMTz!ApS{B$ zO>VG?_;xAPfb~Nw6|xL!NBqNOhhq|eH^JU49xaCrbTz1!b#uAd&#>&%3HW5VXB;jD zLMnVNw&zI^#lxo>)v+gwXvuA&_L<|fUc{<|(Ri0zUnly22*vKD0>v+FruR!>t%MAwDV(U)Bgpo2@M(J ztOu{_A5df@It}We7#&wVE(bQ2c|k#4WpWXjgJ=3XRxLTQv#B#Qu@4bhJNeia-1sGD zFgbyl9|nq&23&0XSDWFE83mh}P`PS-#8!;gTVEK|`J8QIs`zomT~a@S9$9$S_kMKD z4f`w^Z=S%&INrxfOmEz`-raqVnV7HoyQj`3Yy=ZrhK()TlY8)R?*pX-_Y}vUQn?MA zTsF(Fc4aKDooQKP%k=p-@&fI(ltvrZop?R`&Su;G%K_G*?Gaa*df-;TD$`9`Q|H#Y zE!K7}-hof%q`H;bqO|pv?ET0yPZ-Rx=JQjTD|gEw?{^pb7}u^EbkJY4)KgBP#Jlbn z*SlZOivw^2Vblcnx(_$rRWDOn3VPCUzNCG)s>ZzDKaa~7ZJUP1K4P{&#%CO`C|YxhFF)O5aTKg!?g?>$wls#sE@T@c zDD08hd?;vsyyFi($=u%o)34cCBZK|Qn8B*Q!GOmqN=wbB--BF$^L;?b0thYvH(gZP z_Zy=9x8RioKoa)00GYP7lD>So7S)2;d;fe<^4@wOg9*2@{hFZ@1q#;BYLlvkK}u)t zvNT$_)!u*nhIAk5#rL;xToMr8Ud(2_=yVxRn{a*nG;+*h-sjEj=#SJHn)vBv{?hTj zuk9BaLvpGd&L7K9%;aQ4IVH+dw(7$H3|m24Z`GYrxyiGDCUko zg0LM+U-k2im>xmO6gqDAQonti|I*TP&^0{(aTW6B_vDxxTe!2H|H3`2vJ5qIe;6lo zih(nzJ=6_)Y~J>*6+Q7d{*{uZ_~dZgBdyE+3%RAO%w#8+LxId5nbsZg`n=5?p=RBq zw@k)?1^*l}9O{sv2!kDN!OG$-4XX_Km*=*T`8RpK_WNQj*DSr28tVS7nB@5c&V==Z zg-JkRiPQSs)^Bt-I)^Vvn5Rx^L%5}~ZUvnCfHg897aIdGb3+cyK!)gXkb~c8pume+ ze#9^HpG6wCU7k9=+Mc(W3D^Xc$sSgi!vye;#H`J;>)t9@?8xS(6-p4MfeD}Ob2@~^ zrap=%l(R6RI8j!oW$@KjpbR^ZLeXtJ9=DpeShFF#-;-!w67$M^E#iHhX>X4=J*fM; z+U5|`Hbv`h%(2=x#V4fvhW#ISlcK*CaZn{~QR;#3>8nbX<1O4Y--rrDZd0Z6t-5io$ZKV8X8cC~={ziut7S7u zkf5-jE^^J3i9S1^=U2{azUFhRA0#j^ebVxKE=(Y}hnS|7gJ0gnX1lq7Kk*PR3`KVl zCmZ~!&sFt6ut^zTm_!*ny&U~4sxk9-EqUG$F>=_b+wl(T*mn7Bu9gv})$nhWP5+Lq zi4BIvCOegR@r5!~>r!;(N4?We(ca@uWPwhb)ustV1~>sJTjvaOxQw2bI$;o90~3}k z#4z5To)0War5qZ=Tv+QVa4Q3s{?6%91SlLI&`Jg7e35|PDn_iEx0LnZ2M}4Bof{q6 zd<^CHS!mcf`b*fncYcVcwY1uPKFyU?iJ!&s^``C=_tu213 z;XagZ^n|#LnkRqwvTwmM@dgFI$qnl#3bUsH3NGTM1-k?pnclDU?KDO`VTiM=hqhn@x`^*F8F6TkWShHbK5 zC_8HkHEG>-2Vp$NQ+o52YJTu69qVdvG2^ zk$SN{z6~AcoB+AdBKq2*tGDSEq%aI-fC-=Kas(ioe7Lp=k@$EzxiNXls!NuQ28 zS3iJM-R`0dTMgNlf)n0(6>{*6l$hPfIkSI`DaYi6X{ZS{M;$0iHQ3%i8&)WfhR}Xh zhx!TXdQdjr%DIMdrSVXSUjo8sNL;k{h9tHXNz3a2URd#5n!I`A)WUza!^>nA2DTzyYmd`Ph zwnqGLDKMyFxkT|0u|2I3P3n<+bdW7h);nBeex1_crn(VAGE?T1`}2i+YQONat*dnv z{(05V+&@kv!&PK|sy`^~MiXww?i1VJ>ZkjFd}le39i(afWFWPXA_%bL@nb!xgECaA z_u9fwkD7oj;0%DFgL`qd{QwXq7Jn~Il^HkQ8PP*}@vlm8{%s%NW0WxWn^hUgUr?B&wor#v#_gTtkmon?^RX8A21boG9&MkA_ zd}#6z{in)?dX7uS9IcWcZ>a0~&%@^n183IUR?gxVRZN1h=u-m2g8F^Y|sSjgiF#zKGEGSzxfN`O+kEaxdynak8xZw4tD!qKcWXeyNuA{F(Ta1qh`W{=Ntb*`Y4C!- zxE$edmD*!Lk8kLAEp>)vR15gv|E4@Dc8xv?>7dud12foCw|&>b0>ii3ep4+NCQEXIf>qX;c6uzP<2jpBu#r}z zqdm!xM07c6nej&HUD*TUR0QaP*?9IJ(^K6_g%e!~2DuoCpHL4Z$Fm4eQ&f@}G{T!6 zX}Uj)mz>>ir~9zRaQtSURQF2msWZ^Aro;$MihVWxrIMO>xCp~Do9j7CSFiu`lTS@fe!?z&~Ijgr?Na%l|(FMbrk_|Ri1?g5#Uq1*==ttig@{WFl9}d^H zPLQVYdjxqwYhHNH^pe=%Thbr9OZ~cyEWrR>!nzOH)}kR>?YR5pJZPhP=$YjkvrsDd;De%dAx zh}qz7MO`so{iaZuZyl0<`F^+7Ng@|AC(hYl`gMoSG;%=&+50#6afD_A7!2B=8rql#t3iz}64ferU{(8*0x$ zg!-oEQ>#tCn_>IledO_!HES<~n1lCK*ZK5zMp%G`bi#=(DF5_(x=4bV;rQ+uereg> zoZTAyy(p+GX1w=lc={2(rQN+iWXhX=z4cN_Et|Y#JUIn4;ww=^@GuCf3)8n*KF{WWjC)en=i)>*pHsKQ3^_8Z>_UX1W*&?yXkl)+xWw;z6;}N%B?B&G z%GuXoUtj?Lc`5t`pep|?DMe)GdM^l-OvldP*3E|ZRd_|Ac3|;o9{Ev{_to#zbcupk zKJsgE+db$LF!1rDCk5{JfCA0luMG2$lxGq~o=hIYoVDI#ybozOtXkq1uq^%L8Mi=` zxJQhbZfeobTy#ucG*K=GoX(Y#+1=&fL4n+TX>U$;dkX$kJ8U<55czAf@#wxm&6zO7 z8Q`Ka@_=H=>F>l^(3N0!V{@K)KA!r>yt-qr8X-UFpU4ZPCQUGMJP zu{?k-ppX8ZKhCjwqJQRlNX1rMw(fiO*iPpNGvc~L3^egFgb)Q`YSG3=237`a?{h_O z>Ytcf+@HkvDUe(+)$auJ$;C*2y&$YFpZtK62j82HwoVVll2~o|*o0a~2j6V?X7^At zrH*OKvClg3st=4s%b;51ds)4VkDq#EZ1mhugM+GNJ9g%(BTHy;L;v0K9 zYqb*#Vw#SgIak!WCRR+H8&#MLL`Z?ZzvRWn8ImTL9O;oqjsh{s7Z*qc)|g--?v8w2 z4P5oOuCg-~XWoVPK(N5`e4hsp$X^Ts;InoqzB_%R()&<=n(deiyn)WW>b^Vja~0_D znmi+D_@T5Pt>k5CpftOr8vw{Oi19G$L_7P;Hh@RA(LfhMFeKIVm5ogM|s79lUh-L|9O7Pq%zML9Qzkq8_TS~?B> zkf}5)M;4C))4YEO(F5xT!3w%uUCXObClI8^D2ARDyhpC!_fUJ^@Ex0|_Y*+0!Dfbl zcvOf~0$*yh5_-FS3BIWqf1BjZU z5F{~b2xQMqSdK8|Rxp>BWOGQi1cc-XrJhO6EW zKsriJ1%CR+HO`*Q;sFR{tnfs1u<;#-H)VCDRj}BQ&FbOW9E3nTV4l|n%GM|8q5XlX z%h6|Fr%x`3dYN84!Ud%{->0xx#O-5x_KjEnb}_CAg4}ZJirc%{*GLu*ulDFybxQ>i z{aSebp7&7@@boTL$k)ex?o_i${_HJC+rCBc0hC z-tJ85C2hAKP^wLO6YMD3W$K}@(f-}b82ju#z>39;5pDq+~Y9Hrp{Us$x6*oEDH2<51Z@^y6V;Unl7Tezy* zYHwL!I`nAmiL~YcN$H;g0^@<4BVJITqd`-!R754y&IXIg zrmeN&yCV`Y#;RpYeP91z*OL_Tmp9R7w}WPWCoa0pRD|&vo=6@3k7XQP4tQ*M4_(8w zrJsZ_3RA~Vl78~W9B531VA^FY!gJo>s?QCr-%K8ER@P5PwxB%A-H#?gBt;ucy)E~v z>&2t89}WubVfF3Rj_iz8R&eQTVui#=|5$|)&t=S^!3puxRNtj~Tr=&e5pq`pC78G~0qm>Y zUqY#0Ut{#tIMWxksdLUJ&D_=pAN;vr8qrH6HZ1bAP1%)~cM>1FJjJ0KH1A@Ak2x?8 zd*u){@{zdlMmx@;R;l^DKr$<6)xzz|;s^8Vzr^3XP>LU~ZU8c1Q?$C{EtyV0Z zh!4&_uM3axKP~o|dwIZZJ8hcT6s0Gt5KP0+x~Sns5-a5}CRq*IM#7iSTSh6iCxMxgv0YIp@!ql3ekvOLJi;oj=KWMnjj-bGrHASQlPOa)(@a^^!K=^R zu1y!XcpF=Sg_xB7PK|&&b<`M?KAS1JOD#qfg>z;sZ+G1FM!meiW|n8l{hdW9*zC(x zqb0v0QaT=RgFv)GZjGQ^Fm#t2lCQ&2Ea0x?0bB9G&lnRxI_4S9wjd$&0wnK@b6s`@ z&4RW6Vvux|B0#ran!TyYIET430Upwv%4xKZAZ{iHGkUp#wOB9qyF+lL=)1+) zxAECaZDoM}o{f@pNFk%sr;F`G+mG|W&ScG6a>c-qL~>}9-U{bQ5(t^g|5|P=irZ)E z?{X-JT)fDevtgs4{A}=1>X{^o=hz6R2t4S%Z)P7Z39UR(40OSf z!6xJF#|!YqE9qbD2eHhEm{s|!rMY}Xl1eLs|bXfYG%H?V!g*RET1&9fOl z!}-Zv0b`FGGj-&xSUikZ`||W@+Z=)ObESx$(!5NA@-;c-|K$Zhme~34i{f76N|5wv z=X7h5X4t`8p|Yg)^R_Jk_RalA%%z#RyFFGNh=|ZcW989Ay5zn$hyTJYXU# z)N2Od$UJ$u`*2U?xTOa56|>I>T_)dje|!zI47?u9H!(&1<$`jkcnx=#BMXI0cnIO> z+dYy;m8QTn8!`tivCzd|+$E1n*7NvKr(##DM92oBeO!S-NZ}rV!6?XvHijSAr&G>Bwe3|ZMe=Q`m?Hp<4 zeK@d@lX)N#v{_q{WT+y3_3oADzFCE64rUT$X#F@Acvix}s@1(f9<&lTH-D3CNvxF{GK>zd z^&Dm#%*1NWEM}OB@8)RTA@cVBVJOB-FdoY?bNJe%_vd0%7Mv$M!ccRTnHctG&8W6v zLVVMRhkO!GzxQ>QQWKxBdv&NHL960X>%6OaRQ45U3UtVKYITq0*e^bB?Yeb24e69P_YWHS}gtW9?V{E*jPg1Y- z)GiC9?#h8&G9(zvA<4#9Z+s9a^ zlKKc8ZytGPsixdkkLFxy73VrzK8LUF8-X`kPr$$FaaHqlRr_0xeQt537Bp%r_9m}* zv^yV0+d7s$7$-@`y6B9z<}i^fBAf|tMYoC+o!K=eTW7Em>_q4`opSU-`kIZG8+O^W(%x<= zJA26Q5$bhtt%TX%fX+~pOU1?^jf1Oub@O%&pmXb?DM~~+fzJ^#GN}%D!>8=Q*!(}* zCemq-2FzOtS{v8ws3A%vd7q-_dGXpqeZedxhnz#9$RcSvDD+C&?q?<{+Zn$LAgMzfl4l5 zMj?=9)ntXRIHOmVU?I8aER9CZM<71No~yFKSm#f1R+QfuiZ-nb^}8~)i*+UcwW5M8 z4tAvFK-_(l{ebt_r5RS(O&k#s{S||?MOKE+Kz~4?H^ZtSjoSuGjCk`?@DvNT*{0B5 z2rVB7`C<<9fD=~2O3V}Qloc3yyrrnuEwal7Z=+gWdI9>T4>=?Oy zWYW0>>;$zWnCb2}TvU4nUe1{sN?)Y#`H0fjcMloi>XVBJ0(w<~s7xFBTuf;>6fjxo z6oR26%$7A-GRWtq&eYy6JgD%zNURIjO!tt!1!Y%lNetS|-XP7)_%qkp4K_() z8Mn5+3uF0y{O>)D-z3j*{jkiLWE_1tjE-^&+0>bW^InHN!!jaZqPP5DCSJ@7>sw+N z#ByM2jeA3nl@kEh^KT942Y34Wp0okqP+yP7<}0Q-{~oti z!g#_O7Qlq3RPsU!SIcUN&4qyvkSNCl{kEw|+L!|J)Bhgcr@FH^=UuS4+B;^y`2+u4 zhHSIDb+CnmR|}#XBTI_(eGvR$Q-Q`9FdU>9f69hSmfj1EfX0E)J8tJ^YCN`>{U$!! zl`})?VQ+k8&L5w=KznFy(-2mtm%pjW}nJjPKK3snGaR&3CDOKysnpLpEOv;hYJE2nTAo2<(Y2N zwv3Ui+btST!dWNdypi;f83~D)k4m;*V^UHt$4=AH8@$%iCk72hE4h>Z;eOm)_&=zf zp;hG93bpaCG7ZvtdicTUTpGZ=UZ^uikk zF}|)|>C6o}`NFoodTkM`EXG8lPHK)Q$j=BmID<|$FdRuxJ=K+bB!eHIc6XP9BrG;& zHD@2qi48qg79FP~EBK8gO+30LKXKDUcHml;uzSa+XHMRcWP2#hq@zs_8Ll*tt_qf77gDeA#%1Pknlk$oasMhQc7Gh66_^XKbV*c03hTh!eu-SxsQGuy*Y3z_vx# zd-Oj4LU25OIN|$eAj_FvDl8~A0EP*>s76ojE2C>>I+CB}6`;lh2%Je)S6s*!oCB`! zbs^*d)-5-z3EaheCT6N!;od|(8KYAYLjm=i6GHvQ$cAlP+fBACsRKekmsm2bLtZXN zVFO){o9FSUZ6BF93jVrX2XkIe%oICR7-;$~boEak0?yg`q_0 z@WH%Yli8kvDgLzTN^(Tr7c4y6WN1)%;6N@sI>+9vazx`+7;xJ0?*Yul7I67U((|ns z_a|Na?kIm5fyTVmm&PL-cZR(<49_7|;c|?HA?eH`5uY`W6t3Eezrw;QBbxA?k5zE369cav=&}@^X6EbVI|f3}!h5{i zHBQT(2hJI$!v}16d8jentbY1$5{MGj0Cw@m%9k$>_GsB!hI)@uAJui0LPQ&v8^S{! zFJBtQ7=L}SeL~)G7#W}7kR-$%l{i^YDAISD&p{FdrMf6`;fhx_z2v9*<#XVF5ODS13-^BMObD5jncOTf z=~E5-(sMY>{OGIv%jwngoI9neJ6)grbQP_7F(=NmnP|130|a8_806uL9NvF;5h)bz ze#92uT`W~H$j}RNJ0W)FBR#fc2V2AwKR+Px+235_!JU|{r0lxTyDpR^ntA4oU!!ci zqRKx)h89;~d;rh3k;|hP|DBd;XgCSQhO{gU3`<8&{{*a%jp9cEj zGG6j|lU&bCFR%M28p4f^PVs5)6aG%+l%N2cE%{m@#57+U70giVqVCOPm$v%~5&W+z0=lCbC z+YlP)VO+Z?G;4z3Bj;QdCVSRyryxtJBzR?yx`NPfGbH<-{HBzE7DgOUEGfRV&i;Rn zwwvICckR}7&3VJW+uD(R3~q|7E+^1E;0{+RA|5+x2v=*+Q})$4_~1jOcUy@fZo15- z|Jb5Y9gE8cx0q|$?D0vvWdq%71_y~eY z2&o!Fc)+{Vl`s3V3h7M`6)qG1wmMLYoe9#!t$h;pNhCINKdi+@Tw}c4Oo&1#$@m!$EAh3b8un$%d(X4GtbvYU1vNPcl1<)z%72QRiC( zbr>qa8r&`>s_)AkKFNF~54`Wo*$`k$_lcATdUF)NfG|RyaDDDNh!qQB%J!Q)erFEj z1IJ}8jz3?0FcCi#urXNvgCw2Z&G`Gntw1UJizICpdZ1N zPZcQ7n5zL*xlq#kYbi7AW`dpi=x9PXz`+(b<;6hFe66wM^0>km-Tm6G#{BDcEA3#tg%tT|KBXnxF; zM(E+@sLY~Fm3x{0f1wg+=L506h3hr+j&VD;Ak-B{=-$q#N9WzYDHGxn4!m%^Tb?_? zPQ(JJhdc1l=yubO>$D}Jn)mn?m~Y60{Hm0H+hW7Zbn-zxULe3Gcj6?yJ%EPBKZeDf z|?i5=*cl-IJ0KKNBib$ATJu;9}!aRm{AB5}G2{Dst(SL*tde`T^a z2tS1+1m?hoFE^lcy<4-5dWgPwP61nmJ{)C{t|H1EgpLSF#4_lmtdxT?J(gYXEeqUsWD5s93T zspK!jczpCP@a4JmsKBPppLNjDhG#_s^dtkl#AIbkvs7Py)_K4MkJG~P;Apoi+OM;* z0#FN+YMb&v`ZmAt)Du_8l)m_2{Gv68?F^GAjGAf+dJvz*4nNk?8u^Sb&+83&y?1t9(k3} z&9Cv_=>*y@B=Uju>II=}58_S~s>&U+nq&@pmH=e5t9k*ia~GD0@2!=_bt*u2$7Y?k zLf4zyI(OPX3qYN;tHEaI?YM@ZzgMl85T6m)hX5{T$!JaFT2`@eGp-KCyL>w-{kx2 zVg{Ka`e>M1h~<}t63cWDaDVUbzq53pM4BN&EW1BCvM;B#Ep-MV&`qf^2)X`R72 z#!gX?sK5p^Q)Y<3oFJ4QCCS9dbWbD?z~NJvnyc{)Eclrp6%=nxMD-duOsHoE?_cZr<++h3Vc?7;g^fAkW8PGDd#}d_5 zWcGRi4x31PrvZ*jr6SJ2(R{~V7rF0P4-xDnA;neX!L+9ICQ;Dxq>PKn^ct$9cAN7P zK*>zeiw8xTf0?|T$>>o^GycL>vMi_4Xx;gXStVp2+p5YoUF15@;h$%h&8)Ql6Q{&J z7ZP8(WR?UL+AYM_>STMc=TMHP!_JE~&lDJmP$^G(rB`Zw0EyYaAIDnZZRo_Zem>|r z4L)hs*)EB4r_O**oZNWE(ce3b0<6gMzPwke`LR~+<|AWY_L})c@zY+=bGh0B5sa7^esHxr~ZV*{ptUU%{4R>N6yDm;`(XTy?~nPXBS84^5auQe#d7y9gEXP&b$VtBNLf_|fdE@@25a_*gk`ueZE6LX3 zz;w2T{<@iXxAcTHsD3Mt?tf5oWQSOQ=wuCjg^lP)c$nYl}-Rd?% zlC^)R9czk%q~%%WauE;tG2LE3p~RT21vo-00;-g-qHlVA&;VcTKi9drrUK&hB4a%R zcPwc}zESSbwC~x8aQyP2!6E`bPz!v#0Z_D>SOd}s=-WJqWWqKMw>IsbyDD6?4p_m)5?*e| z8dpbs*qem7Y00KRkLm;G)PJPelPzF5yudQLuwme+pucIyh}tw;L6r#0yT@CfO?#6F z_}iQShVDxX*VC!HF#PRQ0@y(odoV-wAWkj-nuONIBFS}AonAYRz%ApoZ0IrbJ!QPp zQ}J{@uwgh-s-Zu{>bo=BfLnssXZ_)BL5TN~Ii{Z;ZBJW7F>DS#C8$aQBp7ST1?35@ z2yC)=RlH75xhR?nVLof1eEppn*%BU}+i*=Q&G7o48ccRu+GXKd4NErS4rh$Lu%|U*)Y^vw;J^`e zf8{Z0j58k}b_43ng}_fvXeS-QI$iF1MWe#k)6 zX}Pn3i6ZCq-DW?7N+&ZP~*AtCg=F{15X4dnK?(hfRL1r)G8@Gq}D&6ChDY#4|N7VyPBXD~L zD@rCfX~_n>qyFr~B2KoulQbyxT^>QM*(iRVl>drPPvFLJ9mr#P%#A~8uIIa$yj6j7 zatg^CiGWffgfV`O;}o!z z6n&{{E2xcYx8{~l_?P0tIL-PZfQDGoUgpkMfoYEhSrhVBo;$pQRr0mYaV?6%mVq$j z+XP-BN1WD;h8l;p3D=NCeL2y$vN?V0#2y`^kc9P8QmJv)QU?-S*Kr$HYCkT}E%xjMq#w}V$urqwuWlGxlHag?Jc&-2 z+oP#m9lSF$>aMI|4a6ICBy$?8WwcpZ0a1s!8p^B=j^uxNm*>5HSnJPHG1B35euk4)o_e#Q>8#nvC{a*hnw3m;x!>)Qw^H5#;l?2%L)7Q~^ z&L+<)A&_K_rt$QDrhs|&7St=oy~alPj(1$+mjO27bxKq3F*Eklw5@VFt(KM#VoKtc zcdz>)Pe{D1e#dZ;Rd{+wqAVY@9>pgK$Q3@m=F4RzqascZiRu`9N5bNEoR-A;)4g2u~ zq42vTaD+l`g5UK;=WRwxr#;HOsaYK8`)1Vw+bbF#6?}35#*>MY)-$i5o8vY*bj3i$ z)>mr}rpG}tbp?Yls9Y20Eml2l|1gue=)EIWlVp%;Zrdf+;Dd)F*K$mnq2!5QHWBC@^^%N4|ADq^z4of`z z#@g^ipy140Uw<;*LAcm#r1XjDI_DG0lTJ0Bda_tqr%Zb8N2rmn)AiTXS%D=t0{J{d;KZ<7Pt7GqzPtgF#YJ9a%;TfGe< z@ZsyU(#fjq7t$TxSi#}LVG!HheuK(|#p8H@v6Lu~dbAa%clZEG=!e`OwIDsQa|t9- zo*gbHf^c<+yicJqX%{9U9)o3VYGYO1pte%n3+b_gZ7r=+s~!%Nta6&)BfFQw)0Y3- zHu|46h<)!`RhK%#RSs^YuQMiu)7{4w@6jhPUu#d9aUV1I$wXpYzcjQ!>eOxsb@3}t zvVz#VSod2v{SNT!Uy$CUY`|Ma$lc6^xp*R3f^m}0m#WAu_FrOR4L!6ItDq8Bno4) zG&6yF!P7N%%0;Mn^Sdhai%`nX&w>U-i<;!0%q6i}?vp-QZMED^@PCxZ%ozi5_q+e) z`n4w}eQa)WL5c?c_x1F|AkQDx@}r_cS!!O1JL0Gc1i91Oai9IS1Xz6F=hWWQ>nj33 zm4l@FZSqPd-SBaL>WIx5p0o~^`CJA9-a>5w%0iDFBjk54k<_~I5mOa~{ux!ttM8Wv zWR7P4&LCumELnbgIoAY7mF3yJ+$J)W%Q*7t8oBy$eV9l(`ezvr%)%NftM*hX$%^@d z10KuS{vOTmR|l~`(ysA{G~i17r@^mZyMf7|i)xlb8uf?2!qY`*(hLO!$SL|N9x-BB zlzG|lD>_LGna&I7$D^W@eOg%X^%c?`0Z5G~%Dgx@s{4bv+L~%1R5gh0H@>#GQqbX+ z^5oV%R^T-6vxLG+2HLsl-(=B08Lt+7S6pM=n+@FWf=L>=B+52FcY?oq+F6%I#%5jp zSHW{`t$9D&U+d+!;srcPjRl-jB)4aqUu2AA$WT^dydST8RYESK; z4YA>eHq#0pk9X2gPaa|EP-=uYS`78eXwygyde+)arEVwizxN3~GSfy9VmbNmc$9O@9t&2V ztvaM%rS`*=ZM$ew6v717m5=vkUXpX&?c0^ZkIlmq1d{$nHS&Dhpk5#vuKDBno}?gG zqn}^MEzMh1SV}am`9#F+ZEQ1@McBk!B)+Qd81pQ$)M76~oJf`GFm(Yvp9=uyuBRO7 zC-AHjx#qk59R_h*tL$~v9B;9?horR;E7jCd9WS9=e>Uz_m+?D=%VS*i&*bw*R+||U zADZr8)+`SH<}k%nw%Ft;-rrJBbg`7rt`bDB!h}y+j((_Jgsi-NB)s>5sqE9X-pjl| zvsVM?jqmKJ_XixL~oP0Q?hiA=~ zqK;KxU-chZFE`)M&2=Phxj`-aI|2WmsX-+)k-N;4(rU=p4rPJIzf0v@4{qk!t^(2Z zPU&jjKV8-u_f}Jedl+HLI&N6V5&1#{`E}KhqmR!&0K@u&J*BO%;@)tVa*a#R+B0*s z(|!ETM&4$FtEKEVP^E)w3MhvwJTLz}loo3263J)0ZuRwjl{IboO)N??Cm|A`+W#h% zay|!TP}VrQ(fN=imrEWVE8ZLNtBM%gJ9~r*qCVH%V39nQX#7X0j{~C8`UCsJsS5x} zn)um++(F4ZYxZ3H1iakxuDxwDa^Rw`+o`DDvt#NPs*q;d*|L8%?&a80zu(ElM1@;=&haf8ZtQkA zc=EXIU}>2K-`M{JEYuk@9Hc3oksFkJ(dY?rTc-7S(T08x71Ex*C)X@A;z-ziL$O-V zPgWtSXVvJ4<>2Sh*Pmu0f4=5D-^38WojwQ^sJA8or0DiF<=E8t&d;JlDqlbUneO&0 z#f4MG&yEQVXO~!TfL2gFP8Z4%tDD%g(8!p?7|LY+(evU?0(wdlb~xMf}8#Wu2l$oxo=^YLD%Ty~oJ_FTSvbgpGO3RrXJW=|;eqGstm?ks6 z7v*5Z-HURP50$86_dR(6HEYjecKbG+>i}2uDmF} zHY;fNgjkG8S|M;NNr$USq4}r8;Aq05y0p$dX5n$#YMzo@f@v-fmtQ#SYBt%q)_hXB zi;dL03_lyl8nmLSAD#sJ%*~MDa^1d|sG|Qn2o$L(5ek>x8sCW%`k+&95~AIkar`k??euA6s;?|Q0YvJp1Uf!zQwX#v zs1DD7WrJHu92xzx+)3Y*?w0CK(-of&R~|JjuuMEKs8x7`f@TiaB>V4h@m?*Xc5R0g z4_2{QKE7_oM%3Efqkrd>^X%-YMM@btPH=xs)U0Vx1Fos`kf-cC(wvL&^1sNlgJ~i~ zutr0F1iJ0o?Yt)c`H}9F3;ajVA#c0G#SS(=JzK*y--=`5GU$_JvY&~`_dD3m*>DO97kZk5wS>*C?$Lf>emSCKOTYuXjwUDwi|_~u(6JHQ*k1Xhss zP}!ue+u>%k)ycs7_(xAv~*Dp|N&JnR+L> z#j*LO9@g#hb6~q`jU;A1G|2PjyBP`Kv;J85ofM5OPu06N=!g^nCW&jH#@IC;Tk7(U zzqz5*EOUl*m~v@*-SP`c-VjjyM5aK^%>5Fk$N~|~S@{N9wgzf>ws|-CpXWlli@|&>~H5! zb9)<39=$Co`&E+#qV>8-AlSI4K1QleqDvVTS%IG^W7Y$om(HpNIrJD!wd$=7yr5*5Jc$2813&jc;)&hv{82(Lc;>1eg~WZD zuAHkle%J0WarZ>^LYH0evhw6%p`}?RsQ=>MW8)$(_z380tKMHspnnjc-!QnlHAm+| z#k5l7ZXL4x@k_K6g|pVUs1y_99fV4IFLZnK03~R zlfBU^70OA&R$1oWC}(19P+s)9=pouY(@Dg{^gZU|#8=(9gQV)cXu3jQP+^9dW;Id^P6@VTCP2kFzE(1bm{<`ZAb59&&_g$>Z-0NVR zr;#I3rPi0`icEzrZu3NQ*uh!kjU#JP6Sz~NSf4Zs8*lWt1?kR{U`(vMeje(gNx#MB zP-Naxug#qpx;n7h5cCVaWu0Ft7}fN&R^R1dN&YfM<$@VLyOAJWiEZY0jBM?4(D?c@ zG>sL%lnLTdtWgeWz~%)w*qB1qWm6=UFA3o9dq0`q#^B%l99iy9v@(#s2?2Sx1WB3N zt*ifj_}$t|SEySWD!ejK6#eo3LiXV9i}4m68?vVbhW@fDUh?nAM8Zp4v8>LqEt;RT zb|qVD)Y~cH=1aj3KVn{0IQq>XmyR)HX)$YEkdrHCl+d?gHt5Pm2IhhwmO#TnGdG~pmpP$OlNT0fUU8N*nvl`Cqj8I#rk3Um5Q!$igJ!O z$D`f%Por_Lf7ThFL_}hb)qDT+(P)iO5_4Uo{o*KIKF@HyVAv{ZjU~pZcKG?`l@p)z zSvp)0fTUzne&u4FxTE27kr~*>|0=w7_)EDw@6z7{PdhI0srf(g0-fBPDlzA|w6TjX zCImjELeTMISFCQUMvv!dan0x-vfdYnd3{L_o^SvDiu1}W`g6Te@E7|g4qZ;1Ih479 z7_aJ!-vwSw{J-j+l7~hdXc}9Qx-;frQDik}oe!xMi%$jX%|F9vr%!WvGi*xU=o*lG1SN|>D%Wfok)=w2EMu)_230E_nYAMmA2(F5%uX#t>}F-7u>`3N zSX)C1nAf9?2;)&2#pU2Vk6!`bg^h-pM2|Qjpv=e6=J5pHw8haZ`!0hR%d(H}v`Yv2 zM)syY?(eaF{?V5j5m_Y1aSo^!L^gmiOsmgq57T~l-QysIK{c=59D1qbrA#0QwxOOC zi*^_{_@U&#S4W_4wDWhASVGE{+r3>Cmvs3vszxvBC)^q&_eX43Y-0_0!3HAGCVM`} zU(oI#`o_&?qayLO)21Fq=!13wQ@}{Vnhh!IhtC~%J!~+_;9;H#G*ff-tLt7_ffYEt ze3fZ|{C@BcF+@UZu9T$>(NL^y`5XHgBik+2&oLEq;^yaBT|FFgt-^w(sZ8$TEXrU$YCYtcLFzt6o?NeCj<`!tBlhTu05 z@(XN{n(-8_#6Ulm1kB@63j5!cmwqgc@qHypA}_u^iWNlTNw5b* zNKT*Qi!;~;AvqwYn2YszU(Ot9M=%~52cdJ zpkU1{7FO>IUDB+r?gdG8;_3}q;d8hMbmubgBVg00vWJ&@@11n%3StU<-D?I3ILJV= zBDp?{V{Nbmi^?z4cmw&9S(tqGL@#MvzFUM1L!Z#-%ZZJLY~yvg2p<$B7{8Mbs?o=* zrHPaa0xOQaDJQ6qJw%cG#Dz^hNhH-Dy-BPj{4}I7kqzW@32YW)_XwLLrnyCA%tj zgbznXW((jnVO!>t@V&=_7;wjxcf*~3Q`@*0*qxFa6++G3XI}92Da&JuK0q9>rsns+ zz@ix_WM1EZnp`xPnPk(RvIj{MdX`86rbMaw6}e`4^IZo_vgpt|D< z833VvLS#GIG3P&yMA2+yZFF4P_yzK7TwNCo> z9b;>xpgrkCqcGV>@M9(vw+&T0QY~0>Wm#TqkUV*x>{T}L^1!aJL5KTw(!>DsCi&u2I8u(`Aw=<6aCJ@KyKcWTwA>UfGh*yhp50_d*5SrIy z3QxbhU+6|P{j6~Vko09(-=~c1%oZBRtTq<(2t3KO|i>`l+d!3FvYHm86C_1>bDP zzm)f|yIG;(sbJl2B1Z^swFJ>O-A49xpLKOM#`%u#-+FEoheHtlkm0hzhuR^W>iA_c zR3$h%-~N9d^h5ZZ?Cx4sifw!M7Je@VFdKlJD~|n7&0nQQG{b$jUhdsp&Y)0q@cy2#;(GCE=&RVoPvWbkw5;0Kp^!;3}=dnP3E|`u{bQ|2B*i2?WKvCj)?OL5)!PqGs39u5IWZ%Dr z1o-Z$;XJ2B(oY!{WPm2rIurZk2S7IfR6Q8IgxLdhe7#+bMy^yy-e&spdyOAmw00i% zANyt`h|a=dK<^=cVKD#{3|S7^ar}7o{~MhDFNVMx9L#YLF4kM8js2FDm-9*HylcV06Mkk8g5|SaKTD6un2nFgHr!tDV86Z_Om?Ya zo2z;)vQ{6M{q2a4jyv-w@wTws^0!>)NAp{@bZt?rNonfrEcJ8ygVLn1-h>arhjBJo zcAC-xA5I-kusc!lzrW7EwmyAvpn?utv_5al9)oe|y z7dxxhodFuJ#gfDRM7>s=uFk*BCTtLu7XUc>xsqlXd4(MIZjV*OP=XH3kmq0w8)o!L zb?WgKW2Q65F^S$r`>g~fF5xr80ZIcsb!iL=i#ya?3!T*Xhi~UTJSV+ei6U4PB(Jk+ zmckYr;vfSy^roW|7gw4v#9i6T40EYW@V)@B7! zAKUN<3zEBeq1nOp{Fz{TdSG*VKU?25pl??DUjxB;GQ$QVm=UgMTsYTFx78wsEnSZ- z`C6^42RK7~B_Lxk^z!&60b!Y2i{*!t(_{6;YB^0Q5cU>wtHHrrxzIuA&<+xYJrF z+WN9_0fO`8lS4Hkz7%hDUj(s}NYoPK(7Yst zyjhP67E^ldQZKsuyZuuP5~0<}Ezp|J&_%IT7i7AubX|xHCZF)fy2apOp+%GZf1M&z zFi_Og5Dcd{EYzLc+YY#RKP0gs+bL8PG-(xORBpRM+n;?0ikKtDs-rJ{3@CP*m~I~w zH#VW-@goXIAviVfsXdwvji}^<1gExa$mH{Z#4_)dPR~S&n1UP?=-G-feXx=*=@X#x z8@YQ+TL@}U`Yr*p48!b#uZuC$#h^_viX3>?4ZN1<_C1K8wD@0!06P^w>!|AME6?bieF}E2{r;qt=G21&31PJ2^4!Y$-ZxzGP#31PX zS0o5JF2-D_VS2&nYT%W3^X^coGzk6qCh|4Y?$ffk<7(L4cwFE7oV@!fn-E3RS!VSf z=2_cq=zKADR>1qx?j4tpaT7OyEtCU>?=@mrrg|doucw{!(r7kGe|uoJrY0Z93{0=x4f(Gm)g1Gx zp>nk_PtkNP!62vbKvM|3X~}|%Q1Q!+0O$ZJR#0l;G+9rE3poMqB~Nh#cY70`h-ViH zxi@oJkH`cf3nsctXB2j!C zZSMBg6sO!En9)SN#C~WAg2Q0NJe^s*@E6au?A!;0(wEXrpIPdKOEUJxU zzR0q|>ZF!hcXkK}w>Nq6)V!4{B-}uNR#IYdQ8DC_iHcFoqb7#qu~H+*w41@|8Um$3 z!CK^YLeQ8P?{@}YP=lNtn}~9E#9o$U1ZxrmI-iTI*dCB*C1P|!zNKLU#C0qAaFJ#V!a@lV+33sn1SkE&6&$R*x)CPET2 zmDnSdGEAGLcB=&bE&r9TRc9yI%r(Q@u$S#XNiXr z?L3Zmaw+Lt?|YGT$?JcS8h}_#db%83_P>L_|KN+$rE8~W_`M5Cr7{l=FFs>qK3@G@ zds|igl48(xF^>|)-*+Vcm<>fFOJlZyAt;ZW*-~6PTu_ z1QYjIkXww#F1%GAVn}G%(t_$c-7h|#{pAW4Q>n-!4cBT-YMY^&ME8zRTJox#W$1@X zWf-503K4khS9tp3#=VUa9oM^}8d*P9M|UBi_YJ~Kusxj^WfMw){9yu)-sW3R&Z?mL zY9VQ?@ksU6>C(YM)cV5)V(@}vQ5`*#?vGDQe1RbgojOavgFpzYCquye$RwVxZ}a>m zSre%6$DHD^Z{A|#+pC^R6`Ya*X=r#9@6r#%&>kt8aAZI+sWmQei8}x*b*zE>bgVZh z^kkR9Vq9RoH+53&pxglEzLk%CaoG2&pHcO{gZTe?qxR4YqnrR zFY}kXA&oo=jialD^=sM{gU5r$Yt4BN2dVBZhPg92S_$Am%OEDvp`c|aQc6B}f3)Gv z8#XtA@+h4I@{-zmrUord5`U(A=ysr!U0<6gCvL(U{mV#RciN!v*TkfQ759Cd9;`b7 zkVxIM=ol?}8G9y#)b(LlV$}JR`+@t_n#3fJg(32KorbiQ?WhLU#IXqzx5hM~sK&K- zAb}Pd{<@)EOMgv_%6)r`0$q9%mxTqA}@T%Kd}du*RPTa}72=*zyry1xoJcPJaz9 z%&>cIMR?6GgLj7b#`Lz;V?beazQx%WZ!}xT``Z@IFJEZ2)m|z8r4(o%387YBh}-(DPVE(%wa(A?#PSsXUG+Nq{aN45 z|I%swr`Wzy6}C?Tzm^NkBc0{SPJsPI!QJy8frA2yz0HOS*@s`5;SSeK&-+OfpZ9Ck zNuSHLq6Xj|xw36e*TvOR?Lvi?`PhS|O7G40z;d$RKZBdUrD52{XSR4RDqcJukq+&q zd-&27gXClYH4=-wGpD9{WQpJIvU}~xlxnfqkVoGzuwI_W0VMyVE|`4y+MV_8#g0=r z+D8OIG3v^n!t-V!|JI^G)KY2YkPY3xqRW7*3lon zM}U;~xlZMF{ zF|A)Th1y5=)T0~(Y`c}Mdx+TRLsd3V1trOj94;I^Nkh&J zbJK3N`IJ=~&VO4wto3En_Wkq(g$fb1$|;cXcAV0S@^RHgi%P(J zoABoF;xaybZ(g@^d2Sy6k0@cu6O7%j91$FN#UKswcs2pf@5XGP)fm5Or;D1uxe~Do z+=i#~-$~CBtiPyPckF#~uWetOdnV3NF93~jgZ;=3GoLFpc0B-aQ#2EbdA0w{p{ZsRhvm3Qabh@Z_&(7ZDD zJ=W*_$!9l*gOm51)YmIBACI@u4)QU1REjG|%cgZfPcuG3{u{yZpRy}JDMr-240_^h z)7X3H1aybFVBOy~P8TclMxL*TWaawWl=K%B89|{goSj}?33)wMb|a^$^y*&pYI{!_ zcvc%_wdFB!s}$~+EY;bxCZ;;GG>m0XVCrI7i~wAf2oq`%8_Wj)+eMIA%3;iacwsTr_Ox^%7BTt@4Vh6la5lN2?ve| zM+criZkS%FpyzHx4X#iO>823~tLYreE3;bMgXg@9;sN^Y#U`_&F|qW**q9_r^m%XW zvtJ!T_bP%@K4jXdr^R8|Oa}oAcx%M%`)&9u=(>L-sut;u7bOr`Z;E4kuC|IM06(_i z^5b%yX*M!NEY1vc3c%@7oJ>)_(mFRxBzc*n3Rk=}wR3E$qO@JH%#1r=BiqomeoGt+&aF$P4I{CB3_RQ+)Pm zrT<({kz}qTa#$%|ixuQ8i#&KlZw##oD%vyk)SNdab(wET?)k}l)WlAP4?g<9c`60! zQ7fPLv7_?Ll_Kldq9>)J&K`WR=mv);aEFQX1tUi8stI_N||qm&&m>!$nn?uBEsE$rYrN(YVPNU$YZ z3903iB8wH3D&h*wRZ-gQCG?x~S^uuM2npSc^v>s5g~zDFtFfLV))&%yOU98C*1k&! zDx7gMSt{&B=X&CFGx@&F);ZC1xJyh%HBz@DiSoSw>siq?Pm}k~n53vDZ+b#v3NLbA zU!Yx?k{kC(!9LgFvb2o?cM;T?Cyknxmd5`^G!mySZCF!$R?&Xs%xCvFRpceF;jv!Y zB?QRtPvUjHi>76D*`Z3iblQaF^Mw#i@7@ird?3qEMwEvpdxqvOUOR!9r3xCnSNQyv?%hNR_Ajnk_V zXG<7lc|GBf5XQLf^6SHzh5g14@6P^@o|XVb?N~s6moT_%@16Y49 z8d1Ctxab%Y2AT~gifXH7f%y_Py38p9E>3SeXw?YgFFW~8))y53`SoQfQE&4wM_$Cu z-@bJ}v~5G*aN*dRlNn$!5b)FI2V(+2^5x1pjJwa?&#IZm9;5z9?jilb^)2}J+iBN- zyb}F@8v$pr9|l4pjhkR3*I0G4cI==#}|iTUq@m5?yfap4sicq0kp8$^e}I3Q$vU(Aa!yP%0XD zp-rtPZzpQT<_W}a-B4ur&s~$7EeaM4bQ!iJI>}}UR~^@^3Gwl;>|n~=Lef~> zN*o1D#ZF;ofz~mzXBwEgE$Yg<)bf1|D9j($pY>o7tvdojK9NZU>RjmjfK(-cWJ`cN z_B~2M#(_*l6JOfz69Itqp91ZOysHkaojAhW zH+tke&7yYO1gVG}D&==@9TgO?EhR23NR15^LR0FSUQpW$0$b3rs zDNNG@G$b-QGZYPRg@ zR*HQu;1BI3S?+%fUo(4NF*|(_6NB^G9b{dv{5~uK%SmqcqIkYKxwqZY^U8pyDhBaT zai1w%BbOFuX3hqWm$}^SWsuPp4a*5Li3}e~cyUiT_a?1Wq<}S=}v5J zbh%CG-0%w55@$=OvIA>z4wfdcs-UxW~sjirorzyohJG?X*B}ycC8*# z*$F^y+3D!#^ijw8KDw>!DE!Kl|1z>Xm%8^?z6udfR3n~1m$*hFK*|pFc^bmo76@WV zV5=?^1G@rdsF2>z4Vmcp5{llOj#MGzf3o<-e^knt%vhYRU&EUztyClJ9$2}xrXv(DCH$2xN_y<6{%sZ4YVa`le@7zp&x>+_f)22Jf5VGcg5$K{U4t|Cvb|06Pe zY4f)WjL!5w{0^Lxf!EXis_>b7U&M(l#&ah9KG;bVn5mnNccjm(AtWWmXRUdU;EI>_ z1kBp=wz#8qa_L*T?4jExhq%3(F`8v1mcGY$M333+6+n<_`sW0d-*8=f?(-hh-Kk>4 zsLb4`a=Z6?8ZAi`?)}BL>~W)wgI;N)pXEMRmqaN$x|90f{G^s<_oDmNgg&dx_9A4z z=I&Td{p%d89Q1toJg#5Fe`{>wodr;HHO4dAUL}_>B;Z_>A9d@sUq3w!&vd_m6K-}@Jn&IS{BTa=bGMR37GHnte1-XR>Hg1 z$$ygNUW5b8DeKREfBw{10)VZx zcECYfZUmhD-C{RHp5)9Y_#LUX@X>3ONhx38QxS7h&ZpriJySi+vd-~9nh*otV?*5> zS7$39BS4^zZT>EwNHBIAxcmtV9L%u@$f!pYG;UEQxW0WO$zv`L@(PGSrxWwhY^ebAHhR}6DkgS(tfiE z!*$j$!pUP-P($MOm;Xgw{ZI4pKh(g3@QPg-=bg53|7@r7QT5U7o?JNbbCq_?lk1Ya zW+sl!_!;jstpX4aW<-k#Sr`_3WMUaMG3Yvqq@LjshI4Iwyx1nNc&*oMx(r);^`^lb|D4ps}tFgQs+xOvN@Qr*=nyN%1fZ>rGSbL1zkmLpXYcjCcAi0e)@SiMdR4F-tG!Z&6DFIEVj$f?Q`BLNlBO` zf9thKdBqno`=Cb8#mI^@etgI1c(r-bN${o4M>z`;o4ECJ3&Q~kaz3bWDPUReieozd z0F~Ff?0h2UL$cAp*I6xa*-AyE8MZGjJ|lhLAoT`Pt`SZyCG%T?){%rvGF8hj@HI_f zz{=d2H3p39p8macfeBOu5&8N{Q<6(hg3uK!F0BMNB0uz+%@1FL3%x(9-RV&BQD1Vy zm$PITyhw#ePZ-1d1oftHOE_xy&Hnirq26?$ngKqI7+Od?z9N(UZ4HbEQT0iG?>x;E z2@JkBkMpGgg63MBZujnQ=6JIVa0;SQrI2RFKP`i|zDgQ^V`{T9KZ%G6B0;xd`e{{ZxbsKv+>ZQGJh3=Za-qchNkz$)h z=Q6%B8M{DkZZlfGQ1pn@a3eh+18XN8-Fp8l(A;L^hZRx;dX%czZ38bBr+W~FtZY~{ zLeC4W1d~}723jQP5SA>ZVJ+skL~VZgSc8T!3&wBx?#iduW3pdvrAPE7{_{^W97-L=_srRCc)WNV zXem>+saN&pTrA`1XXgxuYEWhT!QAVQrP@aFtV%So^6ZWC)~b@a5HP~5HHg<@()I% z2e$LH!YDl!A5`!`5oBjU?JyO?fY>Jf64cWsxC36kv!kh$6S5nQ4xjETzp@_B7HvA? zXkp~(`biwnUaM*&bxv#_8kW*%Zv?T199Rd5-nxQTvr_0NzZ7ZPrgiW>X|Lf!)pNc9 zA_tg$W@Y_+9)9VQ+B5UCNz@))1+?x?tm3-T?ki`i*z10`NR&T)4y*~Nt$-ga?94GM zSycpf3)0Hr^1&WKN$r<~G^~ATT1h~i&4!iS0Yb~uMuT4R1^Tv~4T#$aINqMKFrwc& zE!seUz7OxQ5w?yf=SQ~@swH{VY6`_B+l%F-E)II_8~Kjtg)?~U?ORxagH45BqkmyS zez^v{&dUzjxXn*{fuu8q%X?#mfv&c7F`{~p{!XZ2$q{82S7BkQ7SlplrY$w!hXhz{LtsC2Fr{55duD2jJl6Tbrd$T-dK|2A-}AzAt-t9rEfAbXK#$%iB&S4f~d z+e#Xusg7dXthq_dQ}4+fzUnQccXf7WkfZ4&m!LsjCEp;wHdS0V4t-)Yr$$=!xENgE zOdMjpv-elS_-daf2ECb94DJS1;zIaHU4OOQIJ-x^EuouR=S!wE^Ln4TasrX}_$yCY zsF(U6;&Z>ymO?*ogYZ3XdlwZL!BRO`YnE+%ucwLJ`%h4kx~m0Olq|(BRczlG_eD-R zM;Edj4Jh|V=W3dulo{-eR8oF4Ovj&l!kokgh)!^lcbnYM5Y*+NEyK96`zoF`cWMRtX z)@}XB7>=K*L9yC4m(>W>J<+ju*x2?|w#-Anioje<2L~y=XmmLjePls(tDYfCVE3K^ zil_$l5zDc+OHW8!1gu-y0L|;up-{B)W{;&l)Zp9AnEgbM!`a~3lv-Zd&9(* zlGm)elT}xjr&dMPO~(e`i`9Buk&Xk5n zq<7cpn)5eDfrgoSs08xoSp)oU|CQj)uVUUaUiULPwmGm0ub;OpT#_m1YJ?v1gxbGd zQJw%2e2sE^)Y_-7%b(wi4_VCDZ*YJbK3Lt`)}m5;tm548 zS9f|K;}_!QK02?g`Bk~NXYfNMBc_R3YlHREaob+}&bk^!#IkydOk7?K{UI^Ineee@+qGneb+P4Y9LkKA)Y?ggq2dwy-8pCSkC7s?QAzpJ&);MuuG+<nDj@s2FHn6w$tlVqm3KvqH|Eb;F5nsFkh*jElOC* zz+5!1-%%=^lgaJ*U~WBI`P?7_IKIxYzYG4dPy3nA$ajLDL2;r#$BOd>;XV0PL&q^* z5vixnQcj>j-nHTljAO``Etz`Y@u%@o(GJ>~#Pqxi$i7*kuT!ps%@kwz5f?=E=o=>A zq;v1k7iGAi2K63u66=H(b_U3BY!%t4hIHJpZj*H`QC|uY=}-xyvDq0`%?jXgR@Q9a z{pb_AlZlvq_anrAsJ~u6b3ebS4FjTo`fY;~_(|MIYHEPj0--0loXM}#Jcyydw$3_{;>npDEC#T@oywAliv_|+ltmQfa= z4>btau8`ELA=2%g=ml#B`fQX`CL}hB;&#;|F3*f@_a=M<0t={(k>LIw<@nrJVU;LO)N+LM2>=UJORpX`}ysg-h{Vqa6J zM_D)eAph`LT5_pw^iH?gMzHr$*I&EoKmB$`5Ym!wi;)gsu|`98kr=l89@n!0Qno%f z+vK4yw>=BZP@~%nNAh<7<*GH!MlCG}hX1jjq}yO7?@GO~ipDc|&`qdIPem$CzIcO? z-cpgt7I}WjpZc|x4N9MNiByzI^A`DL=4F4_olJS#e;4qL7QgcunjL)nE8`cX)KLxl z`iTA+Zhdci_S8d%Cro5Yk$1;8O*iz+-3-85S+=uauj1sOi6{rKugM@awBOg=>=P@Rn3eoH zTy?DcD4#W&yc&kMIdm4-(XpMv8^UV$itp0M6>ncP`p5At;K8ILwjQez;dY1poR$HE z890mcSZuCV-^}Y2KPq~PTys5w#llSQ>Fk=-$b%MWaQarn!I8hg$VjEr8(#;~Ue>0t z{b4bPza#9R%$3{Hj}s?WR0#WTyABMt4BKF?^F%6Fz@)N1|8Bl-D~I5E1nBx@@!S^u zL0&v0@t(lRzbc0XmrALukze;$wa0-&b8(+aBE5O_83m&pMim~h;RM@ySQzwP$1Us)-KbO>qVi;_o3J2lS&7%=S z&T?FY>#3!klw34<9f_MAYz&9N5iPYT6v}MYFV@CtAnHFeuTSzMVGkc+km1h)TpkNN zxJUSeJoh~N6Y45it(%Nl$ZuEkVQqhbQKJDuuVl>eU4X&}*c(BZ_ObG=!0}&_iA#_J z3ucWYtb$15h1yZz)mI4CHvfX>50_6!dk~x^dHqP2*tqwq<0m(b{wjnO+xzdTQYDqO zvm_yH8<^#kI2<&SpT=kGHUfRGGE_aA_4B<07bwv*tX&0Gkbo(+{N3e)bGSoZWZ|?f zX44~q>p1Nm<2^cxO^X`3Y``DBU#16=UX@RFLcX=EBkWOjG0SUSFLM}ecR~#6eeSL- zeJvSH&K2$R>brDoevYH3C3Wbgb{2|G4zL+5AOFE|g`!L0Tn1=0td5vD+?KijAx=!U zDyipm&6v3%G3T*J_5?38k5ZyYsjHBL-|zE^x$8+mvXooO(xK^mXgJlHAT64d~7g1E<4 zS;DU#calp-i4Jo=1Vy@UKEdu;B)|r3oG%+MFP=QwYQ)xC80PfAkq=U+A%7Ype`{JtY$>FoMtzguod{>^8} zO-Bmx6*@b9c*X3ua<@oR`ZTBJWI7h_vdF7fp^T;pxYp3l8g|xqFrrgG6 z97SwmBHjt}k@Lq=YNmnli+-g^0qDn(2iYp-H%$zJ*+5R_Tw7(XgrtsgAPoxX`ku@9 z5))?zJxsL{p7$#!Nr>%V2y_HE<^5> zoF>7Z`l@_mB36>Gm^~0|b81Z4p?<35xF?%EkR(ty%aAQ#h|S&~65Pv&5g-|rd@50h zGm+Pwv4Y2Qu<2UeUvEz7$NkRd&NoBXD06*3e)A_u!ANizWmtp~&F6bk8T@wvy9kJD zkuwG)fNLyD@wh?R+`;2P--tLYE7?Uc~_NN3q<^ zxO%X)tUFtu_ie`$NIZqY;fN5Ew8?If#y7kVZ@-mj(k&zVSm9C=DP%QHrTdZ>qtJUTbi`3w>xb4in?L~yD-Zou$?@2Z_V(nZ=xK+8m1uPT@owhJJC|NzIW}28)ZI>w;MRA0_W=2A^+w~j_EU9f= z{zQv<;ETO4R@ux)eC6)MJCm+f*Wr?aVqlmU%YMpBSaw(dx#L7fB|#ptdrO|PyHA48 z*PM%ovFG^jS{tYH4A_XkCS`i~rM?J%KmW7kfo?t+agXBNsB{eR)0=rHWD=yhB~D*q zNI0fI#)c{J1gs8_OjRxMif4}$?RP~t&JPf`LoIF#qngCf}8Hpd)7z`KIy zUXOv1nQ$Hfi-}dZ^|h%boYlX&N5ih+kQ7fn`&o((v!|RD^ott=SiWsO{lXJt9G=#B z1}t5T%?1y;Fbf!}dy3Gae4;Z5s)r_bKe}glWKD=%a(f(`2H@{Jq$Vc zYexg*VJ2|uJ_;Gplt}tMhLMJ70swt>FCouppujn%LLp>WosW6-lT?yv7k0Y zuwK3B3)|Z%7Dnr~vf25*D#wx0fR*(PG&nxc;7l^Ujf<8Qzn|C>b_$Q=#bET(N-yA< zS@cLu!NnRDI*_a|7)VNOcp1sm01xL^fw_|&4gF*W>6!Aqt9?-DuUE13E;Gl%FaAmZfMqDFL zbWt+z7)C*a?>pbRZ!j8|7NxyN1Vm8gfd4xOZZ z#=3h(-FzZ9SJ#RgkP`MAsy?cURzL0@@kfIKy&E_u^}L-vt9tEERd46>w$4XLL|+c| zspI^Vnlywmyt=qef8RfGcey1$SaGYMC_m{mJmfR@j!6timr~s&?G90rKj0Lv6EH4# zjwdEJh+)L~WhFM@q_*|#1(1lJntU4i>u)ig= zaF7P6Q6_fa{QoEx@hrZU&B~!xxg0&2bBDr=22tDNrB0}L7JAT?eOQ+JAi5Gdz7~bZ z>1!8YSWte~KW$>iigXrvjk&3GvS3;w_%)8a`q%t+4n>d9N*(yo1@H`bO5)kjnxg!F z=g@@49t@7H1xjR_(Z%rN!2(aM-d;q5SZ_V$%VHyqJ!YgdYZyf7#A;es=6Qz7*gCx0 zmrwA?o(`VSgvNFsjcuGh9&Tvat`p}y+c%w6S#fOb-y}AN57AQC4F%UhEZnff7t1c{ z)pn8A6(G8-$&ZY+m?=8YY5!_Yb?3iM2tK7X3a>bKHVk??%O0P`Ip%KGU7U4TxcZFx zy|#=kb5v7QMk1U!SGpPM(REptvA8kg1^Ya%xT=<=9Os$Fj9_E~@h9q=J&w(Jnki3I zB;>IzMV{XYc56KQ8|Ums+1X8ITEMHX>^IF1i(tWBib9rLECW{^urIf-CH(%=M)-tV zk|GNbQ<|0NC&zvemKN}$O8j8Bj@j>3RcK`1g}f+H1-7jMt5k&Tk>!+K*|PN+=yFfd)j>UrvzW+m3;Dg3}A2V#0MSM zy8F z^-8MI$_?&Y^lqzO&*Vm!cWD3agu{`~_%RL_v0O=F(BzIppqH73}W4sE0N00||e2YB^v% z5i#pL{z?OpmtuwwYNyevTz5=@E3$LoF|i2XvISq3z>D=Co$?dE+0R!&2{y~x)D*vN z45@A_k00C|b}gz@rK_h$2Qaiw1&0P+^EqY2usp6KgfqnASsH_(tRXl@7{38Feyo{R z8kUo^#5VDTO9r`ko(e_yC>w$mSq(Qd3Kiw&u1=mE?8#`g-7BkmBln{10Z16F$zVHEF#y^YrE~hRPQWS< z)qThc&m06uxpaon$#AW6$u)D}kl6xn$G?*^f637@(H!vX zp)Mc1XVQOmF6Ur=DCA1HEAKOV)Dqp~GVOJ~a3J0(EGkZA&Z2b;`iF;UM=rF_mTrK+ z$_!|27rncD?=?G$CPF>e6Eg;M)n|P@|I$}5L>ykNPIc}3?accj4vqVKx5+z8h;NS#+znbnuMrIO7IU3!nqE)%!}9j`?`sx1F2x`{E) z8iKxGO4^$&Ir2_I^I-F-ebJs{QD{kKUs-{NXR+a1>qwv0ivF4FiB7L(2MB>ua_eDF z3B7C6SX?i`7-38jtj4Vdw)decb1?3IJY%5OHPUiZ@j^bUpVfE_Z3jtgAERyitWuO#@fBde7AU~hIxYm5tMNAAj$U5DyNUr!D68cppYCy z58(lo`)PK+gCyCGu=mHCyu%fZv6qxJgp6R^czk77R$~zD8>m6H^!%o;vdP-75|$>? zLzLGn76cot9FL#>+sNQkTFsCVK8l0>7deJJHT_ez#VUUZ4nV@4vNvwRiGzn`wW+xb znwwii*`UVvQQBOjQcq#mVJj@K?A=9&Ga&eg0NBbO}IC1CTkxEL}7AZ!36|@&Ghp+y3i~t2VxYr?V z1IXg67X6d#ilHOq3V4^FF{dzADL3%~H}Dl$km$Z5P<=782U$7bxG7DEs*}wmkAvMB z8YW9)5KzFIKp@!;+e;fcK*8RrmY|wh;#7QdHc+z4{Z8p~Yp+&;&My4} z5wxNsy!y2AjsCn^=udg$)9IZ6OcGnmD!eZ%F9-wv+I|_`)jxf{q5N(T^HxS8E1?{x z7V<|vQ8JMl(!2DC{A)&E?o^SLe8Yo;%XM_`37LnXXdbnl5Ho#+1{n>)414pn@cR+P z04lj^hj-SE=3LdNtgAoN6|03z@XNdLzg-<@`C>lzhE1wZF~coSMG9eR zg!FwDa>TJD#KTr9WBp=wjfX-6r^`zcbJ$WP(iq$}J@eCy8O9;G_Wxujfz@BgI0O*5 zZjyR9rt1Cb>tGK$$>d0~N$zQ`iJL4m>T@z)^Ys-nl&` z>n7aNATow3RGAj5#KaY4_jI)k)(j@*f%~r%pKweSnIhn?$%ACK*#qZj&z@NP{Emt& zgBGiQDZbBRC(^!u(w&34NMP(^ingg+PxW}E*)0(fABQh*e)Zpv^&3U6Otpzx%9y)o?$Xi0_62kzQDw`q?RsL~ zNT=)>e_kf6!OG7n6g`k->af?#Lh|t{A5!h{lS?9RK;P;M&WXvG-`0>q8cnrVB~^n6 zjEK*9>Yn*a+OPwW+v^bYw7_E7fZy%zBhPOREAb&iVkmU`(v+MJwS~)Wjg{JVKEe&b16W&wjUjfxA6tQodO9nE#GBWG(DmJ=Wiwz3ak~v<;yfZTy65{`EcYou($4 z9YC_={+9WVo)mH1=J#_$V3R|Gtpeif8^hlkB2oum%^zY&D)w)x--9u;*o+KK{iGQ1 z>d)ITd{DVxHgOutVH&y7OPQXO1^$z6gbuk^3_UwAW71-=f56-!Z02=bp6Q&Sk_kkcl3`Eec^0+=Y%>o^{->ya}oJ(pJ z*d3k+k;Yp6Ue}8bK?y6Z#2IODSZm%I4wVmCiAS4=CV#H@PZoedpq2iSkc=djexCj@ zE+C{%l&YYs$2-9K5HZ(9t8`YB>P2f`izBYG4dK)cWQdIEmcf&$D1$G72A+9IZpO!! zq51X;Z#S{IFQy^d55FLq;ssDEvFzoHshLo>uXp7H$`=kHqw9_D-y}T3dfr5`A{0dA zX=koh?(=4bugMwM<6r@mNUHs7WwnbhlGJm7 z=pw?ZRA&6>)!Cv6k>PBg73Y=hrxNjrFU($`zx4OL`>i`ioL_2{deXfsy=IgT+5sW@ zzJT9#4@p~MaB{&}_!6u6!FH`-AlePv6sWD3vEKv7gU9lNu_~E&;k|kt!EM`17;!&w z{{w4uMY8$+wDRQ3WsCW})tI%T97vBpSXIw(QVu!D0e86J_!d?PXnUBrsox&Cr-GOt ztEIKTm}N+uB^9xbuAO*?g2MALpoJ2gyQSfJOd275FZlQ}tRVjEk_@W`z=zy;KILB| zXVC1OjUmuW5+Se9?(brMH_?rY3F-QG(uoba9S3rgIuh+&WIZD1{frg5zl1@m{Qp$LX7LY-$UDMIPhl?~uf?${wwza1eBh1B9IVn?)A&k$n9>J+eB zHpbH{-bSvM zH7MB`kL%^TXEyhcnL&!{%|xM=v*xK1<^Cm1kZTM7fKpVmkzM^+|0wXXqqf$9Clu3^ z7jzVIHhA7i3F6ODS>d3se&lkfQi^)P z_50rZpT2GOIeb&^BngD+(6@{%8*&or(6Gk`7@|~9K=qI zY0Puud?cs%I-35uqdF}-@Z@~~OqY?}c(J3(xmVBgaP)oh=)-iYfK8Q7(eHXDyJb=u=kXHi6w<_VP-|NMwK2xuEY;Dn&ZSlTALT?@Tzj^&8D^gf z+3X(7CQdon>{Th?0@4rP>nh8nE70^hkg5KuCtSjS3=bTazEg+mm3t?Y+qDle4&C3I3z#Zwy$`!U6RX?gkrnW z$e2hP?(m{$32dkv62&y?v02d){2n!)pDn?n{w6oB`XA`uXwiIjjn^GdZX?-Z-dR}< z)Hv$x;L6;$9?zd8S;ZX>b2vf&6)}Xm(YEx;*tmU~?lva&|AZrm48Dlz%qQHyx2 z|H<9M|8kc{Q>@-BD{95d8ec*-8Bs4Z&fvCWL;iU@vgDW>{hRXetv{U7H+;d-l;5Wk zOl#K0JR3qP@y0)Yzb__u)UkI(G~nZ_n|JN`{E50$li#=2GG8xW(J*0yrhe^bX*bkG zr{lqiP&MZM?naYgDaRftVOmeHgEuhaa}(BWc-Ir@e2fsO1g7Vy zlp$f*bos`t(KgfB4WIm zpr}Y!S||xo0qKc=v{0f_0tAB6dxy|VLJOoE_IuWT_gQD}wb%0p_$?oD|8i%}F|Sds zF|NrhF1R{qSfb>0X)?zXES+<40CufKmMTW?t*1SI_3H499vR*{dgWkPfa~PIMmhFq z@PWPeu&il30{#(Caq`{a`;TclS0Y!%%m!QRP#$ZRfvTz>XcrKbrRiSm6*O+WiiBxoKkDOYxOR4R+6?a$!# zBed1h&Ieo(1Kx=t2&hf@xx<#rN$#Q+atctT`lnJYFO+i5Iji?>M8{mslM}6z z-C#<_u@fg+DoKu2^KPA*v0KBdpN8JRwx1kPzhhei zm1`wXlQ^TgULz0ZbyBHHPVZGqz0UYcWOhA`=PTM=3((i_Z-WSQU$qLCxQ$foYh6!5 z<);WS=Eju55gDZ!K|WnPq>W|OYLdhOtX#-7y61~npF6j^Yb|o?tYK#9YeP=4+^mRwrOl#Z3LBfe5<*rh`@{4ai z8++Vp3U78C?Ti*YCh-BTc)9fFi+($T(`MVp__|Llp*saPE>=pWQk(C_PgExdj=yGM z0|8XqEmeDlnX@?!f477D)?ddLEPlrg$7C98eI3RBEPmUAbaanM>@M)$FTWW$lf)J( zqks}M%?N*a?b?&KMuR#&@2}*IhvJ2xHtwH~L`@7nw2nRY8ukiVlsY;a+COrwA@qY> z^0%3nyh(_eT`heHcA+~yv3qtpqAB&H!#2ae;I8QuJ|`;4OoOBDmlBK&_c>NBz0%tx z&(f49E0?!g{z;c-~n*+oeahuooq2 zGH1YM(}E2{0$rl6m5j`;j>a9~dJyv&;~L26Y$ktAk~fu?9~;tDOr1i7x{N*O)MVay z?L>Q#_4q}O-=3E6)ym@49WTLXc=PK(y-I3NOA9p%bn`BZfMN@O-6P9BAS0WsE-U*` zcjf$Xy3fY$qq7H(v;(U`r^UvMnr^&woiFFuO=1>vt5wK|fC?;))+kvSqqQ7&wju*q zfRM8lSMkmBH48r~lf=5kE@41P4 zrjEQqe)r+XYRa}S>bTPWP-@@&h{))y?#7hR!K^+^!fgB)|5BI7sX{HxwmZku3za>U z6opG}VI8&VO1Dl)9Q8UrN}FP3U+V2z;ZD0=q!uICQmRcnVjOsB*7Mj!%gDI-cM7zq z3Ww#>n;Sy=T9J0YYsAbO`Jm>asOpVciM%({*P%oCok}rELBh|UsX5t{pync-vqKpL zS81DP!o@buh(CT2mwg+9%pB&{RJX#=Tzz(?2K1M+kNCd}JQWU9blZ`5F|zZMljBK| zD-pXpNHyekg%%`EsU9t}W+YU7MgT0~w`=s?_k4u2EcVK$27L)hfR)iWpK> z=cVhXR8MVX9PN1aaOsf0+RTL6DUlw4q0RM2(ng-ec{AorKT<0ox|@l_s>r>G@KzWj zwO-$0GO)QAA3rD-Iq(d8gxnD%>54E!43@nKWUeC^}IBQR-Ndodd;#Vn~uuJq8)qADXqk>(=lc6j@5ox_W3HtL5#hwG{o^g_^PS9 z5d%l1B=gT&w~$p@Xc710x@;h4Hc(g&5KpK1NzIXse~h%I9q%@pdtm$~YpmZ?*gtCaF3WkkPcF1YgJxO~nu`?JuIV**nr6=)H@dpzZnk+9|W zcGFTMaG0;H(cUysflBuV5qQhtz=k~|P=FxA!glpW!fAuaOmQdSW>x;ZpG?u0 zl3HiP9I5S`lvnQ6>^d8p;4ui*Fku^an+RO%X73InTQN53a@^}9CZD%oU6=Dk3jdd0 z<>|F-(!`-)rJf+8py$|s=v6{=hu5j{zprxR4a5A1)VWi|KTl`in*eV~Q4tZjLEdJo zB-LRYnZRI42LUaA;`FEAW>V9?U6svD^f?pIVZhL2^%`DF7mBP{eKQ~Bgui^TF76B` zt12~WE9m@%v?v9p<<8!?1?QW^)UNMl#M|q%`sOs{DG_nXY$j;u=w$wHLd&ed)D^_z z5Jwe^oH{9>%V5V4zfSfXoeTbTnIZKzYY$MX<9qKLK!=0A#>&W^;=w6Co>;~np z+j8C7X8)j@B0*I3xfho_UA)q+tnpQG+)jK!jcUZvhONSrE*_FiR3QpZoyqF|48bvW zNHq;U<)_`cli(Dm1loD_q#WMxG4jYtjuh0IJV0sX>@GQO@yvQp4C;PWFCHv3`9@G8 z`|R15WYw*h>$|jM9Q&JEhRBmFLm{dLf^Ou|dRt9G>}~c`C&h^cEK)J-1cfVSuofVW zhfSd}UZoup)NkiJ$}Ta~_@5L|$VK5(Ski>ORZ=$p+E+Kv@U9Ql3z%@t4(-k8xXWyf z>0(@&znKyCE*fHSlbsq5tlL_J;3|42&DA)WUw=4gXwFjk| zH#1DlbEAMuN`h5FR)T8QA1gTT^sj}9ye+CRYt^42OnIH`rO8ZMGRmXfyTOfDvmWl9 z{Obk9^So1vJBxEam~r}BX80WH?P%#^W7_lAqTL?eFQ`9r&PF26!O?a&TA<8}Rga*J z73CE}&`??>ht#AYoA1y50Bt&kic8dXZ{5a(MBzQ-a!M~cBD zzo#rXDS1-W^Xnbub?Fh40;U>_Bd7X};FP1=vlDFgGXpdW#DUPrg*&30Ekx@)mZ5Pn zNOt^LTg8fo&%(Uny|v9doMLC%?8ZOHMldG>1DF(=7RPdNmSTA16r5V{Yz9$kHVc^K zhjP^VH57+^R*Fg#T9n_{U2YM-zc#1QPBqha&ik7MRw1(^jF%Oe+70<$z_2fJUPFVa zQaw6$aM6L2KW#FdF_q~78wUOEO-RR&{0?hA>HQmr?$u7PdqZsZ%0>EXxA>%_E}5f@ zI0UT`qcL)CtymZZ>j8o+{5h8^BB1RjN#UZQRL(aS1_SF(`~CdUE-1@v(|he+AfA(_QR%H0}PkMkE_T^m$&R?JUvO>P*^R&Jk zT)fk;0qC+#Y&A#i*d(5-ZVT%XbA5*iHJQ`%0ovnO0=ne-j)nZut- zMJBys#&0B`PRno{YB+TfeCB)MzmED}c_nlzmH7G>=C1P>U%6dB>@b5Nsf~r{=ye!X~eye2Ly}35>I!4(;*(L=x;9FIRd?WdM z*#X*eLacf*U`QwNvPWRhc+0LO<8}^_U_-Pa2U}T^G^CCoLRydpJujACB>dHp6l(CQ z)9>ILLg;XIs9c@aq}Fou%(&c1o+EsEYP2l7Ym}VF@XZ1L4-=FbotX~^ZocxEVITep z+Wkt^LAMOI5qEDSrx6OZPy%>JQk~bz2$D>BM9Syau4&m`@!^qoh3#oU=1UvbK8vA-2Kk7u2jm(Cli)N3&Ext~SN zeArRBFgi-HzHl;MyOTeYHufP1-xD0vqTFK$PxA(kKcqknffy42sf-yY-$$7fqMY2v zQ`&_DyAh-J4`@Pj24R?{g6#!4U;~WtWcRokoi~QA4hmy-GWTg`MZJ=mZNuY<1dtU* z8P%jUGx`^2NA*iE2eHB&U#(BU!?r*_3N}+fR)J4gb&jJ zgiXW_b_H>~uXg6;dUbg}!>qC`Y|ius$&9sA2n9=Y^1j>UBe9qM^0=at!#OtMn^i^m zkAG8i?mH*?yXhr}hY1}q&lM7^gYw&qy|biTb5|aWsR$uB@I%=Ac1|DOP`Ig^PqF7T z-J81JubSg5loV?aV)Zs`>Y8SRKma~}F<1T}NU6m$>7Lf;`4=D^&aT^MjecS1_n}Fu z-?N5WBm327I;P+|=#<1b<^7S6rG0g#z@0aj>DC@sJ|E-%Iydk$c#bhK+<{f+QV{#C z$vgf1#mk24jZ*?cXAj%N#gflQstDJiasqszStzSXAyPNv1IN^cijigACDTMV`zojP zT>4-t=(Z-z;kedr%kmH8cBze{?DZ|z-r`|Cj9*-sOK{GCB3kQXK_E4v)FSZ9&)iGz zH;TOityn${sl3H&bTKRCEQ{Oo+clKgw@Lg4zL^_?Ya(M`_nc}oon&2Ex|`U(Yq)0V z^IZT$+VMl=Z4GC1Xhz@sKG=p_sNoQhF35T>y{1aKc6C+GWL?E6q$BR-#Nmh^#~I6V z71~|jb~029_RRVVf^wYP8@w3lcI$-*fF^h1&8Fx|y3jyoc!B*or6*)tY#}&4*e;s! zTvt>#egaP|$zoSqVi%pX97v{4*+b_JvXoZO!aj1$ALql*PxC0^Y_FQ_c|lg@&FK&9(= z`5NE%1o!Jdrw;7Le+VehKHL*4)8jp=8!mQ+m!~JNMiwnuqnJA32-#t9-aV!D3(%0M zqV%$(*q{pB#4}Z*WZf`%l}GaU z6W<(euPbcR`TVpC9LF@-l>G}8AB$akr?_$d)aRq;ye6C26?x9{l=@z|5a`*vw1yQJ zps2b&d@#>guNs%)-$$t8RM&~`%yze920a5D9FZ=W#8igPjuZ?Ro?Hl+$@ELu!A#m1 z{xptcUyR3o;kn^=vuR7BuLJnj$h`RH!Eq;&-=s-E?V_cZL~FIJa{TB1+)J)$LWDZ~ zjW*AiIr!yO;gc$Ghef2+s&a3&)nNSN3uS(%9JKYLoW4lYbn_!sCaF^d}T=!sok0@-q2Au+OON9+c5GpHcX0|1V@)}I3D$kALe7ZE_%md~mO)n1k z1>c6sa%5)4CW)ha3UXw2bG=g1nt?c-^`(|YRgizx2fFeO5Jpw1B6l$i7~Np980vKl z-ag>BQyg0ngZukZhWA|-*1y78j$L6na_Y|i{PEeTPy%4hmok#W)y4iLgQ!y?-Jid! zNBMlK$eAKj46)rFxkGhQ26S_Mugr)azf1YN?8jKe>86;(H25>P6rbM&UY3_H@w5J1 zVG%r{3zeMN!ZPb#Aj~c=r_yWtm|(pfeH_7 zE90<9p0O308J*5}f@D~$x|07ZNkhSu5^gd70sp3q{Uium^BR3!dVcIqTfgz=MXzb` zv03DkoorMnw;e_dO2rW%*tPo>VC=e8KnF-Bc=2HY$-s)}_d=jeiil?s?b5^lD)x-b(fge-#Xh zup*^RY{JEkF5>j7dv4*V|QmaJR1uegRyyi)<=#E-*Cr%@q}) zeooh1daR$7LC}fU&M6{kgMeBJB)oj3ctn9tkH6lz(x;)!oAtXyd0We*X+>(e(5BXi zP4C*cOS4`qarUBA@qxjj6SAzg?=rC5F!(oPAi+*wqNFg~Lp**g+|^%h%t-fPg^k{v zA@fG+J#+AVa)PM$=^hMu#J8kEn`vwGLExju%*M^tN)D_P~<*z65+wDHTa#KyH~ zac)BSG7+yC~B|P<0!0;@sj2mj8mM&d|q*{9sc+yrM|ps++MH0YII0=Tg3AX=JA;WFC9 z&;#C;0_eA3_VQ8pc4r6NAh#y4Ttll{k`MP&etR9N{JRQ;98V95OE1LSP&JIT&SOPp zyDyrjnj{$fReNzjR=sV4!!_Foe@-|G;kS$1=63CK=<63R&eYnU|MZcra=S*o6%YWv zM4t&y6pp08b(IgP3gskO=E{$ptp&>!n}oHPrtCHTm{SIFg5{W9>ae1g?Cd5 zfZ)vuyB!cVD)&7>Kg^HiY@&FocDIGPO_4xS^94O&gvNCcSXLA_*xy&bLO10QDMYbd z$uu5dyMniB`&0{EdHyi;GqQ;rf722;w@!iPc ztMH+P?CQm~z;+-!XSY{k>c8}HEF*?`9hDAgrw+Y)2-v;>@rCY%`S*DtKnul zi3eq#Ch@XV_+4`(V0k*Z${A>yBh_3a<8ctbsGB(SyYYbbTLe~5G;HAcHm%EupK1k9 z9MGcs-U5@-A%9t%uerzhGMoNFB5BqXfo=C+#dFjy8HUmqGSbqQ(eNt1yvXP7L&|rG ztzszfgohRR(yK8s5h4Z@FD6oCm^cvg0Nt!O;LMo8JOQQR7sHr>lq71OYgts4(@k82 zzFV$1AuYIpQiXGIuWxAvUDY=F*`LR}5elsv0mm$-*yyQt`C6pH!-nmtD$F`FTzxUz zfH?^2bIvdWHmt+QyJklaMXB>I+AvT-kFoJx%q86)4DSJ;?wrTavF_^mGI0oB00S71 zjP-*u$DJ4b*mcrJ+m_7Q{AVW)*5A)zL-LzvO(puKEQayaL~*_~YTpR0r(O|;cYz(C z6OF^g+d8QUK*N6(L;Tl)I{(shQKSc2n)}9Dzt32q{&PlvKD3P|4iea$7q`5cF%D~M zB=1z{9{CpkWSrLmWm{4uV-tE+a6H~$ zb%`8f$7Vqnw1!f&7HEfxrf!ny!LvrDoZfBNwMCKrl!?k|Kx4E*e3nWs-Pq`96Eg#( zZ7j|#?)P#R7m=hIR};>~6TV0mQZciYbp?$Y@8m%vQ}wP1tY+l1!~`+85ErsyaOwhw>jf zFS-DD8!lL6)u&FR_9dr^wjvs4503mP-f`?Pq7TR0AE(O^gX>=4D!PO)?hsx=Z9!t< zYiRfZDj}G)SGZWPGNN5A3b7K6gX5IAFWIT&Ds{F`REp!;Z#a|$FxKo?Z)BmPp7hLWOWgc6UbdKBq(VF2 z@{}}ii@LfRTF`tD*aZm^HM$m1EDPKIY-YO*Rc_#x^sK7gmqy7vQl5jm&{Dk0M5E96 zGdg?+5}veoBrWt)Q|hEb446P`%E)9ZAOQ)I?I{c0&7jHn^#@P`&OGd}CYVuGTv!yt zh09ebU8={LuxK*8#9m*#;OHZ#isJoSFWu&T1!*>(`j=7qKTg<2r|2Z?==UqF>;>jj zK|{%{3%3AYA5Ag=Ses8yAm;r>X`QR4GY_L&cGFVil60w$yS)!-#kbHVA%4B)&}hX-MC655Fh zwt9;9#QVxFis#UcH25q>0UQ7iLrg@h&$V{X`d@l1yTFg!B>J`cb-sRs5rQAsJx?Gb!;V*3RiNBqbD1)5 z7keC&h~t@_%0abGeBqd&$L~&?w_EPVE1xZKM0)0ce{nc9%SmjS$?sZ1&A$Z1Mb@v- z66_41E| z6nL-K{+rp0DJwM3cPcxzG-;Cy1&OfZ`C4*BoOR(%gM*Z$yq=XCvx~H>!9k!3&f{c4 z#yZW!yv&gY56~AJIiieXSpMj)sBu}up8pMVLuUpmSW1d~C|yDm9Iuz#PoSBS^Mhht zhc1hwjQx=_0Z+=NC5kt#KvwctQ}QdVJlTP8i3&d<+bP;ABx1Whx!rJL9EBU8>ICl@ z=ou1v9kbgecCPDm_u?q7YQMW{eHUG36K}v+_4V6k3x$dtpE_2S290Syr%wU;nsi=s zJ?aM)sNh5|DtG7AIz#aGq}eR?_#;^Xs1(g zP*oIhD^F@sE|Ye_-=xjH$|X8RuZ3~RQuTb%nY_ge6wn&sYEyoR+w+kVKqM52%K;P8 zA%3DbR`H}uX*3I;zmef`n+dTjj3q+1IJ5!z`|gHuHMFONkUOiqMi&OV0QJh@*7ncU z06)2im@>p2S+HbHN7BS+f+TeYu3(#I0ccD9YR_{AuVVAD5$CX<48VMH<9pcpRHfSIxTw6sal^mR8p`fm}tl)JBD72f4W z^3I@Jkg(U68Xo{xtTi#@U8_Z+>S?L407xYoqdAnvv_V@-#ufF7<8-;j+b?SO|8|#L zthnaT1+3(Qe-(BAWHvH*f@mhwhJ?Z6UO4=?L{ z8&W-Qio9jCufKA)K?&4@kFLxtBM?ynZIIWzX{{s=x`fLpRYam>#(=S*W~iUe@npX3 zI&LoycW5ZK=0j3EJ>{c^*J)i!E_PMe&FE5k#KI@?^OkWm&$Uf%TQ{fV^ew}?`}~lE z5xF3O5w$AjjCXEB#fJT;0j*uhG`Jw;VLRqncfVdX)M|X3c{{4pTxZ82_(K-^zuO%a zR!>g`%N@)I+GUsennZitEla?6VR7T}sOMaowS88AZ}ZJY)*L6iu5Ghpc#7S!{lCn5 z9z-XxwcIJHtILEt%6>`fm8obW0OLYP$!;#cB>*I@0iWCgasPC{T|m!FU0qRO(Nyne zX*YW;IVQ#@t~e>V^MKYZ5+9oC(8ShTqn!GT9l@<5$>92i6eVJ`>@|%@RkbwR$GclI zS;9RPWOzVl%1?S*o6l(nd0hvwynd%a8F6K&&VaqW)&MGD=aI4v+!|;GqOQK!GzG5_ z>;`fz2nuUGxKM5nvOQRRZ0oRGJEu9|2ym%7kr}VYlpRohzYAf(ck2A1JbRA0F zNM&Y?thI&CCZrIf8Bgfw+9Xk2kz^x!IT5#;x3bFr1Qu~a~&q8b0_RI-=-q8iM0hY=CR*@dD zNAj9P!tlckg@cqlI`G>;-Njz=7UYE8f;3=+$mtgUCe?u$q3FiTKLw zWBN?R>ug`ff+>nHc)Fi3QjF;CLE;?APc9!^$h{=iyrg3-sDj<}scsIssG%G<{99T^ zND7_(01fMK@kOL2C{lBcJ|ZE6T{?bQb%304x!ZIg@9iiow4VVFZBB9R6@P2zceIqf z_F}8q!HC~*wY}g>22R&O{97;BgPZWEz-;RwW0?ffgOeyrs zuMEt-XhVeG5%SEde;W$4aPRqB(>nP}pf&Tx@ozA9O)& z|3vqnOR*W@Se38vcxQ1EXb*_T6n?@@PC z_7k3o>gKNS&02|*l@Rab zH``10WN`x;V3TnBlW=DW!#I+EL7=33=-l1A%fnW6Y4*{Rdu6{x@}H|(Y%ebYP)||~du9`G@)X^3q2hSJDmdKUloAyM*4VWj?UnBt-rV5W7EV38fkpQ5;O{w?7v^+P5tWc7C(x z`(#vDo6OCn^i$h(h*4_LpsOlZi8RWz$6Wnv0&}OK?z2xdUA@G81cp=9>31H%5fU+n zp->QL15zQxOpU21ack~QRWc>q3Wkd?x!!c=24j>pd z{>CleA}lTrCZhvR3S{y%8=FR!(_5!=c}LkHXN>3DF;p|hmG=r$el>01LfP_5#h0G7 zt%muJb9I>+_FWiQYQ4KW&tmQC&b5*s8KPx5KF`M0rhQl!cM;RRCsG7T6!RPqsgez! z(f)|~gqA)n1_N*#N{3c-ion_sDl@;^fxLuil=&+$L@^ZSaj$K&db@=3w}5Uw*?9!t*zP~NdW`V1rr7pkL4)| zJSG-Tzu?m@CN7c*QX>PlG`S@_73iYm+T8BoV=(fiyc%k`_{OeSc89(7^y3DolEU)k zRmhLVFRzO@c)QQlenB?_`>n2u<{8NjTzu+K%C^pnKvp43*8F>_rp?}aHTw!YEYSh> z-v*@yAt#e2E)W1}!&)5vQiN_5@UUOLSIt+!PZIXaf3+tgxVm)h_TgVmPGCMQ3(a(| z(hl6#7(B91kPV-MS7{k@DEm~{NNT7fRVLbEBS@sOUac#r7$fK|%R@7Ivl z**=$be)H6;&1E9uX4e&o7>ODa_j3QHPR(g|SvtHbB+7%Na7T&rgy(Ov5US6CHkM6s z6O{97a{fpI_&pvk7|GgW;`{F^s zJM)AQ;2H^IePFO9OKf!%7+XG-johRZx9rmu%^`8?B_K%Iaz-mza1k&=OCh*X#b8XL zT+&h{iJ~&M;+MHi3fLa^Ru0AliPZ4kyte=K3Si2q1M(NHt`$=@<^VEoDxdWk|3Ntr zOB1;`e%at>GY!-%qkYb_H{w|Gv!je`0_;=O&M`#2@*0f8ZZ)JbC2U9?RsB z%t!41wkGtCFQ~Ijp7|HS#(#@OF5d~~WV!q`>f6628vps3!&fK%?X~>#>i;v*^k>!o z*{J^S;rnASe+=di!i1FI?*FG2z`v+0|H1hG#EgGNl0U}t$6)@%Gygq6`x8a}i*Wl- zDE7|)`k%1+$6)>#%wK=J=^td@eeruA!q)7 z=7-L`(={OXvojtz3KWQJ;W*pa%MZ_K%vNaXFUfB@(ZJ>1P2dql~$>2hh*oC8QuGm-cVl-s7?*=pC`T419l%i1#I*OvL zPAZ zlsDGlL_-MD1TsfFA-NFPw*M`rTHa$ny(T_Mg#0%}k_q$*KeDBVgh=QVA6oEWFhC;U zLRj$iq7mUP>qvnp)LM2(<9fvHlnjrN$F~& za`Wq%rPl}7xts;u-s6rS8A&Xn!$q6jv*Hn5i9jT$yFu8Jp6Sf(GILj2O2JC(p13S1 zB>f%6zB?{-U&r7B@p+Vo1ox)pHYA-P2-|ZShmNc>fl05Q|#+2D2|0y)d z(wGD>ON8p^cpO#76U6wDFmSZ893KStX&>)Q5R<1|(aF9%=hmmX0IIKw%h~*0Tt^gx zafNL>nhQnPGudif(6^VHU(OwfEb+<6Bd?1HF4jh*qM)@+gL~AEXNH@5GH{6i{vl$n zz*708jTkjPKM5Z{JH5{{!($3_Ug6Qd^?_0s1P3kx4(E*N#?HeC-rH=(?U`1_`X{;^ z3ym&%wrBhgHqEDM9k?#`4I1*DlTxKzh!hT`J8Lbe3Lne8BN75`$Q z*Ra``npoI3X?H?VNX;YYhUJmIpFh^$V}5G;XL+4`TD#7}w2$}C#Sv=$Le1JM*{Ks#M!Hb{1E-<6=?WMC9Y6CArG@-i)_7wi<%*7|}ac z(-GQo(}CFaHAU4)sXT$yJrZ(nCy+XZPVo@uvoMY8Ibf(p5qD zX&K3f#SUL_^();iE~`S$nzx3|pT;gJvpojfvSS@Ai>NR)7m$y}(&o}!2V@d?XSU24 zQLAhdB+r2!jcc{=$K3=!Urfb&7TVVUA+wDG9XlQJo6?T06(7x`;$M!x?2s0`B#i&0n7 z$%;0vQ1q|_1YrUq7qxANsw2_n6#$iO(He~Ga4Qy?2`qnFvagw?!A+31%l^8&8z3V2 z$tShkFxB?ruAE4l&4Es3hl{kA0o6nI<_=%LmF7a&X#G8*MX)A+jc{jDgHOEN3{i>f zzw=_yS?!_e_gR4XNoO6tn%7fHy_I}%tgEgo*A^Wsu})*(qmfU~%XjMO&$aq#$mH#; zPTQJk5Y}dPRBX>W%ruA}E_ur;in2oECXmGB*<=n>I|K&ZRw~S_XSILvD>B6Mf|UeRgWMqwV4(p?S06CEiE z2R9rxR@`mUX7g}-8cvgTbE z3B-g0)us2j*shA@7^|m?_Ohwv@d>cJV&qBkZ~V-b^$|DvW(i&8`?PSREtx@ko!;lC zV=SW=zTy<>kaTuSqUt5OPa3xuAdzm*^cSowx(4%6@k?{kOSIQ}?X|T64o5Gw;ZRU8PT%QRc!$+pg8E{1X?UW3r zFDb8%`&nPWJgO!-GzjYHo&6My?e**ud2$IN2`Q5|3>~Tp=n=@<1E9DP#>`fHv(saF z${)moT6O@A;69)S4YW>M5$Kt^tID<;ojf z6?fiVzt`#CI@jN84%5En7uCCVNPNhSVYuLcH}6k%71dTP$auCU0ZuslK2k~BQoa_@ zRSMdrSbV>oL<*BK54@!bA;M;Tk=@3lX!D{WS*niux!}d>+^;cK#>S&+F;*|jdL;&m zflC%IL&nLoC?6Xge&-1*`bmGo3E)>+&;6bHR71_rZ6DFmD=c=B<;y{7+f95jd8(3! zg79gA>NQWpi@UYS!fSD^0#?@iAurwvJ}Z{Fm0rwMw|gB2$(!2lNT!wrY^j6Dt-*Y{ z@5>A97@O3BV?u*qS0!={Tt9z*)WTp`;=qJm;TNsl7Zte&8Rc0@o%ayJj8+Vkua_Ue zF{)t8t0YFZXV?J}HtVEsIRDq)@F9s1j_EXca^s(l@WumH<^hDhw+dlW*KzdjUFb@r zBIVcoV{p5&o_{6*PLnNYpnu=^`E5&TsKVYrB<-a48l~Jre>gQ{yiWy>zTr4hNUf(d zh-IBRNvLgeN75Eu_iAC0-q|PU4XMOAy^@dRn`$lKgFH3k?x@L!B`Q8|8`adwis1QB z%P%7Wu{)5@`bo5rmCvR-GHKBWg2HJYOLon{!k#@u0^}iK{eebQmuv-DbBgBg&QY6j zc+E_WJ=SVABW`Xs+15TChanJ2t8P>TO1_F}G-XvWxc6;+nBaY5t|B!%_~b>r+HmI& z3x9$NfvSe!m6f%?(NZ840;Ovw4=*)TPMY;heg^ksRGE~{y)JQ82%eEjW}DrwkAXHEJOjSzJDl6ICFjJFV>OiKQyYq7SSRXc!{ ztjom`l0!qRNM~KyM}FaAc(z8##_iG{tocZz9nMMFHzHF?M6r%pEF$Z&ztv3=+<=dt zF3wp)Gci9?nNK3)h?e+@1%!}%QBEq5%^_gS@wf62bU(uxRhiiDXFyleR#$VlVEU~5^(y5t{pZ-r{0LK-7)+CT8#x1s}sh{Oa z_4qH)VWUKC(Y$9t0Hov(yuNtn1bCU2>^LvmAR9l~LlRRf+U-qYBT_X_eoyU*)p+>g z@Yf%t#$xfOma~%ECVZA1#~I+s;cxZubCUH*t54Bulz_xo;xS_*y7{jz>eW#tZa<>! zLYvwqH$4{6b`1HXjG{b8qJeV@@_!z5n4U6U&WM$*+Nc{lE82NX(LDq@hEp$(&bB@X za73XL^~^BnBUtB?gFe8|1QJPkmuX;F*apmAO?aT=v5VES=D&4^uFC{o?%9y-C@9i- z&ikgiM#r~Cf7cAj}<BBPeqPz9A26(i z66bsiT#x+fZRP{8GR+B5$=dS!M;fbC*m49@b@=9XuVjNqtJbXJhrY1n*_iYW#R!s(G2+z6Kb>(n+>gNOk5%W;T#rY~ss&fNJnys^XyQw{Hw@NFYqMnw#MF9M zEXrH_@RzJK+jOi@g6mLsH*1I^irdA%(7P^scUh>Y3O(;A@q!r>+fKhu>J#ahMEdS< zSVb6O>GH0eG`3=jO@e^c8X(V+KOLY6qDHw_V30e zldG{-O2QKh@!PYP`(mYPcq3~>cDE77Z-O#3dGB#_E07e}Ph<73XHaPk+Bjw9c_Acf z!?2|764BZutDvXb)Ml=7mR#5zCYgy{o70hxO$5m&7CqD~GPCnJCKaJCqe1vFUgM{9 zT9}i1!(*RZ_X^TgmJ@}ngR|z;fgAIiYJUwD`>|>5tQBSJMp>XKSl?RWg_5g0jzL6` z8jNNo6fSY2s1UFhU*jue#h}9@_WB$P>(zGevHIxGf(gnXnHSxcD;6S3cN~B(E}0xl z8DeCFD6f^YTBm;Lk00=h537r>r75RIbXkdJFH4j1(#N{qm8FcOJN3(YTw+5%U@J~% ztb2E=baj_(n+?&teG=l0*HWCfAtsgsFa6uUCRa=K6<^8=cRy4CT)7d{>HeEz#G-{; z(r3)a5wXx%v$}MlC`DB8lE-tzg6^S^@L{Y)w&?Lo@eDB|S>(7m_Aob81_IFHU+BwU zzGG*%$Slcdw^Z{~a&>j+tjGNclam#}(h!#6>;c??6Krgxi$1qrNAK`V4QFSCaI(@k z%|g|7qHbON|MqUbJb7+!b9Z8#u?pFHQw3uVKsQ$jP%0+!8kTnPGfKRpF^SNVIsYEd zb8zIfP~kTz&O$B;&PFbU1h?UQnYnWb{j#P;;OLQl%KJxLU3N1k)zLLVgZ-gdeO8w@ zlBueSnNWedzVEYF8*{zNR0g=)YNM}G1yo$wUis4p>+@>S!&!lV4PUeW4#D*B-Z z+igbXM@Mm3m-}icx6!68X(*S4A8pG+$gN=7mvvwhlbM4zvM37t11oM$>gIh8SAfd6 zWAW2rzqJS2F+p_hnAuE^YvnbbiCsWyMV3#BMb*Fx&P`58$ia(&UPlzo7vLEcS=F1E zTcZ6rPjQ0c_mywsDnD2;+EQwkxH3O%ce{${LCt;tn$vPV{JRPa` zO~=EQT*@yQ8JG|;&+*pLTs4k2m%1`Wz8(CodsX{+2M*r3CGRl(3k^xFOp-fWOyla~ znK+*p)FIxV5m0BX5J!%6Agd(15+$}>8(ib&JB0KlF?VCXjQdF06v7+G^9gZ1dE6q* z7?vHanAHjJEi_kOf}4rNfcJUB`Tmqn5uCOsZ06S}TrhaeySAoxVrV4yk+`wB0kq;a zWv4QZRT(FS?E~Hf)^{dpo;&}m|Nr6YExe+7qqlELkr0)T7HR2{jxh-7W@wNa6_D;> zh7geuq`SKXq+{p~0qK+)UfvcVH+5P`%T@t-*(En)oHKWZ z4xB$Mh70SUigB@RP6I>uOYgy^l33BH6_k3Dqi*tWPD>({?1hl%QO*WPX!Nxoez)$)KT?gNuR}~nPg)U2do?do%GrYb_RY70^M3e!_|Lk85s;U+-g{P;7oPDrV&4^T)J?V73 zs7{IBVaW3TxLBH55*l#K&#X_PuXT`ysnvbpmed440=S#dYdoxt&-ztU6TyBY4IHo6 z!W{{<+?*7lC0YLReVi=0pOM5rt0r$wX`x`0qO@Bkj`A8vU#Cl2^2>B|=T#pR=wRQQ zlZX_5qq$XM>MwZJ>Mh{@Im=wur!ZdqW5SqtQk}g?a_;U~02V1`YeccwNC z$Znlm@iR5zI-3XJ_H(d3%j@VZ+|Ci~c9dl(;V!q35nvecI-f2p#{K77zf1oC7}o}X zpe3Qlv}@Q&==Id6eegFo1u2vJSHn_?E05k#+{#tcB}CV@jtuPUKe1el4pf$ZoJMR{ zcdR0j{C(n)C9mJJFa40i=`P(gybpfnPc7_hYr;k6;ZnWYlOA#`Gp8=-6qy|Zv%6jI zvnSz(oXP8b6U|=kqi>7d6)-^7WM=$2-G;0&u z=X)E@nF}q!7NTz#zOR=Ip8C6pgX~^P(@N`Z?O0aqK9`@=R&{u56m;hPwsx*ZL#6R> z=5;dAEQ~=>Oz<74RnH%Tulm~~>j})FoNDHEswcII-mpcP9@hGVOd(M-&XB0evWu&b zME0?5x9l85OWMD)c`xnahUy4_cf9lRp%usU9z(1=EPLj(@l*&YAvdV$m?S15-x;4p zu_-xEpKC7-aQ0C5ol5GMRQm3r>~J2e*M7DxTIDQ9g>ZEH*u^7|QNLn4tl$nK_~Bte z`{GHU-Wu2U$%(Zv5E7z+0-lEE}Jv%4PtDRR1?)E7YDYk^zBMOALe1Es2?rzZ* zbZBLl4eb2$Yufupx}M^n{%Udg3@ULPTyAi0alXu#Kjs19?c?!tkI7j2l$lKX?-RbU zN4E)|kfX(X1(ISiXv20=Tm3S102(gfob@)jg59+7XlXpug;#x^c)!Fc)}9L)P$qd* zSDVz=S=?Az-Kv=AKr1}PanVk&joEH*Ux!uTDpJk78#D!nFTIRX{mx?gtIrv{&YLb% zj1v%8`>Hu1k>#N}-YyK+$S7VB(-7R3%L$eOpFbXNHW~H8;3te)|`I&RB=6v!EZcw6KMD0l(tm?g!P38RpZ_51=yJbI$XuWP=6R^ebKpg@E$R!qjJ8&F`j_kEg@ZB8E3QhYjh2%p5~Th0iyk$>&?rb zq|2kz$sHJAw5_}-Z9}>0+n7A%Wy^#8bv(P`=A)EIPJ{`1_NTk{voPnYHXrKv@*oPq z0ISsnQ&}y(q>^!m-%Ib8UN^iGHO#pr2~@Mocu*TV0iSZOLX=?n1>I{W64F<(SPyag zsSBykJpG2`k?y*a&C5tuP)pDwAIX1-U$vVL&Ge@U=$hofs}$egt?%3k>L37;# zl%*E~d)Rcw>(V9$bw7kK!5PL_fg;QSr+h~@w}84T7>;+2UJ#O1Lp_lbLR7?O@VoFk zQt<<9S^#42D-W>c!x7OlB`9y6=HPHMeloW$#MSxRF?O&&oKO&NnrFRMb#=EEmGgwY z=P;DW@}2>I$xn~T1brVRs^v03n9`l8q~NmRx0GXxGSDcj>arCB{5E2X2%Pc1N%FjN zc3g%$U3R9O!T0IZGkjImw2bL6!XHr(9JYfsri2E_J?h#%T(2;x)>T#W8LoLbQNzHs ze6~<`nt`#eo4niUac#YOu=47_AiK{?L6fi8GhUr0kg=g{%ri@%N+v}Uow#b!ojjl; z16OZsV!1OlZh~Tg*!g7u)&qw;3SVEJ(;9k6U?uWD<=KYujr4!ZGx7o01XtX3g1xW; zqu17NU&|K`g@(wz8w!o^``pn3&=GysS941Wa2l zn2)OY(#nzZgWa(uKn9)i{?<)!(f66)1g)2hTPKnBgqDHC;)aMI$|UiEC$|Imtb~6# z5R#7Ok=?DkYS?sapfsK}^nc zJg{2aEJppjF9-6*0 zX1db!C$3*9C%&>7NskjrJ53}z#$|@xM@_HH#snb+Jh#^shY@l}dgg=QgYM$xilQwR$7ful?pf=mGSJym zh55|&zQr3;v&78Zt^GzF`M6mA#*xoAJ3=pQOSaLKYL@dOc@fnSMd>xz2t%&R+S9tl zMziBI4_>28YTHKlqVz-tIIjm1QFtu&kOOwe#0S5rp4^Ypb?1dz)Q}q2kxDgu$xS&^ z1rxusph(u!Du%af@+w1Mpxc(MU};QwjG^VdG*onCz{Eq-j@g}?fX}bj8!=-~FPGpb z*|*-LkfS1^`cpBje~We{fa|iaF`P5a5B6b%8qCDn;cx0NbQ>EG4Oj|`j6fZw#N zPR{}w!AwqPS9iZ-)&riF0!_ii8(!3T;f8t+)gCjS$=N6?h*h?XJm>mWJLK$}b~4{< zNAb)$`A5rpSJ=uWebi8_r-gg==yuVzhkL284p*^UOYb2O zUoz=}s%({8hr?xIaL^id&+2yKZqQwR9YRA-PXw7I`R9UnZMaTA`oG6B{@1Ntw#Ei6 z>}qEjc0Gf;ItqZoQ|3bBwxmN@Y&3Alm3~LSZK;X8TWZ-h(sc{_+{V+-Rae2^wXTwi z-BJD*o#W!2;yRIA!Wju?o?*Wz-ApW6=I_^I{W&c)z^-DVvfg+MJ;PtJgYZ|1VHwd!VHfhX4j>lDI)#^^Il z>A>};OpJbz0XqxU`E$uHpZj|cK)lKbG8r@=b(fqCr$yQO!wi*UCy9IxK-E-IGq5S+)W#Q}p1CW-Nw)N(#&n&5{1UMdlgWoOUNa$^l7}WJFLrl|Ap`!Wy{mLPW zzees~G6xR?kPa)?Y=|}a2skn;)Aznp^I}drcMpU@2AV=!Q+c{r?S5R-Jip+}+nnEl z#DjKqw*@sPv?nh9NL(z9NK-kYctJvk>mKm=_CSOEg)C&;qCrz97p@YN=|n$+v_)Ph{YN7qF@5MoPwY5|3!oJHT|^B-KWU(2ErByMV;YPVgLFmGeT zry=C$u}eqGifmcjSi-an(lC3vib1vvrK)f{51vmD;|@NbD0nkB+mfW8QNtpOcGzBI zk$#b^B<|ATFv8ukYFp2%(=1Yj`fC(rsb0f^Zi)!x_y*hZTkDqNP(Preoz-a~ZFHaG zjk?TGY+#Bwk9Y}(8yt-BkB*w>WsUkT`VuGqNwBo9UfNyK`xp$*fJbde^oh z!glVOY8PV7X}cJEM5H&C?lV#Kp zI}D4{jEY9f<=+7!FS08>{m}m#4eA4m(k9|X6r#+TXGU#5&n=bSX=Jw*reh7|>EHS5 z10kRCq`Y=ArGuR7p+IiAa?{QwUWiZ7psQ+EM zKeDL*Sb_F2rr%>&<=$O{(PA0DiVMKw&!=tkGASZ%G zXwg?J#?7wIHxN6(o*dC)1AKzIt%)FOJ4y=M`IyD_$7>8eW^8`8XjwInd9m>}jc}-} z2dFb6iz&PmuX_d`D=kigU%}9NRh|B438XJ>?~t|cR{fXjP{Vpr{_3U{_3N?aVNY{P z*@`qD6@=nDM}B5&9nI+ZEk(!URTx203Qz<-mh5snj4IpHZ&tRjapsl(P}XJ3ou#oX zxcRSXM|bo~Tv;zmoh-OM_Tii_ynxwcJb&fG`O- zy2|uGB%>z-Pu8x`YaN%Slm2s)YjCia_v%gLuXB)Aa#nV(kv{n10k`g18B*jT^tIck zj?v5I$=G1r9~h>iY5mF;;2HqOhz3m!vqMT`U9kjRKK{gOKdyzWI{!RclPt{Czc2G| zLiXf39I-#J-}T?%KIs}=K61IGJz2+ILU(Wn09w|Z%nyE*QT*oq8*AM{AR77J2lB~^KFjU)f&OCBUUMnktUuyd#cc|yF@Rln|Hho#nm?gQSz9e~h)6E!v73A-v)AHH|M=3{+AyjjDDMKcq^ zAbKk^T<$;YB5rGPazpPkN#-J0(d}^Yq;*00azf@IC4MFUP4~h9UFzPEWk(+yf9>R= za*pr;GnH5ZRTB|N_i`K{e5sEfRA4;Lf3N{O%wB%_;mGQoy&OZL?(b1-dGR;zI{NL7 zJ+bk~86g{KKoke|Zd)0)*UGOvJ5mue!|4dx7|YL)R-$Ec9?KAs4=LUGDYSAdf1_3s z5K?R!`05W)AsIQC*;O(71~VEO&R)kKIXq{ti8> zd=NJ`))rEkPDdNOmCe+SyUhBSv3|YZ^uBMQuhPXXmE|MQTG zIiyTHjKo@9c7#~WV|>3^SvAme)Fh31>K^DB8~C6MXq6Ti-(a1-&?NoD9m3nI(;rR8 zOp7(^a7A4s$=G(jlr@Wo0|LFSwE)IFY(7~AzE^xXkI7agsvj&PedHy|@Rm(V@>BFV zkNn{+6^bNVdtZ%VqV;Jc=h)Y+zP8M5%hWYvK=8ST7PK_OU3j<*{g}|jjfZ@Ko*w@@h*<0o`rnSkn`xTpPF#<>Vd}oMDrH);-(U03q z3zbZLgMm8=?uYlX3-e+e&3!jF6^mi!XX?gteAb`K>v}V6};&K@ID_X?Qe0UN0P6y?A+GwOnRlZZ4g& ze^s^&zyz#y-2TPwsW+XVopZRhqi2Foe2FKl@UCNAx_zJo;7|ze_Acd;Nz*tnZ&=~^ zUak5_u9{?0{5Qa0VoS`3N)zm~1O`FR!p=e@Sz3oTyzq&INUw)hqmyF=Rlo(W>IZfo zX;!nmq?MqP>65RQcdGp?a(xyh5wq7ZG6PiDE|Szm)Y%?{NP>htOAi+weUE(G;b|{) z(GXG*up+nR9^prOZ-3T%;yPKTQQen5JVsdH?mS~&e99JO+r|+ph>~U~C)Q~F$I)^Y zs~bpdT*;U9IMEpaYfj+tC)YUBcL(=Dy>d0FlO+*e@gJWYsmh9Z(Z_n$%4a08Fu_fx z=wBzambiO6M8vf)j5Uhh=PB}wFZV}u*26b~(N6L*0VS6eRcA>Veg%fb!2SR zYTWe1H%5>06ythqo2Z{R++1`%w-gJDUN9mY5k-VY{<@cAB59YyNiJ74ot034cZyZUf<{QIsd?^Iw0P6 z1U5MK(%k;-X0kYcTr`p%hvmeSXG}0eCMr#?GrlUPaj=K?CX(q(ahZ0iIOajh%`AIIIT8W{rV)FIcoKXl+2Op8+~lg zlrCNI?l#8sJ*NFwY%oQP#}D#i!>sz!YNdDRnt)L)#S5Y#+^%#GDAaCq?=>if;&3Mc zRF~@~`Xc=A){Tchmv?r~PxFpo5bQ(sovH{MXe}AbrL-yBE^aReoC0Cfl5WW^?lILj zKijwkkv3|_hQeAN)}=a>srn4_-ezKM^t5JeDX>j~3Wev`NN1a34hvrgf@ykMXhyyI z^QW)l-I%KDLRXE4JE)%{?DQ z{FEO3v6t4?{eWwg?KhT>#=;JD+_U7Bpi2vgOm>VBM<{SL@rBjK(8{*64~IR@pTF_% zF1T?mC?FFLk#dgOx-C1NDRzqvW~5pbE>h z&DtXE*3sfZDlxt7%&O)f*1GUTBMV52e{% z!Qmk^pZ52Pbg_}D{SPKLREIkD##R}1kubjOli!Ee+k`$rrDvuw{$7#+4~`f+^6 z9e&EEkJko{WoBRM@V2JXx}TJ>3$BtUh^@Z|`IAU^+6Fk{oZ1fzc@iPGGXAQ*{K$dK zOn6J}>TN#s{v?+QxVo|ZsTdg<^wPpB8TRgtV&k4VwU8$-bUXd}6zH%W3#H%8x95&Z znu%?L*YO#>-qUtEiwRwov}>B)7NhG3u^^xF5Tb;!)W6Sffi|m}XT^=g z>QcquwbewPYCm89$UeKcI6&Is2I0i2G)?s^wUku#dP}4)nEzfMUlV4upWOh#3u3*_ zjE^p&7c+x^F1brzO=T~I8WP)>R@e89>{!3+SIw?3E%GFE&+11~EwIYe^tYYx)Y5lR zN2jvf%)@Y(lNd&;=D>rjg-Ni?zoU~b6dB$+HXG*l1Z9PTYvR819SaEU&E#OukHm7M zaa-w47`n_eZDOte6PERauyZR|^X)k7`eIpyqS>Q-DIBp5mfq+0V$Jn6eB-fFUSDq?a0KxGCB5Vf?1g z_byAs<`mRlfHUeyO#pM?C&sPL@tD8ftM>Tp0oB+t)Tp?z zOV_l^bT6`=wJ)pFS?vA4SS?GfVu}#Fq~>^yx>c=Ni7O#hk4wg`9ZYn6c~DecvLosI zwC74G6YM73*G<m0QTF>5jnEfV~0iITH;E>io)@yVO;}qQRXMm^Jdq_61HPoc_Y^C0Dx<{T+Q?5fZItt(qjq^ zWruXpXZv54feKKlCl=PhV<2a|sw$h%37`G@&3vjgPZ5P3b9-2zMOlrCuLh!YFA*Q|UHPuYn9 zKQ864VVOsYRr#;)W%u-84Pb1utY(Y=bQ!@4KxwTfYA1wnPOaA-X{q|%iO+`r;-kfGCXDG zW?5FLHi7akI;nVKL`S!g=Q7g}2rs_W=hNQrCIRvhqg>ApX4mCY=-EM>^%ipoA8~8D z-{KSy8HeW%gDw^%{{kQSGzeA8i`|o%bekHl@2=)V?2C#h0NQ3(wQ`A!HE?@?tHtF< zxNxi1K&(341%GUU8MQngjHJcu4D5igvv+_|XP2AzAPxKUE>6S~F8IE-O_$W(GOqt8 z{%Ia`jb43j%E5`9tahHISVafKy3y;oxpV%0e?sj%Wf5|0m%CI$?T(VGVRRR#v=E+p z^wpeT96{Y3PkuI#WBxxRaDZl7_zXm%r* zu=1wNgDbIA-5}qyo9`ZrVLmPfo=+CkRHCh|x1`f;XDgojz=w^OmEA+x&_)6*A|rf7 z^4n|cE}sCu{Mh>l-8@y~4HvsOxsuAA_m-49mmcq{Rg->jZliTPn$H{mRRo#~}@UEVTKjCIUXK>K93%GSy(;3mGODiXPiW*Sd8ce99`=ooB7P z*9~^Lf;`3lP8Som7XN{qs?#%l`0Q zQ#1QdvoKFpzmH!H{EX|_wlQ|acZ7&V){~GMFH4QixyDv~l1#sk!*^8rMb>gGcF?Nx zHhDb|3miRMqF-O5$b{kjJ36{zr2URN%Yl+?L`yai-g$OoH1Rdpc9e^jWJKui@cH|@>OHMWXSEzd%t-S zog&3nETrri^61&_ML7|HA^!c=A5m5}@4nf_rL56)d1o2#hU}lB_P@R1YWl*y%0MQ2 zq)(CD8trQzqfmdQeOv@CB+Ewr(swx8p8TdYz90~UCr$CKWv_)US7#&USdf>XoU<%DC-BuzBKp@+-nA6Gnx#RXzL zMn$#4~+>7%gmrDL-9A}X1BpG+Kju%} z8ndRmo-hSEAjnCHfn*P)KdM?GI3Acy^z|umJCtxd>*oxl*CNxD{hn?4T)gT&nDR$D0}r8k&LiSX(GMS-&<=b6&Nn{>p4(IO{C+IE^FeHRgl6#2 z{%3g}-sy-Fw;T)A0(nR~i@KYiFH|!Zn-`bI{<3wyaZn|2&GmgvZ8}t_I;tV-5Ft)a z;idJkbZ^aWkc#E}qfmV0$UUjiIq5H_gtB)dU}FU%Ppo7ONYgLxzf!sv2l@U{H+7G0 z@P&!&Q5G~$<_qc2!N|r{`y}{SziAyubw|5x;ij)rF>>0(otn&2Q2dSMKYNlQW2hS3 zdY?r{O$6XK$_#Hpiuu2>Ap5TZy3@OCh4bn34mf?}8@Ew`&jw}@>}Jw+*h}x$QSvlhOU?9 z1NVPX)#O`X*SK;iTx|L6vS(H-7%EbZXJP)tK;fWb=*u3%jwMs81{F}c+pix;csNGK zszn}lNl^&e9iR$Zw7n2|vNuQjX%+92{0B2XrGPYGyqSZdv)fOjsOsZ}H77^Ha6=l4 z_IW+*KSX96a4^==)rURY&c?1f-NcC3RVHj@m8@3+cu#Y0O<~%{rpp25;K8fd(^exU zXSb6`Ey68lczj-uv{eKQj|S(;lnlM_I2&7{+3n~uDc9a{%vYn1S|g)R?j$S7CSseA z*1QzmtVN_GQ>Kj}Rw}7jW_fb|)THy?E7^KzwI=MH&YDMP^MYLQ3ec6#C_C3b?h!Zt z?7cL1JxIU0Z>-cV6%V-yc`t>pRsgmmmOt{$dyb0y>wj%qR@)zYCgVfM)in8zLCSWz zL+{DVn4{?92G{qw>f2-aacc}PPy{V`^_tV9U44&iqPR=V_@6Xa`Q_)IuSKd&Bm8dE z*A*Vid`((~OuPLh82P5^FT}I{dWd+s0rbsM>K=mVk|V{Gh_ug?PLSx=kCfM(y{+%9 zao=-Tlo(bCdx{jplz`8R&uMn49An-{F+AuT76gr@ss=D*BU zwO_ALBtkf2=I%uc)C+rR6Sz?}U4@*d^!%*085*6!Hoh}cmF44hzB>>D&UHj{5PMjw zhuU-F-_85Xn&;-1(tPveSb1d}OEaY<1^rtz8hwFS_nPePKPZ)xH!9?|@0M>*a&<&g zDjs#~)Fgg0!K&u8URc`k-h7Cr>)}vNYpTa*Y2{1`F&+%-oxda_DS{`dpP%l^37fi) z|DDhL5S9DmCn~Y9hKwre!OfFQnu0xLol=5yM)L=y{`Tq`Ag0))D!&Hr{QGZKpA_V{ z)yP!N`Vh^TbhTp;aMIf?peki=?Zl&(i+cw-c(HcU8LU`y5u!l|WFVj$4~4)&29P&fY?&?+-19&S9NASo-zLIRfD>rZ%7; zFSw;IiHef(S<8c8*@<-z=2JLxCzW&sKa(mGn4Vhr?S(|5tOZ&&(~SQ4?H9D=?;N2y znupX;X@UKO&CQAHVYzQb!vq9mQSN-o#gk-$6MsbPWh0)RttzEF9N0{Qd=0`*2W!{; z(5GGra#2wfU6?P7P40}_Q6H$}dqQiuwN)>wxw(BqRIx8*z&|{1;(Y7F^5OtjR)2$M} zRhgCO?n~w*laVbqo|9b*rtm7b9Ap4QWTb{58Wg`=QS~JKKAw~8W((Ls(fd6hhT2=) zY?nXY)^g&l%N98~-z$Ij)Z9Fyjcx6(Wgw&lIGdMFr^5Cuz9mQyGyo5u%F>y;$Jar} zaRQHo0PW^3Pf>pS%K@2I#krj=6rgQ*q`vv=tKEW6q{)rM>*8ceNAi}{e*6T*@J6X^ zu1RG51r^q8%=88Cb~rpKm3&~G#5#C_D3#~24a>>k+2m4S%U}nug2|W`KBdjC3H2Qo zdE|45k`>~gM#jJX`u3;O_8`rdx(E#)!J?8?ctie!S2zTU1a6ahtDl(fy6&B6rm&9N z5J68;B;r2gp8bH3onS^*m!((Vd$Sm4*}IRBH7{W!Swd^o-k`sVGfPo_*ieJrdBEUZ zp;}_MwshdY2BU5XDeBv-G7D*^JyP zuCgT$Das*#U!?C>`%JjfKA(P6VRC*mF~SulOL*n{jA4hP(3ba^68hUCce*;}7=1rh zPJ5Ey#X?Ko*@(ocK4CqAtWeztC^a`OQhYQ!NBvvFxo{bxn1>vW|tl0>7s-DSAw2Dq=_6)rE4{Nq=?N7u!+ zC1|}KKO^S%NUXn5OAQk`U6^8PjG;Qh<&DkzA;hRZI>Rw5XZ;eb;DhdkUPd)d2A*Qt zo{FR7I*b0NUYjkgNv34FT%W*j*bK9cGA9HcZU=y)?4mCr{J+B`fY@@AB^dg*WUVc5 z2kM{aND!Di->+`*`OWE}-sZ=Xcbges9#STacm5s<3l*v*&pFn&ES#FtptK-TEls^T z^A-uo_w4Rdl!RKkT)$zbW#$tseJi`$jE?{EHzCK~s=6!bRdhJ5f?GGg2*&f9IhN== zjK*_wKHG4hPBvyG*lmpMnuEk?xH)uR+hO3FhEymIfUDd*Ug~>|81=6pbqe*DX(V7~ zzgP_k|L>NcE--(uy*}TKGs@sywHQ=#6Tg}}*Wd~3MxpS8wc(A8lYz1k{$qUex^@uyC;PS&(%bda|C@d{+r@*s+V z^LNGBAWWE=;CZUM?xCW2m?z zG1gE5NH^mVud<7A0%OoDgz3X>$>6^lGpX8opWeCW*$jVqvV0V_U(OEpJFM#ttqWS7 zd~}dae&v>xk;&ezqL-f~t~8;H*9L(YY8M~~%5{FgK@oA4WovvRaKY8>H@%6(KlOPn z{EN>{t;^%zb6?J~JJl#pm0NP-(#y0pla0o~JO}1QNFIXT6FJTX<7U7dH4-nq)=PaJtXDKFL?6a4Uu1Z2PQ+XqA62HFy$y5i3pZ zq(@&qUP3rZGC_;m{q%PVWg@einaKv=$_oBAmU_dpZhsK1liEmhtmyG`jz?XZ1^B9` z@1u?S+LaJMu4VjCy9so3;F+17t2e* zS5Vad+Xi0;G+CjgF&@I$+CBftxK5{eqHB1GdEt=4cOALb)aTU~VNh^~b)nFUXQO;8 zcF*T}X{i!DR7LFlWoaGfWoTbKI+34d>IU9tE6~)kEDA?bme{|lag%UKPGo&M`#_pj zP?T7OT*Wll&ti(a1w&(T=APct60LMBPuO^Ao}wO|#%2;Q7siV8@*EdF-!XlaLZnAJ z9&3LO{6T#;&nSC)UO1zJ(T#gd0gx1>eH)Z1N0ZZ``%dn7JB>_rH(gXlkn(c)_>G~9 zMWj$9)ys}qCb$kQZSM=3u#CQY8rfZsXdMXgQg=k{Z~Q#7x0CDLe%;CPI@kl?-{Pts zgCn+JA1YBox1$!}p6m?vrG&Yph}&VhwSeU{;A`5_VI#peFRhF!CS8MJSBGr03#gY3 zXMx8rhxPy->aOKa4B8)Pq!n0s{BEiEJqoQd1pYnxQnG5H=+yC-gNyRflG?hU_A1cw zOebF}%$*()w8m3-fOkfg? zsmZr5F9=AB1j#R$LN|gXSLV~wL@feVMM^tZwhe#reXgWJA85iB?wkKa$bfO_UpgYM^#{7<_VmaS86(;l<+vP(~Ry$3_iWIW<`v(NIiSH`%w z>B9s0PvLcx)z|hJE%@3;UY?WI#-PPgdj!D(_4iq^FGM09zeEhH#X0+{e>H2}*a!wH z#ihj}mO#qE2bh)7^MJ?2o0G3->F;^A8$RBb%XPH0P9hVCOB#^@?5nu%Vq86SJj&AW z;}u(8;a>^Md5~ZZvM;tKew!v~+LQ|+Ji9)jS4N{;d};_viE7dALN&b3>YpPmK0UvByGF(G#py`V$dL8@LnPLyNT&UnfvI$!zkWYxf@FOy1!68 zZ>mkJ_PpM6Q6F7C&Jp~?G?*e0vq?sF;N}+$=;SYO*@-86)|K^0r%0^E?U!iffz^F( za>2IBYfUqSmTgrWQ%+3czsJ>z2ZbdMd-u&!iuDEbSn;^=?KH*!$7PE;^V*M*9)e_P zD-JltccA_%tcV?oJKi|xZ|fGVxLa>HN5?#bx=uI}_F*UAAkRa9x5)l&nzpK7@qvL&zXMb$VF@0ld|<$C ze@*;0>Y#=|M!_{XxKcDvWJb?gQ{X~NFo45yZ*xRiqQBVIgxM-GvSpMHh?s>&jZ~ot zvTlrDmuTeH``nTX&|QSSaz9`sirlB1g}n^(N8v5I?=-rx8qaO2foKxiFdUM!dPxaX6L2H(<=6g8(qHsHC+6{!gV0n4bxy`&kiUKUh#hUg-c-ma`8QVI z=2r$gQVNF>JD8!OA?rL5ik>&!-a5*;=dof);3_AhqR*8!qOtpJ|Bs=kgFNmi9T&^j z|9+cG3`%~zX$Xk;*nX90aQ5`GpKdFQ*cOkN!yKOirVMneRFs~lZ#mYqz5SfdbK-{s zx~;{qe#T2XOn@o>N1DPov91VBg&m4kD35$Z<^7=xXW5~P+VIQwI^Mn_bi}&YpJt9r zFN0WLeuyU5WiAuH-BB0p*)S-RzTa@|E~x1GGdn(!8f_iOc*wyoFam34${{-68fgdL zU{Y5^!s4^#?j3o7Q}QU;Y2!5p)EzVi^QsU+pXX@q&pvqUreAHd&x)gXV~PLqXXdRg zSW;CX`nBbvy0#^1)YyG!m`pZMijTFL2bu8+yqp8-$2M}%cAvW{cz&;e$FKY1>=VJdLpFJybB| zruV%tkYWoxH9vssOLpyuRz(xp5-jf}$wQ!KiPOEewi z=?@!{!KtHY6+F+n!DRcnikgqQ4j$=sRcQkr}%^17< z-@BFxmL||pX|#Od7=zEkow752177?;l)YtG6ztdTO@p)|r64Wcg7kn$NlJHzlyt)o z5)#raFd*Fmf;32%LwD!UHPpbw=KjCWv)}vK$NsX9`92?Ju2|Pv=kGkxq?(d>-Cbv@ z``UR4Bqh_^LDRm|NF{}PYCz4I;kDvh+8PKeR>TF&BAqHDVd6-zVxJAotg0i9m z5d4e7XF|$^9f9$hEpE`Zg?TD1x@IElNw73AjNy?rCCBUsQ5u*+_P=1uFS~F_S2%<7vJaX z!hciD1@m7mEF=&*1Lj`Zg%)v2unWC<)}8!%Jd60x{Nv1fq{H91qr?%cYJ2#`mhjR& z4&%AQ^dEhZ9|w6%?p~$KUd$^xD5nk(h+7E6%Hrr^DJie1q=sWdcp$d?_)y*jcnueC zhsYza=*BNxPzX>PVn{vc;AW9`0`<>sH2u$R+`GQ4wh%+H+!-~@`b2a-j+fPZp8xy8 zFU53mz?JfMYeT@*JA5Ac0k>->Ovuq-)9`%#psHFUe4r~NKaVMc(y)CC8o+a)_*#lD z{EO4{tiLJI#Fh^HTSIXJDKlZL4s3XxQoL>_EO})sK}JqnWdfTuZ)Uvexs=*)A{*5Q zRlNBF66kM2-JX!?->zZuhXyn|WNUp>7fT0G&HZa4%pO4bq`Xwib)4AJor>?f)q7G$kMlE>_M^A_lK`O9&(Twm!!cMrmzVk|)3d7_rh{*u` z?kkV`xqbsx+%5#Gisf^BqZ(>P>t1~$we%rzTV2N`c$uyp#lW!lylZR(`Y!*RC!fqn zSwFNi*dxx%^MF9>gG=9^cLeH2hkBS)neA^rX=}H-ngBD!ytfjYR!%C5|~)0pxFbu{uG~W302cx zJ!fF1u(mpn(LOxbTiL`YzS7Xhkg|`I5uuLjpAI9WD6WWtn_I#AM!N_LRJ|>?Nwl}~ zb=QJ`?qIo3kUeLNeNNwg7QaE>$GU^}ZcK)QPQoaqj6^yrKhgEdrA4I0cBq+E-Zc+V zH8bJ?($y<7gQ&AL5Bd!9)7_4F)gWzXQT_CP4LRIyYq|WNv<8noB#WmH%Rt)k^(1zq zRb~^LDg4P3`La3N?;(n=xas$SoKbfvO(FQQ2ELp`Depe3bZwB&<8MZq-BuEo1L~-X z;^i+yY8DkxJL=qp_ifvPdF_Q4Qq%nx!}ekHQ;x0VLj7(0&?0^$2G4d4?@HVmRpqOT zW9uKs)-i1lxQ<;&gI*K!j*n<-K2SPTZ>~T8%5>%Ln(JTwSE_Wd$F6QgS3s_L>krnunhc}0d19Ob@jA~F82TYGb}3k`UI@wULOJ&ksQ zwRvIp zG(~FT<$CKgU!i>Qud$DB_I9qHvwCD+2K5%-hRJ(Bhc$gx%?vi1+mE!oNPZlZagz0G zxs#_*Qt;s(iD)RQcUk}35l%9@IA}aJ#!kr+Bd!rb%TTB`hY2)22GA+0djUiyQL+ALklQl!nhmRj9DFvAIxdYT!5=&*95lE!cP$pAdiiLf3 zuBjE^pLCY6(z<~*Xo$YOQs*-4$3^9c&PIvRIOdBFOhmsL(@+g=`tz}mN7T>H)cf9{ zTft5^=1O4rwbR~6BDSKA$gbv&5nk@0+oqWdGIw+YGPRWsMFuS}i1OPPBc0T(39(3ys450n8s z?)rlzm51=x@AdG*r$KuQ&2x%lhJtj9GgK0qnYR8z^c@ZyId?WZps>%U5fKfao@{0Y z0N2ql&P@)~T5fe2g490MYT{=@dlfVE8Fe&&8v7`o7p$Kg!509M-yuxyd#AZ&f96w9 zMIU}r9vS{(MH7DpBBw>(@W-PWk#{G=^LsvR5Y=}?y`y-TAStUlts~P=Vb@@%V992Q z&+7fws9BkrFs^>D>49I>{%+PTJw}awF81?6o6v+k3a|g|HBFMBdM;W`_txu-4_XRY zBlR;`{UeYl*4-BX$h^d8e53Zv!g{qap6<^ZuW{McC=RK3b&|WU`oEZP5TX>QrKvuC z%O=Lmv50eOb}{~E-TV5ATt*%z2b{cnqU(U!jLU)=#i2iJG;B>sI5~$`P9VlOUSdfkI34p+4 zgrk#0(VO?odwe}nQ;rAQQsWt%PPd!9udA$%EKfA+zV=Ap)hJ3`8xp2xZY^nYv^Bi_ za?&r182-b?KyR_^0jxT@M?Z%#B(Bx^A_!zgl*g$(UeZ2aVyWeJ3${0$V*yM>cYY{o z2S;-u^!W{0WT<}Jg`5!WvLCNT7bv$OrZ7l2$ZQnpN z7$pQXuFgpW0b|_r{cZHzRgMSKwW=zOiw7_2Oz&1Q^FaqU$a@%N# zeAHNQqs`akT>l%D`aTz0i#+3X0YC?X5jT#2hbf;YaOQ-9wg`5;&EhGC5%>IbO7w{8 zVqNG+NCtTwYzsrGU4&iIxpSF5K7)eBRzGjjV0#pl95LS*&ht9_eSNOpAFA;Tx#pO% z<@7XJ6Ral$>J*$9W4r3P0p`J@{8KF6ZM9e`G7??X+3P#bXZQxigqZ#Bp7LVc*T!{S#y_MiAo(EOsvsf zV+zR1df8R3*KTN)94|~Xgp@O>J6dvcXv z8b)!Q&mJltf2@9K0vTNMwkQFvzKD`qs4BhZR0Sst5imsdOuKX-dpGxI9uls7d%SK< zWg^(ac6g3@p;|VW-Iv4VlSpL{GGmyJXXbY{nbqNkCe&34rvR5Y5sZ$ATY2d#psg!1OMOI&Nu@CSVq-d>S$CJ&fDF6tldKSExTONNr^UOd91`Z-t92| zQzF2|#j@4s7|N776Bt_IH;@ASy<1ph56BE^gTpo>Vh z3b)T<5$qSW#*Oq}#L1JJu0gwk{#YTvqlL20!ALM*4KJ1>$jaIC(|Av=bdc|-^CzE} z7h_eOlJ-q~C!Pf`QphZpRRtBYwTD~yAe+1~Fl^EmGw*ntk_zHFS#{-A3QLC#l`fsJBa&*YQ42-JR*Ptc$l6MRVuDX$em--eK>GDM0>iS$NPaxt}jagvZj8~m$rqud4v?8 z{XUqQ5qWcI*JH>HA|Dn;$8r3jRXd-6cH<+YVb0$2Nk}qr@k>!9;x(n~ank#-9*tG8 zQBNKC6xmrOqpQuY&~B&q<{EnbNhHA*b;No6!!0;YzqCk9LBSLKU+T=K&9@k0x*OsA zy(@^=gun9Bw7&hkdF~mx{*fC$+bGjV8Qh|y3AL;TGu}yTJp&^LbQ0g`D~S8VHCd94 z9fgfhi26NsCb=E2-%e6@Cy^g}zkx7f;{K1>;IC0q`b#1|mQ1YO16xJ(S8T=#;jM2D3$2p9C}zs%1cPpeFBHbhGDxBs z#TUJ5a6aO;9UhNcPc0`c(aXg<*YKU6ES^e# z+Li5LtFK@UTCa!|vQIsCd(w?OgnAs%H7^2$!=9c3(-n^hO>ad5UeI|2khgFwEfqCA zmoX%dAM{wz$GA7WPMK+RZTiOh++$AEWBLe=*JoQs86zip?UPwQ_&TWW-Ra%Ali$P} zgw9|{^q(v%^D3&=`fumnQEL#~#t)y>pWKSEnAjMuJ^C(@E5){}9qil@?#vE?Kpz4* zdBmpXVZ{#Sx}K%20s8Z=u=A*vq(1MgR0MxY)nsE`DkEjJzD{b&X<;W&ft%y`Z8~8l z`F>jl*RJUCQrLLrDV2Kc5ta2Ra(uaj{>bA95f1e6x;sC z?>6F-F?gh@T~_Cs&|ztVL1XJd*J2u7EwU5%e9%~|Yl+kUrE8*x44~8QDu7>uTr#zxLvRis)I9e_3z^FK0$&<@Q#n?>D)zaBS$U(x(BcsnCYjvvf;Sm~H=Lpsoc<{r=u; zh&J~DBj}|Zd9Ev*Hh+BgsIpZ5QkLT`EmSMjl9yQs5p%b6ZmmxEbr(LV@Xa>JJx3_k z^Sb4p+l5>bOcG?%Eh`Z}Ag~GnPxw?Q&S`IVsumyNnRiCHz&5-2@KCZEbw#_N%(<(Cb^j3XZ zYbfY+SO$JxaOQ;tf;rgnJ%}H!!a~2ezYwuZF7{g_IprO!w{JPH6cnK0w9U*?{+SvB z3Q~|R97A3}>|E{X-a2q~vzkJmZ0YLDh-fOI1V-_47BKVOM=(A{xu8Kr&DY%1m1m2a zxU%X*O3YXp3G`!bEBIEyI{$45aF##c>`G4;weP69Xqa`M1kGw8dKwAP(Q&BCF4lTA zTWjHkl)ZTG3A7k@a=q`>0gn_#^E7(_e-WJGl3Cm+dFv)iuI{}bf|V0)@>XO{?#2_K zs!f{%;V>`5l`7UvBfvCCy8ZjPP9Kc1`4%2Yp#T@!w|4G-FN;6=$s_<8YB$}Q4+fj# zK3a_q5`wGHw}?>vZQG{TqXDrL*TSWMM?O5?v*?x|XDmiMw}i&nb6KU3lZaPHS#72` z_FDta$~>%`nCq<-RpFLeumTPi;`bV#n2oZChm$>JE;qrE{Cja*cWpJ!&XXUMW?+)* z0Ce!~A}qAwE<@e)D1O7v(<448x6%)2#nN$|#kqko5szaMAcUqf*<=5p4L7-;zf?`R z^k>TF3C5V3uN)InIQB?KS85Bw%a_9=kd@;0kY(*W%Dq2gTRVoIfdUFPG$l0fl_haI5Nk`0Pnu4PP}Ms z_w=3#x5@R>jF{5j2!6jR%@3hUVrah-3JBQL9Wf ztC_(Ar$1}M1&ZA^b|e3QDA8fsykF@kXD^8d&<X8eoQY%GoW! zM0gE{+u(A)a-M%A*%zjn1LyPbVp!6^MrGiw9refR-1jT8syF9Uc zmxIX!Eg7uWYV=$u+ihgqU)_jzXfI?77c;_yOTj+{NoDSEq+PkK=Ekrrjnxc1Lf3lYV0qqp3KzIERIxZXf&(f!Jmcr zP0SztVi5U`CoJ#vLTv}HKyok_S8myKfbA?)SPlRcX@P(SizBbJDDa9xusC?#`&L$6Z|q z_x!~b%4PwZaZ1jom4vz9!^3yOY$JI~k7-rc01wMFHM#U62IzzeXMo{kZ8nFw@b?*F z$ZZ5~&JX@6$eSmyFiFM7>>E+6QJM3pNFkkM+ka%9Pj?U`BW^nlgmhYBUmfSrd0J3`(T)0Ze`b2ONkhHOs64EQEDt!} zI3fwKu@`~awL|&bY<~1q!r-md8xb_zlBMKvIc||^sO;E1^bWp|RF>9Rd_Jz2OXf$w zHyKSL7|H*<`gdX@|3tZ2rs&RKOL$d*B`Op0A|28>H4b4#j%~i8^!G3U?|K6_lwEzv z+MjTMha5+7efx2%uKQUlyjk;y#5*fh*+6v9#ERd2mxs?$LDrV_6)#xn?HOx{^5gjy zsY+3N9n6XyQFgbya~n?Eg6mR{3r`bKAA)M=QL#}iO-1koYpL41gTc^aO_9&#zF zs66BJGx@11jlO_&_?_9okGkQKl}l{I)8Jty`taR=4fonPUpD%qU3`%W#l}-|rjJ!Y zw01vyKJCZ6o2IBF8m=WLtuit&Ou?w}ugQ9D^u{>|E$04XkwCfGm<#a@pQ!q>PHj9J zQl!fV!n%sCp(J1+YTv{`?eCHm>%c+P_S3Q-5mrp%77Ys1Htc`y2CqZw+BUL%0DwE} zUm7XJl=+UeDrSAL+->ZQ?i|a0*LCnBz=nQMjPBTKK&Mu}%;$(-khD1a&)${p8f{3lD(QX=ggMG${y|6` zf8cCoD!8OtV!z{OuF7JHL(h6kY2be`-DxZ`PjWQ^6;gP0LbhzTjR=_oHR2!fBqZaqHu{>bZf+TGGpdbRWDs zGQX%&RrQ-87MnRK9`+7#T(_0b{n^8W$94gaIBZCvt{KI;M?9m}TUr_nt({tNqtjUDv=yE}N$ z?c?KbabhL4wVU6Ni|doz%Xv zJufCsx-d4~0kiaZ*<#*@DbxfqbGkEsDNo?hFgyPxzB+K;AI)nq(`DfixLiarj3uom zHlOu+znxWB^K;-Nm*tXrEhFFlKn+ltfmu|AM~V2k`lirJBbHi2lcgyaw0Wlp(;=-#H$RxNmQb3b-c53D5Q<<}IH$(NY9xN9-ZWSODEUKoG(KeRO zaSjA}Yk+T7RjA;%&@W|1{E8abgdN9M-|TY%Y4j4qCk<`9Tu*6g)-P|4aR^W3emB#; zu?5r2xc_>EF>Tfh6n8h^R#g!keiPiJ!5`e|+5t{LSe7~y-R{&Q_?GPwPN50}3QZq` zy#>n0^`L@>ywt;5Lsn_JntwLdj+4D*F@G^zCafHdTw4Y7iZO|Diz6|4+&n>wpA>W{x zh5%FdTo;u&K@*v#<))n}Rhme@55uqOb1&mx^%;PziuH`{3Od?_PSU z@%s-~?!b>;l;mzWKwn^w{apX&uqsJA)J(R^-Q>#JP*z8?J*ZGQrv6{tH`FfX>RA1n zQwCjYpTJ#Ds`QCZ`oQ!Nq^l6&JB(} zJO+_%H1*TrN(V^VkM4oYJj3nIBfj&y>k5zw?9PTH$;^w~#Tt=Wdc*etS#6r}j^jJ# z$D%x~e!>fl;ki6y+t3E1)f21_A;Z6f(7=w)2a~WmfYo>%*u`EBt?I^!F)GKk_`U#e z6R~`TATy&1Vag+JZ~aGA+ujNoj3I9S4+h>JI~_Y6+D4qSj^R3=T=;J;?T+W5TMs!% z^118W?$H+M9FZ~N3tYLiySV2A96l-0@rh~L=V1WtLMPYHjittqBCm&mgYN-U_nLMK z%&)0;z5!ay6PxlMIq;$vD(hBk|A62bGXED4{K#9L$_iU4=STv603moC#)tpizwkSy z2@zvEPuUNnBbjt&!QP^KECWj88o%76H1F#!tI5g2hgE#?)L9$i!tH6Qzg~Iqwe?RR zf3tW_*^jCx5wg3`vG;20ZyLluPgKrwT&R57A*}H**$F_&l|LRj}`LV z`)+#tL2qQligW#x1VOMCH}Cb5ErfNjT=g3+03_(LD_tq;3gP zJRe}}q}}nqhi(NmpJ>Oerr(JI`VFwP^}pmVZ)fmoaT>ju_qxiC4VZ_ud&-e6IL6P( z=t}jz?(SZx{f*y4n)y(PH|sbArJ)`oOjZDUu+0BMe~;R_eQu++MYR&SPG-#nU>a{U zT#s+AMpb_MMU(MU^eaBVY0sNb{9e?<0^E^@{gt(L-Ip_L>j6<3Mjl!{V_}|sZFB&s zm`6Hx6#QIBemQXbozw`$Q8>%EGa#|o+{tP@PbR)wVOnv@ts6c3SDRaQUf4e^#gidZ z(uMX9RiiguN0At!75s~xT6Ns4t7B8?^QqaTS(+hWi%PB-ky|wD@Sd4RG>T4n!s2_qqYxE;u=rOaE3cwXCePSQ*3P?1?@3W~I)Quw_4Mq1Z@d zY4|$Nsi{A8q$1du%U+t_0EWG4$5LWH64f3p zM=lBf;lzRRO5tOFtaXvY9jOVPe?0OYG3nq-yZ66e%v0b=*OQP>8~@^sERJ2%@iwd6 z&#`HJjp#!2|BPp(#l2aba-@5T;T%Sh;`PwE?Xshc@(wN9&gwRRsmsYOD z`3+IMG&y~xVIidSq~z#3wXR1_JtX&hf9d*J<8(;p_z2o>o`ZC5w`EhLitxq36t*#3 z{PVN$l;(Zfu&v|H-9&TZxghI=DyyLrh$#8|(^va;hFZGQNk*Q_RmQbN#<)VxkBB%J z?_lBBhIEFVl5HXVr`yd}oXSvVPS4Z9?&1ALE6tAxt%nA5sbCL4+?D97Hxx3%bN(XB zY6s7x?#He^Rv*i|O%yw}-qp&dqDxgo45tT+1OYjIhjH>8#11L+48)J`;$yXZ6-`2O zJfrK2%=xBXm!-99C7RZ+^qG@o472wdKYOSrS!)r46fBwTb0@H zC0m@yy2~|O(xS7&LYft_TOfa?8F8ACj`2%hRZvTWEI;13;^uso_x|%(j1!?BS~Ht^ zn{C7c+SOI{@Mw$Tmkc_akBKYDN`-K&ZD@*zZr|>F{(;6N{zV1O@#0_8NFyQb1y@_$ zGJ`cWb3so(K>F6@IZ`a-K59>=`Q|J#{p=Op6YXABy`EpE*+$jQto|LZQ)6|kDeiqAJfdBW}QK2fJ-nfl1&ZQ_8;TI z%vF&~6Wlw@urB033Ofbb4FK2qZ?qh@|Klw@5t?x~xCBDouD2mNy5K)*%iZ}C6W~=$ zltb{4AleqPmc!rI^hT7=kiWWAj>24FJcM3X*CBdRCmFUT)`Tj0Hi>YH(;S&?WhJ&^ zI!ZE61|6#pA6v;gIoKpWUbI=Z2JgQ61o7>NKNc5LFv1Y@UjL6{DW9 zwP8n{;BI*xK~S5cCB1jaTF|@+31a^Jq$H33nT!BG6=!F<|GAUo6fag$nzg``$`}Ri zk+z~yWTBapgBsWS*04K??0%vyFtwi-e1BKpnB3~WpmDxmiERNE@~G^@YHGyGdo{vV zzX5W(gc|S2_Mwqz;u$N~j!0_#FW35xb)?*BfG_teJMeDl<&sjpH3Ho@^DzT8eW&Xv zmHY?;zg;+ob(&2MlY#o}CXt`T`@ae_!q!G~_?`uz0NaA?_W;QQG&Fvi0MO{4*DsaE z3cf*G%!36k#lA~^cW1F}PD$k=EOtZVXnely&G($J&W56PrF?OaBKU2!&WDBOAo(d| z--qxIax@MyFw+L3X1)m)_r0QIXv&)AS%cF-i%MI&tO4|9NhKG{r8n~Kc1~InQ49jo z_KvJckrNfZ&>|M(tq3W%(nhN_=wA|i&r5S{O8RQCD0f~lq>=9%DV~A#E_PpcVk6>U zzs@~+?@x}{rpsp=U%D=1)<}*PStY~^`SLVnSY5K?2<#*7&h)+Eb*Dp=YUMF`Q}!uN zkNz;r$3J$q(U>^Wm48X^bnJxv?>Pptqm#rC>t&AoL3qRiHM_OtTgwF=1q45zOd=2o$+bs(4yx9RsEKi~)Rx^HTX{LSR5qXKG^v9O(-}8Egctf0>^&>xFFKib z!Hv-5->gdHD;i`GV-e#DK70`==UWOSA0R!7i~VYRS9qu-*~6KD!Ok*5Y{p-B-EJvw z2F}KbJYpt#HyBlehp&{Vsc1%Sn5nP$OWt)(n}5_;lYC-DE#ems4?lIUl|Z@ruF)_x zp2l|GqkB{Q>FjnWckhX)%7Qn-LOV&{kcifM6nk$qsd)ozk&BR3do)e z7c*q(I{BW28t$vdra5+qf{AGBX*VuipzFhVFG)a9_;je_|0c}4oV`y*4M6|$ErstL zcE_S_3zy9vw9MKNOXFK0=ZoR245rSqtEfQRhhz7xEUApA^B=C!X+aYnPf6RP#^x2yaDGmEoN}uX?@M5|SwS&w zH;z?{$~!sf;Dc^f1K$!xibclQB6vzvN{Jlp!WQ+}BW&J!SeeSPEi_XG*898X%r4Gv8@rXFBvJrx1?(c5hOCGE0f5KxhEIp&V=!px zwo!fjg(wZHcYwyrvuDp@cu1loZDHZj35_LgyUNDeoSYl6($`<}1@N2Ujp&m^^?$pX z_qUK$65(IE>Tymj+Ba*h6=?e3@~6~T{J-){`fw~s;auD(AEwommsd7YaG z263#B*X}>!=8@6Ux$XT?F1HQ$WZ5oYn2h=i1s2B^H9#OG&=<(-pHWc?tMHrQi^JKL zUKiu-r;~L1F#5{7w;|}mE8F5TSMn|I0_h^ z81sMCXCZakzkBV1$?mwGR!)GHaGNl92s)oLGD2))6t?plS+aXLJxCHI+O6?BSBE55 z(Nxg2Fq^XHzNJtGP={YKNm@x()j#VH@8Wx(flS&kKs`t^Ymv*5^d*h?wgIjWw3?V8 znLM64>4|S8qpkBbm>j`0s>bdIxq$nqM$6|554|Fq+PMV3&r>q>=Qn8oBqPJlKU!;l zrT=7D11SX?z={O__~GoDSWG;ZtX49Y1GP7T^Eh&rAqe*UeZbGhWvtfUc5k8JLXK zWWDm|inW1FA$R8%=Ek22Sk#zsH*nYgF?@V?{AExuD9e#CduUR*Iu9^*7TbIkEDo5x zdblI!3~IhI`!5E)xIVz=)_|Ji5xmd9{c>qppkt)HyM0G+a}Fo;Y3Nq=a%I7(gsJf8 z8Q@tVvdiW{#+PED9+#Y`nGW&^{$agt1M_8j0$ZCyE?annzh@1(rId>K-&EE;MplAG z+}PPpe_oEf(i1Wnnt86@ekD9^4P!?dX91raY!{b7C$%1Ow1d;o?QiaIY!8dE1n^$A z(8tOPjVGfs>MbiG?6!Z6{l>+tOI2#TfHiq35&{sr?d^3`W@uKVdej+6v zZLTan%YaJr)jCltYZDqT-2cS8?SKj>9!oZaQO73w8Kopn$(1&rzx{==R}EB%K(w|O2z%g)pt-A z){B4O^XCTt4WDB~J`ug^xXdPGa;wt6z^!k$kEE3;H(K~$*1CSjibRFP~|KsF3_bU7-RXC)rqhCDxJvIIQwgkk2o=aIJ zD3-<##g&6DO-jIc?5@jMPbO*f7MCvCF`m7~!hGSj-X+$sBlGJ4YE?Vo&`72|#i;KN zb^&MXhx)ndiofP((m2u~cokjAjMEf26*KnP_OkvV|4c)R(gC~_>+W)nB@KoZh`HMy z8Be7K#g{4VjOndjW!F=C>Q0hfN3&v^J-~(^3jOqqYaD+{MMA#jv_Km~$DL&FQ?hQ- z|A>cvx5%K>`ujuCg5wqN3UOX1>|Ng8y z(cYz@u6vi)@1`F!CeDxAuX=`9?YJ({AF`ov>D3G-bX6wL2NoTh23b6| zgnrred1U@wo0ISdKZ5GJBIDkTq5l0vA&NeiW5s+qt(utanL=g^yXICc@YO}eJwesnw2%Nl{vKg@=SmHy0Q$x7nR#?$==XVh#saTV0i zkz%fX?lAeuJwx+>pTX7&zX$72g3^q3g?6uu#3YBZb4iqi$W9bGDeU|oS) z$U!sbl)T9su-ze;1(XKYA6DCV$kCqr*xi4U6FVHq6)_)SpHX_s$vZvU`ck?&O0#`L zZ^b6pLx7r)f0-*H^Jod8Ns(&SaSWAx9smAfsaY?VZsS+2g!7{dTOOFF!JK@rt{qMU z72{fJxD4iK!-_hV;2OL21JPL%cAj*&-f{96w%y-tVEuZ!FOvAhKmK_PEcC5;SrSzo zyUS5L!@}y9wHWXIZ(f#WxoPg~xWYrCw@(-4p4XL!)eX{Itwm8uSJ431E~KtO8fxWViGv6LgxoB|=OlD*dW&rV{} z(hPa-S@rC6QV6lqVZZuz7DpNEt@&|};rIGJdY&+dxo3w-h~)QBc0sgPQY56xc`c;x z;_lE0XC zHp{p%UQ5+9dgVzl@3h-e^Ik}eYzgnoS-s4R2Q#|4aByafG9*J1(=*Se<#(4}SkklY ztU$Xjj0P*Y)VLjp8o+(WZ@~GZWn0i8%I?er*!Z{UsAe9rMKBayXD?=t{_a-lJIn;{r(twj8vR=PZNKIkrI&}FfuUoV+|`#JfWPFrhjiKPFXm_&k*k%zdhPA zbHW#FHO4<5xYlv2rvpj-QgLXo{u?ATpJNp#I&bWFcAxkAFc9MS^UTeso3lEVgSM!H5x4S zygcU4gQtP+n$ZLaM5X7F(iso!Rp&g_c$6j+AQy6bT_H>))X<)_#qaJ?+E|TJr{&Gm zHEE>;=eQm`TY+~wBusFNtYTie9C8V|_nGUo)%fd*$U4i4H8Ov+B=2}W5y4)|Z#lF|cg~i8 z|IPqzK5_&P5A;G^1P5#7?Jh5oi6 zu%4UmPDZTbPMW%)Y{sxOc-}A$i-}WCsp!=cZ4F6ToztLT@ah!uB_?V7c*TRBm||P{ zbmb+RfSo31WD5_E9rJ2Tes7{_ZK(^b7jQcV>Oerp@T)#}amK#g@%1ZYom=bu9;G}V zTv_^t6JsPxqVMGwvz#fa<%5$1-H$)Gt9Njfft_q@jX$Z{9GwXR^L*-e%c!MHnVM$AJ%x4d!S(vsG#rik~q*a7eL+|Y#!~9Kzj*n(&uqgnpj4exW|#Bt++Ix`G+w3<#@yMUeXGW6T!63yd`mIpf{Ymn={4%KlrpWjEJnw<>y z`Khc#`#9L6BV;Fw4Ozt|Tt6|P>2ABx=|z4unywTfiC58gEVGzv(kexhY{x%FT_yy0 zI6Cq>)sEuveup}=%vplR;K0Y1mfQ%EvO|tKZ zjBj6p4GTCqXYplr0 zRN}?$sO!&IFRIY{-sPp)sOTEfwTOXGlm>1DxcxgA{J;v_zF2d?by|IZ?Vffc9!Z^+ zan#?{b<`2+t&s=r+I~0UQ7to>xg7LA4xZk#?x=*pN0*K>3E&BD$J-V^B5-W$vA^RQ zo&3(MUzaZlOo%Bw#@RXFZSs>rjH_?(aDqLrT;LXMT&z1tB#am zZHl{t8JTRSc3^G~di4c&v%8Ut^v6rcQmD1wO0P3jY37!V{jFi@{PSmQO)$5+2fFH` z@i)P@DcrE3?Tff?J{+a`v=gXHLVxxb89>P&U1K=XSC^{ zt%H_6vM4)Wrpdxa4<5A4#T^Fr3y4xXuu?J42X5t|Q2OB5|FQh_p*a8U*WNdn?V-Z~9e}UD)v_SSzIAN<6>urh z*mxH~N&X97m=qukAy^;`$u8*wCyF~3pY1B$%&I9lnH_5@VM{qe-BCO(pn&!;&=qn* zQ2z9C$8XN|FKK5bxjgt8+q!Xl!}BPla4>z)+?xn|6@bWvaW=~oRp_V=R1Kh4;8t<| zBzD5xe*8v6&H?%XU-&xEK-ynk-}}jq8Y>0)E%{C(hD7Z{4e;oRM8c=-pFtg^wKgv< z8BB}~c0_Kor+Bl8l56obP{Qa6IQsJ0?RIdb1!(21-qoqw#dxm&f$XIm5A1OAn^r|^ z?cs?Sw!wGj+he*V=umnd!ll|n;j535aI9UeH0&p%u#hVbI6ilDFv14 zOd{=64<~a{x8rU^!Qmyr*iTduXO~uF(|Dh1>j+S|$cgz^s426%=s~)>UNhCJyso~- ziUB8t_hPfl@#q%y0F#c$a5~T_Nr@%F0RIFf;P@8Yas+PETpV>i z_Q85S%1s6ae@#)8@}w{E#UTA(T)kyjRN>q1O^Skqgs8-zh?Im9(qI4r3ewHcjWh@h zGbkcT3P{IDNi&2r%z%{SfOI!Q4>`jy!OQ>I``Pca_lNa)tz)g@zSn(S*LnU<*T2R- z9et_9EB(+*W-|rq*?rf)yG&%WxlYsgAqU-pEF;eu zRMo~i0rQn1b1xZdb}iE8=`Jdr6aCagqT@cD`~q5{;AEq(7jOGvHb;B=(ab)O)&trH z^K2$>vR}ZuYA&xe2X*ae3BGMQP;a$$htv5gj;PkZh%~D*lKIy#NKpvTR>BEO<8yPY zik2D+Oc~ccd=asE-W=vY!?@Jg=}V9KG`ChhrhN9BXC`jM_}}e2@*qxM0{@Q3nVF9v zlT<{islU<w1~^sav6R&5*7f zSD1tAh$1>x7})KHocR8ZLlKwQUAx6*7x3%f-+R!kv+IDFYpZe~dHQHFGGf3}#eF7i z@v9HV^_P^SC9m(U;X)5NgFRW4s`k^WTFm#2GUgT-X6&JO{uuNAIXTR3O5-6YSNm|s zbAA}T=cN3vDN4g9%4L5WsEWcv95SJh!n%#YT@c$lF#9Y0<`=KBC)WieVYXuk3M;fu z)uBjYz(e|j!xNOw#`Y=xrhzK1@L|sGC)k?}-jq6DfBFZiL;kn_CC-$I>#1}n-d)RL{y+QZ&ggQs}t1OYn8O4J$dB|;@PknARyv|H{6vK{*@q9JPhUB%y- zp&uB8Qb9ARSeJC8X;l^AZqiclHglO}hp$N2_a~dIJ+lbba&_(c!2y+{S>->KktU%} z&Z_RxU`tK{5kFKzZ#*@jn*3rHAcHr~Ue$kDlY+eg{VM*4y%9{;6W)Hv@<9QNH&*&U zcm~;<0zl9Z#Y?-d&I>20FiPwa+2Mx#N&Lc-%Lmvi6WyiBJbj~lm3%uu08ToCO(~Zj z>y&Y|?fel%42<5Yi-Ud8A%KHz ze(tD}OZU{t`iE{EYTTVqj0~qWK%H`ln5GLk&HF?rVI^@H$Z*YV0SHe5<0I{eetr|B zpU(%_8gEa}+)-$cv4fr-K(%DOM>_0#daWyTy`BUs61)4_0e$DQu(o|7W%*J+wOTzs z55y3{-|ys&+Itn@?MM)6xyKkwJJ%+VnP zL$r~oa=Es9EE>3A-6libwaUO>WiXR|}#zdQ38OTfP!R=Ihj#zp)+BoJ7coV2W%0%`Y{=nR(_ek`a>o%xED{&ShUB zQbK*>jgTEkSjnkO0nXodV`5|;5N+ubM3cRN`#h_d=0=zY)Knp(Qk&4~dxMqE+i~_- z9lgrncYlpW7lo~QbM@}w6K2ee>!0M^2?*Wv3QKN7tA`zl6~8Fg5A*5Qm9J3EOu7D~ zwvD1>eKG8qiGzHO|56rceJ;4FvIE z9cn{TsmJczFtKj<+mxB8!e(uqTSSww&0S%I^$V`JlTM5!W&RUc@jIgrP|2PZpT6=Q zS~FnI9g?$H{d0CnOm9jRGb=fFfc%AEf3fM!0bm;H10169=`%(w?sj%z_e}v{#hfa6 z?a*kT9<+=vMpiL&6j+keXbRnv#nDw>l*I|^G`o(KDLI%#CMqd9DUq@(0)dr;K`*d> zt$etiVG?J0QkYcur`=qIr=2#pf_pj2_HxCP&Six}nA)2h2{Fg~>ra=OmDPO<*`Lu4 z&$#w&Jl2*}HS}6-QpOCCwpEG88i^}hOPASe!9|Zc45|`S&|S!cM#N|B(`gv)p%Q($ zoYvz&8@`;iB_;P_s?H-~(;|?kI5^@p%#?~dYCgDV>W#z zuQ}pJfi`c>x2reVrbyHeigqKv8*l~7Rxdn4y_Z44B}BP=#0UQYf`ztnl-Y}i%sX5+ z*Nz0beJqj4yIH%_c<}oWsVWY(eTgDSZ_=KWFa*ZYIGfM)8L43Y=}+(tLi-eVJoKW0 zRNbq5qz?Jqt_UyqU+0SL4usnr_VVKLKj#Y1D{rm+AV6}FVuAGk?g#obU^EPJdaexF z%#8P(L=dK0Jlh0!I~k6*_ovalxRZWx!aZX0xVWX&n@PRyB zyv`RJJcPn4-#gz!+2>o1=2^|~mo$oy1*)MTlMYO8mD5JY@4(m2$1V$<4^)4$)x$ha zo^kA#R;>-n=2zOTp0iOxt#N-0H!706r1{^RP~WK3zuRqEzw%;VOXQLxN=c@s?2J2ccnwc0xwdQH!SaVn2bTU$+J|8 z76fx9g`DTfEid9jck=zBv)MRFiCd@HOCa39GhS(G$95NULVYrzMOOUNTmb0P@s@Wm zOFYW{WKXVM37UQ-|+@N1)@K!%3b|3i9-Ih2I7I8s8@fhY*X(;wwo`r^+8^$ z@8OQg03e-U&Pi%;ZFW&-e^dPP*9ALt2;1_`oP9EZqUZx>$`8AHa7XZCCXuPSi%*&OY%_LcOTOzgu-%YQ})jna!W34mH{Zv~S zY#(U(C*HEGzV325#dt8ZbDi{4k`=d(B+>cq9A$TQEEsW*nYZ~SNwBNfD~|g>8NGh5 zKL|Oo9Lwd9VDrS5Y?N#ofC$xKyX zzC&WkU#cdF+Q#W(azDUU$HRz;Yn?G3xXEGVYpv?j@c%SlO)>H}W^} zpDUVR$Ya?!`0=ybt-hM=u3c9bkL$70(as-=)@Yl++M$_qc(Pqap6P!k_->c?xHKs(!C| z9g!SrTFfYZDU=X@dGL(;vKMk8|8-$aYxW~vne04~n_xb-Ni#__ZbD3C&s}FjWqTR@beUy1d@iMZa9+lbG?W&LVv(2 z-pN8q{CXFF_1r-*z!C8m${1SgrgZB&S&mj6S*i4Wwr>@xil@2ZokjwWrH*#3&1)aw zYnptlqjbK@2zoa|z8)yXKLWoKi4al0d%k}AC$Z};#cbCv@I})7&?4gs=UB#dp=8FMUr)W8t)~L#J>!z?_ zWs`H4_WlG$?dw5Shnb;u-+ijj_mh~)1<4*g7cSP>?}&#-@~W+#VJDL5DTi&TesXe+ zuo`$bOaGewST-E@l9xfhW+lR4*B2rugLki?%9=whVXq(Ei$wb$#2Zs6EI|JSPu^@K zbfWJ`>FS5#2yb-80>IstJB6ZSeRJQQ)^@#Ts7LmJU$DHF8yQIV&pwt`uAeb_XRb~U z?L8xv6WFe8Sl~(P+)Z1jR8lSp#a~CeG1n}cy!eURNuX2U3-C{UVB>h|W`&4w+~!Ts zajiqp{dQ-0r(cJ+g=uIIeYQhH{KzHA@R{{&0>YuATJwN=737#wZBPgvZd~fYZ{C6?SPj-;q zAC(f#Od8jFZd1}NErBpdss~DsI)PI?8`vx9T0>UhRqu)J<0|&IL}BO~^)m<112MDq zU}?S#9dPyY4}(}$PQ^|~`vz@#iwK{h-akJmZ6?-H51*loR zK5#szRiMwQyMD+p!k7GStXgQFG41-q=i1Iv)d@i*zgzTw)aface?8o*ooNbQVYT9c zwOYk#iy$p+VeMpd^*nffh#g;b7oVf0rV^G0@QnH~g_Z205>qteBraC9gVOWHYdT~< zAe7v)EPojE6lbMXm^FA4eK+4wK2~avh98vWrgSzJ1V@%vwCLIQ8P%NX2LD~-eNHb( z_V=d@+cdmBdkim&yQQKGnzGaMhY|i5P1kylUU`M(WdrD^48ENElsq&a-7);g-?B}+ zoLTc?a6agV1_)!Qb`lzOec1=r!;jSX?0>*`<4_@_q(_OV-oploHJvf8-(_xb%~7bP zd#pAv5U0{dhs>zn%mP~M=!-ei1JAP>8Xf-f-*?B_+lx`Gzp!o}YCuCSb-<`2<;#%E z<)a1sWm^-+=|;xECE4U;%*~H{4E}C@XXn(fb&P){@Qy@}4`s2Cm0wB2fmwxOq`-7vnCxT9??6gYmiH|B7>-x7_JJz3GMu^PD5UFE_R?h?aff>7E2+ zb&Y0vRx^6Px}v18N_;CbbTGSeGhEn!?r(#~gc^hVLXw%(m+QQW(Td5#L~kpv#ByBT zC|#c|zt~W!$uY~WQsPQv@qe=bZaDq)n?rakEMaz?G-UXaGLoVc&R2_6{^=-fSBYAn zXXeL@PqzR3^R#r4T`y{Q7&82+dDzB4$myp$YCk0S-Ek+y4N;Ky7pT2R0cUk*!iy6R z`O9YI(}x-V4vlPu8d%KLHvnL-9DNqlj9gX!?F#qcUz$Ir@cQNAkz*WAFE+2U%2H5W zH?@$k{^o)3aQ>8HGgtSUh0iUPs`;&+P5ngKu{=6MUu!7lM;?C7l9RZ(OS*SZbo@g@ zfpqNA(lCWH&iTVA$^+VnQI_~O{iQoIU7)qrijB3mfltY6t11pg?P?1sPKdB)eD9WLW1=g{L0yDv85yO`4Du3vZsPN+ z)Wo^#{Z_P~`J*b2GghDkD9)<4=v~tKTmW4oyOu>-{&%a~Le9{%3zRxm4=-Rvl6{)- zU?N{;mVegO0_iLWMMJ#`QW%dvC!71}UXVmH)lO5sR2qDJNIx4hNLKYtt9>BZ3fw`P zTIQMwX{w}*k)+P+SKm0+ss&5 zW&9oY&5!qI=-$p9806nwd!dGw0YR85EDXa=WR@^D(p8i`Y5j1X{AlF=`x41#ar?6@w-w$7YjbRIa zHohmD(*icaC~H?3RYBN(;|ZXE=j_mEUq`g6at8FfeOu{3?w0q{ji%{Yjter^(Z=+Z z`pP$~_ex*u8W^4m7iYM(d0VE1QoZKOE(_av_n0EdFbi=6BrdKYE|UQZ|I+ls!enkk;jfnW`Uf^Dfz`N z8G?Hb82P{G_e>uK|L{bSk6Fru-g*MM6=mVOQ%2gLytO(0G}Ob-$=wWNIq(}0cK&uc z_75y8|G`Vc;C z#bn;Iv#bZ%b*|0}H5hTT$C9QF#YnL!oo%lv%eN z=quV7mY#H*8ZK&i`S`LrQOIN2*GEBY!uc~UE(_6zW??}V}&|BEJdY=s1 z6eS5__UC?kHUh#3rwq@?Om5@$0A}bC{)zO9PXpYn4|T~5%sTAftx(_>eYCIMgcPeY z^n}IytT>i=p!05xZNOVh7kJZU;W_JZa!B&oE%_x+%qViWVn#aD#gl#6rGYx^g5COP zVb}Noy2T{UbE<8`T?D&Rl`MebzoEDs!kHF2^XG_N^iVM{xPKbO3)USJqd;`im0sxW zc3JY{f8~(VgpIv7hqM3buQ+>Wcq6D3!aB*Dj?HrR5;2W2sT|w2t)Ej6`*4x-{qG$R zX6|orU!1I37diH)a>^4ExUHH@vk{*+sY`ffQ{YDPk-?G&8G zaWMJ$;0HI`Vr0YCvG0?F{Gy`8G)(yqX4(+z-@(iWR;AVS8##V43MXaAIu^C=+THBq z5Z<_>LF1J@ziTtYPBGAV=yICnORVSQQ;XRCRFeUFWje~5dt(A87wK>pQ?iPputayg z3)*3Lv4jmybS6Fm2pxcO$mBXe6B-p9{{IwDfTfSYPQ(pmZ1z=5mlk>($r)6b zt{i&EP3SjgfGFL-tR)?a4h={Fm_JN%fVLe&9mhXyP|x2%9SXs&AStLLI?Kx4E3%X& zJj%-UC`4>le`7PyeIn~xx#SGpbkfxTZi(&WreY&#t34-M*k93x_jz2l07RO#EqKBy zS5XWofXW)a_T9_!>l}cqkd5a)8&AV%1iPxdKrOOvm+Y&Klo*ui!n;rER8&LH1e(${@9v2kTb0! z{Bvka#7zyiK|E6Ae$46BrxW&3GXC87LUc(snDS$Xt-{#8$mQ$Xy3yCl2)DJ2nFQHG zKHy0vGYyYT)1s?=OY$l_-&~*`SIQTc*I+>VB@*0A+DRF;Tz2@oqZ??mti-a|Xm9s({P>YZFsS_H`eWmyHRXV_3z&~mKL?|Ps$5RL^ z`n_eO$y@KEDw4GlL%6w&E5A4oY`k9R$N)c2gu^Z;JhegU_qmY|v9Bu?^fTu_tb3SSNwJM;n^A`g|-Qqy&z-@x8VcUeBe8^o?$W!-eCSY z_w&0$eKTO{;}lMw?`L+{3q3k8Mvj7Kh;d^ckTl-*OThSBgm1TznXUnuYSyT%A>`cB z090~!AC*fie8T1DkNmqkJKLLjmb2Zx5yE=`UO*8jF!}wMf2^R5Xp_;7ln74y2j8q=!*sSz88(?543H(LU{FeVz*&R(vbTPXjXFDZf zm@J~3MtP#dCb)52#-6R;G|R3Ba>};n@F~;b0d&#=}oO5dI->6}>RxJU;mTro#uTkX`Du zRI4^X;3L~0v0)m%&#P`}MYsC@F(86d8ISInLT9X~>Fm>v=@-d1+p;P9vc~C@z~)W2gnMf3S*N_U z-)`rsWdprWqwiJqP538FCn|Zey->VI{qNBTizz5lfMJ5+Nq*m;0Oe<_3(T!*zt#mo zM@C;8X?Ju*(e&p7PU*hsrm?RN?Rj`=_N#CHtWhoGBv)s1r3iB+$92zPDb5orTTL&a zqn^z6->hY?gLBJDv?l>BA4Tg_&O}JV6uWvkIgX|sV(tbH83>qAe?v;AAl`V=1L$J6 zlAW@&sNUcs42roo=#oAkSYb4}5U+}=xW|GkqCebS&I>*lwZ`8+!xlWeKrIRWNYuU* zBNb(}S@3Dc>+Ko%|B!j<{-(mJ8E$ z=V^BNTp<@B6ZWd~dC4Bl&+aL^XumC2h!MgInJ!=Z4IBt|<}T-gE9ah<`>qNB^-if? z#@|L3a0vuVcgUI=If<6BJ7S5+nHCHOXo$xnxmAx4UQNqc*ax zF^sXBbaL5e`v%9x zS5KQEFyhCrYT$!yPnMvS6(DQJ%LHcxmdyz{YiCIPOG*My;&FB-%tW_#V~K*_y+)6) z=1I!=`Nr=R%BQn3Wvdg-fIS)m(4ao} zJr0d^86^h4%tU#*nom4#<9J%K?hL`M<`)5lV|Xa9I*$ zZV7Tp`gOU^)sg_1`iS==KW}7MIQqW^L1O{S;Y+~^;1!+FlcN^IVXpGS;#7;!Y26pC zQ^#P1lPEqNTT{jloC5+?N|A!bi!DRgNOSqAzAQqAh3*w=Og>WoPKO>Bz?Bo;D$*%T zBzdX3{pAWg6U}0zzowO?3m^CuEF$+UxUp+&?);_Bk|VuJ1pH~_{2j>GvA&EXBCVN{ zji$v}y!Zw%)M;T=@`0*D<;d?Moc_+%{;{w+vDvk(rnKt`Y^TX5#xus=8$5rcfP5K5 zU29i!CB%7s!KO30U3Ouj;R~sGHst3dsuEc0LnWcgn?oGF)-SL(a+TWWd@iVYs)X1C ziszfQGq-l-t@sIPR9e|FDyFeGpI5Qu60F`V3j&cqj*inxi7MX5u zQ0nu&2TQ6ViMO_5<&O{2kTBJjxB<*th@regQ31-IkfEjCwy5oba>BdNs6Z>~fn{ez zRAqzx@c3#IqxMHJUU}O^_4nWp>7BN5VkgmQqN=TJeFbg}JQJKyUX-8>x?t~Aq}Ewy zL#JH-X3wgVeqky&IrrL?WP-|7-GNz)dq(e$tRvHYit*4>M6 zWhOT&{nh3&jGUwrUr=bgSo9pNp`g>42%v4s>_n4fn{)ET*An)M-4}p9t!FC9m)>c6 zywvs1H4$`cS`h$PzSo9PJZ26&=sJ1xrrY@#9kTqcgf^fR{Zo8wo<+%u)O~CQJ`euhPHj&gOgfxP+PSU)6Oif zQ&N=M+X}&kpG6FIU24B5qUzcVSA_34!F(%PdrRx7Kt*~q5(U9b;^an z#fv%9{HI4s7hDAmFeeN^NW5VoR~?CRxx+eG=>E|JY!Q+?=rn;eNB#eLbkL0a;r=DQ zB_4R5bXBqJ8Y>@{y>Fx1b;#*Cd@)%3%ww@l;uLNXP0Y)jj&AA*4umkM6%*uh7zN~7 zOpZLhsUif{!*gO4;n~}*>rk0FkvHE^8-OoL9%-KvWlyvrN;ea}MiuWQaKf|B4r%!G zwrg@cz7LBvvYQtLwS1h7enw`=tJINPFfX?OfS=Ep+Ru1f;-ObTL^sYEHzEh*)(5dT?m}UDg_d8joQ`Tt0 zJg#aeq|~~z&;NaxcmF%@v$F@U+4@a<-6WNLZm0aQu6+;?%%$d_9F{zUO^Zpbt~x3! zN{IFylCM;(z=vlsE(^75Ru?tyB5ZpbSiUV0-4T)wV>jHg2-)wJrrP?pq?|6)-~O>_ zgp^=MbYQs>U%MZ*$<%7t?NM0(xprNtKJ1dVLhMFGn;w4Vu`BELJt$HPx+gDdGj*-? zY-^?{SolEBCq5}UT{mk&3*QV;A3m5M)0L|vCAX~{N$Ij2*)N#qwA8e(X*F?aEq=?N z8D2MzBfrf0g^nG1kriGRgin}*JnC>P<~G%d-wG>%70d;Q+JjP?t_$Hc zFr_KhX{JC_DwcoZPLbj%`0K0K8QvVT!l@g5-P!YlR73iJQqnl4Nm7Q?D63 zeNnckAR?R{;)uVwv+oL{G5Pv~&kJ_TYm|B)JrNPDBar&A@%VNUY3(psCO|g%-e(r4 z;eT#Wfb*q9N6GF?6EmZ^FW*?xixA&}>1X7$uTmqB|JXhkDlCi$IM%BOzUfR|pn$ok zWd`*oxfwG7LR(3k2mQWGr|~B&IDr_QLjx<{6G0=0akB zH7{sQS(yHO##26+XyN^_Hi%l-{Kh)UyG3*?t_;$xqe!+kSKvkx`sw?=V!1bPf%DI* zEW-sz=a*IeBTk8Mh0#$9rH^0zUpFeuBW84Hfzzr}ro2CHC;qviMjq+&*6MB?@ZdEn zim{|3vDKIu?i%bVROUnt7i+8)b;VwZdb*r8mKEuI^{liKT(O=-v0g}7hLkym7=p{z zBDIT@(R`g%Qmp6Hjp`|u-iS##1PpXW!+lABlEUL5J3ySe_52#$^nZyRN|Rx1&j`>SqYT<>Xqp=QyNl7T~&0Oi52j zb(pz$^+#-two-j86~*TJEt~P-g+tTw@HQhNaY=}#^IoO;jY{@Fd`#@@Oh-^IJHlGu zH{!f;`+SOq{ftxMbMuIV zua#RBD~tjG4lUy)9cgn%@+1t4gLVIXa~5=hEHdGPt_&aOE}lrt;UCn)IiE z4%Y8_dZ+6Z!E*SHzJXsYqWO8P>BiHwfA-7^>Ha3?{2Aj5 z@^ zkgwWzQAvIWE;{1Uz{ex}-87}^e%`k7T)!Z3Ih-5Eu)_ih;roU1YyaW@rk>36eVw$&EJBQC78FCUlg#p)w}g}Ej4 zhISEs!xV16yYL7E3L2(mY@z^g?xK_rR_UV-<2lJRwQ#i%9QE$B0bSK?)9`OEBKIz+ zbkOqHqTNI@@aBEyIm2toCpySr%0D45TQZ#Hnq>nV&tZ$uIMcB^)v8ZDGjbPi+xU|4 zEBeOgrlL29f>8u|21Ls7+9P#-O+b?R?zKlLrgzc=c?ym#(MZi^aUqowL$XQtXR0Ci zO@woIsn+^g8cA%aWpK2z?OjOE`P@+}%e?hD_v@j-@Myr`o@l90O2cFx77IxzBAs*i z`rP52IE5sp7>86Hc#*Mh{-FBkzv5b)Ej=)d%qzQezX`F?OJ$w@g6RG9QnXN#>dPN+ zBX=4mSgEcHAbs-3xi4cS_;=ZDXZvmgm-{(SzP+~Q?wG0OkpKR49wBhu@J1c5J8_Jy zb6&HFuXHiup2^RSZp4@p-n9a5Y@6*c6p6;)-1yyS6q^uopi`|>@|MEkW|q0wJIcVIc0mbfo`BdH$cqL+ivxPl66WiPQtdVb(f5rv^Z6`)1W`u@!26 z_#&ey#uTBa9y=?v1|@?Zi~cBjCq5qXk#O zt?M)%D`p>*imef=<_`fz&K&QW$@)@=tKp(FDXmzPQX0%E#XL~sgXT705^+was0HIfh2x(V@YYCvB|D`6yM)&mE3v@|RaG;WMS6=NhcQDYO0un1Q8SHTCn z25pR9Gb{Mk7Xc*ppk{3uB}6vN)md)L_oB;SnBpBRCCL4=h0d;lLiMub%T}uOccrH% zSO0iZf%r4>&0(hKSk1{2%7VXC1MrKZ z0~(UejD45xpw8d;tsyS+ z8bYO_^Vv^`FFLYsq7ggtH#pV=PiR*yhv4KHYL@l2Eqp z+qPW8rM{xKrO2OuHnOv7tm(Rt{=)l z(+`nY)bc+G1*EhRHi=Ww49WIG$Dg?@YVumB=;m7dr`a-(4>UrxZz^(#BJ%5PU)t}i z)X$*_P3$jdmrrs<@j2clXrY^vAy?|ILfZPJ=z2aT$pjSs8GLrm<%x%u6J2JBbq9{Aaog%o1Fu_!1Z|8i@sh?EToA+!_Os~>r8C3lF091we#E_|1Q6qE+b5Wtqv9b-=f#}r3} zm9zW^`UI-r(3NwCWWv)#`1mDsPJ4d6Y~0Z1dt(sYlIIa@`s4wyWst4~#I96IQW?A$ zPiPg6kgnH6`Fj(!od5|HhO!L;@2a+>x!nxPs`EW%xCFB+hvTa ztcM5qG5k_Uln1%TGU235zL21#?)meXX3uIisfHi2^ec|N``2@-`nE8AJ$!)HUznBO z&Ak@&@x|B&rB+3xoFgZl`u3m#QCNyG^)Pub)ON*gFT=fT%;5^T_*^G53hdf6D;9O( zw>>eI?dJ2KoH}Bwp&Ds!!x0$L>U(N!#nx(x`$6-;257f>G@ zUdk(w;pIZ3mhFz7R5YxyTMe&j&2=C}-5$veJ6a(~|5y z{T}`J3n|^d)!uz9#>jxlF~MwvN4M=W1f5^yadxf3c447?(GOuoO6$EP)=vBLMe<9hQ7~-hAqE@ z9LSX2g$*>QxZeF8!}%YC#qzZ3!k!1P0TN}j^q_t4Lm@nH3A$R+euj+yr$@qErCt(8 z)`~7W0T9r>x?H5h0ut%{Up)a|&TAbKjRx;7MM8&ofYSPmwEL7Z+I06Ny^s4$HJ!RI73w+9TC+Cen9(~s_ETA81o1^Z zoxpc2b+ejRTUN%E4L;8_;3U~H;8kfx`Do(7Ev#t@LZx4a^0R!J>9cDas3#$n?E`pU z5i$ooajOQy_OfaN2Wg58oA7%^5-panH!Vod*@|BHof3Tj-j7P|j{UkZEzC%ESD^hIj{>J~3r^ppY18SW9tQcT&)2du(6nr; z@=?gczLE$+h=+}_hP&}9F4R~c%$@$gtrK{M zU7>1YJLR>UNgU28!}QB<%jh4Bj-HWcguycHw%@w852L4g+IC5P|1z$6Y0k-d$r^8C zruK*Ry*stD_o^N;f0zUJR3EJ1^Ir&G9+)naiMpe7CpKh44StWaR_{<%$kQCQj`m|| z&4YmR8`u;}I`kfD84B>%XusJoNyL zCExcWB&AGwJpxL>3P@|R`eZEM4DfLn_)V4{y?%x_*JX;)*Mdc-X6(x%i&tkbZoB6o zCucSK1t?r%F5q+m1?LyrpHyuIo8rcQg$}Aw`jh3|gVNJcyu^Ks0> znUcK=R;9hx6-|zAstjY^opBmf+-)x3zXv_B&&KUVP|dI#VTEzbnRQ2k5*tr+kX6E? zdzZ|a^eQ7;ypWn$`Q&VhA9$)?p!>6sk>R6OOm>I4U-p2Od3CVNQoB z&^}r}Z6!nF|LEWr`0v|>JRwRf5J3mKDT*2cbQ=Cr58QqW%i`{~{caQZC`|UgdoPn~ z{Fp6-?&SxwBFccw%YR=Q?aJ?NWd7KuBb9kDfz@aQ1|xvEll@qMk}LC9+UE&SYN-kKXnT)P}(RQyj~%TX`m z0I#>3ADMB_`yl1D4G(l1IZ7e4LU!b;13kthE5LZAJ}2#5!g zYL~!-9Uw>ty+(CrWhDk1B-}NERS*yQwJLyaL7w~U^MC3D74A{G=74-6J-~m!M`9|n zf77Pch8Iu4xJe<5t~d)l$THL2?liIT1<~fS@_6;{{mD{6z^nB_%Ugt@BJCOepR>C9 z{mDyi_!XXyNV7ghUH2hP{ar&arJJTNm21N*k20s&^pmph7iKaqPsmk+if*&<*t?#P z;(_)XQow{wRQbB_&E38w=2-~V(TDZ@UXLK-oW==l=d#7q<(sX9dP`NaALm}S<5^ja zdBTMCheX|WhRDbLOGh6162ao#Fn_-x*iIf>5LXm?$|=J*qGvf0ZP7v+|D)|H88?IT zuDc%ek8_W^RO`E%v>J}%rO9d3jI^@9YP54fGE~J)N5u@z+x442d}rngX|Y;bjGKjA z;Z7TV@4uim9`1PqwvYl1SIRpT1Pe0@`P%l2{K_8|i*&8uxTw~th}$C^=;Ph;)Jp>A zWJpwH8Y9l-Q#u(|Mhm-wRoKpfu`0|jvNeShIFmi6j!d%z*ZLJQj z-Zl_*17>~q^oo}%tKN{2JP;1?mQP}tT<>ec zI%&cy2yA2AvUXi=GLYySsPE^e&x;R-l2QoF;`enH09Y};r=7Z$^=@+h)myhbP-6Vl z5(c$H9_lPv-+!1;f{$x^7IJf2MDwJmDno<$z?rl@I!`g#GxZmb{f>($u*iE00}Me3 z%QB2+4z1%-xvNVSWYPt>YA*b4rBwUH4$#gk&C_KjYQhX<==-r?Y`0SfTs81T@8zL$ z@|U=h$yMX|+(lnAnV+}s802zLD)aw+Gc+4GxBg`_RF*ETJP8o<#izc}y|sr1{TzM0n6hm zyxa_J_y6bfir7N8U74=vdIx1gG>4Gw)k58*z3bB|Mwvxnb*F*c!`^> z)W8B~Fy8j^%Z;+M;+5bWLPTQd=k9#h`ytR77HvXfZNnD< z@p^;l%#ANgJ1o{B-*@ks2hAEYom(b2E&+_U@5WzDoxL}Y)dM?ke(Z(9r-!kv#L&UKFyThG4(qQ#oF)8(F4?SE|GJbK(bFcc zlx6?e=GmHU((CF!UzLl8$EaVI?FxO;B*X$i=p*1|^_9>80~@E2z@E}zn2?4)ZfW+XM&MX7EU3pByl;5$3mpkw0CSCTPgi)&jvXiFh0FLc^Jv6YDExy z1vjRBSFKvv=%cZHy)j;ff?3@PN1(qtic1|r+(s(<30roy;k(`THqIhnN+j0#;jlekLLjsbp~xyT=tjPi{J~M>EOJ*H+V^L+a6Q*MT!(Wj~CJA5R2~ z`_Y~>O(&gK{tXyLeys|>l=Qv0t351~kcZTVglH9ZSCDoM0e z)uza%li#j-_9y@uDy8DGW%Z*jPEuW@Z#jZjo%2`7KK+};UE=drmyum|Wu#vILFw;@ z@4Y@9b9m182$(QR_sBefLPPsd8IL@i8cDvYPoc*NnD?`oZtY})W#6~m&mTvixPdPg z5SS9Ny0ZaGL3r>LzrbPhYWh$b$x!b;y#DFF6?{Ao_xKw#64!<&aaxQ?ZYT7#CMfZ_ zh<*w<`mE~IMC-fn;;IiXN@Ii3Zr`<<;akS9;gA16w%#(R&G1|I#=TIq6sHs~UR+zO zcyaeafIyMp1TR_&#hu{pR@~iET#LKAg@nU@?|tU%dFTC>e96o+nP=T=UH7$q*X2{? z)BMMnvq(2iFyQ#mLDcc}eEUG_E=ToBitt2}+Y_Vbr2TJjK>@-6B^nQV=AFtaU&{Mq zeP5#|kblb{sZX++tw;2*TIFNuR07VreQ9Q3)Y`(Uem@$8yJLT#Z@Xk!)VpJH@ElE9 zvAs+n)$W!3T(e|Yr|+Fl)&Gsly$R8shy*S=^$sO2Tf%lA+|H zJX1=e?KR6>kKW{-ipZX+ypVvf>#w3bj zU@y?T44M^y`t5(Z5HjO7ehCH4`xuq~uXNz4iz)H+vg?W~39A@;s_MFOmg2dmTaTLfDD-ZF5`gYWk(T>cLLR4kiFW^e z907GWYgX58f{{~`njgB8z3Vb5@J|_imGrs8o;0$O%+6Fmp0)Tl!!IpjdeUNQE)1J-(P)Gl40@mXkp$AS;YR?BV=5ak43zw=Wl4q<6K;7K&g5Vfq$ zvJcMVn_j;M!x9fU;hJ=WQlm_TgtCJ@%n3f-G$ieRmvvodSx>IZj;;e;S6zGb8TOCI z^I{6NctQScG>ur+1ypX4vdwDn0TzOqN1QC2Z-ewElY)}2hsd2+)ON838{F&vp;^e@ zI%>2|7^|2M$N6ERR@dFFd_(puE;cd8j444OgQ73sevheBeV&;P`eyjqRKd{f_}qEy z0#a;{Sg>76XNSX8cL*lJGI`=0gW39RY{U#03?_GEZ>)-R3M_eAEOtJFdpiO_P5uKZrS>t*=z{iPX>~&Wa+0oOLc86KV z^v35AMT+OGmGPOQ(?P3iY%?BqQrIhD@;2TEpJ^i>^$}Ko;qwBuG0UZ1&b3V(QGg*OBsbZ7MT+wWv|6^ z;cuYvIX=!J&ppmI*You!CCnj#pGj<^JXFf>)T%8qRlZ(~pjtgXyFQco{KkQWZyqP$=g!=vH{OxVNZlm`6w@f_WUm*hmBx(FFoW<{QT)UG!FpFG{R|o`= z*mHwG!-dKgQ7Z(CK0Q5XvS!cCOQ338({^xH;K+!LYpSba0()bSqD8VX7 za&m8wIG>oRF%Q*M@+R+lSOCLKs`o|yMXKR9A*veIoNIqNFE+OJo*UM{PfO1_&+NZ^ zz~5iGgO`B0W+bh+BJ`juCnLYeTQell8@mHX?}B)t@|vPBd6Ar;#7WZ5Yw~n{Sqt9pMSdLF@BM z*I>P^(i1L2u5_)E%RRfQmS6emNT`*o1;xb zXT=$EU!8cVoJyHnzjZ)>_3=%eulC2){LgW%12>2vE6JOAu8;9Q16;H;J)S3BDnqh@ zO*>eUfmg;Ol>&Ece0>wyC~aE4B4%@>x~kRuaRQ*Li_s9OYJ;Jb>jj{|(tWt76|)pt zJUyj3+OeXyP79?FRvBVN)>4)$0pkEE$PSFz18r;{9usLR*#D*M!A|_%@CwiRCl$SM?R~?*H_|@b z15`6ev#hImC7aaoO`x;M4k?@XE;oz)wnsiL8oH>scK4pKmv08~rI75v8&iPGz4c?a zvW7LmSys4j)j!Be!PuNI4ztw@;bM5!i>-YkziVQ<={9en8@Z{LJ?S#u9lH1RPze(JY}Bv*H{^nq*?`G7nycj2zQv{3KT`{q-)PpImjGl>z;a4m|ow#qFsrhEE_*HoxP}s3rDX0V>Ed`tD1FvAiQ^R zW`A5Zms^IK`RwISsuVq@kbPAdLb?CcHw7FO5Wmw4@YZr4DM6+pJWQBnZ7*j2&Yenn z?rpSL4&h27;<5sUE*pgEbu<1kaAAx|-+9?!t0b|_ASFqib zy_Ps9W*Cf`vQTo9-qPlgjJk<;o)!oV>i9#z9LU9T6pUv(u?XXghHMHN z-zN#ELHX^%cRY~^^qPVA0BF?$p&5pb%=5$Mb|mDX_SppXUG}IXV6MQ6bGT^*@*hJK zjU=4*>HftK6+-(NK?AA7UwHxg?j3hYl)0Qeo8Cf825FcQJyAfU0o>5Y24@c75n8rNjpA=#Som#q$Jy!Q|>lNl1z@aJ`(;yoXd}vBGHp- zfaummD<7?xu^64Fi;zplC5Dr}kI=doX|;% zg^EzBr*!(6#L`L6t|cTR1d8va*W5o2&6*yM-T|Duat1B!K83I0kkF3aHcL8vrr(7S z3~1Am+-zO5-xcMeew`|wx2H}C6!P(Z){VWLkB4Ic2;4)(+?Dtcc3mkv0R>@W!T+IQ zG(2B=d?DI2K{GIiEeZJ7O;%F7X9xp6-ndb{5Fm(;VaHZG4w*mD?InCX5Rn+nibw5o zfU3-`9P7S=G@;7-ReuL->V;aT@zB zNJR2(GNFuu7B{@gT zr;o`!2B}fYh{W2&QrXJ5xU15ryV0u9)r9yH!fU~SIc=RL_10`3o zceLMK&^}q0YsZwk+^F-$Yk$u?q?;D#{&OD!!Tr% z$X+hQbZ?^AEU&tgU)=#w*`3A^4znVkMVaUj?ciaV!rZVH-kJfa2?V?*ipiayLUvwI z7?a=)QS0yQyb=F}!q^$@n!!2XP3Y`Zj@V*G?{(#}7o>L!j4;kwc+ulr^BFT92HfK0 z7XAl@VP3g0sA`-&?(}R=8J0WOkl-+N|2O|`=kJ&2L3$+e!PF{o7iC1yez;t8)Hp}i zf|VX;?kkknfxP@(Wb;0?4%)e@*I@rP0c!D+m>rV8JSsNVy5`UaHwRhoXG2|&gDuk@`X;>5YQNK=^d#8H@mS}*=~y~RB@j3#-mh_JzFei~q7>@thId9c@?-f~UoB5w2F{{CbVX<_ z*%h)J83YeCH|cnD`JDY1l+1b{3qC$~{h>801u+5*h%Bh$g;UbQE8TCQ4 zQ?+k84`lb@P&@)tpn2KEEpeLDbl@%(`jNrLSyt=0S%HkOcr>$ zOu4#==db;mnDFC6TosLjsduR3FCc{Nh0*~Y*D*@a)0C7lSFlb`H67vdTak;{EPUC!`N)()V!vT=*y;h^*8$=8~a${9TTGY+g{-+F;ni~Oo@ zbX}?AGTxMU0>7+qmnHc#^$l7k1qPeS*7kBjlE&)&#jI|1p62%xQ>t5>sF0J&uREH( z2Z=|?U>W_7rjve7x(QT%@JqNIZ9>1=iUv_vIr6BRSG%SBPrOo1I)H@w8n7fGK6OLf za{mu%4f^_|XCL{0SQ!T}OG<}L5lI^dVA5BZ1t01}b=O5rWfRC-vN4?wey;YarE^1D zFJpq3gZ0a^jkyB4!UZ*Il6i%Ry2)6GtvAcOS6?KZ1g!Se-y%H>w|TDm0p_FkJ(uFK z3BMZ~=W)uWdaRsuu9F+;s8r?|-I3*Z+>!fjycT~K%(^vD(}E_r=&6;sii5ep6NcVa zL-G;)>%^Af?u1#`W5qlVAzv#ol*XLbX!pE1*GG~A;$sD+DYL6?z1*|T=AL!7 zs-BkDUKYjtAACNoUG4p+;vk(13l~Fc$6%&?eo6n@8YFCAxK3*03$je+m zztF-*n*Th)1-bhWbLh%HlAUp?=0Ijq!&&zc3z}_)6X$N<{k1!L2$)36H)|Vd=sc%d7b1d!0C-% z4@E@8(3*kbl&?5L@XW|piTM`>S9aJbsL+D|Y?jNV>XWSF?^((a8MpuqQvF^UC(S(Y(d!0sD&d zpXg}~)7abnk4-Zkly8>*ffh@va)$zFTU?h-CuEGm;wQ5DYEgzhE@f2MFF!0oY7Q&d zguGY`%~eQ{8n+bv@4LMOqA8~MYDPE=0{2tdSOfN=Ge3@yBD21;4oqWsonm>2xjtZP zETDB#RGQ?5zw{v1Q z@Vd=}SxO`ZprZTVnR>@Du9NU0DUmT#Rq-$LBRa??0(JT?E=ZR{6TVr{LyYDe%Mcm_F*JZ@q`;EqbDAQ%(z-TtZ@dIk0YXbP6CP3Q;zoCd;4cnB%f!syRVDnc-!p5+y9awlI`! z;eV1CKvGRDxJidz5_V_d?-J-XzMF@xdRMcX*-1um>0sz1{rqfswrn9VUR&EC!5grS zglZJPv&lohN=__`MUNbUn|JY=t9`nUrI-hUn}VN-=#^qF@=cHE#R%nhZWE~)N?D7j zcPMN$7O!Kch2jsg4h}0Xgv$XZ4QppGMCs|vSDIC0?Xy*%3V=A&0C;wG=J#A$SxA_E zc~j1EB_RE&xu~NShuJfM_%=r?gSgJ2k^pTa*!DF;kPZhu>_yS%5(;Nd1Xz8;-`z*6 zU-IlHs6yp$#k(c8oaXXcpxK)5e5{NyLBJ)Sno^*Hn0cssv`F`68PlyvjFQJMpFQW7 zyolPz@iRQm90ZPkK&XX8o!r-tyA}hXQ~2PgK^jxPC$$cDudQTS7$YASq*#}$sGL%u zqn@Ty*pd<%_!`8IU)VOonSop@*l6N?U@xn(J)DZ$+lmh1IGT-&o{pvqJdho ze=`!^_==f4(63o=%4d*W%1>@2)PL=dmLjU!J&ik7~%UuRcr;)M2}UwKe5|6o+)gE7O>(XR9zT((P;weyTQik9^aM5dEdXa*OeGZc&bKCI2SI8{m_ZzDnHUz zeO|N~w7DnJQWEdR_Xh)0DsS9mw%N1yx0^qfq2%{9+6b(Msk;%HOY0r6b~V2l!<2o| zKJq2|yLYfp%cCawwrKNa&wAq&CVN**qMKlUoG{-B@6FGSmA&mNrv#o@_>O()*{*UX znqf`{sB^cQ#M)uRU$-mH>=<@n(w~d8Y^KB4$hKB|L~&UWSaD21{>JQmTAj-mMB=>( zsiu5dH~i?j>N}eHQzA?{X&WF83pNmHP!!gBmQ&6AG3CM3SU?lVx;yFnD`$K(;Pnlc z3bU+wQ5D*<4*uLMp58Ao__lh|9)*E8TR5{0*h|k%1NEr{_?>;myr-;o?0DF1?Q+$~p!Nh%d*00I!U=Lc z$o%9o|6jSOL!~{(f5GQj zHXh|PU1aO%*L`NQ?HsJ~Jk1OP$P%R^OE4y)9a18zHe6Od6>&7XAtDB;#)n%oOOSqR zPbf+)IyFo{ne%8q*$?3MqIK0>%jOLB;j`Xy@$ILGI&7Arn_$q0eaj;QZyJn<*8Rzk+mS_kDMXW@i1Uey(RCTz9l+Ms_? ztAnZ(M?e=!s~^4zsXIB`=*DZb@r4q5a+Fv4ccJdPpNJ}I;-Y^o+D_d3HWT2F|4d<^ zhgwLpjV86^kYKxjpFv!7GZU1Pznuo8Xp)TntLAg(YRUImTvm{mnG?p}t0|sIuK78z z{f8%TR>Iw?3}vPu7pb+^yE6Wu9X=6bAko>oCz+c9defq1%j*IE7AZb7KDlx6>Ub;$ z4+b~Ceod!2WCJy~VVb(Y);9%E<)4}#w3QA-F4ict;FwXoEjTFOZPxe)SD0vg|F`Z? z$#P_t@#L=q;M8iwZ{mY81QImqA+$d!;R$$VYTSIw?zevFWm+jxHbtV5aI8SBd8izi zatG54eJ({BjPdzwX3IM`v&qM3$u>wN zbdzQ6C^o9P9nRI6hkfpJSI38oyK;88$y1BggRL=(SCo39RtU0wwDVV(nr9^C=BGWu zG4I7kJ2;3xBWU=Fd(^9;zl)?D(5#v1Eqc7d{(YLua3tK(EMC|9u&!Jzw`%h#+&{$# z1d_9-@(-N#-~MY5*kfLjvGeWhdl%NaUBK<3W9G3@eD^FUkuGEPZ=|oJrUhSi`|u#9 z^@6X?@S@%l(R(;YR-~AzrLF-f@v%D1_oGR3`&&?9C5VmW!5VppW0BvS`1OJ3i@Rqp zA)^i$EPs$p#y$0(Aap(hnLVBAmgYE7g*vj{PQ`39o^LPxwg*wT_WY1s1y`c&Xmdg^ z@0RUAHx9+J_Rha%St;)M2f{zJ`nX7{U`~kMe>4{10bowxXZ&~FsH;Qmyq9(~@w;4x zr$2*JXOtLCEi^eznQC@hf%X~Zb3;n3f;EepP_&!5P>rckKI6rzMV+vR{^hsigc+uF z%mP7D_QHp56ao|nb$nIVhR$ThYCmuW$wQnwNNGFkc!Ri3vwOHg-sJb(XuMeJ&GYto z?MgjunZuZ*sH6_$cPBKbhD;u>H!&|fofr(hT^~_ZP1Fkt zgci_8Wz^Zpnq~4WX)bn0&*lcw?EK|d8|geTp3J!}IOFQ)hC@}z+u_&H`UQ8b5x;Tv zm(A=jaH8dW=~xsg=zYlx4bByvlTz8>9CFi0nNDu^3ppI>xHI!OE15^^Xe9JbZ8+`* zF9nR8mS56>6hKz_QAQ5sNdx?amy3563*}Z#@=K14kuFEkOPY}yf3^ck;cvwcta_OW zvjKsk5QsycQ2dnRzP77ZB{M^^ILv{DzfwTmYlarbjC6TC9JS644V7mHdi-*>Z&`8) zP!g^|{C|?fNOn>yyIwd=OkK_ls!{MSFW+e>HlB>GyMK@E)gCPRO?F+0s>k5`O~Y6( ze_|n%1XZ6HK=20_V{wd5?S{w9o2B}Z>1Xy7<|lAQdu5gXg0|-dzeA&97yQWcbA~;6 zZfP@3d06p+kjD#60`TD*KPm=&-S=X;9rXh_IC`@78C&(@%X<9tp*P%N3klNbe=CuTc!`SboxdqXJpoTm zXpaXHV;}DsDQPn1;Wc6(CaSVB*ji2roT4}eBbl9rgaGlW0;_B9rLe$HvQX>f2&Z4% zHn>!GjWwa9v_?YOAF7`pFeRKH_SO)i$%A|Tz~fMfBIuPPlBX)cu6}<1^Yde#d`uSl z&9ImIy2DG1wIR}~POIwqVqhKWe;1qk^8GF-yen_iA9gCp8MEeH{zj?8=CWUdtH5Y0 z**-Olfa#Z6?OC=!6ndBUT1d&NGwwvPq5qcog{-g_8ZpdlKY4#+n%92Y#4-KfQ)s>dj)k9W)sw$>hxC|X6?gv!h+mov-gX3lQ@U^!|?K8eYm?geF`FtQ9q zIu})vrXufb))78|^}UEuV`(hUFMR>a!~i?PG5oKNIfbjyqH$0QXz%J>SrlDdEC^ktkR zkFUz@O7=6)!8pBRMk~frdW`Er@D~!j2H%>F_yu&`6$!Bq$Nl38p`O(Bu$zZ`DgWtH z$L627uK`q3wyNLVz?J8ohgG07-T5Mfdz#Ak>?LZMV^#o{W*?0i`|0Y6Ff=7Y&B zRVBuHrIT8SOzM#Kq-E^U_YkTmN~7ey;<9=Ln=ddn$(2+m9mfKzWsWf!(JCu?X$b2W zHN@4*aJHK573c44mvT2R0sm#3Ef5-n0-OJ}o}`zPH3^NYg&sqDqNcm3tl9B9U3pKk zcfD=4ble}BCF#XZD>ed_JEru|rrt|lP5eb56>za)c&rRorv6Y^Asxwp#itH5XZfr_ zWM}qHIJY898ooFUF53PbVS^kZ=*~{pvg5NRUTJkZb&GIF#V+-J)mw|5?R4j7xJmK|%8B*+*6Q|9$oUOAZk~ z?1Db!$tOQQ_(Bp4I_)=K>2tNzUpl0sIxbxUX4p@>Q)9N~jMjG{DX+T);13wGCG77S zMK>s=O=g(g7Ym8pj?(RlW4R`%`YtI6z&Z1)a*N-7i;HFO)P_I}J{F=B|K>Gp`FL1B z1AN40{#J<{|M{M8x;xg_I!!8jCCtP=NC8c1Z1S+5K2T~|?GqVM`@1i+;|ji)N37*= z?AGV;s6(VYp4VzPHZrQaenTbyuAy$(^;YlMK*y=Re%F=Gqm6CK7oPquK2f=Aa3O15 z*lpNPXLighd7jjlV2}>~@0nY(?L*dNq)$`*)(e&tm!kH=%O)T5XJ+XFiC?38poBX0 zDJ6e@`ZDOPLWPMn_ljE;XNrR(sHch_6`6$tG&P_;kj0oo?OQhA=S=7Qx60;jE#-o0 zL2q{YZ@~ycJZw4urvt36|AV%3^42&SY#kOo;qs!HX;eZQ1v^jP>{YMcz1;c62mEx zKdosDc2D+bbf6R(=+9ad2=)|PS{_0*4q0xveQyT9>NaTBZR@@B|DGQ>g-*wO%$Mei_3|Jh+2F+-W{lmW^tW~ZvNF} zO$I3}MtBrxn?=8R1Jf+ks7uDVPjh{n!HbT*H3= z`seihA=;#J7!f_-Hs%^!K6niML7EKo4R#{@faef(BQ@jc{AXM*m!hsTLE*y5VGc)EV8_M6u0$ z=_SZ9_6Wj6QiL$bf7mcWQK0@v^BIE*pAX&k*F3(8!|VQ`Sx1qQJ%09x#Vf z(xGO5S{;!U#_VWbJ8oVu+Pew(&75uOs3N*0mLIFkQAqb312QG=#4@Ph>-<~M?OBo4 z#zJz%U~>FB$*#1MTFqZ0mznA5;)Ag=UL6H=nVP2;0Me_yhG8%~iG zZ93xApfw@j+-bKXKXCN4T2Yp=A=`o(Rn2Ror|Wk)UwZrt@+lPr^i7V~hc5o&hezUD zjZ+hg2I}^{`U0kXHO6Oh`*xW^;P#@#M#xx7n5V+pM&${Ep0-pEfZ^7c@~10AKe~rS zOBMU!sp%uK_%>te+!yQKE(q+WRZOB%dgU9|+-Cg{#g!X&UWo}RoIxfZ!(V9}b?}WM z;0WBjUVgbj91N!j?~;|3xik|py@_G=iA8~pISga!Y-9hve%t&y?NnAyP##oA|M*8!y?wU$8)ScY`wC=|m|=xv zXM|OFJsH}57+O6+bQM|UU&$@u?8Y3iG4xOb;MI9Ptt7P%?fb(Nbo(Mq$Jz({$fqq6MxcY# zP#Wj=$}6sk>9h0FrSKp6C|chgPBxC9`=nM^l+n{UxE3daII8&)yioD?teJ_V<4{qj zTO{*T!yk=~5V!QY6Xm}j;_7@?iOm6zY2+gKl~>*h;~)&wpQ< z{HJY@=%VhT+*f-ZS2OlI#XJxD`XCqC{br=?hh2rBc4yR-sUhbdXXt72?yJ&YCVm$< z8IEXZ>Q(cYuKsb@`XZymtU z_z`UYLe<%gbUu#1tsgyl{hg%XiTs!Pg**9}QEDexmhQpe%$@i?9rY)-PvWPyj0S7j zT}$xT-rPJS-a^P}@RpUO0Vz~0+L!+=M7hy5A@?c@UTRJ%q;54O12gG(V3q(vwExEM zc(<=XN-<>)p93h9E8C`Fn!>+&ubcI_fFqA!d=V@FMqhtbYc`TtDRPGEslnd}^$w9F z3~thB=ck1Vkl~$t^#Hcov>aV<{tD}H>vkzRY+G%;9hN5|Pa`9+n3&l@;=&_meTH_O z`YsA?3ErUQ$@@8A9@zxve*ORvx|n?!6WVM^cKRU!@VmP5Og4*kxKIdvdVM5e$@Kz3 zYq?aajGGJ`v6wv;2L14<%Zn!^s_U*yl-TXAq;e)$TgxE$9M+cPnW9@SqGb2j;k5Ik z_K)|mEJhTJSagqp*JrR?G|w)7Z@)x$d|k_pIcB@THS!Mys7!5}paU2xd!2YTr`wZ= zLNisA6B^w1_Q=bhd{jhu3i7v2^bV81tl}@rW(nkG>Q3017IIa3RTr#wrOhYj<={wp z{ZEO@$f3ZBX?kOkr-9~sfn)Qq)Q__kC`k7BZqPe~Z0Ih(>3zA}LDnLhC1K^wu~I$u zh;Jm3^Y@3R$3c@6V_&QORi-HAdu?}4;c&uKU_nVE`^pK2%HeA*d%gLKWIw8Jn=DfO z3m>t~N{kwx%E&f-)hgYJk4(;w7-GH2^)7UBk#um@ao`M8Y87Gsbe7QxN5;f-YC!`Js2&i2J6jRqtGnkY72^YDrPvlASKSL zD~*a`@E@mz&lQ$c=L;GZ)~gX2KKN#JgnB42cusG`uHWkc^9=o7t9*#cm-5Ra9FbL{ zE5vIw-veL**4UQk?Sc-_d32c96yHZX(X9z?dk5NgalOyJ@4*G z16Ti?yo?*Gf95(pdY-;!J>NY0%%5o<9EfzSJ?+t=2o3%}nL$YOd~rTdt<$afDY^4$ zc$DkuJkJk0?qhGl^>Fx>a?R%E^RUj0=+W|_;t>9))}+oH^JSx|H~->vO$wLZQk3*D zjHF7-aRL8vU9yy#rW`D94yQR9DOdion~XWXc@?qULk=4LOl?q&EwF})R4z<8iXL`Z zmg>_#FF2Eb)*!U(Nc}x|PV|eJ(g3xxKd+(7Z1X8W5WB8Lmfx59b)fMg^d-0hjdKQm zQwb@om7E==c50~e`!^e@E-zE?dG`9qNbx6Tw{sH`J~WdADJF8Gv9t}}BZ`i&zZ^uL zA|O%A`5>Sjb@RslO0&I~h*Nx5Yc1TxkEpK9vmq7uHa~R#&~i4ZwXgXmVo<=%uqY}r zef!T`y>t0kMOKtAAYvh}$hRWmi0~c7ZVU4K&u{b`_Byb+y+0#oQ2-MGCa3Z38$sq# zcMcBRGhz9Tnv~|K;^2!X{kuqP7b-5KG2U76Mnq6EHz=0l`9n<$>&;4Jt7T_!ER&|D z-f7&_JOgVTP33$_Y`hq7;%*?m6VdE5HY#HMkBGZ@r64uIK%n_=^_)d_-qLC6Z*vB) z?D3J^952~di0to2Wd%>4rkLh3Aer}j#wC5tIbkeY;jCPj!8vp-b-FvaKBO06pw6Sa z$n-{J*BeQ+ptb;zks9Q!E@44SW9~yPTjl*KP9*rTB zAnjmIA&JP*n7sXoHapQ!`>?V{m3r%yOCjh)nzRWY-NXjR){NAw^`}0taB$;FzwVc( z!PH|z64y~=6v2dTz~ zrgSOZ73=Ra(-uscce!)*4qI5^@ApJ4B|D$4g4fG4zZCDM9{JpbHJxZUNuIe>Jfv<9 z8IRjDWV!z_-E2lenPpIz&CvOFYJ`O;cd19_J5Q2kal(3M7%G~*1s|H{^?xky{~Eo$ zqej6&KMt;Uh7>mo1lNB}c$BB|dl7&<7Tc7PVHAH3G7a|LRPTv&d_OzZtWuwZM@_Vrx|XUI7TCe3qzl*{d_V#%X> zz6VOlj@`5<_vgCp;PZ^-yZ^FScuKY)Xn>cUPkU=fPSJI!P(#f7PULk-?*C{F|2Db!zdKUr=4>fMKRSDY|MJUwh4 z!MTt-rK*D3MmhIur{Ed#{o3miRov%c>cU$y8_FsTD2t;hG?!k9MiYq%5ql` ztx2}*4()Qq9bTV(H|y`>niQ3kra6Cix62 z54O_pw(Z10^usHne4#_ZCkA_n5mf2`BYg7pUV?FKZhM-7s;X@!XXJRmWTn&3`|#Z~ zteD=5ZoLRwZSlBm1LC-h*&rO}#}y}T{VGic2lh9XbF25cxu9=xG{OUi2Y%oz`M>X9 zd?d0&p5g=}OHV%K@h4kj>XN8(!km@q|t15(hul&794X$X-m#b($WNT{@p$GjM z-G7Izk?Hv!Fg9OQq$PJhqC_$bI-Cr2zWNZ;)Vuoj?~pl$wB4_9on7-YpW%g-pUoz1 zKU3Lm9`drN@hFanx?P_UzbTc&_cC{z+ADo=w1sdGkE_qUFuHs8UMTb2cu%XH?hmF@0V|V%%l&e zs$dEsr{*b&;N9G9vmE+tuW!GmL$|bV4&M>j#P%q1;Bgi13{5E;PSw8#`HK+@Iz(hB z6aP-2jIkW4FO;A2(ErS!HHk&ATWBLC19Yfxa-CRrw)&whKIH+gedqU2GrN9`h_{YYepytIF0Y2ZF6sSx;K5l>%pxHKBi|Mhd#BE`)nf3W*=&Nj zm)uGt!;x z>|cklz&?uxZu!CXeoTa59bQGX&C$dhzq5t2y6Q1>+~|DDzY5?m`k<3`{f(ph<^d$q zyf%@b+x|R8QSrk_#(LgpI?i|8oP2U*(Ce+F+vSbfCP%$w8SxZsg`m^( zA*u5@cJvK=;EDkG*x38bV{fe!zIyj0uD$)jwkdmFn@)mQIKC8$e_+aSk(~c^qlx-A zP))MM$nR3rr1Oc$|B99?#jAN{)a>Nptf)3QUZ_LaWt&o9V0n%Uf~=j<9)4gmIH=M( z=ecc_^wLS4dq2!^9`*mVX}1wY-m}D;pIBUr`Z`W}>gK>LOk4c(=a^#QmhJ0#7ZR*^ zd!)zNm7j=}Z`zkbx#2L}wYsYl*~-42uHC5fAVMYWa|>~UvC)BDE< z@?;2B?i+ry=|_w}3lvQ;cAjL5u20IK?my12PE{c9XLM^D3V&fUah*~0-fPS&XOf=2 zPu(2p-~X%7`Ch1m$G|>rTp^i69&TN4{79|#`>IZ24yE;ZGtQi+99FmXc8zvRE9R8= zfe5I6B-*SGnqwqz@{af1Bcobu!iO86#y~3Zlu(|g-KQ)0!4%kCay$)cVmwAlv=UPy zZ;16ehkjT}Icvw*I<*Z`t6AewH*MX_Fgia+Cb~u@>r}j5@^aQ>SQ&u`Fpb6jbkhrq z7dpb_INfLeLE_Gzc*U02H3-v`m|L6N-k7I-iK{vMge7i-DUEyeQT}FXqjuWSO9F=U zQoozH5G_S%)YKt}j3t5;b8H97TG}i3Z(gTn3XuSr+@jysuQOUG%iv z!jhU=tfAuU&I7zH;W87~Dob}@|C>I-8f?<6I<;qc^AAcGF4aV8AXwpUjzLqwo zMQ>ELd<*k6>Ydml%Z|D~L@}KiX!5}d)TCxjwIp5wKW=)tIz~QmS5&-Pt?aa`L>rQQ z!AbnHTtfY5^qtWfAlIlkb*GK*7FX{s2p)Fs1 z4w;#|rM{LZOe-+Gq3`bTRxW(1@t`;#{G?Mso%dur4c)2h-~qq9&_?aQDXujFa@wno zLp0l+RTR*6xS$LnnRIXVV&U8#|A;6D3N373hs~RjLtPDPGSrl0Q5wwKZatlJ5MSv24`pu|)mGGg`y$1yKq+2mu>x(e zVx^E$ic_Gt2Zt6XXp!J9#a&w5p|~YDMN^;zcXuZcAh~(}=f2~ddq3PU?#JwW*cp3| zJY%i7=KM{&z*^9oWsJul{EC@3c+5a9I4d=L*$#RS-y%TYz<~Z|TxVpzKpi#AVrcvT zMB@X@LQ)O&=l zKK$}BNWZDWe%mV18rp;Gr#y*Kdq#xi>MF#)7U(7Ntyy;ad6;4Ps^mq=cR$7;WJ5hC z^sk-um&YsiLt1ay>U-oe>QzE62~qQDs51_ugAdd&t>fE2CzmNT@E&9qj%&Qv#jCsr z9^2@XPst;!rkXEbym(b0`|F0keX!{(*}XqF=&bTI{Miy#+Q=)xbV+%urm+TH_smvs zTSBSb<+W6I0vsO+4ildO{rhHX@6+X<{Z;Otc^gOQgmPfNCrGH~kGC>0l;>226Q zZO}06E7DpCj!Wi^mGq6z9x!l%uyH0S4T*{fF;C`-pWE;TU&AcU&E5|xl&j@jpAs}% z_`QiM4rimZ>s*<7Npvs5vS-ty;V&kvi<9Mmf8#nUNJPAG*J~RSyt?mDYASHy=^v5~D`D(@@seqV`Z={t3Fe`118RowY)SZoOTTnqy!dC9;#b-P6cu5} z@S`)-sSqroJ=@2>zbY6{{bpDe8G|qH%5B(mSq^>c>>ePPOiy=$B6;atlb#>mr56?s zHzQG{C-)g*$=43gkPvn9T&a3ADYV`w=K=vh_>SEt+rNBBl(f{|Gc~}|v-57rq{nDt zQ#75wSLisqx3Qi<+8EAD!K{m7B^^dsq^U_G(J-C z;kyp%KaL2U96wbr7`g{3E*>Ei+s?eoq9OkOR4BTSyEfEJ-T=;aPP5Q}ASfCN;r`;%GCI&VT^QnCdZl@79PYh(MAU1} zk+<*zbFm2d;I3zYGDeo%&pE{AEnB^)4*wl(d+|dAw89v$}t`&P4vZ!myA6r zJ3qnZIkc=ylzbm6bXVr&PsK3xU?<8|20NvN1*$H%7sD%b9I7n-c(5l8ande?d1pj6 zQho6Ot~5j*Z|Q2S16}hTALb={3`qu}ut#M!fy1M~1Y2-1Sc>a7lxn*?t;=|*PbzXrP&9g2ci1>h1(`6{r zan+T!?b@F5!*9*>4maCm9@3$td(~$3MN|II24XhsJDi0-?_+t@Px>`kZ}4+$TWLSz z>G>~(M~YrG{OBQVb!ym^8pizeH5)`I)@?)AHz>5b=wzK^Oymtq^Y|`yK+lYNEPmYgBp%Ziv@@%~T3qXSUi{555b&INT{+?fSU<>2Kq4UVt-) z$DsH)G6whnTIw(3CN*aYaccu_?ZFBfM<*s`ISH07c#OWE?xA>|7ZrrleKf_e8l6t} zT1GN05^PFg1=z)5KSslp_5#p|EIj}OazKJ^}UR#e9&kOE!F9w+HWfxiRM}?h znr~WIJzO~(N)+TjZ+3eD`w0T1Gz7kgc%}L97kUGc#{cHZoYK*%sEkJ|>_7I1jj>~kg{h`B5O&^_%iPV^ySF7a?L~y!% zgQW2~!ijj7u=CksiHQMdyt@5ky}lW5#tWnG&VfJfXi{tJSh1F$>u4CQ(dRSl;6-pc zG~>&zE?frIOMxQhi5(5se^LBt1H@UVHvXDnPu^5=u_7kVzWkEv!r`PI>LXKCna$@p z(xhdBKeBI%EVOA&AVVx*1tT0YoKv7^Pq;I*eHS;R;^3)0Y|D}_5A9iibyh%e}?f{{_hbwEM zXz`nmdQO$Tl(57tGuA@9l7U8b(~AtEhn9$g*Sd0v!4<+Wa}HZp%-%%X z%5KoZ%;=Zr`*@J;Qzf<9tDrG!4Bmt|OTX$W5kUgoN&_NO)_XEDe8{?JzT8PYV-Qc? zNVmE)X&gfu2gK>Fd7Uz1OKJ9*sT37CciR(_>f7Nnotif%1+L@w1$DCk4 zW}4<8#Wg?HMKg17?-kdS5M9SmyEi`Y;YY+so|a%Zi%&+M_(y9mxWyazq-Yt3a)7Uq zt8Hv7mWXVw#1a`pAD}fxcp7xF9=H!&J_h zV=utdK2Ns~B(NbOg?g&p`okujL{Y+I0~+T$R3V>mecQS=ly?YHzvzjx^?p7KYKUui zqoo{boujYi#Xnv^Uz>AqBfe5UrRkZ9xoe}&agBE>=E>Q*bQrciwogU!4CaO(^QlDE zNwGa97oV90HE$O#aglff_QRGZ`ef+P+ z`$ji*qB6vh<8RZD6aKKk*9*G>)KFa2l!;{LK40&d#glblS%XF`?1PD`}!RMvo!^VJ{h& zQ#**SNYBTUF3?cGP&u z2mDldn6xLzGyS>3clX_UFca{8U)I3T^1};`Ao0iRBPX;@^-lv^jy%0Yv9Q7>27xM) zd(m-^IEISkBkNWelqqxTX*WO{{>l{XuBp8zQfeIX|tUOE8&U*tk{lL3g zkCNe{FSbR$XNULXw5P`LX-IU|Nx?0x7?^ZUnc9U@)wmg}Tj=Z6gFh3fV++?IH%BrU z7_=?!8;a2r&sFOL__xckX8X2~RVi2qn8x%-UsC&xtl>jRo$9Coxit^@sZw22om6Gl z0>X1>L7w$KDT?#>g7>Tr1bCTGSWw)cGF4PtL$%Ihg zNv_N7yN_}d6*D_5it}+?9}&C6UF<59?4I6E%PgzG!VV$AQ?h`@Np#Qx3zjDimHxpf z$B#QMu;jm$bI|8ern9LxEc{gzS$89ZeKcx=x{f_s9jx8lg*T3&Y|F^XrK==~wMj+6 zQ-rCJL&TWD)zmZGG=mew;7|NkshXuM%2)YLglW}%k&moSIsjW{k~cr;(!amXy$#S* zEXPjnCTySCBe1zvL5i*$TtVEmjXNX(O6$6mzd4JmXh!GJHOjw43?OSHTQ2 zgWQC$tCBwKQK?A~W&_~Q13up;R|u!kYZ)Nj!D|iHKMNy;sYmmztFl;p_NGh(VhA0p zEvS>@87f5Uyy7x#b_5*sVG=!{-<1^1yGmh&+$`lYXqwx^}8(5e}E`& zC@1tzX&aZoaHCCD4L)8IYYkUQ!pLt`$i}#&vm^LB*espO^Uh0mwR75Esm#nVoPWyq)obrRXrMshfL~Ke`;Sjg@WilnKxKxXJ&ln7dRYn% z(wmy@3aEmoL=`h0@Bm4NLhIUa3#F@i{$+l+O7o}$fo*qciwPT^(mmpE_(4Q>2wb#z z9PRgNGG0x{_i}@_(cM2;`BOiM66cjvl*GQ>6bb+GagT^wHV_D@OwdG78tXQz&* zxRU22Nx~{aGdo<5HLU{DL(y5xAo(pwNZHN~#c~ea87~ovRb6E28r3=P=4P4Dk4>#>KMX zWWvtL7&X_7THmq(U*2b7wMm{#tlu+YEf>hGBzcqN#pQuVpv!$oW#D-Y-#sbX79Y^! z)ZyZve|+`O001(3o%Pf5)pWR`pr*Msn&S21|IPH)<5GC8R>f~X?+2Yw;CrrT2Ss0M zJil*T9I)gyofS>m`P`dl(9TizcusaiOTAJx{~_DU_xmcyq^-)T)Kz@`PuI(>L`y^Q z!?%kjnw|r8%vt7oo+b^vUuzpbH)y*Z=%#A^27TnLz3b1$^bXF8d~6{17yy`!Av37K z9%V6WFa2GoxOl2tt(cgkl=+`Db)=iBGyQtkdeC@9L=osSpgx}ngqYR6-HSs(tV_eG z{uHZBticUT=Ek@VHWl2qzaF@g2Zc2YT;CN?(;exSD6iOQ&g5)xwq<@*NY!R(Zonh( z;ENrZ-yvZ4$rx7F@NB%5=4#)lhrENjYCf>$J#J0J6ht88e^eC~!mTFxj|YDXjk%Z1 zJUq8KJ~XN?EzeW@{L6$TN+YChZ|))ZB5^4U-@IjSi<^#`5ljKmbHIoZ%Yv zdX3fwp2vKkaRuM&>=LpAUcV37ox#7iN4uSIst-k|&zr)asMAY0q3COU(Dv~VqJ-*+ z)WPUmgCRtd6qtVrqkN2<31pylVyI;D$oOnj%3)UA>5%zktwS64@_5@4o9<-2Jn-ek;9w{l;#b zseq~`+H^j)LV8h_G8PngN(B200s+K(WZ)-5-@Ng*Q@!mdQzCE0R+O@eVpH%lpY`kX(M^_@I5 zK!%WwYSg6mDl^K{`53Q$r9CBzXR1JkOT7$@8p?>IzOS%y--*Drz4OEm68t#sS0i0$ z6uWTDXS$a7)Ftc48Rmiaf2@s*_e#4Bc~4F*ZDY-&@A2aeF}%Ymw|W z+)^{RLxuA7CtFG|4#-vs=%qs>+@;J$$*r7jEK8;s?@;^6NqtRLjVuN8bMVTkW$ms# z5qfs;X8L;&oAKhj^=lkGrQPd?IdQ+@_T6A0I$1d}|0%Va?{SQS5{dtIcfwu8XUX*P z&Rz!9%#XkWyV{MR-shkB`1t&GLq|j(s`y%c`)7Pr^~d-0Jy-8>v0!bz1St7g^q-P9 zX)FV1t}7tKzx5smRs4_kjC=J20rD?{0|V6l%=jK}ox9&$NnlRdZ||FL32>HuFUCf0 zMX{JN!H#(cn>@RV=aH(?3i{=+!!1)jb~8LzJ&DCn(^QKw#7-@RNY z`|F}27AzhA?Xy&=oyUIV779>!-`^*OEqLs77P$Q5EB93TTP^EH7ozxwmgE&uRB|D9 zJ1zG@ly~|e_o{`zQl1oCfd*hsH|bEMzT3>yD%Bljpw~TXlm*Pcxqnbx=J4y|SP--N zm?854jysykL~@`QgkvMcm2qS#x(Ej1TNblh8Iz_={VRb_KPZ~9y+?qi$W)o8(NPKS zhs14r6_mGC+84bx??1N-yd0z<$m28mC7bBwx-B%`D0ed`$;PQVB@3FXNC?gHw`OKq zQfmX8*+|L7qY~a|7_kiO2QNJK98bBc#;mkPL=(h__1T-@L~6gKu{PYpde!V2%vD znK$;EiKAXLiKmGb7tve0613kh5!|Zez-&r7dPsj1#Jt;yWys1-S-aqQf{olL$gTHP z(99T+-Y^oyev0LR>M9*19nkYQ+E>*BA>u#nvMQg!Kf;HVP`t*E)Z=B&8+Yb)T9FBN z8LiCvFsq>!tG2<7|J5`%@Yr+H2p4+kc< zxmBe;{zT-n`z*2I>)7f|;w4o;EapiYY;LPBeNWF1NfJO?9@R3B7qYix1mOffsi=Dm z+KY_;#l+h!vFQEC)40$`eq|kf0CMxVZA&z&u_mS|^UfxB8Gden7u{+21iIZswJnY5 z!2_3r75*Y3lH0>}7g$(!Vy0OJwj(yQ(Nq*Ri0D4LR$WJY(u5z)&wiI-JI;qiLh5Fa zj`1fBm(jGz<$TgSB=L(y!veAnh!0OVBXU}6V5MIPqru}T-TUD}k*(XR>XuOi;|zgX z53@XeqvhPkzdct*a`$Yx*06lfRWn+OD zwfIl25}@vD(0TugrqCV#ldi*LZ^SSDk2OiN#OZE99^}5n>27n28l8gH7)jGn@wYps zRhAprPP2p{y?3o@*N5MlI9hb8maYC6ir4$q(<#s6 z{PxSOb%f2Yptbqz?!WqT-1;wC!c`$<`456z&7*^-A>P*`{xAPXK}DZ$z2z!O@trg! zoe^*%E3BaU+X|Ojd2*_PLoW0$MFD9wn2hY#T`5%f9bt?t5FL(wHrf3~_s6Yu>;n#w z-kGt2PlMh>zy7@R^EQw;|B9K)=8^t`=DsDT=MvfFPalKalmsR1XS#?%0$4EipX_0= zQ1{fL5`XHp>x=v3iI-ZCxxkySe~I~&Sm5eg7t^MT8F2m1Do>hCO>%5?6i4_x>FbOL*@= zR>sT8wPnUNE|(}pw)M^2f*Y}vPg!`1Mq}@l^U6($204LXdr^TPDi)CZ-)=LAyS!~# z;p*p=rx+89#QfQ0xWfSPU!wHqoz8B@oWG=d>%U$78p~;rKb9StPV}t0e&cg3e1{5{ zCQ5#DH8_JQ6s{YmXfNX9!dRB5xw;+eXPPz@bk_Ne4kly$?{R2UML0C(N4^>#atQFh z7PluQk+Fg{Qw%8a5my{Hy#*Pz%$~%*F8#fcmMhc(22+h>uq7-P0hRzS58_zQ!cWwe z#;UNj`8l+7UdPdi7o6PYFhOmnO?TC!WZJUpY$w-t7h}eDDh_JeW*!t@*=U^GQPJLP zJ+d7rWhw?Ori8pK38V}yxVmgD@%u*{#K83W@F>UTpc_C>CmDVKJIa`CBOuF-anSN# zuQb_NE(U*6D(G=}A={3W=~ana}nv)zCPmm@2GYY%IN*cdj7BYEg5| zpiieX9Ah4r#BV%2-?90cCDz&~M;rbUkD){=j@=>j!vg!x@?@oHaUN(yg{eSt5ncPb zy+5*Uj8OM?<%GVAKBc%zp?IM|gr5?W#}7eadG{b46Hq4X7(b~|?-!_E$XXT_`>WgqF9!ZLf9%zBbX6ES>pE`LfE-GBLzqwHj}J^U(I zvF|xfu1`|NA4^4YxTL&CoG85WEK&?|CE>#LYok|ic2kD(3Yovn^GjTV*ZYd%U{r@M z+bz*do2L9G@g-p;;H`qrJ0sUk$Bxds-uYiZB752Z)mhp<=Dx#Efu72(lT|P>8|g7k zVmFeKZ2dvEKR#ZhF*m!y(Lh2)*Hf&N>VMa_LIALM@C>E?&;&c+;OWMCFG)y-q~ zY&Tgq=wW%jG;{)bo~5}1T+i|n1KO|Mqri5qZrtuUry%vE3_|Uu8NFGF0g#^lT?OC5 zFs?f$j3?jrf3PEWEJ`d5i!k5+L;tA>A%Bl7Qo~@53^7vjIuts6;(04aZ~z-&ruF5M zjEj^+Iv&NZSVrtlIF?<-5<-1Au}{*Cb?y#qeqzH$T0wzP_SIIm<}gvp8Bs4S788f7 zvG}*FztXLCD)=<*?*0Ld6}+7NPx1_gM(STErbx$f|638uZ-jisrkpNHhG%BphV?5v znYFFL(E=sXVEyJ%BznnMVD`%AT8IMYF64g^M~bJd6RyWe7IacmRk7tI5cbol5PPe) zWm7d*E|a2K3jA{R85_e8n<(X|oh%U-Omm*w;OxIdeax4*tu%4TEpFeMk74`50&ylH z2@$2w{NTZ~(ovuV?GL7rx;8v%vwgEoN|QwC&hEJCSc)&IkTGULCm|A+9?MmJT@sBS z;X)G}>K7`Zxi_A7%bMMf`5u@F54s&|^Sa3m$6tet<`60bBKvr$}Uw)96S$jO4_pX6P7bM{(Il}i^Pl%d-W)76gc9})SIA9|5R}i^FOx(Ia1MGbA z!M>JB(MU3HgDBnT;&29IkyvaD|tA& z<60*iiq>Z9Ztsozs(e10Ar?F?il43k@m;hMi6h6JwaXe&9cMw`)Y`=~J=JZB(L*L& z439uQ9scpt!)buq`j_x3N&zBbYq@>MTR%-wLprA=WGQjb-Brn<(X?j^$(V_3H(oV-Y!=s^5i$hJtB>o zWmWe}x#&d5(Eh+J^HWPnfqVib!W(=KmWtvVY*aA1*M9LdriQU7;B7O8!jlLvcMkU}`s=+11Bo zGcJ1MSvzi9CV|HRmz&wC`lb>7dxt3mCZ1Z5Q%Za0le2Pa4D`KqUkQQYJTSp3|0f@4 zT_t>m*nlF@2j~-5@B0@2DVFW~0V!}Vx}Whn3oM3}NBn?|-FNSJj~xKG-nvN=Ol|po z4n@HTP{ZB~F@{-N@h|k77hju(7~{&XY0S&x)Ng!(qsLA}dRZ^w+PyGSs#>utPxxk4WmzZ6Q8H>=aux z(xcpkgqwk{PXunQ;~_^lakG@AeQh(ml9h><)*bb8b!vN9}hWzhM(*R>#*p1wZMvUq5VV!d*t+ig=5CQgA? uabe5X^{ zP6^Pw7N?kaRVGPr)LRT=R{*K`g1htu!p`@)F3sdsCM!L|`fBEItgl7ylr)kGoaSmA zNdMT_yIOYs2JR0fb~>xsC9sZCPm$64zgG5w0wfe5`!2{GpGQpV7Mfb*>Gk;M8rZWX z3S-VqcG51xuNgp6)BqYKrk{?g8tna*rV6LSG1gRm}Nu2eZU|C*RK1 zL!iaETbF{4Vmm-6_u%PcbXK{Z8cCDoVzWh5SW4g}rAy zD~c8F9Tv#LbzWS%bO5F#&~q;&?ld2U%K@;7%m*#(je8MqA@)&_*_!!F7F~qs=Pw^~ zR43=R6K5XIVr%j@u|MoS73s^~c~JbjYWmmm?*ljV{eh68ofIfrDDGird58Txj%XRQ z9;+`kpEjm~QNW`Rd%vQUq)jL1_=-yOk1$Hoht*=hn}G4}RB1H;^sR54QL)^ylC{Rz z)wixcU7yP>LUJ-eA21nIu+N%q@~`KE(&ZPtIo_hPjej`F#;G^%8hw_I2xZ*_9mpPA zm>;&fgPBg++b&(93omd?-QygVXcJbd=3^^D}bROV~V}HCh`udT|0q?J8Lssa9oodd{K^9pPo-;y^^9#%04!N^Ao0G4Z zWB#MGd_eRJWcOTq#TB#RVLbBD{h#EY?z~slX3aV}78wr^@K0h9g`oGrAsAWY(&>5z z8H&WkZXjSZM6F`^0Ux~6Mm&ADw$8=F)!-KQiox>n&z4ko8*-Vw#wEJIyO_8jFEShk z%H7Xc{@5*M~Eq;e~!3KG! zAKqzPEa7Xna=O=-3JKA;oY&nyL?7Y;)oR&;oj$J0L%Lb*CjO)r7FyYBa^POSyb9MD zGE2I#HP0*RIeW~0CSV>mwDRiZ_%bzh&c^%o$g^9@kT0|U7#Hs4WP=G$vYA@0gI_6H zg;mVU2Tk%BUc62@zB}dS+usOp*G~OOIht7^Mpp`>9C2xyfra~iym7XUurq%n+y++9 z_2fLb{47*|K%$-#B*&lgwpG)KE3$w3q3qepKG2?Kg<*Z5U{l;l3Mu}o1Y^ZDGL|#w z^CmB0NzfjrA~zr^6^V?ZhYSM{rrWb3mL+%D1~NmZ=lyPr3(I5uaJ<5pRoZoDmZF4j z)qd;1EyFliu){S>5*Pp1WayN81@kyRwwXO?L{GQO8r~C_j(^Fnk8g0>XYLX*&`;~nxbXFA7<+S3Kkn%qagg!%?9s*WY_PhW8Z)u= zq01a)QcWXB^~sL2HROD6(Y)$KS^$%j0iwq4k(RBg#Ykno4DyIKa^SKvu*i3hHY&*h z3V8lOR&O%x(Y3@!3}!;!GtW5Y;(>cy$(0w7p2@2*m2lCLH@n%gu)l#@@K!sXGUbbb zE1!|enunO41IIAU>>vUs#xcyyw%05QRg(Er-qHi0vs?B zFR|?s7jpcJ4W*T5>Br6YZ4G!>)NOH{%&O$ zyojjZb20zVV#mP};}>4-7{5Y1s)G!}7SZ|t%@)~f7unpf(-h{;>z_@cxH$b$bX+m> zs_XVKrD1m~G^uM+P!6a@sZ-Vh-W;Itr~l`#4KZkt%Xm&lxKb&Y zguRr>&Nz2$rK#tJsk=n(BiSRk+Our>P=XvfxPsGG@{%egUHhMD%G}UD{7wvnq{_!? zgz-LhVyjIxZ=VLf9fEZTH2^;BDMxilV`f;%Y7VwdWjWrPjom3RAy*Du}I zREsVi3=O}BOWFW`+V4bn3rj$_+WbbfswC=#*Zfc5o|ad9ej}CXlaa6MeJLNy^(bqe zqdG!upnwYbGH$<-Wdzj1Er6!(D+!W&;R-Ge-m2&6E@C` zC->dAd6+?g&%w~55TtgM$>Xb&U%rOhT_gp--Hs~~7GQ@HRE0qsh9io03nOgWgNeRW zGN!CsB3hw4|0Pv7B9c;SxS}N!TNy6H_ebwM)WnBz5Sl;r?Af?QG@aeVu2&gWs>kHU z7rv|6-5jILyG$`|mDaxl;!~8mejDbi$<&}=p!XA?+X=_x{p+N_M>+Addu+;0Iw9$g z!Ga|r+DofnYRrIaFAZwp*YLeGU}VV5E5)&Ps}U*U3=7!dMS*9mVbfM9YWiX5NI=Pb ze8AJ$Y9#mv!01sW(`a74rT+m+OAT8Qf8QiCQC|y7kv7XL{_CHUS`H_li60ue!H-C< z)$-Ksan>j$$LHZWId=QbSoMwpF2rfa>)3t{mOlnGrwoIBzfRe0{v+)7IN#{^l33|k$#2lpq_gBN7zkw(fqF% z@wT%PaPm>m&mLq=k8aK0jzZM3mddRqH6g{;my6lSoJ<}+Gm9*F4rL%Q<;6v2mMYo6Eeu@EUELB=(Gao83aHg zpSe3uH`M%Cqbv=DJa0sow zQ^vmMxp{M9zaZjV7%5rrfWHL+H3#T%y`HmE!+CcqqfohBEw`^P*1vk=>t~!BJsff z)15~u;08_^`^rT`Sk8L2V44*D67>il{snKo>%vCdUbNzx6vYrGhP8Ik>O1+ub_kJk z-iqBa;>kQ}*!V*1^}lHqEMdV!f@=uN)9iyy2E%Q2XDIPc_aA};dJ%s#N1BdJDulqb zmYRCg>P?@l9Fcv8k34!)YX-;7z)0WE`KafCe<|q~V&<=OCzE(@nwUWqo&O72qK%Fi zIep%)7!}Uu$WD_);+*QhCQrpOOIh9iL4CYy@)N&v%;}$o`vqoh6?+n^+}*Z-Q$8)_ z(tyJtw(z>`9n>1EW&)*h9^wbi3VZbP(m)tDwCl2fY2obyi1}{^pq_ZUKp+TN-51{K z@W#~p+X|{@{DMsnsU1yR_T3WZ_lpJ4-=F`*dBMEK_rJ)Jsx6f5(vt71gyrz#cwy$E zt6i%d+yxRoh}Z2r^ae9nP?+rr&a4C~<76Cwb((=Vjamzr!i?0MOFKJ!3Xs7@XQ(3VLLW!!;Xu^8Wz0s+>AOsf-|no4s;}uYWwk1?Unrj&`VJe z-t$-I%z&y#b}gBQOwaactH&9zUN=2^Y4LuX+ic^SIibs%&qQT3IGCHW#=>Ju(9}Ki z3jt#jtBb?k&Ww)SjS024k!J(ZyV!w#)zxWd+(KNV|C@Ybm>n0!j$q=cim>1F)tQRX zJt5w>IlGGAUyWK~3_`F=)FfcpeKC>E*VBrf(eESqOQf zAmw1XxMM(bpY!Opy~j-to9S1bh}P`~dT&ZVOERCs9g4kPJy&~d^?1si z>`ohJQf;E(?N^ORO4a!TrRKMU{869m+|X%z-P)iHtPCHyg%SSwl1f`nIRc>g#UVq< z-4n>rQ^PF^T?A?MIKYEeN&RaP-y#n#gTnSthT1hLflKymJ-o^rvaruyC4S#tu58M_ zi#c*6y&YFh*U%yV=UG^#pW@MO#66akT(dG}e$~w%R#-YNfHjQY(9qdpb(`ji7 z$B~f9XoYSq9`>0kxN_+sZ2l2_$+KHpk=h*2pb-SRHo<&e9I61RWd^Y^DO0t79Z=%7 zvzE}Z;qvjH!fuS3+2ztHwXBEgv%^~v)_;Esgs)uXK#}K$sM8(V1@TTs=G7C7Y2Wy; zYtY#SdQrf-`7ls(%Xr(#C*jwy=S0-i1}*>`6!5tS3mp@HQLeXpGj&~F2d~k(`pY>m z4B&YbDSKO>)4ic<<8&Ed7?(V zhdN~ve%5^Pmc8YTDb#P=?C9b_a; zEMDZ8{xDU{C2{Z7tWbDgpCfy&Nhxok(i^y^e~htUg{q5A#}9qwToqXgiMrpXluSn- zw;;9~&#)YTD=)+%4cWxCpK!`OHj_FY3)H?0jdFiZN7?YpU8if0izUtlziEW%!~But zKQnc7X;JMyP&i+Om%4;0ay>ZVLtwPRnH~%qe4g@@zX}?n1x*+#EA3rD^tbXxmg`IY z$rLxusbwEyn%pRIdUAB%{}b}hpvhn)!~H5=M7Dcee~VY`r|$EudK}@Hv0RYg(?M;q zswquLI+tn(^U-Hy(?EUKv3DtwSUrUzUkCquK2}>ZQ$!~>1}_1IW+Y>m4wb;yddR*f zZ)!VL#mnO^3BUmjis_;CEuC$ZLfS41Z9It*86 zT_PkyON{qV=4R)!hH}5d44Luw=R;vquEf=iAeV>H35GZuCyn91I+s+3NX0iUbw5mIAegf2myfQA3&YRKBO=Y;;y!Jvd@n(fUaY;3AN_&J_le_UyRu?Z z9Hj%&$4QVo$8;^<9D432ruO~sOdi2^g9ol_Iqf#&-wPM@x0*+cWcGD(4t3q+M|R~e zDQYVCI60*GcQ@e6@#E=w_3O60=g=(`2n?}VH6zn`VVI$<@4|3&H;Mevj=W`0EE02; z+Nk5aSV=fcDsrgV9K}mI5N5k@>*$LytLuxzvy+ZZ`}$X~X%obrX(eQ}S&=x&WxVy` zp-dpFb1o<8Y5${udT2paN6ymWlyv(fy)b@vW@rS3H`5svg<`#%I z8d6OEZZZ(24dpjjS;$sm!Go1)p#VNkh;K)!#hzoHx-?eJOW!eIV3+Vd z;;oX$j#g%RYyKki)9m>;9)fo|#Y{iPD`AwBmo08o_Em3POMbDc+b!2f6SVWprbR^e zO~6&h=C@T+VTe)i6xTLc#A5W$^;w^er)y@e)@V_ypipmJBG@(0AOd=rI0*HwIuTw` z#&H%?BuP?2rh-xndAR%$@jA%n^~8k|hDe&-)cEr}yGZvN`}hi9GBURI2{CE~wp7iZ7KT0aj&`Lk_|FTL|=C1-OZgv<3sTDe;>GJoFQ+rUDg66#UH)>iFO z&;4}s_cQ1v0zbtU3rPQCbG=4%j((4&`YE=B=f(4uWN^~Fxn@U0O3(x({##U<84)vo z=b7`bq;BHUJN;rMoioRBbrX2~i#n#@sv@?BT`Q!Ih1rYt=^Libn#lMgCYzrplTh4^ z^m8H`gvMlH*bah1S{0VmA$ZXqhHh2>_korGOG37hiDHJ3jRtRXks>_$&KW~|{G)F* zDu{PMPVp5?wPM8Sb1>Ni|DNl*oCp>uxEK=|9DZafrsKuh*xIHY(D0-@;b97u=)bvb z_Sd`XB%*N>w_bx`X^u+6nQuTupJf?gK6iYjHgoKLkw>p(7xgJkC{tG_98MHBy%ue0 zoh>fwQNq#Wlp|e}I^?(Gnv%zU)foyb`C0c)LYGgW4;|FW7b>XmarPd_{Q&{HoNRYG z#~}m4tUMUX=Kw;C1kT@6J0|N(<)s*$a|elpmiw~rRTlNkn)jPs#Du;MJlO>)?ykLw z<2X;MyN-XAA_2gbKRdhQ64vxNSHdqj6jLwiwiEf?--5-Q9o?-gXZ3kZNWRSCqlp^* zz(kGQe<1yXyWCF+d2Y#+ftr@H>Rm!yw=Z~V(U zPf|%rm_%?VNZ88pmfLT6w-CHlAyPg3Gjk#8^Yodl;Yu_d6{-2PvyDn+l5GGfVuc&%t|)X}Z1hX+ zn6z9_s6abMkn+PgXzAtG%1Sa{gy)tGs_^QUZpUyAGxo~CA8u_oqmU!gZ$rPoU~9!_ zLU@$1MDCmt)>~ZX&IeEO6r&bjhpn7-g2z?lato>VcjtJ*a8%^vW-bMo-yJd^v}*MW zT?lPS>i(9DwpuPQc$*^O^iNwU54{IQ4?02-6p|>Wu13*3hbu4aE}MgedK2*Hl@kB` zG{@$dOqk~#A`Ie$8kw>?x?28w!i9aKhNs21XrSx~5$p2bnz;XXhU#Cr+P=Q?-)+>1 zKiloP!!R;QvC#CA0|mI4iS_PO$|Ii^Zxj&^H&mI)dkfy;1-ANKRRAB@XM0h*U0fck z(>1%>Xy|>;LNoX*mXFRyx)o!83~a3t%5%=8%~X5yMy=qzpFoZRY$OIdi;`fY^Q)?9 z70);Po&O-4$K4?{oBLN4ha3Pc45$_RD1<+dJs;uvXX9iywRtMT&`Z=C`J(c}F>fX3 za(d%4(ouxP^sC;fhp7;i4yC{XE8{KCjZ7LZ3RQeO>z@{Pg5@^Fhj}+0n$IA$NAH<2 zHJ%Y0k-po4>1)G~2?-ANmJ^Q^8h5_l1KJW(s^ZQoCMqHGkz3O7GO>djzx6d>KheCwy3=|aO~w!ez`Z!0um33%oK)OhuY>%k7c&o(wSjO4-nv(zUyv6yh* zd)G1Vyq0-E7FDk9M9(+mKV{ZE8t-1wa!eh0CJ@AM6^OT=lbkX?DoLWhe(neVK2D!{ zm3<-pBG-$#!A51p@N!F1r@a1E6f56=Y}1RT35xy6l<4TEHrY8@E&HTZVVW^57hmA9Ijyq~FJpyKtIz#0Z4^%;DueG@9)zUdcKV>ZI5>+G<6?HUBH4UQCDfWv z=8C18nAmL>YYMJfU5sDAyeGd|j%ynq#20&8M~jhsbrA4Bq2JpN*n+52zTbGA{*Clj zmb`y9(Q;i9WVE%s5$A5P($11{sDba+VmQ^=wQlTcFA4Uz=ssIgNsU5&8jn-Xt$1O^ z3$;TR%5T2oGWD)?%pDD1V?K8)cn-Tz;hYp5&Hg=I-$xOqf|W_eLe$M?K3ko?6>vdH zt&lq>?3K~>;pkziGe%@F(nk?%W63tYa5)mc9A`qABi1@KH+rzzt5FzoOSQD_ zq9>W;c(R4n`+~ z#bmsV&R1_LKIeyoWfg^=^7_p&vB+2v#Q6WC)6KO5VsHb*JRAZ!GgxiUNYCg`T)E$u zmbkSuvg!yMN<{`PRxJdUZlJXWTozikBjo-sn$G&K>Hm%TG$JLS(o94_KPp|L1|lV8 z)7{eD3`Dww(KQehlm_V--7o>^X29rXjOESuz908Lu=g)}T#xH@opYW?>U%ju9JVV# zIH1_q4bo}@ljg~qp!nJaJjql=@jQ+!2!v79;s+=*5z%|xwaI`Onp}pj6KNVR>(mQ2 zU%m=`h;W@iSl)_?36F~M`lpzP8zK1XPz4`3mskWvOTRo)m*^L7w!SI2osr`yY23WH zuR1G>e5N^HsvU><4g<{X=?cv>dEzdx0(8Dd;xFn4586tPbwUbR(}@J)+ReN|mV^v8 z46N7ruALffz*kxY^1<7U3ftSTzerk=fOBXTCwl)UL0$(QwSYEl!9A*Cr5r>G1?~48 zUg3+s4)}Sk$?uYYCpX;r_T_AH%x z=KN)iqgnN@`({WnIOVSpITM9sPiN{VwJMw~`;VX-yH>Q-_qY`~nTvu$%2^pXFXBwS3xyh6}<_%AIU!^H>D9olT(-LbRd63mNtnrhX zKFZsA3ktNl)Q*u!SU0^c{6`X1*<9{f<3Tg-zB6_)po4B@;$0Lek}AnEn6*N`4&0e- zP8AGv2#N-JH|RE*S@#*7M#$TEm@YwxYL(dERY{N^A&0tov2AP-k`BkH3|Di((_;586lJl0R@g2MF+&q2LOzW{WtJFs7sjSRt&eP9XQJK0pdsJt2DAiit%b?W(4~_CPN#4K z0oDPvV>TAE;v=bRA1Dxkfhc7{S3&yk3+(c%_m51L~h-a#S#+! z$kdC%YuK89CHM%sJeqm#JHbdL_Tz^f+z~psEhnA1#|e^R44+ z0nkdfTccl%Rq-M|jVB?_~2%$%~ohqu8 ztO^%lRO|N5cNxbY7Go93x81Lsb8w7_GH=8q)`RpehjO-FvhZbh zXVZPjR2@-fvs%KmU9`aLgPP=4pnH5=P-X3i*lbhyJ?W(#Yc0x#Op<$6mUE`fSi7JN zMoZMk%U-rT!N=l*vS7<>);o(o_mgJwxcD==iZp}&dreeqm76yKt!%p1ZNERhK)~xY z0(bZCt{ZbQR6^_D#~WHUa{)r+xjv5t)QC6T^$l#jcoMOtM>+%4-&y?@RjKk|qmM+| z;V(rQwm{vtkx8Qg+$@~V!kg133G47FGV$r5I0Tm3)rQ$M$=W}Od+-ktOluE z7XAn9TZj7;{x^@u70As)m2yoUnEe07>y9G0blde4uNW9M zaP#vWtK4AXMmwQCXXToBxY$UnIzX7F*T2Kx`mI?*H)33H`Pt2B;yA813SL$bo8iqNC&f8*(&1^mT6{8vAW|ITT=lQ_B)mkwxK zV<9=qb}ZuvnS(?nb}||*#*T|N6o1y;^j%O4wc!fcJT`l%zU&vcBDv&Yx)p@3dR2a7 z-4sa8Or)Gp`o^PXXMpY%c{5lvTNXN(FJDPzY($RAI;-IGrb4CL_La!|+kc9_#w)9+ zl{@%&UH7S?vi9;h@#W1!$JDGr)XL+4n!dj*Qfao$MfFwAZ|$a(cs~=r^d%YyEzV^n zp3neWB4JI(C;cl}wWoi>axN&nU)t62H{~m1_Joo;HlFQdW)r2nfbK4WP zd$-$Oy?2yv@I^TuCj7g+5^aQDT4?WWUEp$$yw)E1=28@m5ZFgeI^(p_?cg&m=PLY- zHgoOD?I_O$PVoxzs-N%EbW1=sf0Hf$$4ac%V_2GOr*%x>;ujOjc9|*;Jt&Hln|KWL zE{XTWNioYB&+{SUJJ3gU$m*T!1UqP*Y+fdts7S@69fJ;k8x*|vg+0qFnOn7bo7`k$%7PKt`Fh&{QEw;2#n-7J30u2! z-x_3keE->3Aza8xK2%j^ejUy+o_NGQqatQ^fM4|9<}1@o(v7@`JD*7QRGIzRIEsQz z0a^Uh#wj*PN9I!Xv`)p$-a!^U0KfAM(FM;}n%*mEsnRz%R9v@!e{(9_Tf3=?gn++O z20g9CURB=V70bsUaTa;`;|lWca&OfzPS|BckIz& z$sB0eYI$TCx&PIrTYWpXoC{E|`}5~`ASfOJuTPE`jV~i;H_cDEx1=xjvpw%b*U@!} zXnIBZ&XxT2VU4qo6e}xx5wE&?$0#szruJ4#iQ_X(Ou!{L(R06Y?xb+BXvzMe+12jb zj>ARIV#wOKAFMv#AG4kN+jf8{1FM&BM`P^-fwMz5>_U8q3&8=;!NT!4n70D4B7|ea zocpIsRLc&EN_f+L?W>`Y^F!mG>0WO`M!yGAL_d4`ZK=R6f7L)^w(1SHM*SVmpQS(c zWlRH!PQ>@D*K;5bU$Z{sv2vNgdh1u?-yX+P22*>`2V5p#aa@%VcAJg zqyI{WuRPiRg1B!&+)n)q!-@#8QsOf+>>7%iPy~SCk5-9|AMly50R}l2R&Wx1AS*88 zLjD{K&dR}bC{CNMcIdMgP8vtmLAj zI(jG9PUr}ZmMoB-;2V+rd{#W!JqYpuKfM!MYs^u7gRMKfla)d4m@EGx{p*z|`&!28 zJtwWRhtTcRPz00dhXjO7|7rnBrDbS@u9os+xf|v)OuHGSn;iZk49SziR5qh4qC;z9 zku7!hh9?svw3K!AROsrV0Gxa(pmc0TEO~E}ft;vzA{c^l;8`fc1mICyhY4P7Zz9Y_ zD@4A=C?!&fECh(08ku7c~tc2EguI`+K?n z9xdl*hrgsgUMeBM5-CXDyO4yfbHl9TU5Zbq{#Z&e{6T~qbCVk~vw58Gyq`17v5W6z z*B6-i$xiK|G*zw}RH{oqCrkmzff8rxW|WC7LMPI7op5x&ujI?og|@;3N4$XU6?^~3 z>N#sG|CYyBUmHwsdwHKf4|kWOD6^vAd}t^^jU7_O_3sNoYUUXl2rpmc{u>WOg?%Cy zv&dyVen^ro;?8S!N%-lJbeo{Wqz9ol9LBEM8P?(ZuH~xu4G8}5Wy_E9d6d>4=`1b2wm?ZgE zTDvoR>lL8z+`PnrzSroHJ^!4Jg8F$##gYdsb{ky1Nz{3LrH!5j?N(w-^fw+yY0Q_= zz;J>14e6#m_k42wzY=f{8`vN}c|)ZYl44U z59eJ^q%%=VBnd!xnc%F}oq54i8U%Xt8%2&_h^8K_Kg0PL`f+Ze&Vu*RE0l7k->r>a zRed&oxpeo~ovpvT$GM-O=($9??q91$F`4@aJ%D>&*X3!Hp=QS}Mqfx~8#52m%*j=T zKR*MSx1ksv&)mhC_4zFC9hBtOrGchfg;eg-_PurM6PaE0Ux0Fb(m#G$#lY=o#i1)X z<q^Ke_-|_^03qhRc1lA6{pGBiN60x|aslIVu&N=ezu+(Y zVL4`j{>wWVl~Ok~%s$quOMv-I-EJNfcyGXLHDvF2eBh5dp6$jRwkzAo_#xF*-8k1BxIH4gi;>Sjo~77G*|ws)u^!IU`*UM`7`A8qh03qs zHL%FRh&5d8tNX;sZYko~x$B9~0yT3X5533AYLw3hKZ`?Sy8$sL%j~#!U+60%n2Ok) zt|LOai3`+0WQqal9~!t5f6lRUhu24~p)w`78VaqY2do-I9cR5}7^l#S%O03_Iu{J} z48Q%{d?d}kd{ThO-1?I8k~ovkvosO3 zG>wKc$1L9Jo$+x+)ndftisw| z1zmb{w~GAu<8nXtFrEr29z}?GKKdVDjK4e``~XS{OpT-SDsc_HqPompoiD$T635$( z3AmhafeS&r!X?@ZXx*0vt)g9J$xZcc5XW zOCuUrTcfmcM<)4_innkJsmdLzpriZ)H!-p?g27Rgd~pHWga3>~qV{Cf+OKqjmULr~ zgkMY7!$KV@S^0LlJyE=T_bB&3;(rjZsNuLpuStHTWlU>M^|d@npH_0gxHXo zWA!9Rs8}||U`aEbdy1Up$K!uLLy=dySW&Th7Oft9;tuk!VHHLHpw}LQf4yo8rZxTS zvtVSF`$FSA&E!F(Uj|PSzJ2U8ZD0t{jFpn|-=Ku~Y16;{j?r|OrSm0H(RKD<^$3?5 zL2X-B8uZ7h>?AJrEq_sp~+G;r?4KILH3ULkTbq{ zXJpfN&Nm?ecqyOJIk{y5mDhasqfd9~A}O1#>mXlYw@Mhkdw`>fx(Ah>GQaY`{pYJ1 zJnSM~?_f=Q)nLhB1Xk5Nep*RH%E7?Bvn;F4oAN^p^XGh4f%3n4oe#pdRA3|clc<&> zhVTjp-v(aH59V=i9&8aodr@q7y|-~Q2I!RFfHnX0PE;_^r{F5ZD~7QHOZ|Webq-kc z@U@844?IF{-ZNq{@)dq!^UibhshiP6f0^gEoTu$$o|eZfZvy{-jaY{8kkc0MIHuo9 zc-~CM=avW6&(LKUN+v=@=vo1E-u37;h^U^rWnTA}>2l+h?DDr2{<3lWGnG<0XMBFu zQMuepKtts3!;oz`EK9Grr?OdG3?!H=WXt9nf`VV*6qIKDYxBw{N*Zz@xqx>=1j@I~ z=f9L!Vq&fO8g00ltzKj(N}{KP;>dIBtn#+H%uOH9TQDfE;YkZ9Mmd(HuKc}-#;B^3 zWl+E;x2_Z^GzLzmSh0V9SMF72Dzn(B_BT^D@m1PXL_7CtV*f?U^{gKVfU0|J-Q#a* ze5q?#E3A@z)}f@jT=&98ded_k8a=p9zRZIOCl0OpV~4=FeZ8oGJr>z-@FLu+Ir0+? zZnWy^p-_SAh1h;p*ply|kgxTm$Y*jmYT+V&%KjifWsTb^0Mpr%Nf6_$YjWofB zuzg2t7!Q2=uP7Q`L0)C%>0aU*n{@hPr&AAxndX!#g=rN@;r;c9RzWQca`_q1N?o(N zci|(8QD)8f0~pGA83!+$oQ=p%*=(6*-8TL@cC{F1k{QCP0ON+%RCKw~m?p{ZpWjA{&l(-+ckR4c8vIkbs5OIptfkEq<+q zf2$(ne|Ei=&ZcdC3_EyXIg?%v1koMP;qboV1_d0lBTs{3P$WY1M~+0curs%telX}i za|9S2>KU+ULS{=CI|r+uI49t^jj0Au@Fji(mzZA^gaE6AnNoDpYor5$dTGf!GcDR` zrMly<98?k?`w#uzLRHe)1!;aeQh^o>xrj%)+g}eks^9J0sUi0OYV_TGddyBn_n7jj z|D`Ksp?u;=Iep{QNS+%s|n^}5rMU)Us05IaIJ7QRmxI@Z#B&#$Gt zZT;#g_vfN%^QJYw?M1{14- z4>C6&o%IR;sLy(b@4Aq9+_t=J^@ikgg}@mj99C#iYLc;Q~$i z&mdEHuL136ZbzP#!*9UzlaVzeHm@Z>gyR(uxz0P5_Y9AE-26_*3E{JUYxIsB{45(` zJGMliNM|{XC3`K|V=OTSm@y|Y2)=wPgAAWdvFV$R8L{IC&0EI{w4il8>4)yhuO^|`yjt5tnmA`71E+!5(?G5T;K9cTF zAodHrM{5oh=H>lJD>B~WPcQvL8U5V@fl)Esie8BT!0iP%JjV6k+~acwqZQ|80rVE* z$2Z9su+xI*nq+Wg9Z=h-wM0*Wn-JU25`pQ2}sz5vAh~GWJ|)>zpbq4)v;Cf*{%nN=zxanJI6XZ zJPEH3&R-H=|2Gg@{Ph6M;<=;@cNabt@xUq7>U0=8*w0o4?+`2p%*^oD?8DYksq*)D zX4p%DA9e~?+s8&!^wjUfyrHje?f2u{4hj7W%XR!ZM5DGjUBD9V9{EZ+fs!S70|BkS z3=d=V_&N76nIyeyuCKiATM)B&^z|2?7Y}beqnL!Br%pG6qYu|JPp|Sfv{fW`awZ=U zHWI44+fO_r_cN0G3>0w^ji55He*diTmJ;Z6FZ?r^p&TPxCid%aD!s{fWOPOJ;3s`# z@P-ZB5?{?BKK!j@&N}V5A*F}5mD*8@yx=NlFv(5V-LC5jVGWAmZiJ!-c!bCbz)&Bz zRkVmg6hn~a?2iuKDx}NmDV$?o>`V?#y54(11rj1@+NrOs>=>PKh%6Ds4A7GNyHQ|{ zWlow-Q7d_qYDzZ?sKw0!I=FO!S&Ou8#32%rILyTMGJNw$pw# zaQ`fs;F<=2wGCEh2nQCdzcsP;u$^0=D9?`D%M4G>%MIFXsV3?D_0*UewBgpraMuPS z&=qWLE6zG1BaVO988*)JMleK9oGza2dB&WP1L3Rh^QLqLYsW9cHOvn_`;}{%e#$my zmT7*urjVStv>`A5(cF^0)wUQ7txYSc(yGR7koE7|6KcM~qI-3JKNDh~5Wu|mzx|@G zAn9?oxSE_A@zv|Zs>_L_s(LlEj_H9Z$MGt}wu*!uu^?5qnYrtc#^(dicYj_J)#Vgg z!4;7~lLAj3=+b#rLeWiy$C-w0sR#IEm5-;V*POn%k}%&RSpvJVzMtNbfDVIA;5Z}~ z59jtd>Mc525Wwwh02cIpZUtQsfqUx1REP^Ys^ZXdR7`O0o>}R8 zRJXN7?l1%6p8eMsjZzBWsAu|U|L3sB#R56>1<6Gzbu=l3R|#+ggWEE=iJFs)dkee_ zs$KQGFQ+fmW$*XJbEBIlZ!D#%SseE(DbaAF&Nh7~yLL0TWJlzMm;>WKILlBxx7xxf zb=Duro?%|QhvVoRiKQocL5r4ZtidR~4FQLZ;|q-kG3inl5B$C*C1$DSM+l7HBPo(A z`8ibfH>)epm|v^#{uudvo&Lc?_K{(cln~}MpdI(6M%03S&Q`OuMOIkLsTwyR?1yf7 z2!O6@<1VEKKAhflgO*sVFPpWfj(c14ZFICJIU3|)_d+OjM^=a3WF$7&C@^2PPM4p& zZzKa@w1^Y!*~(@TAN{T9dg-gAM=?vM?C%RWoXVfGz(|Qc%B&0A&&WiJP9pOxvTZb( zzl_*&tGW!LJ(my*0=qFndOT&Rk8DbU^C`vC&6Bg1^**37c=p>tKKo%d$v1H(ffYSj z(p^S@T=rVT@smLek#auwzfj|oJ+6!g&y(6kJ=LzfXY+3Ouj5BkY!l9?7iOq5MeohJui zAXe%Vn33bPhyEK+D!XN$td~DXrbzK$)$0A8vveBnzi0JUL&{nE8hxq`588bY{u^s2 zJr&yPt39vA^1)qF50wUC^4RZ*?PwVv6HyqGm=S(3kli-=aOgy2Duo- zW$(O09d9}>wx>INf2L-emgunM1{{ewC{#ABmxAW9C<b!cACu| zGX+_h31<%{1kJQ-z!NZ)!D43E)s|LPy1U^OQdg@#&f`e$mWe3j>N?}mT7Vff>JDS> z9a%S+u>q(y*lTSfOh}U&T?jcAt1{gcqJ{li-J8TU?GkN(fk|>;S?<5V!;5gj{%SKG zV>Ze7%{WM@Kf=0Ff0hy&@~AI&;+gpVZ@B{jALFAE(|=5ztls1&Dgc7yW?mak-fOjK zN=ODL_@){XUu3ks@usKwt;(4Px3M$_3wQM%w}#{fYGcyFTTC`@-76{bKY!*MqPOF^ zUvEOfyr?h|^5IlXcj4zhCwA^PskcU{>}}^_*xyEVp;^gNxJNvl60FQxw_b7@2U-A_ z9)}z-tmSj)`$kM>7kJ3n1W+s8_yS*3%eZfR`u;=qaLq_DEZ@T7EBrgcXp$GJ$1csY zFvRS>TYD=b>8YI0?C0K2DydAvY$>6a{uTHk#1FzapA_!8p34Whe!U=YLALXapzo3- zPwgrzeZ|7MX)XMDKl1ZDo|gG(upo1PpA@pp)Q*vk9DwFlsJZVuN?*lcw7Mzble^vt zH};waI?lin57=|jQKSNaYT`;xo3#Abw0a5`I>LmJjti2g#jxa_YeOl!Gv7DPADpyW*zx?ztrJ}E*amv<5Y=|S6_X{5!r~S&dH3-SFDk_YMi)9O$`$j5e zA3*cROSkyk$v89-h#Ns(1G09!6HlLKpQIzRDzH0OQT=j_#`!szURexE?H`M1Kz+LP+ z=0^Tgb2Qv;y?X7|A$b#%Hm$2kG|UE80d^Wu`=VS}4YO@x&m(DO9rtQND6nI)FNx1>ap!D7$+-G9=FRpK`Ai8X<<~$~))B zt#K5I0bk`~x*Re`CKdE&-wiXi0ZAX{y{)m9maB6!lKkV~&oC+2@6mp$DivymrR>Kv zf0T;4k`N)x8uu`0c66uKPk9Lrg<7$FXzYj_YT0C>C{5*vT+TSUM)zzfN>PiTpopSSXHjclfMqcX53Z0z!hb$I3UwvXvoH-Nz~yWOn#bO6ZiO zk1-4SPUU9PpY7Z-6&H(VqW9TytRUPV7FiweoTroxS@fY1yrF~4SM?&v1jc%cx4N7y%=f5RL&+4 zd-`K`=!vvC@UTj(16h9|l-iL8gh7WhK=+L070o(s+yL$#LeK{;a-c8%jXV3*5_RYakd>#BVrJlik!u1Vuem4U4+Ar}ecmlqjMzO$LS zf-;nhe_t|Kz$wkdlUYExr2<6c=M|MaUzV93)-QD@AC!e;v|~NYD6YCwtaZQwjW~$* zvXHceheJ->!~^#~yq>fLkj#Gr7i#&PKMf86T%9x3oYyv^4!8OVlR2zdzwcFCQUH3+ zj)I&X1@KHpzvr3u(u{!*8R=wr%gfJsHWhhNv;*3?8<}ANMW{U0nNMZlPr;~(sf||-!q4s z{)F9b4!iEs-E$wP=^>#xocxLJ_8o~t?~~AJ*dDjkZ$A1^gLgWgvbcu{;hnQ2Dr^rt z7r*)2H4K)PDLuMdlkb|CBag9dGp8M?oO15*P^n;40#hj zg*DDnZp3QW{Rf#pEW2@)pd2lt_F7{ zBRHJGcCMb=RS-B}uMinsz%>NsvZA}%q|d`XB!kz5q`-p8H1o?nSJv&JmSS^SQ%@fF zxZM^Mbo38MJJ%3`P^wiU{a3D)(u0=zpCdDGmHfW`UKVtmF;!EiYJ8y znnuNSysCX%%zO;rUjeOaRzc^%G>TRvdm?FE?#6u7_EX@a%Oupqo)9!%e_xMq zH_Ga4)G%LrB-g-g>6#*35Od4KDCSrP9K~_QsIaD^N`-gqnCN_El-+#)Y=jV#;0-Mk zsBF#&ZFxBAQFTb$)YkXnOMp+uh#K0B3$rfvartjO-875$P15G$&-iHxZm!REsBj}f z%lH~M!L@0ABw=OiLE^{yKQ#8-Y>Ux#9qO)ujK-f-&noJh=A==)#;G$Zwq~M|9K?-G z2)P7J^UVDNny%k{;$8I8Y>8)${*KR;S|dqJt0;O!b-HYrOy+e=Z}}($6152QAN1gM zWWLh>d9q-Fl_=2Sza%vEvS*&=?o!vGU^8x*_hh&)wv{U9Pe~70O}WTs+=pf#UHQL| zh^{Aj%@LF1za-FJ9#EbD+=YicP}{v4&U9!J+a_F>*U(j`#&yt% zJma|uy~dLw>|0Z&lN+_DEsA@se`yO;dsW@9rtyEx-S}OSRb9Wg6NpISRmp176SFpk z9n1+TgP3=`6mkg;2*&QkRbecFtdRDgoZL%gWXsxUS{*%Y;FT4!JO42)A`XbBSeyrq zuI!!$SD3k+@KBr0#e_rs11&N~JjwcF?;5??F@V?#226e*5}@wkY32iD(u8ZnEV!g;S{D}z9F6;|6Z{z zo3&0HV<#po-zlw^D)zgvVmNCt?zh1?tUV_9v4J-9s`P2b`$Ffg--A8 zNW^;$5OS!Vd}`S=P|~X)E7nBo=8Gw1XLAFUQZD-?Njx1r#7q7J6%=!ig(rR3@(vX; z-I05?8st=A8+>^k7mj^B${ZcOezd$>o>2)D^UV#e3+`0NNXg?25(ZEVv0rl6q#ynu z=dk?p3nJ%3=C~S*YysEaXhdz=x_?YvW(@eiY&YSqw0xqTx0)ZX z)QlI!Pl2H2YuQ-u`ea`Zoz?e6jwvAGb6U#}u`(k7*NI!L_X{6|Z^8}vj@0tL!PRlO zBL@Jwx(o`eVp9HlHjcm7OgR)SnKziu^y?Gq;n2SJ>=yle|7rywC-`FhTh*NT+iJ7OE{#SLaJ$t3+l+R2&G+&NAgsn|ko_b&H#-W|B$hpF9nNPy0o2 z@MK4X-%3c|^wK48N((J}aQLdke!g0v1hx}THs_h0E40KCXK2h)jn5M zdG^ooE%fVu2JS5Ah0xv@zLbMr$~ne-hpb2uFY)>Q^2MO$bW^tTHR=)^ z=1V95|NHL$m7*5H21-cUN(4}EXNt&IOBmdGh^H>Z?pqtvk#>w4aI(zy3?t5?Ykw4Kb@s=htV@YM@vje63A8DGq-rJdN zFm)vbk9wPD9V53PTr|Z`KKbOwsrhmK_8jy`EfedU_1PwY%>NpAtU{S=#$Qm2RUBAm zC3a~mzBrJ7t^35U+MXfq0R~lfK0H-9Jb7BPrzv+41`G&Og&&}^uf96TK4vVBX zSYBJsmxfcw0jYa!A4Lt`^!2!EL&CZcEa_vMjJ#YhjB4g3S>K}Oo)3eCKw~1g%SY60 zfYlg1xP8hD`l>78o(scl11={JnbugEidX@$1iQ`R`J5n`avHslCqZ5fV$^=9>G4k> zdD5fv4TTLw)Ap~Anf<6FIQaQ|Uh1NMP`7wJmm3zKQdezM*H2neKi_{~BH#5ha2ce3 zX5%Y0(EE%~E?U7CHr#@Tbp9H!=pa6oRA}1_*L`rhs=o!7JxTCX9fw-PwM#ygOT4R> zs2dz6m&k?+IJ!z%!7KOD^M}e1oXK`=69G0QCJiYpBOISfnql8y4u&6wE+tZc9NNw!b z$Bxho*E}hwvDIEbocr zgDU9m8X6&c-XaHnz6 z%$MUB*5Z52c0AR3G6x+ACZ-peRX5LX_!X#Pc>Lha%p=QQdzJv?9mTZBevK2K z(P?6j4K(b^s!5>On^!{fUr^HYgEoGUm%X}QcwDjs^!c_g=KRRn#MSNSitXZIDdjuD ziw2GZM&)tLh3hvvoS#m|$@Bl(dhT#Ha76j1PY2{vR=^3~%!zH7)rGI#wy3Z=CB5Hs0 z1C>yO6*srUD;c;M(4@SYr_Z4axV8|Xo8)(>`*HLAqis8}&hK<(@(Q?(=)N+o^ z7c~XDgc^Hjfu#{p$F#mae>_og=#3SMk%m8f<1ect8hz)mXVotdTL<3EX>`SRBOoL@ z1FfnZe6SJBU+^9SuEz|v+)+tC=Zp93>5$rnb6)SX%^1@OeK4-Q5Kwc)>G`glH0p@# zV_ONIOeIkNTQQ;BYZ)~J-E;i&ke?D%$oftbQ7mtWOXaD^9*(}% zc+Y}1g)bw>p7~ii&)6ba|G?>~l>k{6ydgkO&wMd8k^up=Hq5|8Wgw@Q< z&IEGjx*V&%$h;`$@XLT5JzPy8$~;(si>GfV=GT^tYl>$LS9}@I4O0?4tHINjpurr{ zr0fzha&+jXtF-I1Hq?`dNXqEw{Cu(W&`3>LkgutW7{gBAA4>et>rb+bJZu4n4;we^Fzh3HSKK_H6+s?dw!MS7jN1;8OXn)un%zgNswE zA955&F1ezl{w{;|Tar?K@w#mPrBfP)>d#So@;+|6m}fb=Ga5+I-oGN-b$}OZKMMI0 zcp|9ifnD=UOcD(-ukfv8;B0d%75&+$6WpR5OS82kDaljsFCn)%+M4;BcIu>4fL!M0 z|u=P^gTk2I;_W^t_%xSi={g51d-*aeszjyuObPa@aWRc!rXI<;TCe*R?Q zS~J6c)+sj?VcTW!91P?$yVaebfECC*fJ)mEdv)SBBkwF5>XK=-h2tiTo{4!=FD|aKGC&#cff_R1z|BdCp6a=d-{rU z=^Xz145((SJHd>Tt=@?4!v!fs0rmme(X*Lf+_srlS-rka!H#`S@#b8cN1r5eOz~1>Tj(~#mo+0{Q)>h;UR$lgP>7BS-*}!SA&oJN^u06jrK-${BxqfN!MxtoJ+-pqg z+`L$ALtjh$f&-v>=PB1U9amtGrQ@nDPh+>%h1ZkyWZEW-w3L15;4h#oWmMYfI7t5_ zrNEe=U#sAp2!O=b^Qk+y&}?Pt4>A7GI(QLo(9hU<-p8NSRu>7d+2~9+e2EyxVCGIKS1`V6 z6T=-l(B!jrN*3w}QaImJn;rtc5+d6f^K&`Fa$`mHh4vbFXKfSmJh=jz5g71cJd zLW6Q;SiNKJkv*(iX)(s7TNqIn(-`Hio*A;XPSmGhmd)sjkY%fY>hmqX3-yOUK~uCy z(f+q_LMGQLN#mU6=ReK|BD0H<&_v7XP~Ki3-+AV`oSN^pYy8E|JEIK_nQQKOt6WUP zH?C-!yAIo@MtCENwZ;8jktp0ubDo@fE8%GOUyY?-9@ibcXyxxbyn^B0MiEPDc*maI zjs5JudwBtESXC*X=3O}95$MWQIN>!R4Uv^S2{v#NNPOr|EM~muoye-vQ2a))`cJ2z zSKv05`lx0RHm!n0TlqQ(zxQ)abPSQ+nhmEYiDme~Gdiu!esyHScCg7e;Bi3ldWqd* zNNjMn{<9ChS51oYpKZmEu5TFY{g=7N-cz@XENpLBb3tm~E+}%wobFFckJ{zmb1V$I%ad5ym~{=U@7{@yG2Ypx0tx;-GuQ+MPN;7?HX=~6^ZB3 z&0N{BJ-el}QP()$)uP0ICs&jDzP!_7VtO*$JfG6$T)udcWmeL~*xDm{buKH4*Fw@@ zdwtLt38zE~hv*v~ZDPC)4<~7S!BF#OQ>2}jsVrlk{9%)$x(yT^PBTvRxUa-iKuVUJ zrwZL2CfFVe6Dfl9H_Wu3dA>#YjG|;tW8CQkgdGPmf-rT(s$;0Tk?hgP8i%Zlf&Lc0 zz=$+f=jKu#Zgo-#jFgu3+51 zCy?X85C2a~ydG$CE*{tYPUTc~AnJ7LEBo>#E}=^xV(B(lH9u7c&%>r8fI}4I^-IX_ z1!|8y{Y%=oHesr)Ctts21{3f9V4Y2EuPa zp4VmMvvS`YLBndaq_!kk-lO@0E%FwEYGLJZ^(H};paebKJos{%_hk((2TC%dE%VQI zbq=u-6h3qfkb{X+i{HtZ$;``wGVocw$$k5ll2JO+;4FV2pSoW8Vbr+eXIWg*UHAG!IbvVK(3X!D zms}!)dOhAoe0M@>K`~b(Z0l#4YsX&Salqr9vX$_(1|YuzPKg*9?)L+jmNxA&0tJhSiXvMJ*J0zQv=CG zS!^tE!kOH&G+L-n-vNqwSwB32wCa<_9X$tgIl9P*e@cq&BLSAk)2|8D>yp{wXf2_N zH}1##BheggDSV#TIR3@K`Q|%Z1f`9C`JX3h7MEj8!|EV(n=WQ66+Q z19m(-FWc_A*tsdKCQky9pY+KJB*otdKM%b_0Th7<;wgS3&dZjk88>#+X?Fb{u+niV zCgiP@HW6209JKXvp7mV-Lmpe@uNG5Q!|x~cGoC8+bF;n*n`CJ>4}$T%CG#{`P#A^` zURGH|PRf5*W#g|?q%qyE$85YL2@F8iV8eUGj_Eb>jJKUfI#%b2{>!J*(nzNOfzZAHT2y@M(wDavk3c`|d%ni!U7J=iND24V z^fzEiIsBQ1pM{)?08W#dtuEDWd$tHP2}J!%^R77(@vHvlBFb$b1Wv6HYX#>%D&uzW zdh!>^%Js9;wUleBmZ4MC$0ub17+zx`K+O+GPjVY9bslv}W0+%Z_3=;$9`7?B4X;!8 zw_k4KzhPk*Km-JjjB4z)C-9J_FJWBZKnLwRk$Lh)i0%}U!J+PV@I(YH^Z%jgy`$my z->`orNTMYX(FuYiM32rAqO%E~AbQk@-uo`mqXp5+CJ`-K5WTFv`XYK;eYM4^%eJ5I z^ZcIw=A1cm&YUwd_uTLIeO<4sI5hHsZX1e6_v$@#fG`33bPZQK{#-0|PcTVhWJraa z<|lUVrB`P^%R>@Vv*^x;i4!EIvj~Cyycm5MSOrAW#F02|_>4b$+lbTHolT$r!VbF@ zF(8_W(T#gWx&9|fUc*CU^zD24+l#EOBtg%x{#iBESp(PIZiud*`QV1Gdv0IRHTSk- zBW~qN06vAljFNg2R$kt15w+&voI0>VPH)nIZWtb-o80NX>`4o;q7Mc64>zpbkxwn! zV!Uuh5inTUt2d6T+w3I#A$rd@Hvfz{ca|oG_tPbfwVF7%J_v>#{wga8e(4p+ZV}U~ z<(Nw@cy?ziR!6x1u4o?x4L+;is$6rk_(#Z>uCPjH?VaCBAEi`{WG(O8yMmUjDk=7& zxPP8RbEE6sEcMBJgbwTf1YQDyDDiRsnXf-5`>(;@%2kLNOdIM~9cz+owZ*6$1Y;c` z$;_7IU})9w>MXeq6-Ft>?B4UuGNU36FOh7v;i)2$I&t24g~BPvj9gwR^vXB7%WpR! z;6ik*wC9b+Hd^lGV&}-VDUFM-^f!u`M0C5vJF}#q!jebZQC-GzC03!QS?miEOb4u< z3pB%SFGAy9oc{tnw++3R3=DgB+zX_S?a5S~Q(~L~B*i&!Tq%ny_HssRv9wDDNru{0 ziLjHq(?r&|Z>RUr0j}t)@(f8HCaJodW_`H&CBiM?CVI=yQtC%!7C6Ni{&y_9yH?Ea zAE}v;Efa$fIxdfgHniQEZ?S4LZCMhv| z>lR6i%?|-eIS=NumCr?ue2%n3x-F>4-(!!L$hGmmF4m6< zga$&}@RQ)HNha;)xl~k}$K>>+IsNtZ?^(keDw)D`VOMCPoXG22qPW@!}pI*CYuu1v`4kFq=Q!NTfY5H_&!cYSqc%`QxU@N%o}eQQTJibUy&k z(c$?Zw{Y3FbGdn^(?xFgJM$-7LHd^uxm7-h2R!avjleaV6mX}XS~{$6tTR#Q06fq`GMfMG~$_S07~joaVww%?UI*S5rb6Wan@=Bco7am(|h+7=G{ zZ-H8@G`sH3Mai3EH=^PLcjr0YoxJm@J=UH0r5hXfail@R1-zzJn67~FXFg9%-fX9% z2!jSa>>Jz8*}X3XvpZ=tXuYlZbD#WsttBEMPLnSOF@w{yAkS|P>9uv9Q68;g_m7zUvm+}H0pt26lK z?O2}_tTVM;OWuL_?~b>EbJBS0Zi{|5i%GdttWhHio+Pc9B&dcF#m2WoYQV+dZ8I$a zB^kva;WU`_zz3Ty6(tLa*^=vkT@(M)XsGPL6q-qyH&9&)xl>toa4h%ndk{K&1vsE_ zw{Z1M-gc}k;+=d)*i8Z{3wxd5jrW~OP@geo+iw#U-m|rK+4s z-5vLH%;#(diq7ecjObhM{kHtHZ=ZXwCx(oSgq0Zu*^)D@toWv8+XS|tR~aMP0rCpe z{l>Xh^OLyHgQ0qwS?%Cdo#ij#&5A4Nh*ws`&F1rSf5pU-r7p3AUaQ)dI~yIRY-ZES zoqnTj@XALLtZw;Xtefo{F?{v15kbLjG_!#BJTR*nTfK!7Lsq*Ozo=QVY}g^Zi*_qA@`*T|&^S%z9TTlV0J*f=mIc@S zzpzSx(v&4}o3W&q^Rr}F7-c>_GEBr^DN4J+8J9*F7+QvmigMMkyXS4)v_U(Fmro&Y z)jq`^Dl8lZu*Ex{#904qn&S=nLjR7PWW&h{mw&msG@Nc&*KKQeY#rr9{1@;_6S}Ta zi=U9jwG+L#wR>(`%uf_uwi?r$&Vni!K=+?;OxkGb8PhcC63Vza<4{YTgBcik0p^of z*l&cdHWFOJ@;u5IOHx|=ao*9r1~v;!+No4kx8kC zUopsj`J%f{IF8=WYnNaaTQ|QgfI0d ze1c^3R9O712nJJ0u^qN{rwJnbNGOhti=4o`&Rk_KDgezRzcJ1$;!kxG_&o-8Z9>c> zRt$Vx=$MqJ@H=zCHb6*((wk3d1#kIKK1e-_Cwb`F{^0I+*zJ~q zS>asZt=0Tk*%A}#qG;JrL+FRNI2HOoNlMOw1|gmNZ^q(<4(25WTgAQM3}r1ye*(%X zh)$b4!I6X2EUw}vzDQSQa6%0A@M?v_%8=IAX|(xEv`I1}=+*%Hp`a9L7rk>}D)?B7 zOBUbD!jc{Ilc3AVEbM>)(WE2eZDfv(-yroSps!ma2J_YX^B=D;34_ zN$KWqXRKhdbN^_7t>R^&`sks2fDfw@nEyk~Y$9#HqCeRtkH%mD43R`4z(SzuylX9{ zWMGM}bfaQel+^x(+w54+Eca%M_{YrvqTPM1;#5GZsy_a4H=}Zpdj>6gHnD2OH{z%^ z_F*P20oLs3Ks1ea#HDR`%mYY6d_-ML6DuxJvf+8qeCn#5*m?Fvz)Z%6$?m{;((O%| z-R}eBq*tt#a^HHtJc}RLVP#Vkmop5!pYP=Q=aOGMT+#KonU!q#O_!~uoTjqPy(jyt zpH=iByKz3I_Eq$erD%H9ho)ISk;z+mfKyFQE}^(^KqLNa*t~TE?W0glTlMYS`_s0; z!`bz}G%IKZ|8Lx^T(Vl)t|?+P@?ET7?>;$w480f-n;1m$^n9r%$aW8GM}S|+Jd*lv zhtE_XYQxE?P&A9CvRc%y2HvFdTDS@A*}`GX95MPzBh1!2>_R~bHvwlkd)>}`$9b~U4F8V>z$4FRYvSte z{miYF8d&otkz#n-3r%LFn;NEo1e6}U%G^DHCh12n#k<({M=JM4|Y1#1djWyq(VsP2x6f~+p!5;QYWP`51)@M6Yo+e2VuVYmLHpv7G zU<$8i;LsNQEcndWtr{9n5Zme8pdf*qDq&Q?H_hxN2-Wl!m{yMnQiUE}T#km!AG#l& zl7)8+Ly*c_V_PTGq;|v{c0wE^pl$JOWk3SgSGwabLj>e0xxq={hz1oWM?f)o2-hlw ziip)7PrU#C55qKG$vt9a%542y9pT)$(>J9U$;Xrs zA|wUH98fq{&kqg3o6>t~M0lI0cw_duu0H>H4mV$oq6qea?U%71HGgH#w6x9$4-@=d z9otj?z^Ov+WBY%TYqdB2lsAT2-w~qXBMB)QF`<7;(^PuiSNN3EPrhrQo?qnT8Ww*d z;AJn?)hQd8Ci&EQ_^{{RFM$maG8-`^5b>*y@L7agTa~V8yeNM?GWoHoGfR%f>$VRBq_81kJ^hvTeqH6c?u-5SDV|$lB^xh699%;qqv{Vd)>? zrj|$F1A7pGdM~0Al1pYfUuC`a6llHQr*AwbSx%L@+^R(uc>ZA7nk`)B;@ym{s z;Grl;@YxOS=9PRZ%NU2mNz;HhT4RTp- z=IFf*j7sOXm0Q^V_#e#Od0bW#hy1aM{`YC{ge5b|U-R1oA*^UKFa&5usX~~!Re<5m z)#wknM|{3$Suw(C+9>e18|ilYtFZ`Q(`=%MxHa1K9sg~rO_|d_If%EiS-z>_y~f$| z%emj+@eMzC2&uxq1{>o~b&d*Fg^lxFsV}E#=&1I{J`5-8T*%LA#PZ}k6FXNKn zO?u|aykoUF63{T4K@~p|Pd^K)Cr*i-;HQMfjV+z%vd#y!4r~M$9Y2{8B#R1bx2HIx zgR}1%S9o3qUB!RJFbvn$-Dl1(##Gb1JqD87TKBEnR82(mfG0K>9nB>+Pt}haE*{g+ zCyXQ*a^}L>m&6_6%*}SM{+6ex+WF^gW=nSevEkNT!VH5lMXuyK-t!Y=WSItQVs<*f z=Xw`BVnTCgyWjGk-Kk#Nsp5Wq8B&q%N|zXHcZv!44c+!VqduwITZ%OpwK9}O6xJqDHUn4ePN||%pbmD>gmOwjZf!skC1S6VbYnkHA zG7Z&X*K$eM=-;+cUDYA=RU>(d5p>2K4eXmQtwZSZbGfQ-Zh|fTRC{JVH>D>$_~$3i zd9m*kAFK2|By}D|^~moJQEo{NfDj_p46I)AQ5$6mq1fa!Uta33io8~3hxT4@f|fpe z9hdRD$(2vp3zYYq?L2B_Tj=V00i|AR;mbE#ii+INBlpjHA+LQcRyG8Lw|k+7 z+5ITlm+Hi1bac{rcgD2G`^_Z+1%?$diGjnC^lc4VxRQrrF|6$l9!7Kx%Dw5 z+<&yv#|NRF?Fx;fm-S?Kw)4^IpR9O9NsK$pmRVHPGUy)T`zX5oDfBHhvm(sqIn%4& zb4L=RkXqf*BF&M_M!U4z(jUyB5*p#0)X4*h+4$7-{ri;Ln2p@EYZSP$`5YJ!p4N2{ zvws%1bg|0y{;`Km*f8PkYp#VCf#U3>)%wZa)AIB=me}+9AIs*ALjt zs61+g#HUW?KEbmYd9QAmM0ch!3ox}*<%5;kd)Rh)GSj-*MW(8n(I~n;j6d;1HM`@5 zdjFRr`-_pR$U)8zp+kptKF2(b!6>e|p*RiPPM)BEqo~r`o;r6?25F_}Pg~b0-I47y zOdL1g^&`{wbyPvac@k;CsB0=)%gI~MEy|7?v8x_`_4Y4BiZ^#B_tf4b_t6ER5J~e?b(?=1E%DHS#cZ8wLoz*tmrwnt(eNcmeP%8vZ8}pm z@H3#+c(fjcdG*8CGA;Cz&kdnHCDe;mt3|vgJ+CLprS4uzTDj+!^)d3Nnm_TodiJd} zB5&5cm}$)4@$_5$9$J0rCoDrxHyg+C;=k*@Yss*CoXmncK5)lGXy_Ule~H$M=I_%0 zB;zlZp?u7Gr>ycVT6z1KiL1g>sH;v$CDq{kK8vodxeP*YZoIzW0A^;$P?vQ?9`HoT zz$+@bw49K2uws-wbVY|6Fcjk41y9B-c-q9`y1DS;=-?_z26E|3_p{>`2R02UZDq)} zvPU7a0~_>KxcNr32FwF*!R`#3Z3(?u7#BW^tLmWhnmHF3ZTvDQ0BE0xUuiy+F>g?a ztbYOC_bm;t-_mNS%@}38O|X#gzx+>F4qHNdTUg3xTH0YODOmkpqM?3koz4TUNCpYv z42+s0a`Nk{U7wbl1ut-L2B^Es{0-8S-JY@1($#B~{>ruL{s9-6swZn27SMahG8XMe zj8r(+h+cBO+QO}6hj-jDQBR!EqOd)vFed(@5pw+FrT73Kn6#yj!z^f9aA=J1rFx@s zp0zu}&ggQ?x7pu8zj}RQw!Ga50#`b-S=vGOL;Q)Urv##{{jKT;C`;eOG{mzs53y|? z70Mu{p*sn>p+e&t9m^oJ2`jdWc zG_U4U&3iwN@7;dDnj)&{LxR5d89>S%d5?}(S?$&5q<`PTAKto!-WgX_=6ygrsjM9# zshlFj>gN*Q8!1yuAtN?>5o(lg7y>{XVa8;^&PU$A_f}di3x1n=L-4t_NoWoPI?EeX z2M$KnUl_MCK)lb1`#10?BD#7j4pdNqj0-8~Jz}`Bur03w?wy*k0DZcb_lY~e5FhL= zG!(Rm_8uetuedL+gwrcwtUFersBEPZEXX&^7z7|t-yB??B14bbFWrthhKX(nyfyTS z;yX-)R1u+itpfpPZJ?WQAN&9{&y% zbf>vAxDAo)+FeOHKr0DeA(A}-C>zL{3@QM&GS;qCY65UPYT%0&%do- z(Y2}BD36}#^2rzeM47bLp68JomC7}9zCFTP`t4VZYGYFVK*D+e8uEwQ*vPB2QsVni z-;a&Kdmx#Kb`5`y^OjHV&l9E|B;}O`HJ1#@%5JqWULKHoko!~2^YUoUCVKN(Sk|a> zzA46u`beMhpVcxp`;}7}^vJvU=>+U=@+bAh#TG zLIUrz%P%hrZvt%==MHovO_l%!mmgIzu^;XwG@GdZ5j7I1YDpV-I$BvwkDfv6%;ndpjPfO?sU@6HkA}5v?%u zUgc3~fWxyTB5#)M{3NV2zZE*bT~?J=FLW@ly}*AEO1VLNj-0WmiHmYe_9~3aYkJMTwP=aY0e&t@ z@Hj*SAB8+Fnmciym3;hvL7{0R9M0;wA!9r7kgNGq=gVF68S5+v@sA}R#$wx-X}{<9 zH0*g8cE$Lb0&aX-YolsDHe;TVn5#;8Ns~#x5AA;ob<|DmjaImvT7>D!5QSYylEZ1>(nRSU{;<2|jH)%HU@t zh|^3mLO2&V5UarjB$Nv#qu-%AH(o%YzvYRg*zyHZ&QpbET)+vjJcx|b7o0X#EHS>z?E}&1(NishAsVvpFqS;VL++_95}<^YRXhyyrEz7 zH3-R-zyK?TuWS7uE+}@_%KwBEER*1*`S;cR&H~!Kz^~qf`*MK=^S5=rU9>WXF@$b= zN`=Lzj_R=iCQZdnUK3Caj2q-eH?RH(OxPTz~O)Wprb3W2LHZ+z{tf(!^yzNG{Zo(w|%s3 z|LJ;!V>IyoPiAa4?Z--cE0%jDb~#rnw)*sF8?9`tLLTM~gmu7#3BaCN?{nRF{dqWr zqB$Sg*tET|r0NVe*L|Au*+yt3MLqQY!9Y=I$cUL|!k<~!tM^$iyxXR?HgGN=s=C?m ze+z+d+3`=-{0VhrPiTV_5b=`LaXNg*CVFpshJ!9&$JgA4@luJ@Qj;>gQ6;euM}M|7 zo(Y(07yB}tw|^Jf);RvWa5s>(b!k7iF9jHsA?HtQk&5Wa{2{LW!fW$R^F9>9z;?RSkHp4mS4WAp-$)%*dM?rqkKW2q!7-4M6G0(4}E zI}82gAP+~J8sa<)sr_i1L~Ch(8c;by~miqv|e~3xfEfEzHJA~2lttx)|uNyD$GO{4!xHXk8E1&^ZMF1 zhM#m-obOwL6wdZ@ZmVUnKNxIUXN)lyrur_1^qk(x8Psdg31NAE$xsmpE1N6uPAD1s zGeZN%ym<6VJ7$YlaTjj(13KlB=T)OeJyRssmmT@gQA@rfCBW#b&(OOV8Z+;jQ$aKAI~L2O^Y?RSy!{C2bUPdiN% z{{m{WGve=1s@-F2ap0toiEFjY*p2ZOw7m1*#7?RJp%p9-RK9)~uqxl=;~=ZwL54t?hC^Ji{a~iR?s&iUyz$nF2LP6!}YszXrtk zeqMiJi>1wt`CdkKc08LA$=?>JVN7cq+c8x{I|0(CJAzSzGZa00=uf*qeHH#kT- z;JJi&MAI^1qZ8_9ww?a)xH#N8rl25TF~f z9R6Z$_Kfz4zmoTC;dB}soNzDFn6JIWSb(L@LjQ8Pw#NBnH9FaNMbwC<`hr4nW@&|o z;*N$3rO?PbX{o&|HgkkbQiyugtn@btccZIU&$(cdO!xtMvCqyQ9F5FY*1UTl$BT3t zV);F6iq(XmqrPAUFps{bpx$?#XW8<39iQa)sbmPzrgYI5TYd2R64JU7fmMC}eu-Nu zgHoQ>2Uj&h5m*u8Ql}NlTHz5uFojPwm!Dx6NufwCxna)BaKz}YQOZSP#X<|;n)|kY zHJ=p<@)N2^5+K$QCBNWN z%!u$@v!AH*6oGWw$jxpCy^meIDk>X;HQds#tLr+1n^*W>MMw~jM=4nrI((AAV<7Km z?X&vDH#wNg+|}*r!sv4WrGVk(^M-}VeO{}7J-%`EepHJ!*$h&K=lSLKdM}@R!^Fnb zyUG)$5$KHP$mFF3t|#i(84{VA<{!@gCPg>G(W413ZTm{svo4Fx$0ox~uE{^uZKOn{ z`l+XN?zyMBk_HPmA0LcR9TBS5Y>R4c^8{NJ?Gq?(<;z7vlPiydxwmc*97ewxgDa!NSlRf_A$&1|$CVLFH3u?pr`@MObUbL9JY z0C26sFTv}(MTFk5=Rq>4tTVQitJYxaXtoW$P^wtPdsQdm!Y5xSW>l|dB0bT_TT;bX zmk>C;vaxpL*`mQe9ZKs4#d01K`-<`B`;(LTV^>Tj-1Y_ zysr5aqw6x!z6jzJgx16gQ8zE9GQzyPXB8Z}$A`FCH=uxehS1%Hwl5ZW8_E|~jgQ-w zWiQ!u#KvciuJ*=;c+aK^b*JDNQrr7JE@4o@{c)u$Fquczy3vT|!X&o2ILKy*+Rdtp z2I#xm8%uqsj+J;SWOPV#_|5;P@Z%389K2$5eX(}2#7GF{kD2SYt**|rYZumW{^Ki> zH)Ia9`;41P^s|E4BEox^QB~`$Xr}I856#ze!@fUY{!*S?0B#*4eb)UHDb1=}a=%lS zPF~delV9F@iyH!{O+)1E$#0jmreeT`r&rBXmr@BjM76(g*g;W%1vFmn(zva-;4V8N zp~c#IvnG$(Ec287&8zCjdCEZKx{?MRT+ri(!SO5|pE5&y3BTXr$ty08@QRI#;A8(~ zH}C=MjEjfr4MY+j!bAccB2H;3fyKVxRJ=y~K=~r{ECvvwa783vf@+jDHj?86t^=6D z8vVhX*@|+mp|c$BPP~RSLeJboZ{n8=aI>p5wsE-}ZtR7B z6V09-&KYzE{3YyU3lIf_!s5XVye1e|goJyo|3i=k=-2l}lvtdxJUA+9`&%32b&! zm`{#P5bmu4t{ypn^K9Uj+PmSrHKFebPu~WTOm`2bRKoafW7&Sp$pV;di%R0|C}JOl z`o3`qyyn{a6I^5K6lmv8lMwO~n2^sVM>upC`)(N}QBBAZvO~r4v%Rr!@N!EU={?S3 zb@s>Y693TZmOnpcxr`q(F9X!p4M{gD8wbQ{dtfw7L)mS47?c%I@T&*pl@Y^$u1Q7jmNp4kh+K*^s4nd zrE1xkpZ6MmzB(-r8uq_^Y+<`+<$T9vk$$_s+6=X`NQ@Bc@Y>8QRSG$GC4_zPd6oBz z7e+jzET(~t<#D2DoHg9pFgZo#)e>9Z_@D(QPLls}N3m{bbP=@x?#Y z__VgC-{l$pEZyR#I^KCr5(9o;c+0^0)N4~~nBmc46nFJ@Mpi^*E@_~KY`rBebr~SK z5dqWQ`dTjWZ8)L-sO9uOVjFR!UO>@N0R(lMnf)ecYw}FUZ}A$-0%U zs@mTgZ|&Rr<0HKbK6GUiHN|P&zGc^6%K#D`4iIBoz<6@DHjOX(yB-bUs%h>RBd=;nwlH0sSX9hPC-sRk?Fja#aKZm2vT(k}jXDMnDDY{Y z6pCzqkH2lKTUpBtpo$nE{#oEGE`aEN9dm7pH8>J&0IgXt7Ye-8D;!X3nVVqv zobsSH_NIYpU^AR2OtgY`q;+}XpYi~|ept9DfP9?v_(L_%EiE#R)+F-4sMM?L|FV}9 zd2{UWt6`xJDL=mS+jdU2sk1b3pZLkUj=B5C?#>Uv-7u1G%0H=0u8NBXKJ?`%Um^we zn|fdiwtS*eK#!4`8cBzKN(p3=&V7^)brv~NZTADnGqg_r0AMahjh^xbkTvvE(*D1L!_Ws^Pcw+;(h-F(- zJCT5OcLgQ)c0f4-+Q>UE8=(+stYat@Nr%eDAQ;Sx2^2Wx+X}upmFZ&(_)$Sm+=ewm zh}rHd9apobQn;o6F7!1K>etbZhuL1I5+O^>Xtss6yXPLw1D8Jn6+oL%sE`9f%X9Ia z*kq}*R9~)-D5m(2zsrToW^EnFa@*nL?1Sr<{6#9|7rJz3rTt) zb;!ItY!kKN4uZlEV8!Nwl-(DBC+;7*#Bx^V4w5Q904PRhwZ&-sDsq1PfwUQU0k?Xo zEI%)mZhWb_nm8(DWjH;p4OiJ`g%+84jz2N_6=lMy&s87Pn^vUY+2UhhcBt-h3FNbY zC;P8{1jrgQ$^P=*Hj%7yd^oCmS|+G}a6h6v51%I8?y|*@O5*~H`f#J!xf&!S&Ib%? zU{G}FxH`r=e)Esy_YJDXb~4#N7bI5-jD{9F3*61f%Qj51hZHd?e;>+6t2#V6x~OP< zM_q?SntxXE)$!x4U3fa<&KW11>|`f#kl?>HR^m1p(^*{*Y-}Ymv$OqO#_lpTv9_hX zZQn}T;7=&%Zb1?G)xeNZpspI23G632@osfg-H8ifedgs1?vLdMXA3&>#Yct!wX!YQv4Zzkdk8#{OX;@$_JDO% ziW?&{v7oN>AF(MpWW3D{dlLUWh$(?QIK>Q%l8~>Imqlt!>j3qU0lyhKwcn&vBTH72 zHlyIXPaJQi_mDKTXR^-r10lv?>C-iu@b3z_HHGrSadg{ii3+P}F9)QpS}UjEvw?{H zgm~=JSKeR1jV>MA5ex&4gVvRXYRu!l?RL9)45r#~K z@LhndZQeje{5tg|r9TXW>eFK>FFV1sxJ<4s9hX*l;i`}&NyfkA#8&1~Sh{{CS4cYq zBXtWLPvdmqn?ZXYg7H~0481QJi5D`y#hDy3nV}i#N?k?FZX$xY%BlCl6@KYq z!~WGBI{h*7!Xuj0=ZziAvm!f607ve0`5u|t9xJZdGEqfRhhH9UvQ-&H(+pL_UN|9q zk&93QmR_hH3BZwc(tjw27F&_v1M$0YR=CPVlypa6Yp4YRdKxdLFkj6@zXHS_zI*V*9jqA1q{P5dp8*z)Ff6FibNqONoQ;D@#YOT zzJX2wM7mmczCRoWx>{^p6v5>pnnLl_BbQ&UiN|d}&J*EpckrWpV6reP5{zU7SM=E+ zab@a!8+BHFnCDGB!&cMG&@<>?c}a{Jt}<)T;h?TPU+U|#XxUId-D7GyA{h;`@a8qi z{UyX-a{T1AS)S?!gN3bj4g1l%2a+DAI*;~aY&`xt%;)tYN>Lod4cOI)2V2p{rRe7mdp zzrRt>O`qNhDk}_V{Z$>tq<%8wbbh%5P5f8JXqYYgK4Em>S1Vitn%eCNGM!sH=( zd!EL(S}!0vgN^#<4SkU=5tBZ}FTX3;M~v?pcBVr`55>k<&5ow?xSADe;&*CO@?aRm zzVSG=$;$)!t&2+GO4j*R$~ImG?u9$N7X!%9ai;o|f9k;|?3qgBKuQd68efc&Hh?RF zjP$?keHng6o|1Ohq8T}o;}SXU0~GPr_4q5o6^e5mbaP6~3GR>+yd}nbSBo-^YnsJR zGR+XTAX0n&^^Xnbu1LOex^ce#W16+xU-?X#eQx)m$T1c8AJo*^=HOl8@i!=8ky5{q zA`x!kL$d7)d6GWg(J)gGJMG^AGe%ss`(r3bYJh{Ncc_t3r}H(@9HNih*81<(5oU(J zZ66z!O3jSf>SC5IuRQtX=O6o|gVqZOaS5_WcURT_e8qb`4rdox%Ls;Agp7_m~^igE7Ce6uV&+X0^r1Ud7)f*Ye=lx8gh zBvJ1wXLct;O+)?ARh>#_FxyP=yL!{al^Xduhp2v8dGkwA z;>=}&3rU+IBseMby7AznG?U;zkzm&mj#fa@69%)In1gfUwQ{QnZu09Khk&cxucuZuV>WXZ+YrcCxA7?$aFCZZI8yZ{n303fU?0MAQ~ zI{_wJkp$>mVA!skQGy)3h;jiU5`$IgV=(`p6TFbT`lxg9IC6HsF4&|4!tuXqcv;s9 z0bG{gDZ-MKCJ}z2SD3!WBL}LL=<1kc*p`2tHzFTi?!Js`AVTrfSKJiR@0U<#AgY-? zue3H-Z;>K_l1mYiGY3>Et@8ct!AF*NQffMkr@bCGhd=tx{B@XL_S*E4UgFEiD2qPl zDy#i}Ii@OYbxBrkaw?A^LKfJY{Uh2J{f)l-%N-r8-P@kIT4{I7_Wc)UtMjCz6fq%U z(pGKtS2Lt`@}tw!6nWdUwhVtMwa2=T=PifMG7;vIk);XSGFZXlf?T^iqRK5{Sz4=pj2DP(=S?a+==+7(E z63J^`9dDw!zKZqLgM$4cjB6SE`)1{csWw=5oKmhQl<@Th7Wq^I_pO0Vw73pbcARsM zG9d9*74_)+@__@Gdz7yB;55P^Z;xwy=Y8ItJYUG16RTa0rC|>s1hl z)p$i)I+(RTpAgQ?H)Lb}FS$eRz))#j_WE27JKHpJiea3Sr6X-Jko8G;!nW|FBX0cW zA>KP1{874rXu5fmZS$X<{>9XA${_=wlzuxV89yp(5j#iUJD0bwO=?^-jd{l)6!n^BH3W%aQllzTP=oZ~>Qse*fsIQcWK1L9;7SRJOkf z>AdiFs6XyT>h~C{940XKwJXHa(R~iktO*@ET0<1DZeSerUOfoRb+Y`?KBO3u=z?{u zx=QT`JB;`?S{*t1!jYoCPgL)NB63wz+*J2rj8$~7AUXtB0z(p9V;1;LoJQWLZ}&Ra z$lI;EbZ9?jvEW@QV(na>#zwl`u618eIbP>j*4xuk@=p4};%iB3B)TsZehI#k64v5~ zkV(i(?_G9$GH3H;m}Qu=^7HUM=GCixN{{LqXoFFvoj-JCRe$bfv^ZXSZ`hB~PEy9S zB%+DcI8<{|@npAom&T21=qk>gMZB>(?!N*XBV4-j15Yep0UE_ib<}e|7&d<;bQ%e0 zKx}Q;o;~?ms==nc#U9DQ{%Sq*@kBl$R#%Y?g2KHqJI%QzOhr<7#`c%j)Yyy*zx(d= z{YyGOo~%O0VAmc8(DQW7M=~ZW*!0B)a^nzGlQ`Yb(?e+wp7tx;alA@P<^)`237ldH zPkx9bbj?Q^QKo4zw4Fgw^!;Da@GH12xdDV}kL>qa{pKZTR=yFu4aaSw=m|a5;FyAd z5ZS8#mAUxK6anP`p3NHw?+w{v^k!X2-I0NM6wFoYTF{-1Tcm^ zYBcOfS(JGDTZeN_yx++U|1-Z;($+=*v62S^(#+&b2b%l_E?3vJx^vFLDceYy~p(ZXG2+9!jDSi0Dtd=J1hB&Rs#Nfl+I@R7h);_ z31$tOlBy5;S;VfG;Ts_|**`SeToEIzg$#dp7x{{q!$8tQ!-Al|g(OEj}j#OxLP zK}iHb<+jGLC;U0X$Eh?nstfL0tcxeYQwP{PeTJLHS~dIPn})5s zUh8VRYaV6VDpKe#?UT<)y#UC?P6C8=! zt?*yL^Ld^QlBL@P6e_|&Ge#V1kfvEbYdFqY6Za$fSm}+o3Y1#ZCErSb=N&^9*^=Uw zM(9C&K-JvL_AO1D25C!=0e3d1T0=-&T!U>V|S1rZ7k1tihTLe@6(37CI)$kDtm)poSCACxg_wK3e z>1v4}^QRL2APykXZ=o@e zwjSs0T*9~|ziPwAJPcT!wq{K_w89BSJJRz(gX1lpcrJ(j6 z`K@<%Kf5SW(@tDPaE1PlBv}q=!(+IvPKZuUgejbDThUGVB0G7poTXvvZb8MFoZjfB z!+Gas^pGvrDV=&#i#7&{@TvcgskiWo`j6VRDM2L#=@KcGZibiC@WN|Z*rySqCE7#fBgVB*a0dEWD`^DoS-wb%Ev_kCYiEeR5rR#`!!wxQ@$DC&fq z)?4PFH9Sl0vRBG-iqm14U&K#4%82!hiKNW=CcacEo(D8L)909d? zNQJ?n!BO|~`_77(eT?InzkM(&*%n>x#sVEo>SwvkPH@G46{-D zX9~&f`mr%3XY_Hc$G39dxlQUl_J*ZVmM7??*Lx*FjrhmzM#05ozS|+iRw7fJU7>_; zb|17|tf$6(Qx&5j0W8pRjXNZ5Ww`}U{R*Q)MX3LGkW|_$fy6Z zIJ4id>N$*a$G4TmHOT#b%n7$S>(FWPRc(_Q&+qJe2x-D`AOrr8+~o6kFfiy2Ix@7l zHu{*%KXVJ(Pcq&&(KLL#&f20*0BP+dQ<4kg8)p(a%=yZt*K);gONYokx357JK^7Lw zMjWC4mj(HJTNEgk_(S`j)Zn5`A!g`z-p+JpOWtse^L!@u48+25NUg7Mbt8gEAis{h zcT)L%6$FKTQaZd6fb-7hOuexyay8xE0y~k3y{^kMa3s7Bw6{FwJyr+3V!%Z{r#TSf4F7!aSo9i9U*dnDRll}mRhJ`QxX z8GgT^^*L};)Ld+CR*pWN=%Du{S`9=z%`+9SU&ErR-hwQNz`-CDF*X?OK{wA5E@9sn z{aQ~%4ElGooJ4tw8Q)h7Vw6dEGF~?M$Huw(_@kE#UY|tc>937w>y3`h=ewg8-vDoG zL}tXARIKh#rWEmwJ*ZOcsQE$Y?j0262$F4Er?m5a zhF|xO5U`sJwhIS7R`T`$&}3u@nyO3UUSP*(#PbKHfm8gGXQd0K&`Q{Q|~AjtfTWoA6h zuXta%B_X(Bw zt|G@HBItY}VQ!7lt={+rO79=|ZDlD7FLu!YY@?d>>9+_Rp0h-{I-qev@t)<@g1n9H z<@f`RY=;L;cXK9=fh;|C z{=srI-(y`@OE~}1dhfaXd)&8MDK3qNIGc4E;jF~r$tnp^rhUoSc?sy^UR3ED=TW+=CYrv`A}Lcg_Jr00O`6AWqW$u5ZQlx1m#<^Hbwzv!aru zVkGu6(lJdBj&!_7YBzv5Q_JxLcZD!n1@6W4Ooj4ms{I-l+#0~3EAM4Vfi2UfM5>ux z1xmbB&bQ&wt=}k=HfQBrO(s!`eWmRd0lucI1~8L;Q*}uUS0(*da|n3vc#44Ypt|b6 zwche{U#VvgSkYYwU2e+i`Td|2?exmP!5;g0nzAP5C<^6yW-GOXN-i+mc2DNd)S7su zxD({`x(dc7005zZ_jy;}A{XPX^pD@gF1dYY7dc#I7=N>I)MaMxp%q%=D{kqWgcNcR z-a8C(*oo=4LD~16V^D_@3Jm|@9@9p?IQFoYOfies`bovl4+*VDY*!wb7xD_yf3D1Y zv@zP+vm-&|WGxH;CHGOSYY%_(2ypZ^>sgQaG4~St9+ZxWGr7D=Ts`xFLbLN~fG{8J zctOcp(ulPLnqjp%NjGM1g(TJGDS<9t!1Y&R7R$+qoqsh?!iPHNLv>sB=o>wG4x#le zzoPh;`{r1C&u`j&sFJ~Uellsv4JC@!0Y|l(iQ6I+gO9x8cP~G4bG`7-)K~#!=rc>T zxG;uPPMPIWhcX9_QoeNM`??biL}er!_BTPUa)?9=;u|spcpqGwY0C9bkNGS_tZ_KQ zKv#x*ZEu{e;xXNuG{*>B=$f?V_r@m%S$hwqZ+^<`9RM>v6){+_af#k=XobpMzcn9k2?(D>BS{CJ1C0Os8DBg?ES zOCDY`D3_La*!f%hORX2GtB*-Wp@^q_K6xZf!3=ke>Ve2}axE*Ljx4BwN^33@XH)*H zI4(1u<#8r2H7=1<9Iz}TlI?C}8NxE!3odcV3a?*r;Z@&}-e7;!K^4KuSIiAO?ygJQ z>8=vOFvY>zJCq{Lfvjl-t2b6XN*dVlQh5#ucRL-bu2RLQG67Q222HQzFN}DwpWrJ{ zwP)8HGDFRc(gWRp)4?w3Mx5p8In21-VWQz41363NcTb_H`BDL&1}o z-4%NO={HX3S616fGyCP_@Qc$|@XQ|yd5p$^*;$U0L&bm)G5l8%sUVHhrh9J%A^c#+ zwA?r-3}*BHQy!nbcI4-HqGGpu!{H2fX2Zve6(oQC+coS7Ly|0My0!Ub!pJgzHVIke z(fz!xY~)s>>VAKw5tNySba;MW80icWi z(K>qe^JA;ZybIq9Oao@1-zSZ)Z`(8%xfF{b_de^FkyK8oSfYbC)WTF_G7exh9&4y9 zA+$Q)+UinY!;r*Ms)Hv!&gBeSMr{H*WN+vf>k0rt`rsX%BUd4Hv1WOgDUMcg!oLS+X@8 zPg9*mDcLI$qzHAT8|x+9;9@8Y$IEk9<+lWFWKPqO;L*m{^=V&ugAVykc0c|JI)E`9 ziF=(+zZVr|ngI-dbzYw1e!E+hjQ1_Qzq|1t#hwTNXxA(eYV2vZ7oYwh;N30P1gelEckAAIK=6S|J)F<}kTs(N2Gch>qFQz|>Rn&(`&9~U&n5gHO= zyjB13j1{%mSgF!)5yik$QfJJ;n9DLie4Rhr?cma3>w2k|>F!4f3gs#kDam$sygpR0 zyK{61fv<(-mkhrcTc*EWv0pxT4*+l}mAD%#8N{!Bvc!`BT(g>F!j@wUNB3PapHVck z-lBhFTY{LXkd+{L(1fOJj^R!Eio;mJ+t7ml%L4G>3(rgY9AW!X^MBSTwp(Z4rEjRMHg#~xljP4M<2!${Bd7vbj`f<6GodNfvj#S zaO`t5Tl|EF=0e5F5pY{NW|Ub!%B+tKI=2r*V6^uPFF&M+7vvfz3%#rGQ4v6 zthc_?e-Ge0-a7(`mUm^N;5*Wu=iqv{bl=wAzb2j;$s@xn@e9ns>7k+2E0c{*M=}1K zjibmNgsiqoZQTkyCQgvpnAgGP_#NsBTiASuC9Hq#j*|r*fi{$BUOAMp|AX=Nu#Pis zy=R-!9F|=Wpz<93Uh_7w76O%T)yFWxl(B5eB1fXY)|pJ z9D~!PgsItVD+e5=bA`w~NG-b^sPk)foU|H9{$kl3&>|E6tIk$*;h~zd3}`DVXG?&+ zC5HUVp^aj`jOxuqL!s>9q#70@%dYW{^}6#!Pq-oaewXdLH0zn0%vG%#3;^QkzBHUv zZGwJytw9LcJn_d~jbZ0Np8hAQg9}EjEaxzKyw%RYErl)`!~eZNKwAj|VAmZa>;Zn^ zBxj^+U;Bjc0xD}yG4y!IwqwK=7Ty&8-=;3$?xwa9-HSy{9AU=|vE^C3@?m}_ox}5W zub11bddMfyr<#cuH+PeF^msl-Wp!v!zhBo}#8UT&5QssVry zv6b~`1-8C{E`wV8%|Sf7#yY`FXN-l1EUKGP{`c*QB@4}6y)ad4Zqh_a0%Uxa(-31;BGud;ME)HTkl<6i^&|DWhIxrsS+6MGUqVcMR>fRI`a{+9iEMfkR50T z!TWhslg;LMHOd!=;X7ftBtMY0buEU_lG|A}k0o0&YmI_)c%cXfN6C zsB!Gc0hp(gnp5w(pUA)#Z5Um58Gu5nS91}BQ+*2yVxIy(A`I=dEX+MbNA>Kk)Hxq; zg_gwurHi6o1#d?%cio=OO~Qr?8hPD^nqA;A|IjuXC|+9aM2qvrF(;UhH&ILBtf{P4 zEphlh^0vre`0wip>hsI9v(`Kl;0$4aXi^C5zLbD>Vo}>=(TPiK@JtZByi$)8P)w2G zv{>X1QoC;d;?)ERytRy|7t#Il5kWHi0MFt+3nrx~Eq{@#46X{I3PN-wlD5y0`7lPE zNJrcnEr+jGRDLy|H;yjLBPV3h4J;{dDm=c32YT_h(0ZFPVg`%>d6*^A)C%BaQ9a+EFD}k9VMR{#~8v^KH!Q0GRJ*DYe znB3gQuHb9PrMzc8g{Cvo5;=R6*U69A>-utUO3qRz+C2r0?Y6Lo`3j zdr@Cum4Ci3enY0DG@{`bUe9UMcdXn7`z>R<-}wv(byA%TtJ@#2aA~QPE)L74?T4^Z zYVK3j{P^rR$qn3jEaUKn=UBdwF5*fLUAJHM<(}f$Gw=7VEmOa(PvpMIWkkGNQ;RE5 zAk`%(o~xg;J!+(#_b>FlgUhuI`Ks85un-g4TsO$OvqXJ1g(h!^EL=&|M9`guFFZMR%W2a~aiD>eCPk?e1LR@CMA?0M)` zV=l0aob}tGB^wF4!MSbU#f0w(oNS{)+m&R6NP+`vIMhxsJr@16A!960is<^g*P8QM zHRhTvG6xGsIoUJp4~(jm7>^vK0%l;nmyGzg+d#^RtbZZ5MsRPbC zeOszUoGVvJCo_Pgl6&fm&@xw!dnXG>-jJ<0UnBk?rW;E1#Yrn#8*!9p${(?NDc@mU{1pwl>m#7eqVG2xUBw zos3&t+gx$^cz#=9a)|cDB}|;Hx0*K5Y$+5)Z4%w>cKAPBLf=OLr%KURF24dGyexF9UFphERlZFa0Ht`QQPN(R|sIof9r=|b;{8Unqsy)!0V@CP=5 zbO*N+<|RotWJzyZ%X~Vg=MV?>nM6c)@4@$O)2vxI{oE07y z2@HRn`DHhu(6A@=?Is)N<5)}eVd+>7BmY=MG&iNf${UrjMHnmS*@aeHUx=gF`>k<$nCrOAZLao;BFB!{D6CI zAGUZd=JR|By{G+ z2ChqNvN8tt{rMSXSs2i}>EbAd?;99xzQpQm>8gpL(s)eouLMSfzCK~4k~CkRDmrJ& zzN>Sy(Bodp0K*ifPXyT5!WgkYwho%@w_FEMi;vWr1Ldl3QW1~ zGtq?jz4ox(63`Zx9s3^sp(vFB<}~S*7way4 zJzcknf1|hS2h)5Q3GPhYelIeTfyc{bK?606T?T+-?nrKt0c=#h&A@IqdD@3!DWk2` z^SR{}JQwRnqvMg}+X`7|_g{aVF9x40=ZI7KUV6H@qQrU^4x@p9d(Z%C5IjHdI78o+ zCuH9|QmzL2vd5%;qWp1TxnNtB@K%Duvm|~mr|tdbOk8oQL0eFez_tXbUv_0VY6IhS zvjl+e#5w6M?NW~0ga>mvvRkg*sLhg$kBjN~qjw#XqZZ^O_kzI~Wfdz4Og{~K%tu7g zC85%|3z7PK%uF`AZlU&PMKf)6$|D1JW}hZ>P21_n685aRtpQ>BbPpE~c3!Y{(__b7 zScfFH6G!O_3571a(ofp37(bhi4TX-u0hIX-RVVuOfGHT?+469}t210k7zLbM;t*Ynx1%P- zpcO*}PK-{SO*R@u`T6!&OS$czm&7dfw`_Ru@8@Yb&_ne6-S;WT=DyiYu^*=#iVNz8 z4|!6l5^7Zb)fD(}-uYBG8;T+NvWCAdPuL9N>6ELXVs94QuDjc+x!S7ca#1UU7fRHC zLrdb2N#F5gFs1ce=fz%D~Mrt`d8#_9EO zoT^q?$altHJ5i?ZTL)E$4#fD(v>sRV-wk)umd&D5E$#_shtCyq+2RwR2fS8)v;uXlQ$EB1>9dEIM zHXqr+D()RFgCs5m;*GZ76x}&y#L!)rjFk>!>Bk@74YsT=YhzMUmD{!jBsvsi0$S1; zZL|_sY$FesyiJ1q4ML7SCog*o>Mo=ZAH4S)p#uS${r!3u4LOO0UUy@ITZF#7RHC^W zxJk71_g`y2w$frkF&nNZc@hi^eO%#&5yjY++?ozL2jw?e6o7RCDboh*YM>_%eTO_i zbgTkfJ(YH|l{oW52C?pO0RHheds=<=>l_7s{hA{Bf%OzqZ@idh$+v1W{ln@iRSYE_KDyPpAOAS+@7go$72xrDdnHo;^1)1oS1Z~-zMhkRNKMLo_-jw=%ke#7%HwK zNFQHAegw98tFCif+U;k2fBRj>mz;n8`UKX!VmG)*NBn)ebQAxS0n20Z32G+67Q9L8)SA*qhLmkfT18 zo9*=6o8!Bock}c$QGI;rZNFu&`|lig@#3KvRjlOJdH=?Lxacz0b;J#BKem|MhifHB zd9KT1$NK6_Z@pW6{ckS$qOz3Ns)u7quLaOpAvdR@{d*YExB~Vx_Jbp;K+a)#Dl*1~ zpF{G_;;wS#%m6KKvIYrR0;a;t!RJz`Eq8C&8fX*?Cq3Pz#LL*CSlv`TSrMiM;ySFm zrVZk-s(p6G>SC^~aGnR&)-eHI^QzG@jN;inZ{W>{#Ih>m{?#j_UMdG5kq=iY9v#Ta zSHL&C!jLOmxuKL_@)KiHRlmajtTh}m-)v^geLfEpDVB$DE7|uzrJFaQ-dWPB&E$Fo zwYxjy+NypDAKh&{g``?<`c`gA*j^WBPx8^ku(V_SgRw)lUK7YVB5mt|g< zu#LhFQhgg!iup<#9o?`G#6;(c^LS^79#(IMnQG!oZwwvDe_7%=6Z-f+6u!#q1JkX1 zkuBKCOA=i>qGY|??OkLZrf~Ql zw}kgExT2ULIK zhe}Dihy27iGUz9J$_7~qH$m!WKs~Qd&fF>;mFkg)c)Eud>{Fxnq>0|!J;gTG?c}eR zyoDjz`!Akjc%DZ1D$5N7i(Dh6l00iW}ig-WwPz@!Kq%nk+JarEoug%1{!XVsL#f$NWN${ZrdpRny@5| z?eG(`bOgAhKY3x&S6(`pr!|9sTkAKCn86)5DT5e>4B;Se8lq#Q5*alr5fPM3V9F&M zHqf2>+OaRkLzuI=se%r{-@Pru+gfLaT)$yz)^2;(@Cgc=lNT*N)tWHzu{oOeij_cw z+izAcHst3%Ny4UfSlwfGyS_?!$8(1e;=T=OKNBNbJ@4%RGF)6e>PzBnAWbuBl+=ZV zd_PggJZm39$1y#uAf-|I`&{tGf5b#@@-caQ)JtDRZ+(th%B;=adkU9wpv!6bNwj^+%NyD?>6OYPDHZ80k6~c1IkI{5v4B5 zkwMUd48^IAuO*{#760Ovj2vSb+%LZUT2>Q3&8Jd=;H+YW4YF#cJm> z9Z=Q>>hyHQ)`#gB^0c3p>L`ZslNI}6rIFl+!iYvMfqIZwzeRy(e|HJFFPahWV$i+{ zJTeIoI%91BNauURTA0kydeuA7J$0*6LtQZVe&uQ`kCUh}PNI(-rp}{B@X~BIpcHKd zHJD`S#keQ}lFk18bR;x-ILff}Sg61S**xFZ+Q{%9Ur%Iw-_#Ai<40~H3#froI82%` zy7PuI&AXcjS@}>%*Q;E1{c{s zJ^`Z=*Mc9?it?-x5N-f z%yG03;j8w1pXRA~Rd$GBywvlE@`>BG-0)qp~TW5 za-B#`@O})!cBwf{JIm@3!^1}#5|^l+z_U<8hCUE#$%Z94OI*v&ki~|&Le4kmZl9&_ zEh;&AN<@fNsSd?VS;kny9Tec0S*x-d{Xo?`Qc5oW1Zf~!XaTlYS-kz0qMgy@C4BgD zZ=xdEnUfb@qK!p%@fnFlloX{;bnvAoHa@m2bM5=gvJm?}OugCt3i(U#`fZTo(|ZR7 zAJvK8le!aof;xw+xuSuKG_S2<-{%@9{b?_ zm)eDvZky$3C%{AC6B?^MJ*t^PKw!*h)#-7u>yzjKx&1ltUw~6MCvC~0TqY1w_njB3 zFIF*U-BZ*!eek^ACZBG$csD{~L~A*_ZnJq{ddi$X+B(DJ-qRJAZ!JT7v#TWkmf%!x zgh1;r6Lwm~XJfj&3a3wJ7SI&_Cnwn)axQW9Pkj5wX>w8pkisv@ z6l)J3yP0}hETp;6zNMVSl@tH1_CQh_&?Vp@p(422`Y%~lTmsc!KK&fgHU^HN&-xH( zbQR-q#kTQ_s4lJsh)eIR`m0_mWXi{VGUgmSHnb`34J4XcLN8Rixh#tGJE3y_LVXwE zA7Kq+c>{CMM(8eePNR0~jWJbHK*b#@+vfZj^{0OG)DLs8_U_Q>$9U{mc2JAc9lcv< zh-+Q>lWGNNg7r8WZQmXESp18mwy7)ripOz6R-^I#c@?EU54$&?xRAB;t};u@w{|TW zuV2h-6+(X2#mq8yJ2~0M4~4M}uDGTM8rC}v7|ZJ12@*LQrEvV%(RjhSJK2&$YQk8V zbFgcukt|>dvkLOU5*=lrc4;BMiXnF>ze3g`4-*aktuRHP$akA#M*QB>T03B^xC~r8 z(3!zPPW`R0(#t|fuWs7o6+@E0x!nvT$g(e&mnXrIX}@AC(AAI)hvu!v7b;i7sRz|# zjwgG*Gkaq?`>x~s15f-{qRKy?FJB{{VDrx{oo>PL5`L)}Htym*bnTz4S0X!J7`Y>w z)2_bf1jIClY`#gUcQ$Ho-4Wd&OnswOZi0|JMxnh*dAY}o*=`>|NJ_O|A?qbZpT-E_ zCrH`)hh6yvjrLi}ziCE8Vatthi=RudVc^+iHjv)dUtQ*bAaTYg|0?v;W*3TnnT<97 z4rt|i+KG5BcS5Ts5KaRM8p}0pg2x>8$)tci->&wZK^do@we~9%R@s8b-(D#A@`L$r zXX67v29qrq&jTEDXE{>D6o-O{SEn0U&z@-dVq@)~w_)kfrafn*!!prOex(ixZ|83n z-&*0bnvDtbdF4`rdxXAa2JpPz&dsCk4m;B#z|U$I z$xa@46V>b4KG&yUA+Yl?tiyc)0X{m|u2%kj0`~)78IKxWd zo0qGyC^f2^h3`Wy{!<$=9`g8M4(NR-;8ed9hyKYPY+IuLQVv%9?)<(nUuUU1_^07* z$BD1&oeg#fT94jZ!*)fiNk*B9%va9;5Iy|!DP{!UmsCE>R= zEARmw;;te~Dw|?nO)c}z?OaFQ`Dt>(>HW*og4Li_W6)B zY2w&XI4{V-4iy*_C5M8Fb4a|@heRnv&$;I|`ym2~A}#jY7{;2x8D?zCVLvhHeuBGA zIHX+L|AUkZ5A2Em%x%sAPeSD$3D!m<>Sfpp-9sedb=%V2C{ zG9|LhTto2}Z4};>!`rds?DP2Xf%9P%y-A z%F{~9Dpxxj&$dQs8fXYk*~+o(B@CVx3(C|v?B&orvp)VjYESbvCUArJ-|P+}mFpWx zG5e_)!iFEVvAn?PB4P)I;P}`!K;zux-r7E?;8msBvTsnd{n`l4qBPR(mD=OSmWVj< z{V9QlA>}s*1uy4-zNsD3%)v7f!Q_uhGo#U;ID=r9;REvyB!&=O7MpPVicv5YDrKHc zfATaTD44m|VpM4Vs|0i<&C!r3>MjbT+wu7q0FRI8RaZyLmXEJye`7f^yu~DWQLk+3 znC&(Y6Z3xj*2Gn~$fnr+y8PhQnb`hnGO`F_nNbcB)^>d16o8HF@?AonFU#bfKc+r) z%ZX8^Y7Bd`_K7n#bDp4lLcdrY{gds+^ zzFv$AQ!vH`VfU!&_s^FJ^{7pV@ANGps!4*)?gS+lR-I|3@aMJNX)*2$OwTqf7yu#- zonAl+66?Sc8bdwpr5YIOjVgf&6OkH|4_lqTn-IqHqG>#0p+}(EL+A^` zj$2PnmAzkDTz3F`<1Mqrb3BcDU|FM)n8Hr8j*ZOThLgz-Yy0HP*iT+Q3$gW_4F9+^ zjF@H3h{-(8>+xO@^TWl)m`P*GAlih2^=!0wCo37R%Tk(PMdFxS@PUz7o%*EDebJv_j41(YQYHlRV zk7e5Lkqcel2T|a_2BWsFWF`!Kp+AGv?AOnTzt;^v#w{GRDiAHLutvf67mR^5r5A zG<`UDj#v5iO6V%|&O?z&g&#`hfWci2|BzW-#KyUd^UTh}1~QPoD(vC)eA{`fZXM{F z7lX_4Vs9^3Nc&LVGXGodr#j5RX0Xl!Dsq#^_a0xcJ~(btAJWZx9d{itJw^w9xL&|X zj7YwWtyb4fz;L~owN~^kWb7}U8@<@|i&ofPtQBNl71Qc!eoQ`|L)L3~xPHq8E6}|@uk(O;Fyr9ZCrner{hfPI#3LipyejLOZB`)Y z$q#Uoz4^03_kZ@JWKyv4a+56e-PB3nM-@W81@wPbrK@eVqZ*dzJ?2@4C|Z77++}}} zz0ufza{om>t^|4WH30>!PX5}rX;VWmFP@elyf?ykUJE2 z;VuEClb6uX^4*V0Y&RRQR4hjirn3-al`G|#?I_EYkUhYkk;|&j!w$dC zZH0DKC=_jE(}U}J;gN{xYz#pCao1(HJl+lbFza>N)V3`l-aPlIqKW@O0)RL6f%N$9 zinB*=Sd?6_Mc`nKDj3i_bJE+0vvF7&_(NYFp1*52-#hW)+q#Gk<+V>furT1xF{oqJ zeP75H-Ss^)FIr))gJm&-gHq!Rmp+U8Mp&lVE>iloz#!)Sljs*&hr2mvy8*xndfBSW z$sWP8;vO_{p2DiVz)ee*2{$pA#ErW36g*V&7i1!+>ApQWp5vDAnIT$W$TKj9Egn$q zlMFqRyWzY>h1o3C)V@FbHpo4XmW}FipZaVLo%zw40Tko!L>y58JHGD=F-04!OgNT*|vo@z!yw z^Gt(baKS#}3x@=yP1&rRG*q;?R>45iTtO39_6Himm0V>Ue@nwL zHG@fJT1v2bfZMcRJqO-Lt)@8EHC&5;*n^35KVY5)MBJA_Y<#I5W)=sMd+;d#`GBwA z#9OOYKc~O;Z0y$>N_PRnCQ);j#lO8TC4ORy8eWJ0XG?Ih!A*15J%)jLuX3HiYMV5q zq6mX?ver27#@IiuC7?|Dh?IZUWnbOewRbb*jvkW*ZAAC4-Sz~sqUojFy*AXv zZ<&9X{z_siz&#rk5Ad)G@@(3me^(#^kj&|Sje1B4l zXHu^kvNkZ?QWlv4;F9H%Pp*RpaS2)Z9io@35e>JIc7{%p%x$~9pGGKK7|ieEbbXGk z%k%o2l!0U^225)oth?h(*pccxoR&^REinQ_?;jHc9X23(t5tUGq%NJ>f1GY7k847F z!TnoqKUV;Y>;x#@HJN$#+WG3V_kQcI9ZXX}Z$7ZStT}c2bm01+6QlCXYm~BAZ_n1^ z)!0H*tIV@nIdr_+e9L_0Ke;L?;$FF%u{ADmsM3QgfNxa=L@?xxn8hw~C)=<8yNui) zLi3hQO)N7__Q78QDDS=3Hf7V$plJ@Y`tLm}^afkdlos|~A*pC^Y&FrA2K_rP#ZY5- zo%CMn-E&Iv+8}CDi2EGmUJ`*e;fB<}Tj%Y-APq6Wgl$)57Wn7*mGWHnWXg6066kpv znfdVR3ttqU#YN*opG%;{Qwjz5y32)g&d-%U$=`XtjcrAc|6PCuinX7;-bom5RVE#9CmseQoEQ;YGz_86YW6j>V*VmaKoZqvH(= z8_cR?>5;7hsPwMgG8ItHU80EC-tI?dBg3n|URYM-`j4LFmFkV1i(#hoDDU3Xd~yr+ zHs+F6lWKp|SHE=?k^x+Bf*8@_xBM$(Z$yYEDbo&LwN1@X_*!L4tRFL)9kbyRWg>TJ z*u$0aS&3%!oCxxW<4uSLOx+&ji?#ij@9KFP^1612eQn39V_>K4tKc0|H-8_8EYNR{ z!RN8};LKORcCRWVPGu-tPRn@vJcde6gjV5(Uq8uG%j{0ZlqGnvvTtbqqTKOyuR02$rkT>uz&k)??w%@85JjipSUuw zOh&vE&^c6;>fT{{8%-hjx0Y4y&A}1d@IDlcm`Px9DtF`10Ud$V(d;|TeQN=!Im@S9 zZ}zuQ&qDn}P8jp>$2k?8i}E1W&kfXv zTn%J=R@T~eu>6;b^EDtv{=mdHBe5Dm;a&H?{Y&xR3jYCyj$Sqy5 zbawU46n-}`qX=%P@;#rbn5NPZ`g|$8qdy$zqIf3eVm1}c*Bm^@&*K>D%USo>h zy@ChrNI9_wM&p?dBarvL)S0bGcgNRZA*7O}6~wV;t?Hj1%~tTKEmkYUR3tOoFOtM8k~=B_Taua@u#E^iVCq zAA28-Ve<0aLQCdkqmO!vM8#mk(Pkrjvw;GmA|p+Xs8Wm7AThAvcp91Ywf1?7+&7A( zViUs}OPn1c{oDh(nUx8UFSWg;KR3>KiXhhHm)>~AOWao@OYA|yTLqjf>epI1?z`zB zzs5pau1Oa>hpL)ZTgCu0)Db5C-kqwPzG^bELuzOTd;tgF!c?~yIXLk|3V%rqzx zi~`5g1}dTEM~`VOgFEtJvFV}dW-^-I29~@6GaqLv|NK3e2HYLOkg+0t1_!=v&d@jd zGd3rI`^IZQP>H#0%NW31!0h!A`tZcG@6Shy<9oMpBi|pyotSE9C#`NXmZ`tdTu=FS zA|QUkC~o`s@%0@eEs|0;v-)Z5m1wKW=HHP3C^R2_!@`JX5}Q5^%PVe>k96R@f42e5tUq|9?+f=jX{FZCJf247@x9qO=OnjmAs0#Gc_HQ^g{|*; zq=(ts@9VhFuc>C1#_r&eY>KQw@Z`sQULs^?rK`&D1<>5|9hYn?Q$zY}VF$I;YZEKQ zNF(rzaS7*9p{IYR(-;L#0KcN_5?=QXuFH2lOa`==vj&lsPlA#;334)#?`BhF07G%9 z)w2$dJ}(pv&Cj^11oYKkso|eR?>m0vQ_iS4sSfT<;+GV29tGd39WpZXN7IcH5zy+Q z4sICH9i@dz!vT88E;dcab z{lX@@yu2cNrbnpx%fx^3IVs08FT&Uo)RiTKXy@sBDu+^^FrU6OA{M&a;%(#2rt#A3 zaup2c$$TIq!T(z#r1~U3W_poOB*5>h6|cJLabVEA{pJTcW9mxC&4|s&ZjA3@UfYxG z`pZ(W$3Tt@4Us! z=bytM`{&Ai0RxsnN_8LaXO-&{j>LT)d4qY^XclHN=xJi{G;6HYf^gV4g(ERLzRM=Q zLagHIrXv!*sxE=}8o^5H-vS+ItEKtG7>D)w+B$X=xOZUg_pOxm`E8X}e zxYwUN|wNTvIWdFe||Xl>I8@fKvOm4B6^~6(dpYeMQx#g0p=y34R6qNurq>` zfjubcbC~J!A5+22!!=?C{)_F+k0myxZ5Ulp13CkAQMz<1VE?mOYOaqSubHrJ9}zj| zz0M=|207^Y1&WtIxntT;Dld8Qzu&L80Zn_*UWYxi!R2A{*zXp)A>JchnowPoLuW3U zD0u`5=_{>&Rm8e=xlbZ$B)7clnCtCxSY>Pq|3ML}_T-i;i$r8@HtNCGb&jZo&kRHH z@eKMo>H$laBV^yDyK3T60_Q#bW_xbVPE}$GjPt%|;`CXptap(irIKRh6v_V*#{3ES zmng%Ng?wG9-{dOKHTrtRN7!BO@B)85T4Sy-2`zPCWB%!VKfiFVI3Oig?(6=3Wq^UB zKk~CN@r#((=)j_po%o4N87Ysl%0TPK`TvKev;J$s zkJ>(=AR(x{X4UI^QUF&~hppd&8F5owu7`F)y+PMqgpzi7eNmLN`98-Rt>j( z+f)V&F0xaw#hVzjwgfsU`)wp>0s1WEkPzAaxl!=kjEdgV2~y5Kw--R~n}WU@B~M#t zwn^->_=2Y$=G!Z?6Vd#4&W66*sU0O67Ctd=ZApjfZ9VFr8AiqK1k#a%gnvRZcYZIMQ3KBaEGQ}r%~->F39ArBX& zkagzGWEUD)SMGFjD$je|#KFg~Pd#cj%P`qD1=86kwb3H)PD?tgxuw%gngvtjDUxXGGaEPQ7SpMuWA8ZYyCz3kA&*Qx93yyGZ7wNg$Vg(W#w+slG?_MNR79+rokk_@~* zFufhmOgyv9r-d3H3=0FC1V!FQ4{^YXo;-Qdf^Dsn?lb4)a7A))+B1LX&|dmQeNTih zIOZiVTx(>_4CqV&-kyCZ&t81k_A^m0Hl}=DXm_^q#m_GTs6T&7@?0h^dji81Wku>x zH_W4LSv<+@a$b+^8aSWgQlmn$qlD&NNi&w^ua}iy)KFjGvD00u6uvlv43(d2aO2|GRFFxcmG`d7rGZvR3-3 z$@j_TNe%ONs>(iaj@1vudw9V0R?{6!Oe9k6p_T(e$UDs1KXFz6Pr=;EK7LC|y=D@G z?h6LH@Nx$KKgC9Z`(mZCwf(A#7q_AXsQX^bh!SK}kqCTp@|@A1DG@&A+XUY6AzKyy z1(LU2ge~FMWTrOzMk6fSve*O|brrf^>3`0wLaupx*$F9VT5Tzy!!kuSe^%z*C>!cF z@3G4(QGVQ(aa^1>J*(1vDproSZ0OY0jwtd~v9(*siE&wKkB=8Grt-1)-KjS*H6K0t z)QCO zX(ltZQUf-igw6HkU%wQL%Eycw1*M`TRmuZxeMpu<65#v6h}h0+|k zm%a1Rxo?h6^EF;t)psTzPK_MsOH^xd5dM2$`|o&3n%UuNr?nI_yXo`lEYRJCU)cGD z%z44qw#wD-2aen(I7}39a0?xwuvV1-zs#gboEYs^tsUM8bH5ooCgHM{k z(bZCa_;{R=WtxZmEQ(r~@CqrFgP7gs2Hi6=0<&7>Dov{a_>Umy+7(r-dD=x1aec zF_A(T4h@98*48P9jCi|7YiLMULxM;wfWa;bTmV&!@M@))Z90GbQlWQD5Eq@1cO_!o zblYe4eW8xd9$P{C)ZqQAsqs*Ldr!JsVWpqHSzkDlA5|JI2?SGb-0$NRE2CRH*SviB zJQ1@iXI=tt0o zEs2iMqci$ajN%dDpIotK99_Z?WwgFJM4mK@k53YLdLDUUxy*>0M6 zjG3((#`x^H)i(AtVji1A2CZ9=BIFgyun0=%{UWf7+bc(=xGFbGEYLd6#VX!BecDLz zSHSYiq`%u2ZRwZ%dEZ>#gt;i<37S_Urk|01BAve4tv`~p#gO-TA*^-wxM%sdjSbU> z+bu_-QsY@(71?0iO9a9Dojngd)2DzEx|+iie-^72W{-bRbY3V6-(DP=@Kv%)$s^3u z0?sHOIMg3$UFO~{@^09lSPZ{4Aij`m^lQc8v*8$5fMkRR5588Ft#7aN;9Zx)9jlGE zC^D5cZ*A&b^>h=F3NALt%;;ltbawu^6}}RL#;}oUP_BEyHf>|7-i9kFpJC3QPHFxb zRh~^d|L<)sOqly(VYWRD_8nw4#rw;nh7uZ*j7YhXb_v)7`K(&(bx`w$c;b({84=Fv ziP$0DiYq8+1HDKhN?yAPH)qcWq)3mf;C!IffIt1+@2hn3b(BCE8$VS&_J3Z37*RoR z&xp0PF!`^a>>?Xj$A8J!M4pei{9-;}y1Z8k2tLUj;~f6u6jYu3Opc{dps#l0NyoYM2n5lc^i7Mo?kc#DL&fDz5k%GVUyyC z&7&hwJJJ=^HPsgjWXils89uE=!L%hh@6* z7EOE+n!~vlG~)9X+zJSv;Qw>*xoMe3x;JZ6UPS;VoI2{dP!*3H)fqkM>KZr0T_`>I z_D{8eUn%?4Vq)pwrlia;T_`Ty4l7}u4sDYqr!lH%uPjEEOL2dzM!>UrYJNFXd@JV| zdz66_!GE*5n$49@z0g6xKfut`5SKTMR*6=~sAfw^a^VVOzxLxCtx7c0!7lu&B^R+g zx!dmXJgZ688q= z`NY(-$1G`q>uz<(Esf>JUqC7qXV#Z zrtpoo&%X2(uLJJZU#c|9zf{AFOT_2p2IQ{kA6Ih>S_`fUe>@T`#@8^|IPuF><3j;&aoa+ z)XMg4Y8oIzA1j;+dtUmy7jJ_}+uM9vQV|_;^e~!54)AiT(^hedz$DQal&6G!1{!I~|?8 z``<5oWJ6OCnN*xPhn!F8YPadcyXHl2AAPqBUI13Vd{%~{Q<6L@tuHMIQ1!^NC-An8 zk;+$aYoDWFs-fQIHs^GU%?pznS|hL<`Bp+lA*TQY4$7sK=EpT<0K~22lP&WY6u|_B z{+QJk9K4R%eW^&3E5Do#NFnk zpPkgy^u=v?w^aUF(zGoyopP;hTzubOvK-$T%Xo#7lWBZJlhyuFqpVOGxhK_Rf2W1M zHx~eV$r5~gf`fdWZVEmz#o9o5CF%rLl5GbQfBQ>ZBhaL`u>?*)C|(VWK;1f1YE%YM zT=#kEiKzFWA(_=AqTn@u06%9$WCciH{O>f}n$8_?b+vfNMm+9s&}pwgkxitG2Dz{O ze64UAF@6xo4v&vhe)4fPx~=ctH-W?@#XtJ1f#6?{k)6VfvLDkB$g-ZXXKG)Ij#JEd zGd%BUi2bXkZrT2kTKc=MQ#?WLiy-VopXCOlZ}RxiSvdXj6`lJ%=Z_d!rQ3)mv+jF$ zbn-Cy=s%Ms28C#*Y0dzPj12+*nc>mOK*qpUnh^eM)WtnIqqtWc+jV~mQG}6b2>=Gli!393G0S@rG}s>L^yJT=ft6v`*n{|ejzo`MY1tW1 zKPtN4)X(3T_bceJvHa!vDOIf9y7Eh;&EY!8mmn}7;vLTumA3LKbhz$rrLb*gVG5K@ z>}E`*8y6@OBN+kzovSz$_?7HFEQw+Fp;hLi0=3rOekqS4y*c`ZYYbF6xd?40Ck*>4 zD-j$u+z-GhZg#g_f=`Sj$I?81TyyqJjm``G+$HR3*wcGr;yNZOR0YF(UOzwwEVGpBDuuLKv*n#S-^0X^HbQ1=V_qm3=G!lKT(nK~qPzN% zCMCuH>o|MV7@{%3L~nI4&vqlQ^I1#dqkU(1HNgSO3+!*e$T#B*eKTZaieFu>3Fx&SsZ&a6xUCdJwC7-BdYL} zA-)t*`m;uDB~C7gj1w09SD?Ri%|T~%httuXe$<{2dm!7C@ZVRLfS+Ja?bRkr1>;}a zS?*QO-^w`^Gx%8aCAn&*sD)pNay|64SH3D@K)yfYdHjMzpqh@fv$9n+Qbc+u7bGDo z-qXGBIaLsJM;89(cwwje%BHj6-cB)zrsbK=wzJgO`6p#enZMhCA3cvG|kvuP- zmDb*&D%W~E_V{BzcFBGjU&AAYJFnJZ+YTkAcJW=kFBmdy>YpNGLq#TfK8bbQ@NrIW zA=@v=ID=s({!3S7X@vmq@dkg5bobJTHs|j34Fy>JRdBFQc}2%;qD8G3Q3ANDs05H6 zp?OwiurW1ljGdgHx3@hIN2(<>QTJ{URYiJxKb43t4?IHO&6Wz1=X-|7hnQ?Zh%X7PUw&^sMEe$=2{q;h*GvJ$O6sn{`s z{>E!Q%cssOKlMi$TV@Zft~@M1#UY)?I$QOi_KKFLye*@mGv(8imUC#_zZ zl~MmmUdi0??EU9rvw{(!l1cQi4GCAK8u4p9+U<`!>q&xtM-xi9hE!+9-=w@`Z#L2LU6#Kl0l$ zbG5iPO<6^B zP4P|)Hr{^?sJ*M;k$?Rz|D)jH4Yl)u@48}>=fl=y7)aL$J>TbgaWQEFp9J4e{X@wc zN8d~{otAQ)oAmUdJcd6SZqoOuCF+D>vzA*F(movtTF@kc;JOj+`nc!RyV=K9|++5SanQf*&7 zybB*87lpT1UJqh*iuTh*(aLHLqW2&cLhXeb5V-}{afgmyv?XCP`>jm=9+6Me&UH_{T@Y|J%xn*h?%se}s{mr&|h9ymjY-K2DLG5=;9byD(p6qH~ z0}Mz&SO6hi8;iSxNfXJGK_TIPa!suEeAfrm#e+WrS~Yu0yvlYXolehDp8=YW*liJ!g-sEy}zuEGVS z?zz+n6w_Y(Vip92eE4shXP${ZXoXJv+7$H0-$xc`Sp?p?NFl9SG}2=;Al}9Tmqp{1 z& zl4f~Ho0t(OX^PP_@ay`|H;J410eE)GAH|TUATU#emC2r z%g!u!Nyd~S5s={5Gn4kG=JpyceMsxZmC1|I%lIT1UWa><9F?z>bAOZ0>d}0-@dKJ! z)vrnKZQTIvn^{-+Dmv#>&Au-L5lX#lN+nA;c6 zH9yf)2U5Yxtyv`(jBWc&-Qn0x?Tc@++B|E;9(ck)v}HjQ4-_X&vziY-qLQ+X`R{Gg#F~IF^6zOYr1&OzW2nXZ2*Q-@oJGC3?e)oyIxS^oH*Z%s4$d&C8 z@gVzlBO~*4W0_VW7%EU+9Cnzk`nvO-QRKEiRW*BeJIBuV$fUOiTXyrGX?q?cJ}sVB zt$a7W2ub7uNW_H|sy(@yr~PI89BaIkDwbub5#3aoANCWDOFigoe8OhthW_Kh-;{#L z?p0e7oj;7hs=VLG6`gfx&^d?hpyQtV*aoXaE5?mF{qx?6dyx3Ty2;}p-uG+5kh>G> zakF|>*y+BDjlQ4al4B)7mHr5AZKkHbH|eZCnD>^_lR>qjHWoj7JW2aCvm&sbH}Was zUo331;iK~4D%)54(c5kVO|t7x`vbq8$1x+rIHAO1F#+R10j6JTv73aI*C7Y>zG425 zr4?q?kWm1pOZJaO@K7^e0q2d5bHD1eraT!Yp13H!Y5+L&-l_zabonW@1v{eJY#I^{ z)Wyg5M^=imSZ{79lI4%JSEZb0u(|!~LYmV);-OEjJTD@3=8?h5(67VJoOCZE-oHD| zx>FH&=+15r#?Y!ZMFN#wbQjAGk;zp;ce|nmE4@l$a$ZxptdosF$dQ|7l*2wm-LP0e zNuc-dep8zoa(t^hcLX<4S@gte_K6ZeB*{eV0|4l(L$@$l&)D0Sc)0PV1B*M$2AtOm z3{SsE>})pfZ^IwHnumB7AN>^;Bg_bdNhvi+?=KuO#6C}@x(_PgpN%R*^QC9^gfKYO z8kOj&giHxb5?sL9JRGtDRzn<;pzgl!rm43C<<|1oB&6bI_j-!9yi*T^g=$&J*()sBlNrk;X0e{%5{y; zv)#jl{$2kNt~YZ3t|0gBpa=LYft5@#SL{pNOu`-FrcTI5ejQuOw93f3*i77> z2JztGg}(S|L=BMZ>pa-nz@8^qO9{{d_?kA#3?l;o)CS)5T(OxZi*|PR-nN%?{Im< zy2{YZ7!mP|Y1q%kck^%@^eMQW|0Hk@=wNuM_@suh znAf6f=Jf0o^ApDB`}P3jIT@C-A=L5k-us{PrkBizw;;r#9*5wgNg&C6%T)=<>wFWE z{pM6N(^QWVaSl%;_Pc9mx-@E+i&TXIsf@PX1lweYuKY2ntAw0qOPQu@^vEg(Yn$D> z?epEJ`N@R=;6dNLAAuOuv1nX~9BiF|J4U^#wv`9uHaivK$pB)RdqtoPB42aQ8@ls_ zX)0)`EwzS77VC9R-6!t?EKr2Q$!^OZ7#P7lN~zf)*fN8LfWH?h~;8VBwHGVk0V>u$sZ-lBQ@RjgY^B=jeMTM6I**AAwoQ+%@^O|>6HmbaCeZq&C<|uFo zfe*jhT4m7Tm@USxpFlB3_esBFS52s}ppwouC^jO)OAh9{0^gDN0a&QOIDu4@r%*qN z_}NG7n^`UR3?iA>NNiR$s9b2tkh9hCiN~X0(qheg*!=vQ$w*uLSLWInryA5r4Kg}D zts)aei=0m66^z=vEyx!jA1ms{pfZXOflkM= zOO0ey5GZ#sOl1s9C3aqYz^v5bRUmFpCHLTh*jraoN*Y4<_DvW{mMa`@LC>$WJzH|o zWWOsSORZ!{3|nlx^xZ9AaxWiO2NjL|fe~Gqzu%IL5Qj=p4vNROAnEPXZ;&^Af996K zdYxFqRnZ_<_M@$==0B4k;}*X0yTj^WygqL~U>4uG62{D|VPg3Hfa`=Kq6Kf{C6|91 z-|>LFFijvs_0EFrIijNFw$PlbwNo)O%K!fKUM5FzGXD9}(*zrO(?;41rSxFv%u2&O ze6G{V_37i2X+Id1tv}uYK^Iy^bUcT1Y*{H)Xi+%)XLp{H^3`()JSXr3skXYU=H2IT zIng^?iPr0XySpGzUk?a(*lD{;4FJYuy89yg=(G-9(MOlpKqP4eO0qG`BC!JG= zcA)k59L`4PG*Kk=CvcRh6TlbWMjAvlw}rHjSc2VmVy-S|$aG9kw`6&)!#TIkaQ&HETSMtG%1x*2 zC@boV)vJrAWGF;vus-4cnZ2jwj}KvlONY~>2(8m zPa{Y;d8lcbtX!vk5=c`~v)lZ_U$|M!%>9w7>3qLc>N~mB)A`T)9`1n_fIEyX4C8v2 zTLg+t;ug7{=4{dxuP=?m-hgaLtk3CYw8l$|)4vI_`~R&mK0I1jfrbAaxj8t8ohHX0 ziB^CiDNb{Qi(@0==IgGJ6$5(-0iBul`t7Yh-hUyn46YXsg4`8rL_^4;kDk(y3*M=? zQ7w`%_s(l(1pMm*<+0q*=J=4@8_H$*-+A>0s)&bk6JDe{ZuIdB8}Q^X&-=pZVt%Iz zcJ4sd^gqlph_b>+vJh35FFJ>%qc^fw#BHlq_k~@YWYuWnT@NO~cX^0*&}S1!I`>bF zK{-lWdY@Ev|0z?p6wOyuJy-&a9Jb(P^lMb%Om=PG&WR^?%TjQf>zYkvAzeTA30tQ8 zG@TgB1-&@*Z7RHROO%7Bh}aKi-QbfA2C(bCI{-iv##?hxb+OB<+~RW$f9mEGyL^j4 z--89OqPv4~9?q{~cGA{M#DHhg*nvt%mbK}q4~uoxI)SJCoMg%@J*Ye~H=~)Zfi-;e z=e!H0mVnba7J%P79wCAwyQA29j_p^nQOhZe2cAGs$D0QZQ5N+@F^?bxdXLQ6lGbk@ zWR|{g5?;7s;<>6Lt#u0ne7U8hqBXduccB&=0-yc%y2kFLqx>8Ktm-M`W<7&F%EcRV z?xQ%=0pY1?SGz0U7iUd^NSKei@jTU|yd(PK9|ZPup`AmM#JktfEaW{T#57?~)u;-S zVFh0!e4#R$^M%sxF;)ww_g)E{_7V$Ed4v~S8_%vA%G&C zv?@xQN*~ERrRp#rU4{jfsm}(loRv}(Lx}U*!bF$?sqF{X+9YSX=9+@PpEXn@nDofc zJD(;H?6UPRB%Mm+sR+&V1x$d=-|9gYy6U%C5z_t<2b~^CR&`F>x4FJ% zh{H}jzc`Nu7atFTJ!yJTgjXKIHKDr3eg%A--jf`_roYsvf38UW{Ln{Zo;UNE&ay{! zoZWiITq>1}#qVa@*-%m^D?dJu;rwDg@4;MBgVedFS4!_`ST%Vmc>W)q|3oFvH~=p_ zq~D|jf%Z-%qhC1QX(Jyp06Wtvw{OA&U7^9+hCDvc_tYL^4z6xI!*<0ZG8;9m+O8J5 z-goOeYN9f)YSIgL-(h-#=QYeUVqf1E1gEtL=7xJhyVSS0y>qr}AF_UobDlfUqumnE zZ|Y;VV`-|fg3RMhhi>-CuaZ@-*=}hhpiRR{t zA!}L?*O=Ev5l((?U9zBw8Afg?4zJhiySg61LKsZ#T)!j|Xv1mn=tTq((GJF=!3Q$e z!P>we!i}&7Pb=B?i6|nNE}nE(_jHhysC+rV`<4fLq~^G3R)FDY@4dHDIz@PcK_g(x zAT5#rT1gnx&@Q*Z8{FTXb$F7~hnh|bV#YuASv_GQYyZMey7g3oE^Tv6I*XMH6p;lvh+}n3^oJ{XvublkGm4H%zzh|gqjWpn#$<}Ix z4rgSJInIvdO+;3HCw-)S(fwv2L$|pY6VrPB0qW{?d_s+n<{V@htuNKp0UrPwFWUza zEGvI^z6;$CU&=*_4nji%!3QY`#_vogcZ%yYD==#nq@Ox)b6u9!yq9ceKX?)%s0)z_ zi+UZt!kJA1Sy8~Jyj8kiU6v;MImy%QBO99%D!7Z?)cz{hP*|=A)GavhOO*Fc?RIN> zegimc*ftJ)VwsoJ$ZMa|*_XhzLd=v8nSc%rw8)9BezLgxOIRz~rWtR2kMMigxJBfw z3@rwokBT0ghOp+?jBUapg1mQ}mU+Wi=YX2cm#!`!7|0KheS>lvr(n-)=#68lIINKN z4`isW%c@r3LZhVi_EXEnvd^e($V_hbXjpyx8;ik+5gh^C0T4vnA9=Lf3>oLd2CSjVz3kUxt3L0jypOyDcG$kWW6nbG;!Hd{p8G4+p-XPUt=_zdfuv zUoF-G`vJwmH9&0QY%){^@skPtvj!6v3pMEkZX7uYo-BQrr%**%#^A7NZW?LXK+II} z(W&wqonc8etPXZ7m}DCqmUa1ds6FJ0kdLr*yB9k9kVR^J8i`JMne-7-vRQMvOKB?* z)i-zcW86IF_VMS{0YG;H1KUSDR#fKMm>iQvM~To(Fvp{c_;Qcx=CCQLn*mnBQJE({ z!1JK}7VAl>7SNX=6LsJOB|^i9^<>?+ZtwN>UQu4&hn5<1!Xx_U@RMGo0QO68O0#aK zlLF&sr{k=6da(xbo3l2@)n4!q@4&EzHaDgTrIl6#HA(T1dh6i8V{;t6mcEgT(Ah(V(>A&#a@# zKYuBMubRMaceC8yAbs0oKbcjlf#!=D9n}y@tsu%BV#u{TF&Lw||E@6L*#d5*zqxGk z$Z`@IGJIDXe4X>n%bVYVuFgGaB`}B17<``S7H4zLe~yUiEaWMY4_=^T!7 z`quq9Uc&7XcW-~gWtaz_4?isuXgBiSffF;xY%gO27s81a5a^V5KXILN?8j4Z!;QPM zWiclCNIonL{JL>HZ(qZ3QU@J6g(U%K|H`R=s{Pwiu=do6FL%jcRAG#S#FJj`3*Pe>5*UA-++BIh zG@EdexD!hN8G_TV+F?k~_BZI0n`9nUxWp-x9W{>?*|GKtE8F?}HChXHDv4;jnjz&} zhlb}$pBd@$zCS9(qI+baisrd0ACGvKE)r?_P8mTwI{fuKPI1G}%7TN76~eJL%%YeE5qNo4LwTl)tqP>eD$k_ znL4vG=*teUx&T>!&BOK|2`PY5r{AYW&TXq{y3lOre$*ztT~|~iw_v2&zA_FrT;0Vr zv5uAJowOc)xr7^oguHS;eseJp1aOXgGkT zLU?XN@5c_!FSrn%?wf`KpIp?Y#l-nV`eT0N|LyZiD-MfyarHjvc>4DMvsj&$mGih>WzU-O+b zzQ@nE(6V^Wi@HNWMbuerf#6$q; zw2@HKAlz2K>UF~dg@Is}AowDgk&^w^I>DXaZJ}$>M-xxho6wZ9Nc#8JhaEP_nD9sSK3Ca7Eoue@cKTtBh3;-krj3!VJUfV?8TuK*DmgeXFr%@FvXRCOddPI_Z%aOaxvDDGyLVBrUz?mT)0Dqo`;H* zI+#`_`s>*6)#??c>-}2-F`w;?-kHBCi|zElsm6h?H-86ZaNsFF=cc67!H||wnt*!m z`xGzOSY`3CKYrp2=$N8mB#soYTs*$$*YZ5t$1t_f&r0xkKV!6_?_!J08)1uC*wQFU#F2ZXq1w-^IYSne+({eygR zKTWa$1iQaa1*BX(;#Vsbi%I1!4SQVg_3C9=_ZA#6Pq9sSz3=>L)t13oV6+f!ehr@}5O!4MrH`ay~Gv2_yH);*@V zY!0X~WdxL6dCHRmWUs9`j88`qJ$;AK0`E(Drk`dBa8(itemp~qaSel3A<^;}S)bX7 z$dD4X)Hu=RlKG~Nzq{P*W+|Zxq-5>{r>$Ts$4@9$FCiCTxl!J>jn+5t>}Lv!E%+5$ zg7h@0+Lp7;+38o`99{dN|4+SxW^lI$e}3f0+lc+7uoS%XmBL=KTwBT-S1}*O)@KV` z)j8`85-v@LSd&}Zq2z7U=guHp>Js9SL1-h1{ato&ZIdHe>tt)y@}TP~+%Nw8G8O)A zsw$}Go`;uVCmg2;O8b7$3avTIDi~z6c|E}7bb}tb-b~N2X$=9t|Dt6i-+2vVziwmc!dVAS6?sJmzIemJB(4ObXk~ z+k93VG8?H!g>jvEghGt=m`T1sLh!%^Pt{ReIuDWceQ?l5*CyX|Ec~gi=uA*5Dg!51 zI=cJJY)EMAj)=bTfgt)HAcKY(k$DF0V{Z(j|NaOMpAo&>%^-4>ikHcO?i$9bzUub~OfhP|^4mr7|_@ zoem(_Ds(<4u+>WW@IsWNfPjTw!G;onN`SJ38OmOqm_#BE=x9}Cmpb9z4aK^(RLi&9 zc@^#UxQCHQv0evEcOoh6Rz0Je;&bWkwr9BB*>}P~{cVB1ZEmfP1p4}=UKf~u6^60( z@MR`P1Xxecz+8Y`c-W;@8`M*6;TmE-N@e5X=vI@ZtIaAw0c0mm*m8{vd7_ELV^KfnH9b zcDtWzGEI->&02b^uPg!9PvusO(=AZgq59vz=X|>)YsXxCd6m8EU;&raq}7i9Trg37 zfZ82lk12hz|000J<#FVMq+xv|TuuS5r2(?1)KH{-qnfiXB7{YmcA9)R*c65xRDd&@ zu7rvgD~pg%SJxG2&MG&U*{w$5)<^d&ZMtgg&*FS69rRBQBdk4d->`F0G;(FMMLs}; z8F*q2aavhyB)ZU^%Yk!)tR{&eLpR|R#}!_)zL<)Cy9#b|cvn@ZtSNGSDPui&G`HKE z@szJXfUWluqvZDIRf3!wrttixoCKTI>g@Ka1}??pMK|^jW*83TJ+vG&&4&Nr8WnXI zO`KXEixa23w{gdl;hH(vxO>7q;}bqN|$mFnc{tuhg@yWQ$+=#)@8V z*X(#R88D0zL-Z9=GQ2CfnRD1c46gj;w&A2r>0C%Av<>{(aunr?Sw|;WK^pa{JPAKf~>{YR+=!FU%k z4jh-9$n-oM-70wS82C|-LuxO@snVVB{8pq;9^D${?5D(A##9&LZOWq5S3a=u>qyP= z9Iil;D2J=6psd5gii=FSvQUsT>Z~p;Rn7aT*e5jCsOA^aMNh=2&LAEqxGE)x{c2Ll zq{peA7<@>TwH^~@tacC!hfk^K`UzN`$T{%&SP4a*^SekRM`z#8sW(CBbmzjqq0hbwG$lqwa zRitEgLOWPx^CCy`ij+fIRcioW!Y-)YVH+s022@CWH+{cFZ?Lee@@V~pdjN%K3q4XG z;`hl`V9ScnK!nRE8E80kGVzLJ47NJKnoyH=z$LTPt!I(st;#*cqO2Dl?ZGWqE0qX$ z@Vbo0Wi-zA|8X7?8J7H4JxJ-$m3ATm$y6*@#8`bPCJ(=39I`Y*y;6qh*7)469K8FA z)#l0Z9o^f8{n6+X^lvt<&s)^#w>~iH7|i|I=17TdP`$j9d4JRGfwSqq|C-jzBz2sw zzodpd_Gd?<-t9oXcUM(~WSSrtKeCW~qlPMEgU^mPJ$c+ocggdA;D$uL>x1ntcQuvD zODyf_+@k|K7v*lgW<2<*!4uJkL<0!|i8gowbKvnc+%Wis_q3>1>))fyke9z;(JT!4 z8K>#%CRnHFBA28OPoSRgo1y-->cia7oeFdX*ieb_h1Br$ryD7um)g9ADH6e;>ReYn zcVprH9Gm~J6##bRe?>+oKdf6A(60fw!t0RW2(h1c$7$8bf~9{W)i(+M`R*x}-c1ua z^cN=+zz@HY4vUS=V(~l45LsO<3=8PYv8`MLVD-Pd5A6uW$9~%B>43#`^ zepXp?ZPx%YtsUG_#F2%gYoJiPCa&R084D8|Hz;#ne|-%{nCoI$x5>{1OGO!4%X&`|D~O)oD6lL#sS4gYVaIV7+yy z3d(jmjhlQst%n{bqmS6H#-LLFdYoWf7Yj0QT6QE^=LDy0XiTPnB90CVZm&-3_R3@J zll3ekD?`5$WoM=5$hlP9ufBKN>LL|<>f?5GnsEQ2T%d977*|*-MgFe2VVymHlr7%B<9=(!ng4yEmZ2{}xl~V*yek`zlcAa|;CcUQ2TB9>5fKZAOPM6x#j7I6bx|%O z7g=~Y`sp@$|MQm(HFGwL@TVnB{B8KzI}K!DE5`$hbq}pbzjNVPH!8FOa$=Dop3W-ySpj;+ z3?vy=gUmI$8dC;aJ7a(B!70ZeXizWevYp;p?;sia{1kh$eanVz5vYB97M|42gkFdW zBfMkgnvtyh+gZYDGqz^X_ax;rQr@iE7U>biA^7SsT-Oem>4W50bxtCK8a`-$; zysNI%b0)#-F(NOklLD6B6MFU=|6hCmcvu#bNUrHlEZ+aUQ6&R(|KoB5y{8TTUB8}3F`Z5RLOGJ zw9$ZUC2qY%*}-Pi-{`Rclcc|N$Tl5a;Rg>rPc71YjVA}w@pto&FpE=T4uEo-H>P6+ z>0d7{&%nnbZ_l!2#s3IW(RDWsu;BL?Q`C_%nP?16CfdM46lk z5CEG@BwKVZSsh>oHb{yR9=I(Kvt@?u&TRR?Q-Uuz|q7Qs?0c z88Icb?`)7+@;nL<+m$_JG9K;P+O^|x4`4XS|Iux{8u&mZsCu#C|8RBJUropTAMhy& zkrJdsL_tMLq+=*jQYzBjN_TIg6p`*`7=S3<{>y zvroL<&)4JmHsyC_K~W;}YE+iBF7c|KxB+(ve+lB!AQ-jv^~h|hz7#boR??PI#U%*S zNM>PVvsjg5UGACLZ+qcf>?p#_8oNWeCJ@Qsnqv_}8gCr6I0QX{L|<+uvxf5tP+WiY zv<&x8%6!NPu`NjbxZ2DNQGEXO5qRdZ%&s)NMKF{oOMVV8eIa&6m8FYpsSM9OZF$S> zv2?dx+})L3;%8vC{RQebg9<_nd${bYG1SDFve|@;!nTHt+kFYvvwXUPwkEd#9bdj9 z)jZu))zvo_+QLZ0yEntNZ$qQ z^`U1Th3n=OUQMU|?~#RrTf!n@+M~~DdGk@!*%*P(0C3BcW5H#hO_h$e$&SS~`lN}O zlLF>hu^N0Y&c;Is-=oVZJZ*JZ8?v6?2)bX_&X`4Lsa($Z+Jt@AaiB1o9UYLO)$hsK zO|A1(z`X0t zev8lg>T5(T%1%;^%%cEFV(=JA2Erx|<`~}Ip7j8|Ap7iCLQJvF^oT;aZDF%zwSy>sW!Q0HIs!+N6gID6_L*cJq79(OSCJ8{zYgtzJ;`^9)Uy=4b%W$nN?qyPZ*~0!4PQw{)SH%HZ(%>WD*Bv- z5!o?7&g^$s8#g#*Y~Hd~kMe{#HLtPIzCX+U1I*&#>UlsaOl6Yed{3ru=~1^a%NN2* zfvJp$+|pS}R_w;dtx2K`L#9ms+~&KQ+OOB=oxhW^xr%yG8c2!@Ta}3Ic?!NImS@}f zyib*PMb;CzTsgSfrk!tho3_*V!ef&+HS^CW+yYbbd)52iMkkf}in6AqY-m1}9p??@)n-uZg zZku{-k*C&lFXby^&b@@AH}Spo*(#0dzTZaLqUlN|#oH3+(VO;LbnCTEx@@<(i##Lz z2`jws;=+_GL}nA}NP1#D?~)}85zoqP&zVPPY=<79!=fx+RD%x;LR=PN%gZ#YdwDug zU3A>$>kq6Hv{=uFFc7lKB)ZVPLv49C>xeMBgu1MIBEN)mr3Gz_>}DmumY$SdBa4g^ zEP?`VeVqQe=Nl5EOUPAu+Zh6iJZm~vtO46<^(Mb_T?UW@$;6$X>(L+-UJm<4ONds^ zba+D_r&xt}2uTFka!#qV7utrQD0Q#ZKdmYxM}=zV#Hs(J~G=A#feo z55h8qULAqni}8HrIf_99_lrD2+g=|Mh6S(}4Y`P$9CW>?#qgmn>F)#{qVtCHi86vd z?nNkAqrx%}o1Wqv!SnY&$!}EjUWY$;=i-0`d>D+Eivo*pbaom7m{DOb%~u(Cmjb_L z>7c`k%yTHHLnWw$^7pTCZ>7Wl+YH|LA2}%!bfS0mOHO{sa-R509+#fpw>RyT1n)${ zN$-YO2MlLY@QX0UgmQikg*5IpEZ+BuGYyjJsOzPGObUUk1U8v!ytCyVYqzUy>9#$} zq|>ReA3hG1He*o&*|b<3rCoQ**$K)!N4iHg?%}^X4wXkmjl6r)Mged@)kpDwjdk{( zAL~BKzaelyWP&n&&sw5~K1G>+RvyLBwHsDn0YjVUhP~MTNnbY+S}cgRB=2#C#!fhv z?LZF5C!oKwEz$vZw;2T*jv)K`VN&L0e8^9WI1>YWcURnK*9~QHtlxntQ z&2(xI1;8Y$uy{82#iw^*4B&f*kr|ol>UrD^GV|rnZ2{PwEzY=g|2rYXr)hgbYQ@&1 zCnv8mST@$weXCf+RjWph6{C-V~*Pp1yfy>_E_F45F&L@&O|&}OVDeI^;g+Z0Pt zunBq2C5^1Iq{Rqb)opRAQqX^e+u7c~HD*xuZI^VD84f!b~)l_16XHy4PEx3Y?d`=^y>aQY+_Eig3!x z4HmVFXQt`iIyT5lvJ;_CJGoaTb+J2WhHuhFZ)%L3wMyc;eQ^bb>?uVbX17K8B~;N5 zJwW{#M3j185hk+fb4wcyyB^Q)jkCGCZq2EE<}a_4v&!e49iBI;E9tE3A zWEUkgFfJpJ3!X5}TX+4rZyVcsrPNR;6@|Xce6LVDCbM=w4|;Aj^zn_}{rFOZnbB3D z^dr_aYT7b;Q+Pcobmjur)P@$i77d7r-Sa`_$n}O#fAM#E-c9_?1 zri|K$b;okwJv?}>`(GAs4;9$}<7H>(wmYSjl=wGHCt9n)V!7n=x_{He$7JVr3W!+dXZya-|E zXbF!XY!enAxQ_?j*f<%JA+&SratY914g}VTkZ}R@@_8>YpzoZnWVwh|euN&rmh_i3LBsOAMSZ8Gvf0zs&;&p5JO#y;RfB$@p=>@6pbIU;Yr$t#Y1w1-VK^(ouU{4E!h!`g9{k*Ffxw=+F5d(Zx^Jzv+|GTHuXXcvO59-hA>OifbWkbzn@CQ2N$NTHy^8sn8Dl$osdR! zo83?2Fk~Hd?PBoZ@zXD9U3y9e&D8+3M-K9O!!rA2c5Dl}pDVuORN!bN!ZiDChcLkC z@0=syj|6_h=b!Y-u$R;9NUPb?{}_#r=1qU{TY9`|LpBP>yaxC=9!`8%VZ}e4I*e_< zl8-KZ{eVp{g8KFM=9Yxb9Jj7>cbC0^BL1bh30MwPkVy+1;K9tmWkI|5{Ibvy74LbF zLh^0>tp3mEP>FjMHm7Ww_iu#8zGP5kzAnBx%z@!|;~ElcqU5}WqDwa5e$b@*%q~hH zdrs-d6xmTf-RoYj58P>5$~UTH%UdjNjK_MuV8lRn7a8aE+&Q=u%r_mG)_YOvWBGG* zZnq2Qur0$)8xcJFs2`aDgOpuY{{tE;{sS}$btkoL^OHv=G&4_Tr+*dM+Q?RUZx_~j z=FsF*d!CL4rl!C~f_o{ueZSU0e!_{pQ&P5(Q8lKiNcc89h za;E;+H!%N2{!z}==KMyh{7YJdLlmK9XSs0sUur3+v5edH!)rr;=64~_0qN?y}&d2 z5B}+Xr>BWpyOeWx!6f5NsM~u*tU^#4|DKa)1UFUfFLy980h?OON&r`!ut|W)c!kH> z^bomSQRsfYw6G*=PC&40+5P=tw8lH|j&2C@GKO&APP22MoghMlN)95RBG)q}w|Q*Y z6+6M`6|Z8PN|oHUEjs@H7)R*irK+x_S2D|!;?v+iB19`{*ef}l+}R)j^s-~Km~?;+ zUuc2Uy>(ncwIZU7CO89==6O*1qt}BZCW?Lkq04V(wv6Lph->|)(BmkmKL#&#DxKK> zMLx2T`0Rc-5U;S|n6WeVDPiw<83hfnwHNmDGtZ|}PVsgw)7Wh-5rvJb{e1^#}VWdQU^JRS|V@bo<8&w*HyF zK8Gw(TS+I5b6MDq)@+kV=>{iV*9M<4@{IF8HQ!HLv6+w~OZE?X%Co(Z#H-$aI#_kE z3Q=NwYyBEt^sPL@Bx&n&0uK(Cg}-!bjw4M>tN8z`k1%)3OS^>WgDi1r$Ln>IT*IjV z<{zF8=*(R2A&v$hskx`qM{T!AYIa45_q-epmipG>cKhcWb%NeqMXXQ5z6%`nlqt$P zCsE$_J`0ebZmHtU;+o*-nOb^}T=^rQ6LM04Iwj?dFRdYJWwYCU8a&j-sU4Q9bJkaA zfV!kv^y~aNyX5z!TfJ=FBJIzo`ob(3iRcc9f`c`S-`T(O+bvxW)Df)s!Tx8h1$i_WMN7dFa|HCI!-m zn4g8UwC%HEuG;xIe0>&ys?4;QvHkYg0}I_{E1hRvatVw2`JDS?viBZ}oVg%ANiGKs z*sc_*SD<<-Kv?kI{c|gwW|xdVvob{=kbwP~&?K#=J>&>8&%sZGo|uV+v+*}A@N?g* zn_$>|M{j3cz0mL{_d_l-fMx;c(iP8BR}4u%;QU;Z!94!G1$NI{N|h?WGPq4kg-`8hYx$t7m$$Xvojxc-&7Y z;~jv;Hh1*=-;dt$r{pO~r{UBNh*fW)*R@J=tCdF7^VMStE>8X-&*{5+Tdj!i#21We zZL*l%EZv)9YzHlJq>uvbnp&(^cCISn4~+9QT_XczL}g8&WB!gex#Ic0k;YssP`yg?yCqOU*S zlk#)uKd1!Q*G~+p)Z+8!MVWZk*D@S%tR8IIQ>@|@_YgyY`*cqcxk?}6$`WTu-~+hP z2Y#t~92hR`lXql#5aVf@a+COpmd=*BPGi_5QwN+>%%HTcYC#-Z7CqBJo9lI_ztLXK zH{0ikPpF-(M4uWxRCne}pLdC`lz`Mvu|^>-w7!^i!+tx(Y9CE+09JJGh$H zaOHe}&;-FuA0Y5Q@IQ}*;%^wp5UNq+{r|*AH9wvw$n>%RuK*a}1wGiMUWXCKtk1x%4@clQ#Uy!OL z<#EP&3i1EDXpZ{hzmkC;O>kdE-)eW}rDKzSdmP#UWxFm=qFZb6C{9pfO4JmB$ z!nCaPhIjW0QYvc?O`m=WEo{tGJk_8NTg)n)JkREBBsm*z+|ZStJBOc$hR@&rOLWhH zorOU)+`PE74i`twXY`O}DL4l8d|Kly2B!C*DWIK@Z=lKYx7UmXN>H&g8XdXAa)9-I4wttpE^PZ#7Sd}y z5EEmY)DiOkb0p0Y3cqDydp5iF)Vm_&nR^^(*%C2cvQD~9e5p^_C(Oh#fV0@eK0cyM zMY_SWnFC9!;&^fRVFmCKw7OS^HqMcl+ZnjIL5j)~Ed>rStFE<*E^K_MPGVzdS5mF2JeF zAlC&B(WprgqySMPLFjYG%%{C)F9Ht=g|Sr%_~ar&!5TsdQ?;=L+7L`jX~)0`uzEmB{1Z z^rk(Hu*I%RKG9?E{PR@LC7!cebe3c{>nN$$#S)$mgLGopJZ>dRKd;AtMoDIYp!XEU z0l|1|V`8+a+v?qtr{23-%ui_V&zI|*YQE)T)w1Xt+?LHGI}V)u9e}v~kLR*VZU3zO zeJUbGmqyoXZfJ{6%T0ZeCcGhfK~&%=S4EA z7T^Xs!=~LYE`J4*&7K>5uGKpRV9w9xA=eSh%|MLdg+JDmUF3thGf?wU$i>8Ibe~}b zN^@UqDTDSnY}fhbm4WVAhCf7Caa;rdj=icTU0A=!zyvo%@RV&si+C^uiuQ77&Ai5iCO)0LFp17S( zPdWIi>n>^R=SO_Aln*1xl;@pXNV$oanJI~#=G+!sTZmVm8iEad4eZGF8m29fxyUxD zzv6Oy)q;G>-s?b^VsJ&>r6NY=YAIk1)Z<+b{D#)EaxAnon)Qf=%uL{sV8p?t2p(ry zx|K4DSz6bdnN5nq`5qB1r(Ui`g#^Rg7g4fMOZ+GSwSIGyrw3i?Ck88p9JSxTkDz?9e3M67OBm^SLQYsjv`Bp*Ad1Nb;R0# zvZ8p`u(S5J#>_s9JicKt-?}R9c?r*qrL1c)5o65P7pRYBAC-Wa(?aW>Bqv>);WlCe zuuEWSX%tgG;U#W0hOYSbsvvl6%TjlB0oA03IYi{AN>r0?@|1XGX=leA1pQN>KXRg`~5LC^AKqxd#KQ3^+ zCRT0=DVSY4tOM#a0hz1D%v3X&qeP(ZW&VaNDp^;uMhMwr+OV3l~)1|&G*Qs!BiCQhj6BCKo?y#YCyu;l9Z z{ls(hFX#CT!9vA_Gc{pH}`62Uap)t?z) z#O-_}-%%UYB4!j~k$#6?MSCJOWb+4w&=+)%fl|9b<-5k~D`Vg#4yqw>_3T&qFO}0Y zm;m&8p->CtCCbbdapGgTr}gkgzC>0t)khCBft|OW)z<@cy8N%~iptTf0>_(JX+ync zqNhu?UPXV-%lr%5n?Ah<4MDfQx%fAv$k+X7!Y`2mf4)ChR`NzXLYDQ@feX~lO_biT{%+Oj(KD+AVeKLGxp{0Xl zx74`c+HnNKcevXz=X&CG{x@5GZMng3v?G%3oKK$Jzw5bY^1~4;^S4qymCOYb;fLkG zV9_PD;-A-@F_wf6;=a;|cM~bz;a}Etv2Zk*D|7K-;dPB4%zhcdL!z>8SI;31MzA4(fev;Hj7)>95$ z{g=n0Pc+)Jcm~E6Z>pHem>m)(CXVx3B%TqUkU0TlD`fLb^ko6>+QJZ@o9HqOJgOJm zV{|mi2Xct4s?oFw;NKdWNHi}?tRM&g`__dXMF5;rgOF=Eych7xj|hM z+_)yKXffqwY~cQXoN5G}5QX)ZWit=xf)7^T>Iq@6D+p%~#92z>qhcMGhD`iw%`@-w z64xVkb8&~hbmg3L?pGS6l52Hzk21N=2SisxlY{<=0A@CASI37QTVc{E%TG8y0nIlA z8C{wYz`KJvJ4}*4(KSpb&pY&e&-6NWqFxJk1H-Z~OgvRn;BWQ=#%a=P-HLC_6r9Tb zUZ>B`KB!3y^?Vl9cxqS>?(C;waMG5c3QKq$Ig7o`+AK2F$)^s3Pb!ysN*cyhOBIH*Rc5?F2mFTNO*Ne+^M~Vi>|pSztJ6)2hgVB3tQ=g^%D!Lkj`qofEj@P| zwom;n6MT;)5#Qmtn5VLUjreMnF+*}gf#1lQDB{Hgp%sh(4aBljKA1GbEsp1McSqPM z!xNReQ%(%yUxqoQIv1+6vfCa~&u;RNx~Otum*HHaW9SL2gMqF_fViWRS+KADdxpym zmnfU1V829H%|Y@b(wdrNg_J$k@KVf+ur$Iy!&?^=`y4>;Hxk+TsVS1)nu5pbfwOml z^tR?Qdg;f8vEO`_Y?gkKZ9|sHWcK{EJEC^YYSc$)W{7MS2bdh5x)tBBnqHMZzVw7^ zJldJM1Xvqx4w~tZnpgq2qlX@H5S>-E^L z686oKK*rc-gp%;OC>s48wt!vMn(m~nu=Pn+q z%}m=Ib(NpyxMFEdVq(}H=&D$KnQ0m;M=TK4pwdJCvi#{S>?f8prRFf(KDPvBi{MRd zJ!Ak5svCOco!a!}mIH5E&d0T?e4%3^ctk%Tj97?E0#%4Ow#fS?FBv~9ZBYIte9^xW z^#1J2hh-vUMmU-oNx39{&%p z*%|~y(z)esAchsqGq2DZ%z?>4Ml5552G1e|<}vR_L9b1lRGMKls68jk0eZAmX_3r z%PRXNc!7=!!`Hk(;f3v9q6iN;A1d?1b2wDP`4V!DvOcN$;iA|#M9Q`N@x>uVYD~o% z_$)V^eP!!`kVq+q3ss)lBqNeSvFdmlZ_aw7KSWG5zd20u2w0o)l}x;*XriLDixmMX z=Fv#c9?S#I+U6}$R6y&E1}ph?;uS6_+zB`ix=s$|LoaV52#`;JJt^wk+$dbcIB~lS z68ri*;@wn+Uau~G?%)!-11(sML5FzeiyT8NNBaHSQNDyy0L{83#u8=~2XTM+dm2Kx zJh=3R))6j7GbUEl(*G~3Fz2%(2f%DyBJczLI56|6Ar{Fkda)`-_b?kXq7-qO818$g zgNwxfQ{2hb>Kgm-H)n2>Egt$`^ls(p9yX;OH(#^?ne%joF=f*3AFsTTCO;!m_tHAM z?@qjVnae_JBk4fvSIF{lyD!_I*`dE6VPwb?m7HnDj)G?dO7|s%rth^6!n!R)mo9qZ zWKiagfE6ySr0t(vo_q6t?rJ%sqd_xzQPJH|g$+B#M`dYI32kb%HQZc6$CA}ZBQsoz zA*}YF>RP-ra`HV_NEzKc($ShfYP$7Z62=eqK{A*)B}d-Z$Z@T{aAlUn?raX-w%Bs! z>~x*MxleOpiIec|eZ11~22PtcI_=aR(KR{RCMI!i&5lwG;M zV`06Cm-#<5Q2bF<;T=-8zR{0pgioITkcCa+G=L46!Ktzqt-O}?sS4EyV0^5eNq5D3 zf_#_&$#`Fa!I3tMZUsffAQj0O;fpUn8RyVtqL=y3yN}3~Q!BG2{$9;expAZ<-1PF{ z7Iqy_<-y*4C{usXbxdX3Z{--5P%8Xs&2L4{qE8DOZvJOw`1f0&u|PX;*7)i1#SHlE zt46$)*~2!!{F2|8ZX~y^@Z-!sqXzFbhwR9>FSwDI0H zVL50YvuN6|be7{7&M&$nBe>yHQn>czuq|v9%~i@-;x2kf6Fx!VK27zO^I$N9dF3W+ z-r}u07Ex^YM#FvFiH}hLkhwy&?wMeWB`0<3uN?|PmEHiJ&bSRA$w*>rVU-@kZFbZG z_3TKBs66jIWF1`hn#IY6DYOVv0SVVF|7cn)Bd@EIvXUazo|n)0L zC-+7CE#e|9N>4C|ZRPSeZTt0vo@nO}0aKPSm?iuDxV|bb_L3|QiVsWeVY8Cfk36XR zB<(r1n%qksAsenpEi9NT>nXEGqsP`F#0V<*3U`Eb$gxaL2^Q4mlnpHPzMt={EO+U^ z;~e)G1_pnxIjVa#0ts`Y+57NS1rx}!!rfcfi846~;p z;p8n|Dm(WvDt=HtOHi(F6G@y1jrt#6(l=r^Zf9Z0#IqmVr^Y#-_mp0`pUQQkC@X@D zMmi8lS3k=yTj_`ItL-g{-@yiIgDRBeW%SkU7CWq+P2OA~qtq`mfZm{O22PqIInP|h z`5Lt&OYR6mvFFTC+0)f6f9yX%Wu=Rq!q)iW2{|jEju!4(D($6CK9~<4`*U|AiI*`*0S*mE692?#fw6O^18wrBX=N&GLUI;-rBn zq!cbs_})%`1et`0V9#!WEJDJTL9;jw0>~3;i3K3nIzeRqsJ)z9WAe}@r9HsUh5uG$ zB+$0faiKO0-5Ma*CzdV1)4zfAD?1MpxM$6|D{Zchn6E_xxr+JVG<(Fvwr1)gEe8K3 zK`ZFk1CFI+3r;S1VN|r1{_idJqkk50@ zCGN%xxZGi}0WO)GTB&=&W?CHrbl2tfq*U<>QcisRKA~hJoKuXsI6-n4JvFNwNxdN< zod|WT%t3=3Ywva9dLC!*rz<9(9ixIW6703EqJ9Bi<@7q9aKQSA>|J+!*VA#t&i*c& z1(e5mEY`S9pL^OqsJY3Kpd&Tb(=6}(D#;S@5h?<|P3Gx1pPXs6e6Wf_y$=j&CouZE ziPoI-jp=e(oAk9msk258Nc2PJ8;c|A-&T4z)LP}erT*>V*rR>%IVf1Q8GvyhjpNP6 z=bk^DM{4XnvBDJ5{=>x8wuI(EJ>_S?i8B2&(N>>`c7HFd=FGcCY9{x#@>U(Axn)3h zMo7o6jBtGIcB0Z@Riog$7j5aZ-j-^_1|2+#7jfjW-b8;~x$)kW&zJ%AmeunqtwSlQx;;7D^=k#GrESkjGk8m6h zcYgJt%lt&NEVRP$mo$X~Y00P^*@O0S)^3);YYjW?>&;+6NY+-&I=R!d5xT$r3!k?q zu`QtAaG=nMpW;GP7h~Y^O3U%uxZ%FwOvW-%B|`e={&91uf~+j&gAZi%l*t?Sv+0-p zufcMz7ZsOrPQ$hqwIxKBhde%Ooge-kQ6$B}7{ey7O#mmmrvn9m!zV@%p4zkQ+I-4& zxJ6akyiNdbJ?#s|7gL(14{8mMBVzdFqP6@sr9+p5H7(H8w)93FI-o(w)31>{k>&fu z%atKKi>yN<6WqkGkks4$IQFVwzIILC9IzSVz(9dz0Wbvx=wb*ax z_>%6>t#o%S{#{4E!0NS_wa*H<&LCj9RncK>0jT9%XtfI== z=-bj6UvS@580gxvv-dClrSC|HjGm>}1-IdR?hEy;apF#?kLRwpw(GAktWtx3u{^!a9LQpg%DmM$Zgv zmt7TlpStE6rv>xgK5Ec+}765=H^an+@gkh zGp_IP(xwi(+@CY)?g6ur(?QYwYRet}OnvNy+w1rup*ZnFVKrM-9x-RNa9RO*aXlEF zc-ob3wbIT0{x2PhOB&7(<3Fp4&gmSkqT=}XfFQrt3t73$%WjNj-K9*Fdx7Tl%4XER z9(kr(9pREE+fo=ZIh&a>xJ}yt81YN6VrSI`m% zT_a9nVk|G_F*jWp5W0^E?j)$)rHhJnsU2)FG@u2j3EgY}q=5;aF?fSe&?JfgkYy<@SD)UN>G&5T^azmT{)&Pqzs6mf)*l zOI#rRI3F>bexg+IaitlYgwb>&6c<_vx%=yTDB(4Pe(a*4divzVikSbd3Q3p42YI@0 z`kJNfD+5V$=1N{pq!(A6Fz3KL<m%HLrA-DOxgz)l>+}5nSYUm9LJ)Vn#0(`U`)uh_c#jL7kWtDlDOGvquO%H?h zsl8`pci(}PLyHe@`a)cB`Y6LEA#z);fxDZ9zI)lXU-QxvF0gmfcZJ5!Qd;>nghK9~ zd`ovlZfUJ;4gEEiTc@F*t9*PQXf0~ZC;4>R@t)%Jr=Yk!N>kr}_6)`f@YMrfJIz7Y zEMk)%QYBQi!ceJWucF9d^e5t>ckvGUk{!~Lp}O7o8f8q@*`bb@eni{dE9!dk%rzqs ze9!*+^KO~uu~^{>4G7y?yDZ~(#U<@Mjt_PyBBXYrDh33uwTbi-#r(E>mUS?}UVoBu z111Q+;_ItmG)}OJSC<@J=wHu&ZL*5jy^g4VgBuu3*|b`5rybE5~Sh zWhG4?0wU)d`bew9cvHhc`7JSb$da(IeslS`9x&ejFk>7X@$mxNr;`bE+Fk?R=1Z?? zG`<))YQ76Vknj@qhU_XuRiS1s<$I-}Hk*}kM_2#j*HZ2nzKikBgx`p^X`WQTcZh~Kzj7Le1CiCTUy@~t^3&OHm!S}a&)Y< z*eF&opdfgbr_X=C-)~C_g`G8B0I7Y7IBjyD8 z;9g`^rxruv_al@J1j{Hz4n)RFq6b2z$M6B}I$gRT=Z03E`{5)qxlwg0r4emGUtAN# z@7%F$?75pIjqiqj1YHMJMfxUUsO;xKszFPuOF)ELIdC3y1 z9A;7d5=Cp*XV-O5zqQ9V37m>28R;s4&Jv%aJ)`VA-)jktR$K&%kaAf5%Mq9RX#>5? zv)BHC`dPj=lxK9h>(r4Yj+@^fv{N+p0-0t^BvxrhG{#`5$sChEf_ zYLuBq#&0#SFjgqR=){QFyS@nJ$a^rHKxTB|y4WwCFT*y3<1c#bo5(5D{?bs+HWg$G z=ALCxEb{Uh3{t7lN2`+i<^#$v(ia}%)WV{*p(|YRIHe6u*Und@bR(R0De_im z8UslR@PK~Oo%I|=oGB0->V$zmv zHp#6eB@ksZ^qdd#_s|j*?Y;(7B(89^tvumYCb{eX%K6>u4DnfQ0hMVYbK z{;)f7ri3h>ocKg>iBPxh*sMl3_P;P$#7r3UMBt`W1S7I1a&X?GnCy z`BPZwpL0@n?mW%d^@f~6#)@oCIknG`Ig7(^T#ve({y`G#%Ts4DANukNyR z98037ze6<57fU4YNPt%Aq9%JhyG1c`5D|M^1Fj8rlh-we$wVtWTHSXH5-7bg7WzaP)S;Pq^YuL-$HJ0XWIPTZgx46 z1Mq)9R2?guMu|2N!6I<5_F>vUoy7PKl=83oQilp85O!ovEC<$q_mAV;o9QEn)U(L) zLR)I%VK#eK9lLhTD{Ua(TbCn3UMT8H<&l7e^kLQ3X)s)AiriGrSBv+fE^)hm{~X?Y zp=prFiC-~zFjx%&i>yf+F z#dBSuHO|<_v+K>AbExP#{`%T}x!v#EpX50iILpm@wGgdFm=3sA)k=@LCLdCty>zjDXqE(#-q0})`MAP)| zV#8b_C7HXBu-f6Vl-rbfJXuGrKPI=*|CH?GY?XK%(XChr&CQ;O7HH|Qr+e*1e0j#` z>eFT}Z-3^$1$NLlN8!UTF)9al-LUDxCDNF@Yfqix)`peRe{I#2#FZ>1?UqX zll7s(?=LnhP*53IG;EI~%hd>+yS46qos!V^Bhh|)zd%xUSoIgHrwEPbHF-o%noN`F z^Gz2a*wO8j?z$)6e7p`9TA>iCc_`CsFT9rOT_1Zx>{14H5b|xvy4>9C!{t3ebY{s! zbdT*{)=ude0H9k znHKgp^N|Q1o}H`uJb|`x?t23B1B$+2Cw6RITg6fw>U;Y?j>_rh^8%l7d|b2Rf8YgY z4;T(#s(K}kw|lmPk5idop7Xa6-FVpv$`|4%=S-6M(uJMBEXvJVhpNqE@IAJ#Vnu|FMl6FPsG zYv(46_@pCf^Uk0~i|*H3Zt-mAJCjen9HG+P=FUwWMijXc`(_ujpU=-#Y^F(%JBR5u z@(Fi)c4%^+=PuSi{_e~#wWpC7{ZIDLr9gmt{-Q<8@;xA=_r1ew8&hlRWN62+zvn+n zi5ko|7uYRtw6lNLq>j0qKQ7h4T2y$l9VHb%Q~C>YQqkUyn+0FwG$ep;5n6Z>+=&9z z6t;>0|Cs?xTyYKI9okX4GRN1QXs-0DM35R6O17;6AML(l=)cSM*D@AKeTJtY+AV`p zDeaw6qj2P*AmU|t(U9&AtGKX=I&g5uOrMpMs#)vu)%-?4?Ekt+1Q){GalM8O&t?$>hkt?5Bf%cxEq_R|MjaTC?;}hax+k}tWl&ITOKItkO30-nd-)pR6d0W z|2~=I;U19BT>yAoclL)&y$At38;zKVOePhhep)QmQHuEW!t!z!T0hqIA+~NJ6L8*} z(7v9DlIyF7c~CXsdv%4T;5ceAlije`$$sHt1ByCH&owgB4(sBW)dwqBr_f;j_M;=F zMC^y?$tE^30e|+LI{B>8et8*h!p1ELb$HFqfc%HZ`lggoDoy?6TuKO=zLUa5@s?d2 z-8^o>OI8%8d&`lKo1y@3FC&eWz&M-ipJa*1$p(7xG@sc}n1Bwmf@6kF#O3Z$ImRXy zZy5}faT~erX&L*UH$hLr-F4(kf?o`-+U>J&M9O{rPRzES%O;e5@Tx%hjpsbfxQ3)z zGxt`-BGl{URQz0Xu$`~Iwe8R3#-l7mW%qvMk0|HHhV@?|?$%w8Z@vHpOmD4Y4?nvI z83n^{&yibnh8~f9IJ-+q54x^*MN&w0EBF)VxO3SHA>NAKDeBG8@xEK5ApT^C*Kban zZb_PmeHjk@mmr2pyW7m{7+3;8{p!~NXr%iHg=Rr!Cj04dlNPGS#d+Ru-98+zuDZ_K zy*ae|%4I0->_8e3qb(V-1Ky=2&&l{{=5nGp_{`V13#Xs&D3-)0q(_WOWgF%4Dxs$yW$lsm%w`3LcME}mMqRe z(OlZ$F#y)bgOQuD>hf&om5N*51#zYqH!Z#V#*EdPv#r06 z_UnLavH(w)K^f>nVM%Ajc3Jes!>H-$)F%;|r-NRJ3)Odo3~vr|x+sX+&~=AI-K;Lm z%|9f>ko{@ra$s-PA-v;2Xv&ZcV+m~2{X2}f`j*lbozuj`oG{T5lf&x+tGp<)?m_ml z>mSbjVV)JSvjh4`SMS?Tr3wp%&Bz-W{)p@d5NU+ICh+39piX16Uxcbhh(9b8=KdEtylvpW~Daw`ED&z`y? zLj7M~b(7E9h$}Nv_MarPt)Y2i6Ak;FKM%~muOp;u&p(2kb%glx&qy_t8QZ#%XV&_= z+cM*Br4pXM9;@=9)hND?`&&u(&GIN_Zm3z!|1LoC0^IfeK(}P22nCS5bmrEVjdy0J zdT;ic1eA{3ql|@vF;;0*k8zqsb~k_SE1enSjOqmR`+9>m;X)Ezjo1+flBD8>EwCt| zFz)YC*GEck9~6hYZOG$l1oyoCj9{Uq(WQm0)oz;X5XU$-=fXbg+HT6b5_fFiZyjNU zLhsKiuxj~e-GyJ1Z}>iZLO@DP8m5ADN=pnuL8U|_r3C5j-arJT1w?8v1rd=3Y1rt7 zNq5JnF?x*E!{__^eV^y`{1ex8-RFIr?}PsA@>&hZ%u3cO6U~Cb&68bnkXs6Ei62BN z1`ZZkhVRHxiHKs$Wbi$tHZ-127Oj8$e;&UQTo<+Q^UHH7k~{2T8IIgjU%ynkjk~;F z3AmxLae!@OqP!_{Y5jVh=^;H}y(Rnf(>;$ozN_*>iaYdUG#ya*;;NdnC`O{Px%8oh$-_{Zd`Th}1VgxzOgobt5glptwYnwI!{pj#8CA z;~a_F&U(?#I_4d!+Uol$)bcFifKQcV^Zo#hHrcEM%kS^fZ34VWn+a`DpoQ?g8F z@Ql8;6T<2##LVt!&j?GqlvG*!=D;p_vMC3_UJ`AgNIWR;KY8c#$sDm80U1#+&ESH| z>QTO4+F4y2vu3v2d<1r0!Sm^oG%QY(N_i9sJdPtjX(gMY<@vnyfN`6c?%J-Q~yjumkb&W$wyW{&yI=5y@GPX*B zC5qdOF?vBooGcC_6Kgu(m(_GR_+64mTs_;gM>w8Y^XujvGX?mVZhoNynnkIjmD_ul z{4ZzPH5{QCfi+3Py%1TBG=JZl zq&CPRH;|mH^xiSdK~Zl^K%Vk)f$|pw+T{(ZLs{S@c`d7T+WKQ} z?UUP?69}pJTxC5YWb$I>+tT%{c%NbCeTfa*JKC`71*}(u@Z!~;*loa*Uz$@KRR^v4 z^CKQb5tTKyH`Vgxft30=Dx;C>;uaHPm!q507v0 zusrm*IZ76fI-6Pfc<+}4whz^>yYpRA_DtTSh$?z@=9I~;RX-&7%bbsf4aWmwswTT~ zkC^q*dq2u;Y8p?l?i`XoglrR{5y4QWV5|~fxFreI-n{v{b%0ZP&tM$$-lldqizo`h zFxJVoN{Y=MxCI2iPwQ&bgI=r(CZPt>4P{CE!Okdm>3EJNi3qlL^JeQbG|P`3qQ^Er zoEx$zaLBcNzhET)oGdB1tne3=57NAsq_eaii7!NQRz=TdktjMzjM0yHeH|6l!%HmB z*YQR#^R~P}w7lFuaK!YS-A6Vim9xE0&2NmS;%h>fj@oF|PiAf;`#kMEd|R~ThZZbM z8NEFQP(-D(^-8M|Yeae))Vd1X}o)E7HZ z4rQDADx|7-555l~mrsMD-S=UfIL#l8&hl)H->O_g6{O0dChI!cmv|FKR&C*(1B7@r zwB6w;V+3S)W;8snG`m-phAr{XEfBSvZCNv}2u8IXrtvpM$1yBKCaX$sz-!vwh+p>S zDXw_;0Y47|MWo%1B5crzqVN1U59Jfy??> zzYUvfbPzvPFUJ7yyR?p0C;cvQpZ}I>P~+L7sS@E$Ul1Pq&LMC{bvD4ct8cDjEArn# z4BU00nT#i_s!mbfzo8bRq{ZNI2Paz z#wPDfOT*WXu8!M)iIs|Ry}R%NX3$Qx)oIZM8YmCi;Rxi#t6jZ)TM)#TVYXTD@Ct;_ zUeSpijvl+agry2wzl;Lg1ebZ-l&>W6QLJ8wQqcQ!?MWFEub#ag^?>oc|4oop*w9!K z#!%-5z@yyx67&YrFwoulFuaDS1_aOYOK*YX1sntUBH!&h$|Nk;i7DNOFwt+`p2g3- zd!YRTNls(QZS?U-{TqEQ4fkx=xA#_i?HY#@1+S>BsqmdeGlWVc)sC{-OUe~Fni^cu zYm~&Hfrzk00>>RFp-Z~$o=a-0rfA!(FIH(MG&ZDx3d8f%OJ|xnlM7~VG7DP0Do^w5 zMN#K}Nrm9<`>S{{F$}$~hUx)HG8fr{Tk_hT>*QMbHE=;kLvVdXia6XLJuCkkK%5Dwm zQ7l--|2UvCCfr9irH&@j4OTg*t8iqjCBs(acd--uW5cU_HawRvVNARGZJLh6P_h$8 z+D%aMS`*|GMJp4Iw2dghyM^jYn zf?@h`#eS}(rnSK;(kx-tvcOum8#ttjM&P`+Jdn8HFcrNDg|Vi&C4}=uNDOsSjnv{4%ER$@7ybhM6TN1t} zFcbDJ{z(m`<5CTFROqWh?IZAjS_%HeyTQmTQKg+kQ)OX`BZl1+ zD!;f_j_2A5RjM(f;})z#vq1dBepqrMLr@C~LvnwC-$}(6pQHx2>+LyZ@yOUmV2O*J zJy$nxYJm6~d!{&(DS?IL-4)>fA!$EB3CUkDBGA43rK)$4?~nDVI-8b^Cl-4J#m^%Q zn7^)yC})lA{O8dU)??m6Uc>^v`2Md2kkS4L!2f1db4>O@;zn<^n&;zTtEIj=@}*aT zZgEw-4{yTmjgDn28JKymOhP9pKDL8;vWY>dq~Z8PS^<}7pc#yZ`30$^PRMSP@oa;a z1Jg{KR=?+M(E5^`0Y1qKeBjN;BzbAfKy9b<%TVP=P;SPRx#|>7v4wt;>r+{zqx<@w zH%XHWO#gdv_i)hRr#(v-d(QNB6cllVUGBjQrQF0@qpGl4Vl2R;X#tRW9!z=&%LF~AUEN4iD5t@xSH)P4gl@~)8NbZ@D{d?Ma zcl0&=wRK{0WeD|b_+B+r()~Lr2aeAwg zTztXHPptu*3K=hl6J37c%X1AV#$i>z$~PH{o$~z!_Mc_s6%tq8oDlIW6=LciY!Gw)~n}H7NQFM;PfNvXnd_#J7!03==T$3A47{1H|#2=nN2ggBi z#0wOY)ndV6qDScZaRjNPIjtz2)S|*m7zD~e<4*OLmkEVgdh$iX*~rRxEBa7EQdLhP z7ha3`FnW(wcA-7={yGzBX&!~af8q3aABsQf-Ag-s_a)@T)s}HOnhe@`VSfHjVQCMe z6;?A&I*Nh&;JV?d;*ec+2+#onPTyL$z-LQ>3iLmEZgE|V(f4ysOd5}23<7T$gxUk~ zrxD#}D@fZ5C05BA!AJ0mO99)gg6ej&4`Tl0rUe(Lg9wK^E+qWFjN27D`FBSXONNRW zW4yY4!=267q8P)CNOGm%7jb@7`pC@09iKZ|Uab zj^Bu=eHyE=Ltvc%QpPG_JG)Ob-{VZA{NFcpKlAWM~ z(e8lT-tub-RMhL3ew+URZZU*vho3dT?eF}=^Qx)AIfI`k>n^VLIz2LAuXCnf5X3r8 zT7<}EkYy|yP=v*X6Qri%ZCEWe)D+$lb~ONE zUJNd)*RX{juL)gt)lW(8H~)XVpv1yx>})=8{(-7Uo}% z{wbVe=L$No3RSL97#Bu;XaHGO4Ix_~WnyRl$GOF%8<{_w&7ME)G(4%v17KK-(>;zC zTyQ;fzeA3HsMH;UCHR4CVUe6A=vTlc68ih=FwL+2VMMjmr{4<_B~5gPN1oyjvC;jT z7Mw&wkZqnrMKzo9d=PMjzwOp`pqXk2^;$4!YaMzqtg5swu#3A?^>Fo0?9!gJXTt^S z$|)WRhos~+c$uTEroQ@&a()RD`i?GV4mDCuk;Os~pE~!jD5Mt{FQx3Tqa<9bs0hrE zqG>wcd7S9;Ctgo6CCz*}hZ`Vj zj2M3J(E`Ez+sljxp^M-R^%hrGD%YQv7dCR}S{VT0-{4h3w+OUxjv>rw8b{Rs-JSMX zN?lNoz7fg=O1%hc8TVM{zkqMc-E2t?BM6~(!iZamB%<-L0f``k&&5tugQ~5di6hI@ z|Dbaf=uI}3tGNXEv7V0_wwFMA3t}l-iQeP zXA>}7@TG+j!a2>xd5{a|5a_4teCxVUObt>yw8a3f*1`^5o!&k%rBtc@AN{sW@};Nx zdH0JGe5rhB$Ms)%Q*Xsu0 zXMHlF(R;QJwNd1UT>}>2qZDyobMclN6G7JHNSdSP#~oUu`Y)CifhAkfHy18mWiDW1 zR!2488>k`lrb@uK>Rt_c6`2T35h}R(YhA>-t5Hve?yPSp>Ya*s-Q<&gXtwIO{Dfly z^ce#DshjH{6=eth55KMPC>Oi`fwE!3xH+(FHlb(h|I=^p5^0rCX`q?Sb+dYKcL;pF z5<-{%>-b6Yh+@Rra9&3>bd{b7?8LcuImaSB$Kmo_F3@HX&Y`-d#lu%ZPf=QnrMUqp z$Q(J^G6VdpGR_{0A6*D`GFeQwb<4W-;xdd|H}t0-laT(4q^^r!`K|wh-$LXYDl3rn z4d;tbINZ;#57?{IGNZNERh)_~?kb=%I$?5Heu+T=YXFNXwR4Z>%IT`{wFH|D@fK31 z_K;WjCVj2vmP_r39-@&--Lgqb6?9F8PyDJsyRtmM>Z4o*g)&(F-8KaNi>%4@__?)( zX&=pET{rwdmk?oHYg+$K8JY*}2gT2~)Q+xk{pU`O1va z6$4k%WG-;gYJcXVKF>4uwgdIhpKZ|T2k-Upx5#3&_dHU)^C|tux^*41S!Pq9e!6uFw?dIL*jV{EMKJ)dOVBSFleh5bo@)Bj6L2vDv?m?HX{A> zR0ejZia&JI9A6QGBgDmS|FJ|Wdrlsk_A7-91@K`%|8Qu^g)#hR-^Q|`G2{eW{kyNL z0?S9_xtsZWu(O!Kw^Hv@gk9V8+x{TZ*GzEYe+UwFp2w`M;-$@2Ev*Pt)scm(*?8$2 zf0ZcSOwiYV$u4GE5;DALL6IziAxccDkMdehbi?QFHgE7Vf{5Cv{VH4RfD4HH9Q!hT zLYjH>Mc@0u7B9wwS|Z0?o3tgLn@u-b_k6UPe`y3v)qF%HvPvR-(wimlL1}p}TWcoK z+J|$%hs80OmRsv(rZh;W;|i4$cES$mGdd-^wOnC!?ZG$;2K~LyY`diiG!Idw$%R+lAIaZ)#T53!Nz0R zYV^!;)rdS$Dh_=KiB(v(NPnv{v@m;^B`)$+qgAI}hTtOdqtaMTBcW;D!$2KM_#1c6 z>1mqf!?bB!fZ*|L+4DF#1vnSZZdL2%6Hyn^0%4$|KH46e$JNE8!uox?QThZ4x-;>j zf57+92!!+^`#|dZhN!yx_q|{n_NJT&I^)1H^%k2->g4sLeLlyWI)PwGj<@6{bD!{WWVC90E zG7zo~btC>mPp$p$Ia*;&Lp+Cu_~F3Bc)UM9aSVYB33EJIsW>=FR3G0AIwqSEd7NB! zxc+{zmr7(o>D9^}4+ShL`&suj89LF9tM#bk??Wo74pc35^>dv8y6upXxo?KKS1PW> z>P*r-q#K_&-{Y2!00~&EplL9r*!zmyyi`#M)?S*v53m2anYD3vCZyINDAk!GBIVwr z+%~Q)bvN=~dnhZDq#fi{M4)1qn?&X($}JoW8L#ie;8Eul;75KK_B8R}1K zf;><;VH_qm&@v070|mu#l{vT&*dd%D*qo7A!0!MttrXL9rVgpyu_fZz96& zuNDcL{dy3V^){4DXvHT*i3XD#gxY$SpYoU#RYAAe{K&vr$H`-xzGRsljH$%L%xckk zLvo5q@W(`UtAG1?Ub8P*n3>uLomQ-WW^Sswm;gO^-=RQJGocPHJw_pkJdv9rx?RaX#JeQj5X?(zZg@gaXdFYjiQNAlC%lYowx%id3z zO8gOv3Q1sgnO5a8t*PHBWDayAT5T)xcl@`jsqQ0XRHhdw$&f3Z>-E~F z@Gj+(5a^@;!e&D&QPIPhwZX;5$(xs?zxEZ^?*gk@643K(1`OCe)61P|ntOh4TxJ6j z;X7modzQe;T;q1WAu@7z{$)eWb0PcSDUk(W0Zq;Am;d3o558wuD+rI%H$niSYi$V& zb#h9U7cyD%F?qsQLNz7)+{Irih>U~Z+Wfk_`loNIq4w(>M|)UuDVzp1Lvvw$8qKrm z*^G#D(>r8TtW3a*%NL9ltyHT-uAIM2Dkh1GIisDk_hl)G3U|df*!$yHnN8~wRi`e@ zY@etE3nP9vYaVJ$?{zUl2~V`Fw{O*yV+5O74T}Car`0s+j{7aH8oYmBYqg;A`Fy)> zY-5@ZZrQK*R(-EfUBz+>A=d2A7QV_-O4_2ad_1i9drOOu(HkEYZmE`%_Xo4(3-4+G*aADl*zKMVYh^Nbk& z{80yZebOWO%xryg)y;Y%9>}C_mU-t~NrJ6}?xy#H>=+MxmjxU}{o^~ZR>FbDzmnJ9 z6#I_YmM9u<%k>NB_12yZaYB(bbc3c9#Z2b4CKitG@^39Sl)UR~o9)08%CoX-7ZSI% zDvtf3$8gytTD!jkh7=q;KOX# z0tOA4RAo$h2nW1;zqcW9;N8M4N7Th6nI4kL1lQhjGaf2WJO`_Nlf*ofpeyp&Kh%?* z`{TJb)T&ul<%Lg*@c4p3t~MRpF_GO@vE0u!4pSAV<(!vK))$fTx?q^%s^$MsAL^$_ zuxWP|S0u7CE>E|MPxF z?-JZ)Eo;Aj(Nht1!t~9=+w8s~PY>IJnFtR&Gw`Cv*`noy30(+V;m>z@Ww8U_6OA;V zEI6c_v`$p1=_mnj@^b!NgKo$0&yI5~YT=vZ!V?nwX&>4ad=gyHj09XB+Jcr^$ieU#a$1s z$#&?a`Ja=57VqHp%^k<+*=X{E<&XBz_S|WTH;FE)&upLM8P0E9i!FIv&{n7M)){?5 z`7n6oA-i`^f90I{zK_*7I6_rznk)h2TDhMR82X8J*P{;wuUf5unB5RfeK91#B~NyT zebxp2RI74I@)~3HjKAb#Xu@?9R?su9qbLGf@y&0u>QrCki8}xR4kip!VFWzss;QcEfhK(7NL^QQRn=>(IVHW_>DxMbxe_a9gIb=aja=}dCut4$VJ>ndw;)+3C zU2P6+2WVGiyO4epaXr8bCeXpVqx)Br)c^J(;G0|*OZCeOLQR%-q}y1R9^ms500)obhN4UnBpG9Re*GSrY3asg=%Cs(s)WtEyys!ZfRd(`TN zNukj2M9~T&AGT2f=*;)EE&PRG7nxn{&V9cO3Zs>k4cAU@cdw{5&P`Q)HMAErl-oLe zG;w+7sY~*PUQii57f7vMUZO~uWAWkaa8;i2VCPlKhQ#!a%F~xhMMX+>F6R9#%WNBm zjK>tgl}jO)npLYmcjHCXF0bA5%CLrFmP4Z81+|smTE}TNB#Q5v_^Q410KAP}FPHIe zX`*upI5G3hzcO+I57HP&UNI>3$W~dEonDr*KE7&$FKv-8yKca#4iFh*x(bT&_U;8U!K*I7sbCL zp2>+Hr8ho+3g%SIXc6^LJ|7AwCwLR64igqnI;;IZe$*xJ+BYCq0Sa}POcx1AtygCq zA1OZJj3~@8m(sgxiha{hJ$G{Zzy_=4*^5`e?0E(WoT9zm2^i$oG@slg6c0fA&s{p z=EcDs`q}r%zhwV~%qmE{PD?YFm+43vo@|{Pv}?Eb^@pxidz8?u?^-yho^~h{Ey+F! zZW=%c^u!;fd{?doEEJNVD8jJWEQK3?*JkXrZo+8R9tY0y!)q@RZ^`q!hR7!=N{?#) zD}Mj9jBVk?u-bTv%E-~9Rtqgn;c1&2AyFd_&);qz7yt0<^$>)V50hHk4_liXH#k2t zSa~Q|UF-L8K4>7gLmo7>QFx5n^1*5=E%@DMpZR}1$tj)XXYJnfeUu$5m*_^>;F`d~ z*zt75a|_?4`MCiNm8ezDc-|r_wUTt*72wjHCWVVtzJ~13BU(fvJc3f?9FE@((oHR! znHc@xJ-I_UbxSnr3@1ufe|bmh^iBB*MVu>f0;o{UqW^z!T=FY4>t5Gj`t(j>hko%I z*MjinU~qus{)Al}nO0SuynR9o>Q_eg(NwK8t-0Bij|&s6`F_LlBGs6a?c9_M*LY$; z?tQ-_{9!sKfZP|t6&2^*fZVT)&Cwqtl}@cRRS`a0^Bz-r%;41 zbO-zAojPp(g;Dlzeqz>POq&Ud3zd$^kNT+#6Rs3TI>ha2{DQUagjxL}!M;~C_+ z-?#ZD-n`^1Wh5Gm)dOMAjY&flTub8aOUhS{LVHC`2ktVh6OB_2o42Y&Mvl+pqd#I= zNkB*3Iw6zk96f)bPk2EB;G0jPLcycN3kt$!JZ`QDUI_-4Jm_IW0B5ZjyD!s-gkkcH zZ4c%Pb&>=)C2;x4_b?a4DmU};=fp5gGgFZjC&vhUS!_F3Y_|E}$F(+J?qUDCtgSZb zYuJom@KiUpFNd|pO_bc$KnU+f;{x>h-ib+Ae4omE9OMzcs;UtXm?(qDr(aNN)_hj` zKUVJNchYoA7~Ust!7-}Gx_U=HUW2|FFSD`0WZ3?Sxsf$V{cLnS=as9t%*?rw106Zb zG)qu)lLaSCEj0e{NkmB%+$RKpaMcbWf8C*wc7<`kvIx>pCNIhnVyeQ2gdF#{Evp(s z*v-;7RzF7TCBE(JK^Ys)Ft8~q2cZTam4eZ)thf6Wy-Ju6X1o-A3rd#59qz6#?0ZkC zy=vH!-JI-obsio%B%97eEw)IvQVjDzPuN)Q@8zY9pJTa{>e7OjWHg_y-4Mo1+!i4U zdrTTFcsHmX$w;yDlb^rZ*zUO{7JC|#dk}SSdADXkBk|zs1|8$yfdTKbMBSC}LMo-( z@{{PnkRZ{g7=PL7-4BX=!TI4Lob@dS#%DAvp)3oC!&@EhhJTmR`?7-EFe_i=Dez6} zzpB@6e}>`iKR~>`IXOd|!F?;CjCAnNV_ogLM;j+A!P-)8T7w@2Zf#8rISQ_f32!eN z1ggLzkWak!rag!vAByTm^Le8VB{jo1vsqtEEzg21@(n#4@(<6O&eoB5UaPg0CSn(y zg6nHEc8-5mZ@x7T)($a=Q}UkU-0Xi)=|TISl)K;gf2CXvy2#n;_VQDabqdEtxl3S$ zPE7RFP*E7OwWwFFv-j*YS!n*$vD$CtWlRfBn-qY!^cpSu1Z1MaiunKe%SNdj&#iD4@P|(E(vEYW-Chw1Jxl?{(nwx{jHJr+{l>nbNsbw1dmo4 z#h2StAsX|EIc%ax^{Z%#*)}jMy{cmeAZ@UP=avonESi*HI#;POmoP$BIa;Oqt>@!- zn@6T+t4FL0=J4-}r8qi6^3U6R?Uxmdo}-H8-5QEv&UwQ(%84Tf@I9aWjff41>`& zG9RK2b^iN8Kg6GWR7>;?mw-#~)}QE@B;4<_*qn|v9#x?|b1L%~+j}Oa{I`^XWkL)e zk7%9P`#(Q#)XHKpzGtS9KBkJTnpc|GsNn01QL|%FIY#_n7a~ILmsK}=osGk zf0bP0C*-n6`!8?QWJxVd$8&8?^nf%CqJGu~u1O73Q5%c)wqE_IfCbal<}_v6-0}(D z9J|T~U#&q~4Ob^maPa^0ggDF=L{7Epm1|)|sAHma%!R_)_Z98?G_hJDFg~8x7q=?2 z@^pa0;pIysuz_^Q`7dxIO93ijCZ+y|)@6&)5>0HtQkS*+qf?7KFMS=(zb;v`ybyL0 z3Qj=H%YlVRR8C4(`; z|8I3foZm_Xi3SeB6_Wfw*(ou1CYRx-wkM@tNlMZX?%9A$d=$yIrw-g0^x1kMWg!sn zDe0~kB~U%|c9%w|q~Ue`iDz~A<8O@K(V-6962;*$8E={YGjvP;Gjt=yw5`WWhnY$R z)%RdKJ`b<()@Z+8eR!_Oxx|oNrs$`o564X#dNZJ1UC!KtnlQlQ#ybV!ncDzEHUNE&xZ?BgOyje*iVxfLY`g-3NP(LTQn-znSI$>9dcb&cSK7mV7Gu0dE}=DI zWt7FQTo1h7K>eBqR(gj&S-F6G<|a+Fy_JjA|DVy7YAVg?6l1A8$yo+%E8Mu>mg zGlgxunxIOWd!0aUKO~X1{U!tF&1@Dj!07eIQQK#DAN+~l-hI7_+@*DdX783Gi9*ru z&=>PBKy#+F_NP9uxoj&tnTQJJi*dQ%?s^w9@qxYHw4Nz91}1TggXI8atG9gGGo-sE z(Wm!$f-UtO6$)-bo|=D@)h%IgsGRlYIFjQ?R|B2+5GB^D9=r-~fBUj#(KrDI2n@6> zDy#XoQJc|p*n57#52%Gr=qUtAi_%yA1iU$D)%PLsd^@~e!NC#%N!$OtF*$>bQR*z~ zYMh|1YsRnR4aXlpO)a?0ZH`Ib`{!pdI|YG`rX&-Co^yK-4TdRCJr2nIv7YTdL}YoG zVwm>r`F^sTb+E2bAMDsAALsS>Y}@R!si(~T9<>RL+oJn-RohW9 zOm*-1l*%O=Xlv%wuH`<@A3@9@H*Nt=QJ7|l#vtyqgm*}rAas+I#MD{9^x>cvg$0<3 zJwpZ|9s?_BUAU@dunXso;Cc&iOWcASYYWofji2hD53Bb0%F;kq)QN%;HRNbfG1UmY z-TU+&Jy9qbKH|utzgH};^Ow6uIubNDE&WD#$q#k|$+nX)i(c*hJNQ%+;;58L;iKLr@-qHrx3WER-Iv>E zmiij&S>rgZq@{2{U(8q{mjLqF=KXD;$%;v!rOn0`?X%iK)pnw9mr|{gBW8bQ%>~R@wBj zw8LrRxCH;pyAj=*?r!0%H!|F68q`XEydY3FU+?shY(Q(~cADc0B-8wg!%a5}1XLv} zV7SY3B(c_G35G)vu%teG<1owI3!gCe_N;KW{TCBQRz&!vd$q?giD{%r!d_+6S9Hkfge?}$ zynZLeivK`i-?1H=K}?xP0WRDgFSW0P?H>v5b4i~+z^0?f;Gm@L@zgRXs5uz0enB*eL95i4%3Y*G-qA3Dxvg3z&zejMF^c0 zjEQ8_7M$VVyIledIm-LTG4!XH(ecf2vG|PPkP=?n*!ijqh4D*{xW>(WfN5e)&wZul_LSyrnV=w0{zAx<(mo;8W#l>tDO>4pkMYe9jBCBDP?pioMxCT) zsJa~Zf6R4x&g6ibZ~Rd{t*sirhpjSrnI0HEYgkzX4PG#)l)5BZjbN1F+b+DMg`A^A zb2Ck;-Q|uLkF~O(l-|G*E3W&sion&u)mH9*?dRI*sa#%VGZ;l+W!xg&*#`~&g2oZH z;NViIK&T`_-#DTO*?TmR@vgi)HH1wk{@2x+qs9kB2lu zpr6l&z@#hf_NevIz>b0w#W3!iezJRLYgTtSC)t1C(@7WjQp3e5rm5nNm5h zNPLqEt)*p6D$Z7g<)^KLc(KTk-mDzAs?Bwyuz_B9tqaSSX9B18fj!EEnn3Tu%(tp2 z{7Z`yNq2dicEqFv)sJQ`1>jDOUoKa6>_Z(r=s&0eyhAB%rvoA?YBi0-pW^R}bd44n z1)%FatA_Jy&$^3%88r%fmx;bY=Zoj>{Zg=39Y{Jp+>K+2UEjWK17P^q%YT2uwZ!(L zbbtAje5*TY_xn|QRVEX=&wg@Ao~N^Y&#rmgQ{*?2&e5GM35?;IlHc5f?L zCN~C}3@r9*)eEK^U8>bBuWk3;Q!3bl_;M^lqZP9uh0EHqzIVo#9|W>j#T`%!4B*U0`2UR`WCu0vV22DzXL;N- z;gF2eM8PzCqcM&^>3RuBZ4O;clav8Y-m5g3F4eMll@oexEW8}Srsm9kH(2W}y_<^b zf+?Eq!$qair>FTc4j$fprmhG-#Gey!ry1mzRLq+z`c{sr!bjUp%K+5-<@R|jNnzRZ zyLr#XACH}ZRpmzY*k1z=M|?E!yK;5PjLNK?El$%*|NirDXQM2XW#8R6;ptu)ue#J* z>@TPq5tk6#kre)6GcF5+O{HX4 zd~PenQ~y>6{3Fb*2)~=%JL-oCHkgIrH#{$@_V5F7b zWjggrcTq;;9n2P=@B`Kj8~eWSer49L$c31T_;PWE8XoHtv&pdlVqxX+6PT+02W&Qa z+u%9l^GVuo;=)d2_Y?Qnl0CX*<)=K&QgZ)zK>-)RhVzT>mDOC_>-#EL2|mm1UT6v> z9J|HZ!?!f*TIe4tTXUbMzg1~}u-6XGaQ!2;_-jYq40bz%n`(mA^qgxZi)*a=5jjQg zV~^q_m!<1gXvVyx)qov}{BXyzyHkcp1;DpHTqGJ`cD!mysCOp>C^+okXp9Ty4?^o6 zky#o-+BB@4j6H{o?^K5HTK^~Fnx2VAyqqn5!pxd@nd#D5ff`}>@gz4fr@M-2 zTk7b8yr&F08B^u}|M4`J&@L3Rm@ws%gkK8Ty+Q zr`@?J*F(;;eeRXk4zmp(x3*kP5pwYT_qhJB3;jCDPV}KDnM{!x%4ReXT7dxckFbxW z#^Qk;!V!;rZV3RuZTCCADiA4~wN=?*;IaDwzq40esDQGmt0q1TT6Qeieb&w7>l)zS zk%MlwIg>X3BjMWCet52{r#jm|GI5p{pmyGwV{5R^0p>2K8~s+AUPN8t9D-i?De-+0 zc(Ta}w)f^zpYVh79hz5&D+mi_{o=1b2{77E)5Gn6kw@JWQ@@jEZ9d!X)e3RnC}%rJ z`M(aXp58U?KR&|`CFQIsKl||*WEMB%rsdoBwF_ayRV0c(m7y%xZ8=>lpv~7BdH$nt zO|FPxK0szI=~V&{_s8c-!ZnOw8y-PoDJ{Sl8>%B8(AQZiBYre|UAx+rQYI}Azn%68 z8wK*TCFTrJ@PH=SpfYhBjB0xL_XwG5=hwxgEwEByzk#}r`%dxK_+rBJJ$)}YO2Gov z(yST|zk^)#vTPB(@b+(BKjFVkCchsaUE^|po2V$ZPc!jax#Bn`xyI`^o4!TJHL0!< z`XD60zC-8=kS}1VIu0w>=z@$2CVi2-&Mvghz94gGk_Ea8&+k>l}sSdP9Qkt_O}$8c%XSTiCiSj~v5Da~VFay|UDiOs}7t zt3hsl9H4nsJn=Wt%(3uy^$YQd+i!J#l>Pqw9q`7`?cP}5n@#3t@Mq3W&s~ZEe?YW1 z4b!~~y`p{y>C(NGH@9iK(KBQ1nt*V#x+LZy!+KarB!~;Nl?hoFwq+7R>{VRC1VJ&6 zdmt_&ty|f9T|e%JM)VnfKmwQ$x#AJFU+URPJDF{zFptfKTfcKZ{;X^I7cOPsZ72Ro z)zkj#L#?4|gu?KX-Bx#rqdh(gi%cXo%PT=QyyI^_vWWS@KWQAW<|*Nj!e(KpaOY-n z+Jg$-x`uCYx2Q$wd*_}wSAGI}u4?OPkI9RUn16=q|7(A=cuLj%NAWw`i_^OA{n!)% zK!GcVfEj9ZX$3g!!PMggRogBFT!y6r*Xf0!p3F(H3BH;l zxyJ9gvE0^7Ex2LAF(WO?Y#}ipymcs&!?~V2D-H7oT@NpF$M0PW1*w`=n4SsUrarqt zAw4zach;LRnkGA${lf=pY!{hsvKK#Y_ULBec2nqV`_StXyzZhWSHsj-+X81|AI(*= zA4(!hb)MQp4RVlKx+0n3h-o+*?CV94;IZnVH|Q;Cu%8gr_@JUHKhOYisdFInZ3*xs zS3Jyn9)>KbLjf-a+(LF^FCTzNhnB!Yaeu;nI4tC))!sT2w(8{WQ#sGlf)cE#-31cX zLYCpR(^g2CaYIRis{wObN9cr~p8BJAg74d&rg<0zEkXHFnS_T_PHZS4ors#dnw`gM zHXbK&C00foQ6EPe;~w^x?(?u&4h^#u9=)@AyM^PBwV_>a`&QgM^~ca@k_yy6!+Yww zf8FZ4zwsmQ_>kf1)g@`3o_rr`!`;jo?=(RC)YI2m&U6`8`)ulNBN2^0>JjfMs9uw$ zD83|nAOZ<70_~zs5$uU?BF2+YdcjAUkM8bo{d~~;-o4}(qnn6No$uf7cnDVhU{Y*p zOe!>e=FD^o%a++Ql`U>(b?hEZ8yZ}ob8y@}?%%&zoONyG+>8+Qm38f@?6n+^Pb)zF z&r!pz%){TS8JDY=X1w2Z2!kr-7lk&-)tl2(SUY^L__e3Sk1rlVQf)=^{Iydrm`WuN zT%C^?z` z54a8A3ZP_%cWO*a88mC9eSDkGlJDC;2Uz*_b%MB5XzmsZJ~yKkBY$c)!wh~Qigwr& z0)=gAPoV?ju379?`-zwCndlZDZdwVc&+s6BD2wQ0Ge&AoXm~h5ZFZ+0p3h4jT)#w+ z^})rCO0K0=AZ`!~$<-KW^Lm@^9A4A!nae-2lF?( zLiVsO}lI+nk@*pOz_q>{nmIp_M^63%g#^^xz|_A%y`+9$V+cvbs72A z;`&|}X5nZs?N*5E&?pWc$d#MW^r^_lG53w&tkTB%sj9HX!Y54!MXjtS=6V`cpRZyU z85VrdlxTm7ZC35nK|N{bKL{xe9Nk+9_UN4qZ(zlC}6>)IJBX+Zrou0-Z^;$RoRI#oBh3kn+;a||cM zaKXPuJ6Xu_A8A~C)UwF%>@%Vty~gnxxfUj+!Ej9T*GEF|Ss_xZKeichU16)_G!!)= zYjUY?#ijy$m_B@&RQBA5Cj-u*_WuBwKxe<4DcKudT)1c&Ii#81($}&u^cvzb*XW${%m*EAdgupD!PU{CMy5i_e~q(tbUBlEdBl z4)jx>*tWl0e;VLf{;#gqd3P9d|I)?o&j5fyzr!uqZ~4k?`-b`ifR}Sz?q4rwcQ4$J zV+US|?`tpAm&g5n`73|r+3gd5+aJ%GT6r>G4|jf{peOvXoS7Re{Lvhu(yw;E_!$2U zAg}0Fip71$kQc!#cIwth#N|a*y(sAyKKSSbPmw1BJoLhbfEtOMxs-!8Tma)xQOZ7F zM2bXq$2UE2F*euqE@=2Oha&6DK&d5Ujf+k&1t~+#+P-7ZC`%vc0(2pX*Vy#YoWzG; zSLHtHEHxkh&z}L%3r+b0&KMC(QL>hJTMWwc#IE*L4jvtYAO7E~kJ$_+dRu*6&qDO) zbg?n7c4TTNyNu}6jJ>5Gg=`=2=0chbQy0A}7=7)6a+YyT2I^khN8!+nxFyDpSh6C| z@IxmU`o<@1W(HfXTAhG+WD=kW7k}}TpX;!F$PEXh8k$Wt9%G4UaUhw_A^x$tx-LL| zqa69nUdN-N2X5Am#(!q0I)cryV53Z*vOdnMUHx0mk0Pvqb|$+KeX%?LM?jpmd8OHKKmY5uB-74$rD)+_$i~T6$5F0Whn9QXTos7tb$Giuy`m};&xTf-0aF~f;GnrzKk&M{ z@#pJi%HFSH@9?+`z`=jSg@6R>pK5IxS4MO~Ii<#GDjNF}^CUi|8K`6kdg{2|KPy*R z(DIMYQJSrSIhNS2xg^_t!|c8!aF?oX}SO>0cmRQ@YN zbX4whv+uiOLb*SS31a?QsnBFzbLD!o{tN(ruRSS~KErE2Hp|cI1U{YR)cqs-r2xez zxA00(c)=e2{3Hp8>ejjD_?H0MWjy6odueSH9YR+5bIL$@z(6g$orMHJPo8}rYes&i^U$0kmA zG?zZ@jR~ky;8MFpdgvHdX^tLua=3e+*V?R>$3Jmfhx-`ekz(3+XQVOFO_W(geeicN z&US=QqFLEC8GIj$$F7$KsW!E(*1rGeaiB9;6IRfiBHe+qCres^~|!U?J-4_XfAGn!xV{S=-vGe(M809=w%U0^0NcqB6m%Un3ae1a8!KQr-lx4$juhYqc!$Ofng11_3j%8LMnfUn}qD^&f1D zR?Tr<)^@E6ALe{#JILUL3K{cFSEFJdc5*j;4Iar#+b7ct;MeX zkO?#~KIABKevwj^aal7n7VnZL#@4#VVTT;nvx2zmLOt5c5=NZpSI>?ChT;AP*t1PG zs!8E)3fJ0XV_UVr&}MRz}Vvl+qIRc^z*ba(1g40uD{$OYQc2eZc5<<&h&zk<`cfw5)o^q2FK zMX7kT|$2=KlN~wxvkGGCF&&sX_U8 z9-W9@9wW-)4PWWy);%ldk$?1!nK6ukcJz4!g}xUGSu%MrT9mmfi2qFg#&)}YV0+ZZ zpHvvyR|T!oVnvz9cmv3*kArWZkYi24T>owhHR_dFOSjxrA{q zA_wDM5&_G8jQ&gAz1%};g`Qysp^9qucF`NynRv10)rpRBM?@#x-aQ?4wN_0PSbJ9U z^!ItjWyYvgW28?1Nc>@C0(AZ3oOB3Tl1nXkLkW+o8Y3}MV83c4rV+k&F4z$bv`IR| zHeBa^mp9(=XM(O9J6^M@kJQz+u`Z6p9l8bM5R>rw^D{9Hf+vg}vILdY30UuQ4RY_z zs=Wt+K_h&PD3$j5~eDR>(cUJU>gF71aCM=XY#! z=Uknbc`1+rG;`Vf>tn2WeN6JcSGX2fwqTk&%rYr{cr#=1&>1L9J~1U{m`@!scj3wn zPp!R_yy{>xduw|GW-do`Ji_X=-RPP7g_e=EPZ+tR$LR*~D@MZfJaAgiY)o2Lh3_0H zW?-Fu14>_pxlg-Fh;yH;BCKZGKq; za86!tf6n2zKDTXu<0ISl(ciDu)^{$x)$DGi(^I!IHt>J`Pi@;Dee27*Eh4|X0pR8D z@g>6J)q%?!0ABolefC55wqN+(&u#af=LvQ_^wne8aa^ar?%BL4{K9ADLhq;W>kA5G zd-#PC9<>%Y=&+n;&cvmk3hMvJnR)EvEcz6!7Z@FzkXa{da7w8zl3C0bipM@_ z4Gmm16s8vPQhqK|wE{35lB&=Pp2CG-gfw8$1FB^ORE#FfT4j{oF9`D@l>O#KqYPXj z=p>z2`sqH{Upm3;55cjoCOdut09xni#7kb{#pj4R>S+-JrsQ{E)o=gnW0O<3Jg&d& z&rjE*^b*a!#?7df3h$=79yi1eitkLNST}HyWg5_6FK%{TZyHpq`!ne z!F7IX`jK&TK3$gL!|Zj^SGIA2&x#J){p(3NbC`jZ5BvbHJ3sUnTk2@Sr_Ya$jK7+eXUoP7B-mOdu346ua zhj#)#F97!InU<0PP~&*6&>fLkGw*X+^UDd!d2O)jzI9cvrRqO)osq9IPV;upy-%m- zDfm&dazX3-+TGjbM2%2?m5nd^@Vt=cl|)KtRQP zr1RT(=J7)v-8H~HUQ2ajT$Li$#idxVN2jHXd;z=i1Q!VDJ9I2~FuaG}PitD+dv@ft z|GD!6()(P$p{D=woH3j+Ikdm}xt^bW1@0M{ocX?jmi?yUV>#ZiW70U3*BVdD>0V~{ znKuB`r-t$|?xmAg#gIEL%0GruXf%Laa9|v9tzYYp3|#e`i9=lX!sokIz@1R{(qReE z1U1nchwT1|$a=Y#RsCa8qrGdk)KP4deUBf864JMwPCnK+zm^-Ec+xHeQ@?uIcVH1t z_7l%J(lazi8J+vRRM~v)gq&I|-X*{6neH#84}JuwWw5&|L)Msu?$;^f zh-OGN{{Ap9(oY?jeP3C7Umd(00tm_8 zY1pqnKULA;AovJ5=p|Z>yi7+}pnyig4>- zue0yjfSnHTNXx`N7Z~*`<{k4A`dvQ}lAw&vO zC!To?-?4>C;w)-7r}Hw}Y)d0rfx((Jr&V6_NAEu2UXJ9}{>D}RP**bUk7XjLe)KpL z=th0|9sc~#-&|d25@oKj#*d61tHKM9Z2u9b^eY~p2aRCOLt>6S{v^qW0Lwfd&eFMH z8F>kXrt6Z$YwuM&(ShpT9A&^YR2N)Lm$gr9sYNPeU1ok|KnX!z?2o3~i&QuJTj#!M zPlT_}mEn2%jXeGcZnq-BM-fEYwnaV@o@lB^j@^beeaS;FcHzzC^$6TJ*I5hJ3qkfZ z=b|$#Sl>^(fOF?Z<-59a6LH*^c_h%f#)&tq2k$B&eY?i{+Gqr!ChyNoV`=&Jr{DdS z?VtTm-ZqU7DP7(G@Q{r<2V+w%Kioannb*GVmHcS;%b$pN?VpDSW%x?HS>!=Eyjr$j z{M~K)KR>!{zyEA~1LK<*iPX#w|B-cTeZH}M)faBtpZgO4U;c4<1HjAQ<4c6cs{@xe z0KB;Uy7QTB`?>G_gYDVht|#$4;fAIzyta6xf#VsUsBB(duoc)ZP8?-*U*$;}ZO;(% z>Ow)88B$toIWJ8Vt6xw^xAUiDzfkg{d$@K~lfHc8PM?$pO_LU%e$j;nV2ysAG-fO7 zDk4V}_E<{$LqA>+m5v(xV$Z&|I}Y5*3m=U~NkFA^Vv0nJ)RaE0x{6TzK0oE$xe}L; z|37{Lfbu!HC}?Y^yp*3-X$Ck^dzs>&tKa@V9jR&QVar{23#jBo^fv8ldYCp}T zV_nmKyLZoU9@S`3YY^T?=DB_LLASc(d`riLxQC>qYMtXx*l_9aM|Z^|Cnds43|4bJ z#On0hZmiC10eAPwT9G^d5;L-$@ns}H=2f@K*ctJgnL3L#{zT<`17dZlKuYHQ_tSr!{9Hv%Pbc(2|$= zr)(nr6IhRdGTV9@w)JwEGA>}#cFhMJ!KcSwRvhpF^sM`0k$Ic$Z+FfPri||6yzN#t8mSUCj zn0LUrc<}l0{g>Kdbzk2y3U%Dpa0T!HG6q4{QATEF#A}t!pjg!tKjsv!{_W3C9v|`TvyQlq^Yoo`a#$h)z>|5USuoS}SmpC8E;{qNX;BUrV#^c$6SMoQy`GL%3JiZ;^ zex4^kk8c$(F7vPbqHX)``Y8WD^X1$2hWd_mvmWwp)ps&JZHD<~-SWl&zG=Uu{>*96kz@-D14!l|&_~rLJy*=~s`B+~MXMUZvB*Y7q-8d}uf&#}H^TmZ_pwr!s z>s3xCUe?0E3k$yXqt=5oFI8 zjlRSmPF&^a$psJud=KJB1kSDP#7^AQlw8FCPR?}+2@H_H6S-{hZwCYF>hlwS-#177 zcvS+XhLm2h>HzIu(-^ko%FGR3k6A72^=vu{z>(`g#$)(591Z_6=vT&32F6X0_R*B4 z$~dAIa4*X_*aWS$djdJ_ixJBeSTUemkR2CwW=Zax^yn$BBoswW5@{DG%~}{ zU?$|nH1XK#7XKBqxF=St23O#?XHU@4u^Ha7v1S;(>ZH6LZ1Q(v=Gx0da+C_Ck=R)i zoG*M|LjH##kZ?@3T}@w9%RJ{7H3AS)043k_x;~u zK0k)(e%M&^`#zQanYOOf?8GIjAdJ$9K(g_~pB)sel8(RQ`!Oy(b^Xr3IW<#~C*8zf zFyOtOh~$awoIIo1hxJZJ{}dI1y-X$pTkd>(xU!q!yLYoc zsX)B~t%S=ipZWb`@RVuB-^=nj(}1BWPPM+9hOBk#!Ew8*-*|@GYhst$gPJigL{Kxv zC?P1jJeojqshQQW#zwY_z^Z@HLyeKq6XZF63M4M`8V7KGPnze)HNc%-OKxmpj(8&L zI$AzX@j)MXq}gEBD<`pojVzz;$?#9z@IlB{eBjIJj8 zj|>&t?idXV78h~Fz5NG0;kw!~dB|tV3Ewcq7&2+V=?m8~k$ zZ+{63mxB>SQo-)2A3izJDFb0F z>D@k>;$QRFds0awTPDtk)q4rVgKVTqkOFjjZv%?!ZWq2Lh{*J~~ z>&2f&UG?){WOEd7^+(Q#Z?9En+lQ>YxUUc|oCsdmwY`~_^BY;_kw9Yw6~XKQ=cI65 ztU9^K>9zZ-@UFk8k^$t(8$qMvW_dhswT`c|R|Uf}-pq`N?)X;E>uC5sk9|&*?WkNM z|Kwl()b@M7{%C)0{PGC^v-OWGy)?glT1VrVU)gSa?nB$vGaufrp8JjM{+*9+S5N-& z?fx^rv|ZhP$9Dh8Kf2w2;;XiMZ>(RdebYND&&v;#A9=GDhgah_Bww1dvJ`Ooxe;?A~P4yQwzO6p`{|n#v5M(bA1v;7C1n)U(85T|DU z$AKS0tu@_V&x?i5ME-+;MEZf3{46@xycobw{<1p*V<%4BNs5;-ja6QeYsRFDVz;I2KmpN6ibMzrM_a#9OtYvOJ4=%xBriN zHH1ioIra=+$IAZUJ+bjomTn>i0uWd9qke2A5H9|TGD>|=ES#r3{>)>fK*cIOru10h zouBv7CNNmtLa0%)fL=Kkdsd_h-~CCS6x_A_XU3ZLt35F>=mTogkMz~%)~DqvE!d(T=cIg-Cz$B{X8`Vuo~fsVO5I})Y0VvM zp5N|Kk`>g&hKGVj`sF|Lhgi6Zcf?(|F|K12UCM(j{!$YY6T*leea(zuNS_fZyJc^& z2#HW*m7_7%*7i#sQkGAV=6sx-9}=kGi7W8X@ms5Pjxg3`*T2d|oQk!#2dD0na*a`6 z3DKwL;b*^)9o_=&9lrIV8*-;AW#s4X@;uW#qi2v5V4j~Q#)$}R$1(ZS?wp|H%FGBx zbNlaf%_Fcb3Q%!sCL|ZhT1XBTF%_qBYpc^MuiZ{9F|-%>nOV5$O}z61eplqQjr9rN~;y-3IJM?)^grAiHLNI32&SWVran9}Em01wcNVz~WCG z^+o(U^(h$n+uZYfzyp&p#A2*=*_ubj-KF!8u45f!*JfLVQEl?-^ntfpeW3Q(hd`YI zt^}oMbqLZcLuXCvIl-oNCAR9LQ%_9*u#)RUYfhf%9~A3se0X~BrzGgHbLt$6@p#b=>uH#2LS350LEy4ttEGaMb7?%aR;E!UIVl~I$QU;X%oCI z32cAR=#H`E*ZU;KLwfYjkvb>s)m}Dr$HSj-HhlKf5K$Fw%&6OcY!5uBOK+V8(NAR? zovB<3{HW)L*!*CeXLMKfTmJ+-dwwa-2`KJ}Q}|B5%-w4x-FYP^3W|J~G3|!pv_@PV zVbP;u$(ZpiulmKs=@)w4fBW{eCf?A*&>Iu$Tw{6A`BC+ND$vRcNBrm&wJVop|JM5{ z_}*;KtQ+fI3o!OK{TDZ;8fg{37|U}iyZcNyKT|pp9O|Z;EwWB}@I}tN*UkICNXpsq zU)=d26|zvzLx$i3EV9(w-iqYK;!f1F~ofC@Ho}PfAhr@~W zaV++T**~D#!{vOu{cE1s{`~*))OL&C)_jO@c>};hH0d0K-wNiV-5+{9^O5b=Z@y={ z|NJMmt9zfWJ%6TL>)jeWa31#R>WP1P+urf6ZTp?Sx!r&I@9slz3U~+cy_?(ptNKaX z%`d3i+qXMU{m0w(=KAT|WxQYqo_M03?C?PG3XVH>>hB!g&2MA9f`KogUa}6n8t3LE zOa3J!`o!n9?H_((+dlj$fB$-8y&vgozIfZd{;7H~>R+CD38Ouj>T&x)fTeAH&uAa` zCjdqR9`^jW9C+83vd*|$e_xd!W}P4LI<=lZKUB2D>H}cid|}-Us|ibwaegL)_YZsN z#$obCd%4F7xj?}vAq*w!KSUB|wY8mTEg;Y}d~|Z3;eAvN{`>Q@aD#I~YqJ_4qb_TY zC0D=HlS(MIl)>6#NlH4_jEVG`>%_)CXsq#=vg5L5#M`S!yQ+^%FxC);Q}a1p!aRte zF+M*X|B?;!t?jmdXmzHkY3GRF>F?TqPB$Es zKvr%Rt3EC=tSyP$Gyk`9cbosW{pGUP(v<9Sd1;q}*eI@A*O7fA1cj%JZD>tHlRp@XR|! zhuVXU*`J^2+Pwalpc}s0!1yD!`JH)_a>7 z_YC~t|8D=_cYl8R@sGMkOeDrWgX?vBtoO(0T*J-U^8TEjixgkYE5Xii+&`~LeaG2* zE?seHPs5Y*u&$A_@#~B}_@2+6U%C4%jpsV8qXD;XK6yAlmD$QmoTUJncDlxwPOUj$ zS157@x$-A>Qd0CUG<#18((!h)@BcDNPezO-sd2i{E8{aWHmvY5rvIu-F3cJ=smJnj z&zrz@t_e9b;VzT>he2yrIU_Z@FLo8(rn8>dP{=w5ea@-HT z;#h2Q^Xy2gT>ka7dd0)hvwCS}a-GjV)OJ-w{6GHZ-n9LT?|J(}1-iTe;Gx=d3VPJP z>wfDezh=Ao@-I0hI%;lz{dV=#yQlUOe|@|E><8xh8tMK&{>|;qpZ(>s`tSH$1AE=8 zxzq52+*f*VhvkQrm+|;^;MT2rp>_Fl4zH;Vyu1P6HMJd=WL^UuxV!=2;Wy#APu|~t z?z=v>J@}qcN;`TJGii4~g}~Kx}&Y&Wn_KZZbmzS(>&vta{s|p+A1eFm{$!y>|lU)Li0Stn~#6R98q~7Sp+WP=@ z=E7<}_?S)J1TaS`*~g$M>Old6U}m_I{cJ;7Dxcu*^9JSo5Q||^) z$-c{NM6;M-+FGr+Veh$f8Rtp;SkJFz*^5wpZw#!i2?@S+K+IV69c;uXb0?Xs+iOl-pP$MeTaD-M)(>e1iT#~RbCu&bD+=m>*1_O) zBz4~erRu(wpU!Wu!46IqhjC(C;tpu*h~A|r6UlYyb`M=}$@UzjYsvW;k#@p3qpe-n zxsPIs{$%dNe0~5{M!Tes)i`s05Ro5#lDnOXy$eGnsor+( z@BN*q62Qp?6lYMVhCJd$*XOt~U{B5{${tIUsK!jc$S?Vhn5EgDpCAr%6O0&>5Q31y zHe!gOZH`eUA3DWERBsDIT@0U}l3TZ~v8#S!5QdS2-}5QZbF}5GmPu8x86@; z`nNU}uJ>p-m9RfQi)D$M9aou3KYapk+3}`+zeZm}N`zilu_L~;KCiqv^H8#iZ z{;?-##(K_erm4pEHrCp@xh_OORM*HQ6)iI~YT5%?Umb**i)-#G-=K?nMcs)O5 z?6hNRkZ65=M4_rvJYUd1dI^1|lxnmm?u z)1E&+a_tMiWwhUn*I70!{c!yA+wb#aBH^Kj5QFGS9t2j;M%uPNKh%dm?ygaiQ>*7~ z`~oGE?wb~hx9H^UOJ{}{Zvr*h}?P86K@894@tc(dDK<-(eEX^ifk_Dk|?EA+%dVw<)nkbfzX*J1YgDG)fh8{nnyqsb+--l{#(+&=V-+{ePb;0v6%IWayz zq!53zh^g_>j9y1k^Vo|;mx!adGqyxK$C;jWYZmWC%!ahe`-Df;Qa06vT(|IOZX1{a z4ckBepMT-@r~dUf0N)*Rijl+ z_coi99&4Q(*8WHCIEl-wIBeizi=KqV4Xz7PKJaPN%cj*l)fm8Qcb-UR9Lfh$7P)t+w6_pyaKQ;3w`OYfh!m~ z*5WN_WMM>W|6Tu@_wKzr)y{g1>fX*4cT>a%xY$ZYtJX%Z_`@BTZeTQeZJ9-lWpCVz z>F;v_#02^6HezEVft-zI>wIiel7%zI;i8j2UD_4kd}4zW8H{z5L+!r7DF4Q>F2yWB zim6ME~(=LbdTk%wb0mV%K(fc9MyKv2u2fZ*{A~wROX*T^a#OA_C{<7lp*tySq${=kiRkkJR3DSw z>*&D|Bk}CnyhRC)G3`pgI$#>sIY$(QZkxHSgDT$41>>J$2;M%Hdm$iT%IrmO9b~9$ zow)25XvHtQU0hA}(v4323Q@p8js~yfoH5P%-kNvG950VqOKH>F=`Z)$`V)eNrsN%)n_UP9BMTZB; z#)gObrvmIR9d&`NF?(Z;IASzJoDnsbJrLoC(JO37M42)muhAt(cf9#jvvFM2V+qZx zo;h;-VdUfW>EW&VMP2@U!i^jCN#10jI&*%@Pp+MnxQcxAri=<>zY)H0?os*SAC885 zzl7%Ey76h1a$!$otxE}m2N1V5$|viZRU>htD`0%Fp-z11OXG49jbO$&272q#ztkpN zSs}H}_c^*H46ZfQy$Z$`BmRT02qFs*|HenxbYyH5xFOlfl^dAgqjSAVS6;G*pn2S^ zEK--($x;0aM2$91RI1Z8!vBB$H@~-i;uq(qn8oclUw$Ha?8rl`ALR#uH$M8l?doHH zy;yTBt_g7CE4HgI{kP8=ufFu#>+?hZ#97-=)&aQjJ3qDE_($&@s*7;ifmic~@ULd< z(@tD8kJAX zhkn5%f7_H)A^4{OzU|6ia*WW$F6!BUat4JjH$o@<;oTt}s2zGSa+E&=_;kUwm; zlZ$||m(0JBfc;Sl2B!R3;1wBBeiH02M8zKa*97#`F>z<##58oGT7#(p@Ehk4@lsf& zAwL_%2%1zK!#K=JAECx7-z$E8!)lI>m-y45oKpicF*G_yva`NobpLnRgNp*W-FG^1 z6?6Mf2lvmRx|i{Xv-IWl%r!{?W~kX%=VSC{mIMm7bA4ZeU;578+KvZAJg#B zqAz71z$HiJ--#){3&2UO!d{M+h2tE}5j$wrzxX#p<9+@}gAoqxU#-|zzO1h+^$2H8 z{DyB6j9z1)|AzrA{a_x5;cq+o^uJAFa`^#6&Bx6S}8~B(@ z7hh%GJTVK1jvIM#!#Oxo-O0n#La@wW@n^8kh}(K|lLgpQ=_+ZrX41aKCCF-73~OBsUFiJweb zM$Ay}iPw20H^*$0VwOyT8Thn3_-n2B=-UU6;8r<0LAmru{H!x4nrG*+>LRaaM8}~B zWTU>wB`JO<5qo9dHLlr#t>37xkJZQSJ~=CwSl;wP{ONzkG)y)JEPm4{6YCI5*&$WG zg09;@2)P&B`Vz=)v)8v?fZ3yZ(>lc3fiYn!N}gJ;T)zt;f|BJ)ufy;>xGU&gxfk=%I+Kjd1q ztoV_`Q)~APnERyo9aQzBPyOKA7oB`dfvh+rGDgQP9~}S=ft+>mRt-M5q$=;WBVk8h zuIhiuBZCe}xcgT!AkG0zZu0li^eAc_KFNUFr=uu-$%zjGK4WMR1v5k)2T<9aZ_ZDx z>i(LK#J0_Bt2{MunpZv6igiZhiaW++LK=vi-`3zETU{hKFgoZ~nI42JxvFoD$gn^YEE zR38#t^#x+h(RQEf_&cVZR(U#hY#?Hl(C61WYitcV^R$@}J$Wg&nuW^(@X-;K`qKU_ ztA7WuaAk*1vJb#^_t|^f-}sB4+@AgYWBaTZk>?px8v%|zOz0z?<>!`OWD3RKlGQk?K6M>dfe;S!Vlp6An@um z;qnH6SEuhUWz>hh@4u8mFI<-nTsm;+z@-B(SqFai@7>vc^MCW7{Emm2I zGf&jfA91`8nNRnTcyY@U^eIPYjqT#%(ogsi&7-IHUizv2cpiggJg3o%3cnB(EFP60 zIq3yblGUt)+Mf&=MS|E|%!Z=$3pt@=M_S?|*DdLXLX_pM2m&;)CXI#5SifK!W)g6C z<*GhLR}Q28a*$dHpof7A{#893QkF3M5u0Cd_bRUT?w%Gw&WiU>6}4{4&@k4#R6yrt z>%0c1n3b!UY0iUv7n1n8W=>D7*8V|NKH+L+ z^?HPaQ~kx;{ex)m$PCEUsITf1)Q|&!ayh?Br1TlesTU>Vj@!7hz^4pK1xs|1Yi7uv z_$INT{H2ag1U3y)5fF-fDxm%$`Am^RdTE{gt&7Y|vYn%)x^jNelfXKoaZ1*Q-0++IAQ65 zI`La=p8|^)CHw-)X>isGIsVc&t>Y_!)-2P)RRl^)p-X0V#1e?lwCa!rE&zv+9SR!@2t>XOrMgPJE@OndLV4 zo5ZxWu)h+Kt}gI0G51(yRQo=ag81cgw|-N5ghCJ}Tp_DjSPYh#`4U!fOU8QiA6!7a zFfDlZMCVG%=AQ|OQ649`XQ_5f=>fLf87h5p*qv2V zDd&j9oaYBEr=XL?zrOS-7}0@HQD(qC`YMd|W_4ac#saH~lY+gn#?e+Q=hsNrX@((} z5xe>lnYEN1q2=h9XZ|+&{8)w?yY>&NmNmm&V<)2koMD2gV_kN9$cU@ub`XF3v0}%i zx*9+F(>(rr-{zWNNp{4aC6w}KF-$EJK%&4yl%w_S-k>>YuT=}Wau5}DS+=%`ip1x` zvsuuz-3*nAGq9E`w^fVXx)NHpgnr!5O5S@rFL~4F#ED#Bc{IJ`5EQ*@?KtQe_;meI zRhy-kS$4Hv(F83!GcaSwrDdiaL9O>-IePyIQ(qll4DiYyKQy-cPecT}Phjsa0#PZh zCFi8`BhrrPtewl0M=eWU=(I24TjvEw&R{!rp&YTqG9VATtg5i3*o_!|X6qhDyUc5R z_*JJV)8BDciVK;ViNfILLO1v`E;nv(x38Y$j~dmF0_$g0#3hXQ@uGl^+d4s7wxxJO z3(B$J8UNt4f3?(5tOknA{E9C>E9C=BIpSn@^Y=nf zF4#+lx&wEna++MWt4~x`&8qoHboc4(S@GBg;=;Jr$ z6$p+vs?&VP@g)}W(3LG%>V-=8-x7ZRAK%&j&VTW{Bg{GB`ky$TLtk`{^c%ppKJYKp zt6cswj&ay!D@*;w^~3+~u15jCyDI9_xgHR{^e+_t%TG;c@&j0kspa<9&=YH|Jbl}o~O9w6;cojSF%t!BUzxv*1M+WQT zc|Cm^W0i+;5ylIR^3jW{w(%rgPsB^R&PJ^S4yLPu^%H$P`L`!%=T|miW`fa+w`_iK z;1>^)qwASh4#^pI)}CbOr>G^%SQo`3ZlQW9SzgwYs$X0cM6$7xL)HF@hnxXf`Jh)V zE$amhT`BnAuw_O2HI8fYcH3IBp?Ox#>x90kCZ#z#IpzGn-UQD_D zSD+xoWWd{_k{+^RjkXBTSq?dFZjh=Xv0?Yes}7XwsO8Mfwsno18tK2fC7u1GQJ&65 z#-z0MdSX?P{fh0a~XM%!{Rq`3vMVncb8%x>Ph}i6^%!5wHkXy zUULJ=)lLdU8ucZ*iRuDczxX@7_$L^%8DLBGj=3^hc6^^#u6As=`vstw6M1nG~nzwiTwsIDrupia}7|5CmqM_qlYC*3i0STvcPsK0mR;*2zs!kQGo!r415SNIM>6Q!U*}hvzOdJ8#8rqLV*<)bDta#n&a@NfA{6O8dng^$x z>QY$MOnltQk{K@LL?0W+tVPWc1%o#(-ZQ&f7NxkSdoL9W-|=Svh`|7W41eduatSZJ zVEBU>cFqsjj^8$+LV%<63ef(R=^cU7D|5R~$a#M1^o$$vJC^!ivbl(*fE|-H`FVC; zQzm!Dh+8;R;D?I=T&-(^ruYY(Kv~NRzNwhKs#ukP3+6Oc|+g0#K=7F|K|7E-scPl-{ZueQo`>7oRfj-Q_QFop1G7$hI6E)^o+z~8Gzh* zP1%1`*>mM3l#>H9aIIIG15>q@YzAb`4`XE4vXtFkGb9#RS_+3_b^llw%^F{{Vw6Fo zvOB2zN(N49&O(|`BCJWV6x#lp(`#~5PJ~%-T0oDEOXLHAYLhJlBdUDJPcgbio!{bE zHBZnM{PoiN*DFDmzK@!+^E-Vs-yc9T@%z~+~6vT8`bMuS5MU2 z0B+Z(1l->Ea2HjjM9qmN^(lMQ3h%Q*4#}wi$3Qs0w?T!=@bT|M>h z)yMn4apE2%)tdzLW`TOsz{yzopa0Bu^QXV{1oC=TaHo1L{09DOA&1xVId~~*f7r)> zmm=1MyO6biS_zofGBwazKgiLU_kFD;;YiK z^h2E&4^i;4#6vGGdZ8(XVjg0@j7UD7vBF!C2C#%7cL1i+?Qntt^os){y|%v`>==Gt zWB@4ub8_(uj>%xDu1YI)^TK4o$iLR`t&KwO1Pt!0V9kdLjB|juiO~Zbv-7n%b%vcl zfa^wGao~zNQ$JscuT>H-qcF`B#+hVeuqS4L#&A{BGOIKs7U$`euAKuv zQ1c7dLD~5@_h^-W$WTUJ`bw{Se%jcz15f?P)49YoVch8Rbnjed|M1P3qL&QMCQ2OX zFhf@VqHhO#+FcCjSyE2a%*v$%mstY;FqE+7nKlF`h`?ZLl%d_s;Z^qwyBL*ca%cAW z!QJ)2Av>Hsl82YZHGQeOvDF;W^*bkFm2*jHy!;{H{1~UX<@C?6mB(yJ zBRC=I5{~GVWRl9PT$*9z(=osxMvol7hG;z!a6Tz-%w^Y3$iHQ1fj18mVS;0x;XxX> zUSUW&wl_{7E=CJiD-T7GsQ6LWoO3d9=7?T7!6{mEn=MQ=$Ceph7gqdyA1;GkyRE&b zNp04$F8q_+`Zy`M7@X-)5x$+g_qKcg?PGKMdk5ORe>hTcWG!Gg=J_dTk_tu7nyP@Q zj{oxb7f#U_NsRDkP7Nd0!iz33)b-8>UAI{|vd&F?UDhQIj&?`Y-3Wi8*fMgeWf1f6 z1`Ll!+5i?cKp8pDPx~&^LzIy7gF6b}(id3a5?|R|7a02qC!V_SuZvs#%?VQtH_&pg z?NWKe)3@|bKy=rPkq?667qDi>Z%0iSA({26Q|0H5VI~LrjQnwHT~Eq0`2}a2z)65$ z9%VGEuP)T*mcB~c80Ao2?svQIy_JvJ*z`f|mbFN}=p!Hfv~DALL zCt-AW(pYy_{$P_Q>4-Y0>PxL-cb?QugaHl!rPY=yoB~Fz^>9_;Wh(OX=SN88JJYvh z3$&4(r`O4^s7GX5W4dXr_buTk@JG?A_)+2$UYA55our6#XF9gmR!g+q+rL#Tas(I0ud3S!P zOifrG|L{ptW5%($D~@RE;#t=jzkI~maHe&gJcrKi)4%;%?Nu+BNJGoIFiUQIR@Skz z9?VX^&jUHi6aI47+~9}w zZB1W=PJZRC#KD*-al~3`=KwAh`V$C7f2oD!GnRZhlmIhM0p$RBoHBDxkYlJk5$l%t zGEH+CJD}48Sdaqf9~Z#O`D2xy0AkcM-7N)@PL25TX+L{+j6S!;WUD=gfAVxVd4>hd zh>xWVu?g6hnKvPgh@ad_$2vA=8hkjje$YWeQZvdFzKpx{lE~#HSaOuFM1FxeF zeE6?EyM6Xo{i#fRALa?RU!=??oPBIBU|!tmKLrZT^J_-dV{UAolQY}bS5`c2-@Tad z(|YMa%^boKoo9PDbH7N;LE@7D06+jqL_t)-2Yvj*FC9gu2IO+}^AMDEV@MxPtCW^Z z#D&5$wXgl_*Ba`Ha)%PCz9~dqGDokRP!>*p;EB^Zma!$aY^7BEU~7%uI)a;1&fzw3 zU9p$4lMWyH_y^80F_l5c8Pa_+yf@3oUIFL3B!5J~sXMVK4Y(m!v- z(*MG$J;A|;e`a{)gwCN7(($e9@WV~+aK{~5{A(~f53LMBEU+RZ1~S^O-FUZv4ZVoqxSj!q2PU(s{2}b8&Wmnk7 zmJFW3L`qpBGo-UPd>4J-a&N59gk6C;C2A*(11T+RgVcKSAu~FOQW}>Ty=~U}jLh@H z8RH97&QJR~z|gCwgpz)qzwmo5U!~-k+~MW%ivL$34tCen7&wK)R!0BREIm#PcttSh zkyB&j9*&wh6U1VGRovDKR+k(62W-8`B{mYo<_rEskhMWw0Jt)s>qJ@WOC0nTbM>m% zwUitkYx{c^A3At5#BV=TSX7c?8KgC~)+t?^M8B@%?+~o!FwQ#a=tu&1O?;mjVT;7o zv&*)Tdu;ggwXR*;JZp|&7BMKX;()u<>OWC;`g#5o860uI=%43OwLi&~jxaTOhO=e# zHPkPaD*edt^`6*oMXROlUE@b_nzFuMRMr>yF zUiF(7oZX#=WIUTfIaXNZ;B>_y@jhxn+nXo) z_y&Wr-2A1#vTdLK*@<}_ORuHhynn5{8R2z&9RARy^Pg6iap}ON1D6h5I`DXO;CJ7D zXZ!e%J?9rLm2zGbkiA|@9LvbF@7Av`D5UBq`A5Co;+&Tptc?u5-KBSk_!Oc==LiyA zbF|USrJHW1S+Ben-~|Cb!ZF)n?;pFfGQ$6vFx(r`?&_a$9k3SiZlxv^+*l-sL12CQ zk$L1P*UGZ|sa;>iBe`bl3xq|%Dqof+kfh*wfrK8O5#NcmtG$TTo(Le=17b6rgJthc z>%-X@2;4qqnY{KWgz}0$5qdp9_STZzm4n$`>x@J``FPdT=o}lD2zG8=x8n_Yw#4=oh9At;zdWu)+b=+&*$| zIi=5@CbQBExGo5E~Sen0o}dSiN#-XCxIS`?`1je2Dq?JehZ=+-F21JJeUCHf^Mj!>ZQOdco5@pnSXGifKS|OY0bof zT<`zlmf8iZEpq&#Y|g!Zy=m!c|0w_sa}7l&MwG+9O%CM+*ErVfT6^ycM{LE-TyXm5 zu{fg067hcj=b@6v8Kvjl;}U*jOakp+1tPXx(?9d37n#>HJy>Rbn`Gr zba?#hA4<)(n%7~b$HLPr;;@Th&2!ZAW-4)tvSYA&4qt4g<6rvMdMk0FCOMly6s3@k zg%l7N)L^aZGW*u{LeXQsVw-Y5{xxSjmhg!t76LjfOnbCfQ>%4fNDjHdg{_6PUVT3vTX}=w+8v|f@ZX0#IjcUGR+-~p3r>Rh8>2?)RhpP zJ72Uh$lDCoVT-Yudl{|fUQmzEtO6HBeYL+cn|kxZnNcKJmYA@ab7#wXKPQ2rC=S`` z!aU-KTUimaeZX`IK0lbcYde348>lIZ%qXkMnSgkl40$E7g2knC+ARym+PbBGttU!2 z)00&<%9L`s5I>{H6VocMKyYK#9ncIWdRx%s{796KQMQd7wHfFfKl_nc(K;D=_!9y3X6zZdel>{+@u>E=GXp}$m_E* z&9N-hVsgOOm*UdGTP189GEXY<5ywb?T#WPi0b6US>Ow3>LQwA@@ZJHUPJv6^i2<~# z{ZZ6to%?K+l`$xo4aM240g3=bqF~PrkoOg7gmU_==qR%5(s_F`R<)6-YsLEfz+afo zF}M*wx!3H9mdNy|ZlC?_yW8LSf#01$Te_+M_BkROLCyx|SoJKph*?JK_GE4Hux>aV^Qch2zZ zzy9mnPyXaj4$~7)Jh8p|-R~ajM-_hl=YM|t;0HfA+@5;ssqJ0wde>MV1@`uR?|a`) z{cYd&ZQI-4cKDQq9pZGsUFrSrfB*I~Kl3x&M?UhA?PDMN*!Jc(zj-76H-6(cZr}Q? z-@3i^t#8!>*K^O+XA!@^IQIOTzUiB`ul?GueW2IsLoDie(D?MHKfV3fkNwyV@*Ust z9oywi3cHq^EO-#UeY^f7N6nY<>UDto(dAp%tJnWaW$ah{qnir zzQ6s0@A`x7&S&P+T^_mTsum}TrGI7Pneqy;>=!5SOj}mb1rt3pBc$={S+J?|6MdfC z!{a;pkV z84Bm#NJSlmO}){P_sE~ZMNGV|sdaOWXXBDo=Jv))!s3o@@D1*uNV9LL9v7%V% z=h?w;Quv3XL8Ox7yt+TgCY<&U6u)J7w{HBMVfRbQx@4WcvZg&bKdDVK^^hR_vY?uR z!EcnDo<`T};a*UpjQEG%9686@ZX-PLb~f>fTJ0vhMhOXVNJ-_yHsHc5Te}bcsWVmy zG(JF6idosvUA2z{Kjtb3S>4ihffO+c-aaa)p--%o+pB9HXbrGu9I_Vm!z;;K^qw zN>Gu^o#Q!Mbiro5&gX2R^y8mvc8}{?VcE-sU(e4Z${7o4t_ch-V=|%13e0#+7%{QV z5zfrhf_M4rP(<6g%>Xj^+!#CBSWux0%ii!Q62peqA^lbAa<(>}vFz75Ggu?9v%O&RHlEl9T_;7~)@+B}4D0@Ni$$FC7v1gp6p}F< zes{)B_irCI4OI9gC7)mSdhnN!xY>ZQ9<=}}zxw~ByW8^|u^wF@HqPCFz}8v7T7MXr z=Xr6mbG<{=q8Mj#i?PmRec5~EQ`(~n)<@6$*a~qRcfUk{z+H5S&cI*B|_1OvE|atan$uXN6q(xidF>ceRJ18j5Qo1 zy@hBQCMb}I#;kCQZWp86!;?sQ{PBZCeu$|1(j?Hj%Z=9U>J*2vgrpeV zaUH$p&cnJH;rV<1XzF>6sE@}a9D?>5eMPOCJ23XUb#skhaL3u+W`D@@Q{hJc7COb# zp>RsVkXzCu4Tjd`*x1|;)34(!pN@0ZmH@&ixfxU8m;Nd2Jb!DCQd4wUD}MS{3Fu?! z>yy2F?rn9BT~kz@?7sZI|CjCPzmK={IDE@|#KyFbW$jUyHS>yai({Q9W;Sz=pZYN6 z{B(`gGo8^gE8kk>jEwvpRKa4Kt)BkUDSY>M90VUDOoOxH@Y;&E|BoJboZ)t+|HP>O zkJ6 zw%`0G&tqPU_UT{S?tk)s-nLKtO8vI~@0?}0_eKBIcK4ro|5@9^D)|BSFZ{wUJQVz$ z?|kR>o!|ML+xLCn_ig+z|Aoen|M-t@-~R32K44$)1z)gz{No=V>qiyd``-6%Kkx%T zFxsHmZGH2t5e&~m`ANi3V**^T?4_}Mp z2gcw3{olX6=RNPyo%e;#)3N72_=7*Veed^v@3s6Gjy^y9!#})z&-Z-KwLTyE(1*5f z_=a!T*?FVK8{hcGo$j(Y?Ew4vTKZ&((+ofVHLtZFG=Bbf{8Hg-y#tpw033Fxe!=kn z`~Ii5&-}mj!_hMBo+uxnW7*H2g&)cm^4z+XtKBaUcv&|`bW>CD+t0emkQW0hcIqY$ zyI;8Y1pxI(rziUG_u5Ja6e5u`mvYdC3!wcKrR+^F244zWUt($hqYMty;2&{N*2p?D zDqiTon(&KGFa;@P&6Fx!1ld|ya-a*alsNAF(noW;rcrQVN1bx(x{HTg_hUqK04?!$ zE@1g6MSeSa$!=#~vEUhNltjpE#JoOtxBfE?<1*&?S(J;o+Er84wo*hl8yDx!mOk_W zF&Fm9Fm=(}Z}hcki0W8)+h5&l`>s*g6}LEJM=V*MGyKpAhQ9Gho0*}bp+$lG&%KXM zpt`ibjV$}j%5*rtg`FqBHn|tSYE`x&BmgpFCXhZ2y)b2O?DTg3ycO7e-mdE79r?|C zM!eMP5lbdtCfQJ?PeXAKR=f8vyVn`6fcE7L0C#w!3OOuxpB3ktFhjTCu%+*7Ov}`1 z4s}z0awx;>z=#_=KFEwd&#ItR*4LG_4-0|3#(0#`t-dQ}!HN!BjnvfX%Rjo{*6{Ii za5GFf)_Fdy$<>VEmv_~_o}cKFPtHx|lcLvNDon9gn9loVx&u$*4trxsHt}(xfO=b1{ohah26qh7*F}jmamnIBx!|HxpU1iB z`)UEvGuG!MyYJ_+9xmZ2^;*^{tLc?{bh}x(9yqlOYPFryO}pyqg4bRK@&B{;?yZs0yQ|siXi@@*c3t9D5k=Ykfw?fB?45DfEro{s2~xh zAQCmMAc-njP?1QWC_%(+z zwa@;px#k>mjJf7_?R|c~{rGKsJpi<&Y|I(;XtiNiRKE0M!#S9BG;wfx^e0XD6N^(1 zYEZ7F^H?5zUj-?4E}v?b?}DfP&QN==u+RM`1=6SI{7f6C4(mcc8_1DJaOtN2q4v&q z8Eo#KeAAPZuIr>UKC)4hK=w-Bqm61lT0H*pvdXMnxoK;r^4)6ugwo_JyDR24lCBGrs zVSV4*;k_vPiJzY`YHl4eb3SmK+r>1_%>VoRfNHU4L``rsAHmsLH%OquowNO@%NBHw z%EIDv+VUJMay=G7!XoJBV>>P`xxcgjDWLTLCB7Bq?4x=ER($6&aPqBx$usNZfIdDZ zTdz9@u7l=G9=|>8uU$6W5Lj;@RT{qXWq{wXTe{Bz!QO*NPeM7ELv7E)Hy;=W)cF{5 zU@-MvvQ&2!yZ{01$|)X3~{NR~4G+2oQR@8z_|ce}X#{B%#9 zjoFeO`}_z^V#n0I=U7Xi-anv@^FOP80Kfs|#&*xbkYe6#g()wB67FICc?E zM|Ejcozawc;5Tow;B##L#3dbd3kUADnPom#$j_f`>+?h3fZ?j*+EWW(fs|u?e9FuH zx_W+6cQ9z2-@YN9eBX)IpiujUwez?xi4w<8O6*ygPfo{~89`kXkkD{NI@dBzma_xy z=YfOWm}4u3u{^s$Nj|%7yK?{fxx1kDzqoxiW8~f?}=0Ci8C4oC$_$Ty{eEtn= zLLGO$>tCJj`uW#&`HatRd)wPiU;p)AfBKBi_>9v#-l10}cn%Nt`q`iT*{84l+OK`g zZ~oH)eo)|BzU5m^FMa7tPe1?j`hksSVSM#hfA#52Z+g?Sp!DG0hYfG=75Nrqy~`-5>-c^Z-@ z1;mOVJrsx6PYg_1@_wNyn5rF52=b&OwF~2a$#E@uj9RSM1_&hj)P+v+T$xOdHo*Dg z%QF^)-6k9tA6|%=FbLP2YdIMi7nd&MB3U3l)*C@WHVpd^^xZC z2g8~e_3eX~e>HG-%3l4EZO+L{FB7l7*zVl>)V{MrUCCYf2x;vDGX1lS+l-p%FSzW$ znoy9(KfPPiHj7ZEHk?Uy1rxJRiG&(w4j0bYohwfrV8~;}I?s`F)jt^Hln4p$TCdv8 zL<)iU&(F_bl?Ws;2&3yH*~yPTB4GK?MP!WA=)k)DOC9O2xf#OptL!7eqpsCE>rGC+R&jQaR{me?M;8O@&?q-pbsC+Ek^ z=3a5(u-zw3#zBft!xhj&*0{#++5Yjh6~+zL1PT<#dgaT;&xq7v?`t5um(p_pdwR~u z&=*T${*6S>&*YmJS=NX!5@SyH<7Mr855kbd<4vz|FN~~c!!n=$xtC(rM4 z*~g`yTS1G#JjCPYw?p?{n1PE@lkGIq;$HW_{E7MeI1xY~>r4q}&1{^g*Vb3gqo1Gr z2Aqos0jXq@#0G||XBA!pJi9zyqT{T@lV!im<*RKD77R3|Ibyc1XNRmnH7?O%U!sNC z9yTW}$ST=J1z2;<=ZLblzMe1q-lOsshN@II47}SfaVxtBtVGlRV?pIzlkC~{!bMjc zg2A*j&6_WLgYnzY=k!WvsEO5H0&-bvFb32|DWsD|+(RrAub)~NUfbZp=PmsN>TI*Y zRl~~Z`5_;n%yZ^;bK3qLNv5RqfIZAG?G}pE4&U9~ZgTAxobJD^9$QI52gMouW;g zdr?1vvR6qm(6BzU!#Q(FiJdg!;bfijqY3~rG`lL6BS2_r;g`cc@B}7(LU_+whTkCk zTJWBc+^(EO+}ZM0U+eu|5(Z=6P_WJ$YzQNIcjNO#Bx+k_a=Cz`Q(T!;8qH0j}* zcw^?Dn*xkAnT`)fYqpnO&IpIDo6p(oO@kU4D_?8(@=%D<sA|i^Cf8%~y>I#9 zfX}=@wb*MRmL5ghWljN}ETqJ#AF^mU(b{O(M+w4Nle`dk9nD0jmf_WCu?~iqav6$^ zrNxmGEBU>~w<>dq!e)h05wWdxuTbp$zA6#^&_U4zLwQbE4 z^V~Sa$$#U)o2MW8AAaL>XNIiGX-jon9K$6C_cEpP56Na-V1AVaWY^Tmeya?(^ zcb|5c4VQ9m$&ZTn;HLz^#qY@Rcw;oy;}6zbzMC*>o?ej6eCV}L_KapwKq=E%V>>$( z6EK}FEb|1%e|J)A??uVLx$w7^J)AEzG4_jqFUQ*3QWE>Rr99Tg19d)3CP+XgH1tzh z7_pR;?H>gGo6o`&kG1+oqSmXf6&ukOg8Vj)d`mkr85efyLz_{I*WMtW8EHaSRC3tU z4A>ZsDNNmNmVDWRBJx>hsBK4ZuwmtalVfZB;Tb8o(apMgkS7*`-5=p07UqrUJn8ys(NLm=D?Qas@62+yi_ zFhrWlJ zvH{-H&{a>@o*}uwDMA0pC8%LS&EOba!wU$vb+Qca_~lx7yK)}Lw2UrJg=6u`9Bka2 zA0)T}W9<{@nF3gM%ywrPh7_4AnPC){z|D?#*B}z5Sc;iWS}M?Z%O*-?E}U6o)jNGU z)(RRT2Jv`X=F8tmzjcehX-d9nVw;b(oaRex1tU35P0mlf?2$C8WaOMAp=ZXsaZXBG z|9|-AB*1=6(c-j>FFMqsm(sLG>Pla#(G7LY%%Cs4?|!pfaFLInEN70MePD5VA!Blj zXI^xLX(q`r+qramAqyrE>Qn~0sUS6rq3fy4(eTbW5r(xd2+aNF|D7`(`7>0P3r=6a z9Op-B#xX16qDDu4E0spG`?}>%>5@qut|^zLO?@M84Z@|2=2WQ#IAZ7isf&Z8e|&wQ z`w1|9_ss;e_Q6YO(aipxI|byNL=SReP#ot6ZSlD(2XOcuirlOCX(Rp0xt$zOv5NRDkCjGv}kjakF%m?=qF#Y~B4n$++) zXLcQRuRTbweO-GRK9g7;V&1)oxG=qE)?+Uz$mOsN@csNp4BAWoPTT%3nW@>Bk@ts% zn0X$+Z-DxT|H^Ak>FCW@%EhKOotNl$CgucVyz(AgHA`tZG|S8x`x0Qp)eluT+xgLSScWE7DaEKws1s~@7l$ttl;i=hNY18u_k z8x$3)@f!(oF_w z1N3z(*Y-FjeQg6b@7+pgq|OF7y`@uP;h%1h`%*1CmF2Y~#%CE2`B>D!6;#%-Q(vwj zI_%VWFt}D_AB>xZz~&Vw8d^mtwUcFPMg4)NMQ4Cu8DKQpe>BH+)-!y23ijUD#B_Dh z!;lR?A5s?-JLdf-fGUN?iAmmW9)bN8oq)d1$e#UHv{!;su;Q7Oy+M{^3h{rM57pI0UW;-zmNm)z@!MtJpYYHvBr#>w#BoSh4?9mlqUmvJ$uf&RIN zisfuj$qdLf%pt6K<+H}rs=>)8~*jLf4#ri+`!x4{`S*% zeb;ySH{|PkF3cbJzz0rW^hIBE<(vPX@+qHk`qD4`($mXc_OjDwe&%PM9(dq^6W{Rv z2mjz7oOn5Y&eHRr|NPS%-}uJU$AA3CKcTbrRQtuf`I0aBlG8u=C;#O1f)^Zr|Kq9h zUgzt9k?!a94**=BgzFAmci_4Mzr8we8r&SmPgVno`=|Z zFpe`}J)qZHQg)m8JaAuFWtikrAWSCdgLSf(9W}Gbm!}2z^q5|o$dib9g0scz4-)O_ zYR1g7r_^K@T;-H|(=V4REse3@$O$F;b6+*rZ+)%NG-va1P5s2!mvz8Vo(Rlk8!SCZ zj$EKwETLe@K|rw<;AODf6Ef}6#hUWjqqXmu@@mIaKIwp|rhn>P{9!P*Ut~z5r&uLT zpOaqB>PHQ(rM&W^**^OoP#08z%zD`v>0bi5I#o?gbSl!qeFmZpt$hk?8@JxcU06!MebnKgY30(j7n=72Y_wf%jj4O|SS_H5x2?iZMH4(JJ0cE!rn*0Yy_YW7+cAmXA{Oye}R$K zA5vcDL(a8-@wf)%C7yij=*N$JQ-8k0f5Of+>oS_=DyMMA`Ju1W=mhh*s&Z>VB)Z2; zPJPDT=0cvBJ!&I^k9T~G+WVPGtXW`VcRrZI!J2LCtll$qlB<8NSq3__$*}G`e=gRK zXI<=6H@5eT%VN}&x_G=&d3&^OIx{#@nt$lup;uYETlY}bwsT>E^FmJ$)h4-8#uPzQy1jHWgf84F>H-7a-V7TftzSW4q=SQ>RcnQDt``>%|kN=DN^xXS;JZ1+T@1_5neCL1k zhfmM{(!ZgX`mg7FzVYtU>Ba}neNWd)UpINwZ~k+FKjKUN=hGdZ_+LF;a^~S1$^7jH=KU_$AA26D}U$@{UN{F!C(4I zf9dq{m%seUHkOaJo?c>XNH5C8BFpFaQdKmWwvYJRrHTi^QD(`#S* z+WBPpY^gr?b&j9#f9~(~dWY8?xbDDp2R>9f@b+(h;Pk++>!pRaf-fJ4p9O{UL*#kv zoQKOv#)ij_t?dfyem#(}hHVyp=q--D8bVqx(msg^HcxC0+fNRJcU?ncJ}3^!#98x% zKr2U?7}aWm*2^UyDbYP_pr(?sKRGcoLEbx@uSJs#8qQ+nTYZqPwo|Cy@#NT6AT?1d zixC6o;!RRfz_#6|A+U{-@wu0OjQ(6kVyn^Un%aE+D zGAB>AYG3wP2mY|mP~Q9ST-en&=cK!y)dM-LIjYN!Uz?`^6t?=s+AevSkzD;FABT3$ zM4bNNVNkdGiGRBR&Ka2`hSv~_fS;jt?TZv^SGPSPJwwLSWVYp(a|(10wxQ!Z2uzdn zBY^YsvAOoo4pl&?LzMF~Tu@)|CDJQ1??=y$-6F5Q`Kz~k?zq>#@rMU^_j+j)Uim4? zo+*&9+il}EHYvQjy2N$c@wzJtAge{!R?fIuYtnEkW_e$x_R;rr*dTKMlBTOt zn=gs^W@$1Ml(E~^i43V3q|ZHI^2gpJVXt1waIbYqICJ|KS`&l=c9MBV!(X+<2u9Zo zt!p#8V61$y! zzFWBS2Hr}ledS%)MHlLs>JE8rmx_=6#MZr%A6V{};?7BLV~2;A+duTTJ+u+GX~1%c zV#$x~_1NHew{NOU?$H&3jbr%hhss$_6Hq=x-cW3~_2%vkLG7eu135p+(?~kx8Z+Td z4{-`%uJGc?0Z1>2!|aJJXB!QdlTBmIx<^&xyX$7&AC+N;dLu--Y*F1EIFrY9>u zjSow0&DnbxE^T(Ww1&v*l~18t|6B`P0;8`f`Kv-4{0nAa#ggJ0nm+mX8BDFm6yt2% z0D}fh9N^@K02jm!9e=Ji=SP0U+SS-0ihk_12T04m*~v#l?;5$XbXS+pnnO?<1mA#i zp7Sff*;-7FCpGc(VYksOK5(mVF84ek-v+WB9?1nA!&9A_b7rQLbtB@Z^x6J0ysnd3 zIV`9+Ur)~crn^*%8jn;d9e)4(Byu#%Cw61uYXOhJ;q&VIDV6%_it}cBu*mcAX z2kGdR3fr1-t-58*kWpK+<+uEzd>eok+iceLF$)-ut2VeJf0FDQTLAAlTfSnmkDQ+o zN7{sYSJ7Vtv5nE^75ygp4ZZnK+CVXzvO0C(vOCQ>Z0>8~)|bt&Z#L8&*uNTJm@i?J zd5IrgK+(_LyPaJObI|8kuQu&|9DrUuv5JsWaC-`dd~mIxw!1sL>9=;X<=18oEW15y zcuha|%VNHmZ@A1O+^X9)wcep;iFf+x6}cp|_3-~2m&|CgPf|LU*el-zdw=38&;e#*}GJ;n4$#khfXhi;S10F`{J`d z`?F7PdCOZ)pY>UvWj7y;&*pEB|G*FY!08*l;T!gnuI;Cx15f62#M2;mO>y0U>keFZ z;JO2k(Scw6{)bQRdUJkb&ku*^G1+<`-p6QtWItT{1AP8}ZWzC9U3gedI_o}JNcw!S zz>C@k!$Qx4d0@wb^w@cTj+XM#pY+(X(3E1=V6u;{loO?DH>rZO;Z2j3kB1bJ1N^eNp`{#m4o?_iIgR(E{ zl7mke)=Ph=z5nTrYc_t@BU!^5n%w{#A$Z*LV^yV3Mt1}Q1Aj;LS(n%NrHMSd&~F)P zU^fRZcKSoPhfU2nKgnTT-sG!_a40Qw;rzi7MTXJ-MBcyzboD+6Onz%zy`6mfg$Xa6O>xyE z6kAB+zy`DQacLws#bF12+%GWZQ;aX-0l61kRZvlfRmxFH-66SLz-A;&LrpF&p=pKBZHriya$ZZlJAoDW>&J zr;|S@Fbp?*?1f8cHK$kpQM=eQ;{vwEumZ`t@VD{-Ejy=Q8D*$wu1&l<a&#Si zgA!T|&~mfOX-$yqUt`y2je9~Xo%$A)i&Z^@;3qx=O??{ZSRNN$u9;Eb%ta1 zoOJt%N1iJ>nz>OkFw>WuTkqN7a20BtYa<;F2r~EoLYC%oOko-@IP=W<$cHO1N?Z2S zW_Y;=PPdJAgwSI9a;ZkvSZ zU(7%!7X1WZKki;Nr~Gbe^m319FQngQP(>@=Z8W<+^a0QQhb#9l-Pvv5oa(ursF-){ zfA%~DkWZWu{q)$r@l&jI;Hd4CaN(OJKrfPSR+p80G>-lejec-lo3AzD)L7-$#)&8m zo8gYk8vWK}7zFx_zen_gFs{WS(VyzY!hS;L`n66OE_$g1WOj2|Nz3R%Kpv}LxaRzX zJo-{2{>K0%~^$_~kQFvkPL4&3oi0Ke|`;ADFSJXY`$$;L?}RHfTa_!0ZX%tgX*l zn8LcZfjF>iutIjd^6l590oJxt*RriMK0(Nzu6RB^|Ip)9;<{GHA>Ly|55DLm?@Iqj z)kwR+RNt0q$Vnu(2q)+@5o~d|jBy=dHH$tCxkZ z){)ioV-6xncZ?>>Wm0qFnrTJX%u%0OhOGXDR8nQawlN$+>Cv#eUt_1{^b>nk1n=x0 zE$>m()`xd&=A1HRUTh$J3D%k<4;N6c$QPeeujEg!29u2V(B%2z-THxXzgnCyF?AdPk zp@)z9sE<1HJ(0yT{VD+dB(fFq&ENdZr|2IoXegRZ<@a zuj;Nma9@$*$pjCS$({GwJowJTa^iWoo^1RKuC<#LpTjOH$o>E4RjcyLOB^lUYI~jy zHQ!a};=1w(KQ^S6(#0Tn z4A*L!Ycjpd82OY0w8L7f)D<_rTcHn^1g--BM7pqMnmxyrIJJ5|f~>lopPcqTC5I?_ zLt1jrO;oN21@IoMwd~3HAx0!$$kBOreR9}Kbnf-!5Mjg{d!SydbggQq?qKn;c1766 zvH!;9%s&&@Jp{Hd308gx(%+3sCLd?_=+yuiIX|jioV7c<;3--q%n+~j@yND5CicZl z#^fhBaZ1~<;8uQPI5jHVnOuhRXJ$R}nYaFx!1?iWubl3j5Fx*d9rx3T1T|tO7CYw$ z51is>)}Fh@-baud_6jFODJKP)EBRtKl^9$rUbF&@uG_GDAeii=Wi!7uY3_;C)Xt_4kVajLpeQ# zOBrB1;AeEMA0KwfW!GdbtiBZ_ruSkRFFvZXH{lL}-JaSU196^($6n38kDO~aa#Edm7X8h85%LniPzuYJR1|g`=Cq^G7C6v4fb+lax zQ2z-H4UhB25)I))^TL;|4w~zr87le%F zqteiW@nS>w@Zr1V)CE)e&rgUfvk6t<`?q^_6?auMCocYyQ@5*)((kIl|r>5+TmKBrrv7V z%Bf%mzTLKg86vasV(=B$IVC{d7p=Fi16)_+DuhF;_fPjheUBb_BPhSBcEhqpK#YYf zLVQ6zYF7AMN(>hSawomfb1zmMpf!J7%Da5haX)kwae;EZwZ3`u0#dmk{8i%6#q8Vf zhZ&ko7hLCt`%SR5y*x~7pL9ebxqfI#|9J5`t5WJXX(KZt=oP>!WMt`GjgxZWHG^Wy zfq^?4|7{@Kfe?^@?vq@eXawk-2fRs&peuGbspNbpD35wqg{WB6Zwc!#KZpLnC+zvB zz?)AhjiOmz#q(49Uw*83^9;kvOs~oPb`aQ^Sv8|^=I@k-?bH+c>ujhU_K=H7-3Omj!ppmL4JAFKzO*@;wYr$^0*LafrM+G19yz+p@RM z2ioOp*qDNS5Zw_FMO;G#90#zMYVAzdFhfeW)sF~ur>4Rt(%c4#vfY4I2F{VZk4V{+ zn(QEvKw{7vl{Y9J>`5e33$)>I^F^Q;=sdaFJ9vJ-Co&{_3&$Xz$CK7Dw+hUgZ&Ohe z^C@E||2`ZIS!?zgRsq#278jm1k?v?)*Z#H42o;BY&2OhvU%K~!R#a)q5(vdxG<#Bj z7X^cUUd5)Bf~rR&dI_YcBqfjjcT5lPrg3!P*V+R_+(%4;-QHQ<2Oy%DX`_v? zAZ~4^Bm^FbK)xCG=D~td(9kw5C}chRJ!wstdbEe|-owg^z@;+1k15|#<2-E1fcPb< zL#vOZJ;Y~-(i8+lE3|9_t|c!X-(>=oe68L5_>xEVJ88-mi3I53?NM*W)#DrG^3lD~ znjp}li60ihMQ?w|)T1>0aw&|`&GjbRsE*~c@R?r-z&7@2HrqE2`Iy_boFhL$f)vKj z`HK-+(fuKx52*!lXgojh^=*C=smPKyF1Q-N1=GVd`CX@3SbycA=K4MLuye{kfcz5- z6gmsTKiR~=3F~-gTAaX)8_e|`_QBB9Q4v;0q6N?G7qaQQZ(qzSPXDq-&Bz3fHZ4p-8_SV=Yd`I^8&!?WSncW zWBtYPlQy+&9r@x%CYp09%>^NWOjs2zZqMj=UODW23)xko@)|6HV`#4o@-h9|u~pIh zW(#g6>LLH#9WtY$p(jhPVe_n+%f`dTcY`zMrle=&RoK6rA=4CM)1H6GvUC9~{W#(G z#zaZ_0Ru9252+&82X#ZryD6Tc&#-+`2~G`L~N?%#}}oukFfX@_0V&IUGKO;%p&bV71JH}E_yV**sH(T zl_HRG_~Fx*JRGW%{3irUV3a!=T-FXN_Ld;O-z6b(-xMmOKC4C)cD|rLvf1syuZK51 z8MstUTk>((vzi6Ntu;88jdj=v$DR6x#!S|=FZ)@3wtbF2Y$4U*yMylDGl&yvU*)qy z!qYA2_KzPo*XA#4`-Y?^x{*w;7?!;a7%=hz+X*wCwa4xfCNb^f+N?ovveKPz*W8d}6-yVZ8s|Bd4^~x41qvEpFOM(N)BY^Fu5tMgyTwtlur5vxiLxxwe0t z&gUd`$ft!iM%t=80|y{HH_-Ye*9=IyT&M?wcH=odyFUK}NZy9FO;eB^i|Wu1S?O_S zi#uO3*(wVQ*$@j~9Ny6>b;EPn33{{-YYUaof27`T>WG{HE=MM`eAw?XrafV3y4Kop zY&>ePZ!=mJsyyZVLy)X%*ZkuCkK?ZS4e90$sN|~E&7a@gH<%HZ1DnQLR<{C7=xMG+ zQ7KLJO0Py|VZsA?6`O_6i+dh_7$>vcc5Pf)_Glh2x>~XX^s>2S$>%{&BpUk6J-o15 z%{-9K!zK;E{I=UxSJHQ1(^Q`yu1P$5_Ymnx7U4JvuRsuQ$SRgl_?51u^1Rl3EB@yY zF5)nAS60;Q)!gwMwA@OJMk#wCz=TyaI@gI2Wg=Yx=~QqLvTPveoM z)_>|s$GI^v&;JQLMpu-fytG=mf^T3)8wgeOO@HD6GC1@o15S&luTu7fDFmI|ZE}w? ziM=X#nX&0>YeQ+l9B~or8#)Ikm0b!xgf}nQQ{&*ip|cxyK`$;UK*)N;a<7uI)BT2B6OA$m{91uS9$bd{>L~^- zIo_g&1oy(?{q=t+t}p)XPN~nLx0+K3(6*mXvfs)BREnk#uM#OA-z>gcpniMvpeT-- zEXmHUxyJ6)bfFhZ4g3kOWr?D&KcFXuwkM3dSuyQ0c>@)HiDl4Dc~@3ciR;u86{&QD zeR+pHDNMIs_xKZ~XA{|6pJ=It;0aHAEF$BS8kB>~ds^)HvNXEM`00Mv+{CK-ZZW!+ z1W{3+&8<4j$Ckc#9_JN8bU+vZ?++_>1Knx>Rq5m)??)L`V#4vUF@|QE zPr%GOO7SB$@y<44OCJ4a_vLbtNCr2)@2w72@(^@m%DC^f9e<%;>K%c5n?HMP`>Bb*sbEQmjS$&f2v`6Jgi{wtDKBs#llF%oK& zcf#MkV3dBub>5RR;)uY6OjSUvu30fn%z!AD&N+vk^I!aywb~woRGLn?^o-2g|Dk8^ z7yl5ehl^)5RJV3|Ryb!i^xe47>m(n`9)U8b{`EgT7%ogjTP6K^5dW~=V+o*feX?#6 zn4Y<7Hh%P;Ctcf>kNG=9b0@;_uw3WzQS^xIzp3Ex$R+wE4-GvNin@u!&QT`Mv$aO` zh_A6g&CZxKw@a$PEAtbPrKJ*v6brrz0MF+oW-fdG{_~0D?>@dKUf5#j1rK0JIS~$XJ;>J%744o^E=b$!UU81MN3#WM9ZsYIK6ORU^D^O0|AVpVcnW2piBZA5UWAB{zrGU@**S@ry zn3CL;$C-^nyWh2G&Pp-GtNrryFqRf1)WM#Rsjh=fS6Uk9!Oq<{f8Mv1h^Z&^NLVM^mnmC5nHdELxW&s4(Q3pg zLDR*?<`_rMvhacp;>~{4?=X#8=t!n7FMnvA3C=~In3+;vnZ@z;>JBrfPjn}h1^WL* z|7ek8R_|zgko!U9?BnbemUM&i!ztlRd@2QH6>M&-@CpaEyY3$5Ev(@7*En%}#kL~C zmEGmI_#lwR%&_37EOVz z-Z&~1m;r~*A;~VssviYxxPS==0JROEP3tS8eh|{MAizisrXUg+6m)#5Tp;b9kcsdU zwEeD5HaC1;J9>VpOTp~a$Am-H9TC}hw0BzZA?UEVEV^G?KcU72Qke;0aL`T#F)+|^ z&^cW0X@aA9W&gST!E-qs7(N4r-$&7p03hge4b<9poM^Vj;PM_IxEPl{zEsaVE_yV) z!NAjavjtDj`@^x0qn%D9iu$YuZHhl9UeAoYr^BkhO+?#%-KVPhw)28ZTrc!}vp)bX z2kXQ4vJ>@Vo-j)cF*NVnno`e-1yW*az4q}5XD~v!Gz~-Fmz9iz7jE!ipN)IiO>DK; z8$dn;@*fP^eHAM3VbT+QzyEO9Ri|I_Nxmkodbp(K_Fb+187pOFn~{O*>-|@(4&uYl z1U~ZpbNEc@Omc@lqd+9Keg|>d^?641l;vIE$G()niJp=j9df$^hSsM2g6As<9x69| zX{qkbx;wTyIvU39487}xQ%^T!t1DniD$yg1rz9)wu_-i&+;rfVh4)`gyC&|y^njd^ zM63dhx+KxwN(OB17OA9(PuKnmYD!M+RgB!7%U0#fD;8h(q_4t{fBblh^Uc_Ls_mJ;ev>*uX3Z1kC>Pfz5r^{e=sc(T`-GievgH^)G!@A7DMwsL25K>spi-puZn zXUtPrKaMV)yWpy1tn~q9W-Oqs`DXqNpr~48YH>_(JR-uLaNyD1_zf+#qL6rT8jN|7 z&g4`BDz7qdWb0Tf>POwiNzeUNPpU)#`+A4})FbMWh~QBdMyG5ZO`{R} z-OqOw@*svtu#P?-rB?l{Z-8?(p%(hj)igfm_ysfbZz&-h#( zC1g7d_^V(WRyUYWsh(1-C%0t4i0szu?dD6NNqN_)P^?twThBsY_Vdd^x_u3Vl}I= z#`O+e^I%ik;6&B1p2=rv!1LeqPo>+QIVGQvGZ{PkFEqNpc}PC0ryk=D96~{tO$T=B z;sY6WvovzzOh5W194{w{`LeHyk%&Jxgrs-#bW$=_rnoLh;;l-kCGfx$)Y(ym?=yWo z`K#3Xr=G0V8&gbIjAeq~M{0mTi4$QtLVkUE*CGLs74U1Jx0)!`!sA}U?zV@cBzqh1 zy$QFAtOYG|=fKkckb`qdnL=}0j*xS!ma+_(lqTqb@ z&g5v5hQI-Ik+5m7Z>Od>-yL@5f%Tm)QZl zC;j;FMhT-xR1h%ly|+|e<6@9r9;5cn z-HN!xqT}c7;h@))CNLDQtENZ{_>-n8ShIX;H@hSS}TP(pb}D9ATX^)0VdPgT3}G zrW5g5@pa|3bxPr@t+(L@UvZNL#V;0%d;Ha+L@%vbRg&6i?J<%R(q)=Bd4j&5u5ZMx z<0aB?;8b??O@IHT!TVNEiTUuvyu=LvgGH`3=jX#TI0HjH#m>K;j;7idVyV>`h&M0? zgi0UO48-HJq;o7rBWS1~ivySw={|@66f`Jjo8AY|nB9Fs$A`=dSu~wS_ipc=1TQI2 z-?jLJuE^SxgUbt5Pa0t3gxgD$1A7qsQgr1P{+c-W3<^3U;aLJF5NJ*P-N8F;?51=o zl1?0vwcGumOy{#LHs!t@gdRPrgdd_2Cxb0y^+LkQHo=aUTHbx4%P8yP1$itw5AHrS z(Lx@VG?>(Hw|ZN$A2G_!k+mT@KozZ>`Lem&O*Cu3j?>bKdf!&@maR@7ysUZ4dNa5$ z*>2~~q@%5SP@=)@5jB%!fPY#3GiH|R3me6nQ{ap)z2;jN?MG9zu8d@Uj3GYk-JFZ`}kwZ?L-D0mZyEL!gQ=dvt#>0gCTam z#mv4{dz~*CSw^(`+ya)7e7okffpr}fplP4g+Q56(`}R$Gec+0E>7pF2VuO5p|Gd2S zi$D{7#a9G5^UZCAqDVUq;V>@@Dx0Yhew_UAq(E}BsLZ#`55~qFdthE4-%)e8PTjwH z?8LD_B*;w?yUtOD@4;~f&P(mvO}|TT2SquR9S(T;h=_4*uA!URJGjb=YPpzmZ#}F^ zH8rJrH(T7LAGN>Uz=rYL@A1$uZ$V#2Z7G=*?@=8G8laeSEeA;^+9=IOb03$E*1gp| zLT#rwi|*g*b21eI!`C^hv%IoNBD+Oy{6=%Gtj>sReKB9OgKA)Qz&7ATx9D;E!mK($ zQwI{-Gm(Sb3Ad*xj~Bn&F_#q?pR@!l_jpP?RJUl%QsXe;8Y_13E$t%^7_p z%R=km0#;z|qf|w8jCb8@a}>?c_V4YQjsEUb7oD4>uOX!hIvrSV%=rUv5szw}%7QfP z{%p(Syfa7UWfWpWMth{?dpRYAQSx{?D{nRVb6eP@OP+_7E#N43AfzedBkn{xPB9|@ z_LU)Bd2;f{uA`O#x#mcj;rQ=W`0#=xl)~^w8CpK5U0^kgQ87efsmrxTQ`Gr1Ole_p9 z<*l#M)4ZDP_cg$wZimj*S+#)6gX!G`c8j{_i%SKM>K<=Q8U;gQjZWllYL)~v5S4># zXYAwNLw@=j@8u~>pO%PNPO5TopXeZe3P^+#(ocM5L}HXEWo41= zaYmR`$>zW7P5EJHo`#h{yOQZSA6R*e|KP=^MxGnf&sD!=>)naW5WX!1sO^NiYX*dz{_rXAAe>1*3g>H6JHW=m;DVl^P%u z;O1zQ%u$X}bDQPXVNMd_)6gKg;2{8JCR$Bb2|tlL`+YU$?W=N z1DBU>kb=%F8`rX)ekhm0;p^&C0Dt83jrwSU2B@PXc!(!w|IsPNEGz78X^}I!s!56E z=_iUTCDVY}WCNfBel=u2bg};B=lxBtpQ9=g`!6!Rq(7n`$QX*@equR}7&&UoNALUm zd1XBU40z>!?#?)CcXU);4kK>+`YYN(%qErkHj9>L-OzPm7Az_DymU*}d9&z#V*F?d zQ_2(2q)@I)2vE<3Fc*C?g8`|YGCi*u~`-)o03dX-zLfytF%^D62B6Ys0z@#5Bk zLceNrM3q)^PN2@s+dI$fj_GgL{ZS~$6kfb}F`*EM^rAL_o^M2EV@V?dA)%#2>NsQ^ zKZK>#2}EE&uW;DyFwrq&b?At?&IT)FPYS-5wW>hhQz*-50dWj03cz;-&@(N>pp&7I zIJ^C?%GlnATSpZ;AYI{{zagYeM|`N1j&L^qZQpW?t>}znxXI;))?vn9e41aW=KuHkEd7 zdeGxv=y;KR?D64iv?j;^X_G|$2MDbV^@Lu%j1)`_yOr&B4(NGbn8atKnV&6~9W-Ou zdSKd|eqMBsN#wO);!uxAuHBNXg4!94c-7j646!cB1V?qXheL^)FaJJ7eigR~dEJ>o zy<`sy@32)uhsj8XJH9gAmj}wx?7w?!OIq2u+cx`Zp{gVnJ)DfYivA+T>^_weQ@!3Q ze|NU}-7UA-UV3v--Le()5nbua_&JE$utn5@!EZj{2C>YWGYJkp%Bu{n{OD??TP2-; zHWjXMu_NQDQwQ@LS+4p?j?D%_6Uy`%vKqVem9r^pyGM|`>rIwX=nAz@7rVC7q1M|` zt&B=M@rBJ;o0pGqDm+8Hy04Lw4%&buwnPY4wfbak~H5#f=s%u?Sr;ye_cuqkVPN z@OapkVBhn-$JZ8AqoG`X^q~uLRlElNt4%QKY@w2s#7)9&P(E|S;AE?uuF>JqbAx;A z0v8|y9PAmP%S&(*P%f zb>#*TvK-m&o$1p(4+i240L-Co0oOvtS=NigB^1dQ@`BC?2ygEf-F9TYWJAl{H2_>^ zHi_nluQGb=b-4bi09Xiop@Fmn2|(1#bc6>j*zs-k@Dt}rI!Gk_&sKC<69wAmT!((Besw_4_Q`f8elRd zRkdR!-rkI$^-UABz&a}k-a4kRk1mee8S^j)4ykjNJ9D>_)s{fV|0tP|y_x8&Alik> zp{%W@DwzC@$q;w#P?;AmQw`9H!i8$2Cz+z^@45^aWQaL@!QP3VT3Nrn;rM7!=3K_B zHH7Xg2tSNf(c3o}>dt0buKwckxLZjx@$cqNjEtI6hMqB|EA_%n*Fq*}VtoiP8vbMN z05{UpblXvhJXyp=UFxjS^XKWW?bP9->q?}fWgLd;*f11iu>^x&Ms}88I zO!4wJgi*^AS~iJc-XrEeudp{88c&)7^&w(a+1KMDIRjO-Od z_+8!Kc1Yg5bcgHEOSv_FHBzpbKhpl;)$%NaG02diZ0@kRPc>lPnC_<#on1R8I2`oN z)Z<-!_gaWa{6M7JvAew`AN!V-v)IEK7pL*rttHRG7o;ay1G}6Fn6ZaIRgYlsWXs3x ztmJ{}RDy_8R~+1Pqu(y)!z9jMmb1;f3lN*M?>#MR9A*Whz^4~-kvpt~Nk?S|2|GDP z2K$=Z`#TNl!>Nh@4DuuVI{XpPauIs+>tykCa?q!w+V)1jG|tcr;QIz;r2oiOAm~&f zbPE5xEOZR7)x4x-a!MWqfseuPZS=~#j%tzAr$O~V;EEY=MGp6$O_$cxLLv=8D2rh& zq%hJ7UP2+Hck1pIYL(ZD^ zp!EdrV=NRm8;Z-$UG_)5&M0FoSBT>DfXI4G#hLgnLhbp`DCNpRX6Ce>+-`M@D z{#Y#jH2vP?3b@9WHC0axys=>v1>I%(J^tCp5G+yR}(ZZ6IO z;EfpsT5Bnj!qYHF|5B8z=&sRKjucM+#lHH$;bKYC7ck-a_kX2s3fLL&R=+y0R*9If z%b@($atHjDJp8RRs9H%k_77C%O44vR)_#aUy`eLxA->sI>-$RYez-zqQ_~wIT#Er; z!dXRMWoP(wKC-JA5Vpd;cyQxObDX6wX_D;3v8V#M{7EK}oXjpX4||ul!l~=S=6iNZ zqvTexL*;Ar-$Rw6rFUL{6dV$~cTwtE7cjyBCg1W2CpD+h*}{^_;pM7~`W^J)QMO7| zNQww@oFBB8nnrXQouMa7Xm{2zGsc2&ua3nXG!u#9u5mZI1`vNDI&vW=B7=Pjg>G-} z=kE^9cAQE8yU#mF-s^1!bP-|BK-w)YEnqb?z||3$w>ZW0q4;x7b|#wRx|ojCV5F3d zj`{sfna+(@27iRFoL3RrGECmn0)WK$dzIh3thFY7qMjd&P9=EXxu;Cdrmh*KEJm~l24zBB(k-}!IY^0s`BuMnnba9wEEr}rqCXrefUl1bPr1E@wbZM0#Xex4 z2MRnu+Vp!3VIO7QA6uxvUw{5;h3ln;%R&=}7LHm~mVb%1b} zx=;rfaKf(6f&;7(FS*Nj{p{1Haj(AD^ZKt6?>X4Tboa#mVgn|b0{G6}a4Q-SzT(6% z85lC}!<@#;d0{Rg^=}o|dk&Ojk95em-(S$7Z~Vl@QcC#V>E*aE0Q4fr2Hz3jdlNmB z6wHuOvl!>#UtJ%Vn|2>~(7+srekLp0nw-=OiyAHd5dlXFj> zdZ}Z2kHR&hheE}5Si4jPDy2#^Vw$ z287Nj2HMZKKra6(lS?~2Zg*~iFJqNV$JGu}y^hvoxer^)SG<--Y+kKBBkx5C16^uK?amE(0(PZ@_i@Hm@1z?IS-5&G9rLk2F&2TPIi8I6dq16C)Zz2wwjjQ)Ve)u+~jr&Pr)Wa zBBF0aWBmo>oTr!tq*&PLO%)0%x_z$JKA%O3BJu`Zz2tq4v&!5$`sFy|^5xFIC$=q2 zttvnH65PP+VYgQsfHVaJaPgBpO#cAUk6i@C0go4<-a1LM^xyP7|M7mrEcOrlKPmlq z%$_!Oa55CsOx#zXue50I4(@{v3QtDyT?(+>kdNqpAF$tWH6+jiA8^5F_rFIVi=P;7 zvMWT=)#|;0>w-o2XdVJX#@V3<{lA%EeIfBJM3_uAcbr!H@w(9eV&;(d2}`W z6hND#bIMADV(}*wf_;^(u&Mp&t|{DQk%$^GUr-%6B~wvvx8hzjRm?z+wvXr{{i;!W_`;B)OT%e`){GvLLBW-u&i<^1RZ%kt^6bB+E7$ zi<0}eQrUPDLu!_kWC95-sGl5k6*U|T!r6etyZ@GZ%_V!w!&!2w;vQi?+Z#!@KYX!a zVO6dPFbz&p1$M7ZaD!)@y;Y|2KgZ z=?8?;xvuZ@Ibw0F{ox-H1F(HQpIJqRaGSUv`ok}K5nPwts=EQ98{w#Cu}DslrQ zAdv#SKOAQwNWd7PW{Wa<{uDSQ+!dCqvV3Lx!8TFpgOl^dq~%`4M$8b&Z|^d*LlI;9 z!a`MX!WW&YWZgcA(jc&GmYs6_oQqE)$G@<*8c6x~b-{ZvBOa6uK3@*Gn=kv?hRf}h zLpUWLtzXV|v>*6%O27{~b|^G6VLiuY@A4pndd-+|p~Knef?sr{@=50+x=wS5$0c4} zR-#7ag3qXDh!@?RfoY-(5n`DH>{d1;L$yA26!7cVKwuDiTKbe9HDXUv=?3ttuw#s;nT+40I? z`sS>MOb>;ki~7RK&&`~xqd!x&Lg0&_fAwcn+qU3YTgVejS-r%IId6$B3_BjRr?+ig z@IHEcc|NH0W`O}5!t#FQ-W9UlG5`RC3gcy(NCs86EBF!C-$~{)|C3HYIpkhf7>a*Kc$CZYZ z+UZgKLm$M=EgUMgy^SQ?Kroqf@h4cQ)<=)OVrEUIe+xWIc zr|WEvicO4(OD59Fnm&G65a&Nz*;$WOE5|#V;EopLM_-AS8?$e2`k6#*Ct!9OTsHr< z?sLm!(&UeOWzr{`0&ljIOamT^&bWs81(Zj9T6uN}9bRmf2C1Fo6}Ljwvv3Ps{Ba6V z+o`j^wzGCyxr#gbN9gj6g%QePcMFL}INmupI0(LLI?x>ZF`LNexh)(ZN=|HuI+B(W zu^3L2wBjsquPE@5gj|k_xGbqSGIeD<0_la z+bZJ__Y`fM1>>O^O0T&B(Pat}lAthl znYsCfE;(T9Wj@EdYvT5Rlh{dhrBEEDzN7>X@%KxAFa+gK&V4uYtylf-{bCuV!NwA% zewk-4Wr`Xx*I4?azkBNUN&Qqx^>QRt+`Cm==5XO=SR*U|@P3t@<;~hB=HP?y81LOa zMxNCe=6z-+>JA_LZB!5}c|N_FeTgwEt79ACnhUL++J6X~YpoX_5mv#99@IB^z?l|Gh7(%k6K%_yyAuJl2z?ZDITq zRcJOp7)xfA%eeym_Z3BRrMt!hvtW^-rKM(^!SzSt$o&~%PvT2ONq~a5d0c`QsWV0M zd8Q_*EF|lR%B@#%t%d}?))2*}HXQ&ly4Zcd(Y9;%a@kZyGx=%IcG2Up9kF~NQQz|& zAPV7g9qpHw1;u4*H5G=UMqJ4VhUPJ=zuDnSMGw?ch|L@Ojc_`#ko{yV>HfUqY2d>< z$AqMP{A#ZJ^-ez0+OR2;hhrKEHoLYB^P5Y8qGeYv_kqU|1JB zEO`EZ@Z7n4Ata>^8Fu`+jC`4%75VZ9g`;_%!vuL0dulc#_uIolC;ROJkE`q{ReTDS zXr9Zb0rC2fB&DN;cc|m55vT{yr&o`6YECfN+fA#gWg$;P#^jtDfvr4#`%mdK_(DewAG#?Qw0AOs$F=M->QpR65Oy;|wp5Z6e zzU!;=3o$B`<}T^=`%Q-Zoh3@>8w+I5g|FR1r2u=8LxB3E`)-A4da8$u>z~S^%{}T9 z+-5>7R8Q;Z@pt(4v``XXK?3hRWU%37ukj0e@4V-%Inue~6yTd7>AvpiU=K zGD}%+kl$BWLQc6%SsER!qiK|tKT(%uJu!nyKRCSB`B}PIGQ-5)P|D7n0Zx<1dWD(p z?sMos72LV%!HY>GO`u)h;kGqty#~IoYwy6HK6PGnA$Pd;YyjYBh?*agy)T<4@bvp8 z4*8(pXUgv8^*;?7b_UR7f?=N)$VjI}I{XRvJomjC`Y zM)!a6#=RpR$#Vys&X@^g+oL{+<35f$yg2{;|ycYM7DMewLzPO<&Q@x>@kNvVYg6-{6 z0B&RmXUvV0pEn}=NAi~^42%q;okrQvPVtAWU*~n6WgJvpY0~bv^lY08{;0&V|FMZj zXKzt8g)MtWl->MvF zN9wQ-50l=mrl<5uoa>O6JDKyl;vvXHUheau7XT?SD!9zB^?!PK;9EMs(FjFrWF}a7 zf!L}Z$NCWsKn|oXXI9t<=2rH7q8O#jEp(0w*P+N2W{GVq3;w`v*Vn4Pq4ZQh3*$mY zUG&;a!JBTz98SK@974(f-|SHQ3Hf;6RBfj>8Hsejn9!$(JW+iG@G7vtZ)7oagf@8cF@|U zdBfKHiMB{c=-L+HPhZ&nG!;PHle&4-y!D)Un>?!koF%Q$H)EyX@2`-(j-~dDgJDZB zI%7C3Tf6Z-T>$!5Ah(%LX@PGY|5w$4FQZkpRAXwCkJ=)W$eBrXwrd{<|J7}n{EycQ zrxWP3%8CE#K==q)+AJ2j3U6dRpfFbf_LDMpE-uQvBdgi9GSgmVve*t$8H+VUbaT5D&Beh@Lj+>(M^KZIw&E;hvuIk|+b z-rePn&1LVplVtItPK+mq_9aADli5+scZ2cZWw{V`x3z)i2zR%x9rkpd+WqzUjr{@n zfzZe3N|_^}0IT&@-oS@UV&{Du9uDn)SE?TMlIuAds>{B{Ws=a4;uRgFOSqxu$7iA7GkUWzC>=+I`0d_G)!zm*6W!WL`euV*YL@cMK3Dzb zlW&*ez#p{Bqs}tg%oOL0FXyYB+lAgyz5?D3{WWfI?4bQ_MtiNB{kdUh&{g>6L)ILp zyWQ$W>>pbmDeDra^i5cijq}OZpx-hq7({?XgWEhA$gE>kk3DaUx`K z2AMfX&sOqsky?E_F3I4C%idj-{!9+lqg9wSEbm2QRPmvsY*Crv`Rvg$9;c z%a*Xc6C}JMS^J&iBa@lSTa47WNUW51s3uFzn{{=rqUpQU$odA6iAKOH}Ds=MP?{qIquM4Qald22OQ^#Mog~EslvX<%$4r z_sX72nQW^yjHV7z@rZ<-=WPgKf=L_0sJxTamo&d*S+Rhe6 z9xMGwOTV^h?Ne60AB!-|I`cBx;|%e(IOaBq(Kev}5vet5?N(rMs?baXD$aY0$Hbr2 zGT{7J%Zm7Fl;DXZ{k%oe7u^whFG}F6(Uw=%oRSEkXgewZ^d-xa?Uf_Q0tu6Zssk}|IW8MawR3FPHt zO0@u12f@>ubK(Ig#G|SQn5opTjzm5;?W547EVS|Ca;+0cIH|1<&Gol$Tv~f$G8!Jf zZnEN$w1Ll0H{GOOKb6@RGZX&6-6(qWoM`m#(%$2=@w|yY*K%ytZ|1J5`ycch_(uRm zCQ`aHz@y+h%%Lazb$dZf)$C&S#Cn5_zzR4d2?jf*T78-t_-g3R=m=FQyiKVsJY<+y zcP{enY_G>mhFc3S=i8glY5^#iXycAX)p5}E?#onuYi&NTx8sAQc#_!jZ}@u-+jsQA zE0GO5v2SJ@{#J5Hnh&@B(-@Cj&79JJT@iw!cF0iEP)XTFyNP(0dz z)5?(B4TNT?98#Zo^S`olJ`GX*Iy2lve{%E5Y4y|Qb6&*FIi4Uf;4V08ESc=fK^ajI9PCXaD~6gLIq7JH&gL>Z9=QXL)S8tO(q9ivJ9` zeTXQiG;m0r24ZVwP?(L{WaA8@;_Po{rHg=%UyKK!IwVp~yjT!Nt;^IX^OGmAKllqB zw6hqm%3hjB?K#Vgm-UL3(AVRcduW@OMutn5MtkQ+IA~HO_h1c?R~V_8c)+5Nbf$6_ zzYBi%yILw^hoYuA$MqH}#`NoQMp-~+(FB;bJ6G(tTr=uwG?2<+F)ujshJUSow4&&5 zb3M*kAcp#1LbLX#=unx?QQc*_sXCFB=~o9E2DI3_voOK1U|17Rjd+wVjo#kh^e{ zc^bZEt@)Y!V|lfQBpUji)jhIW{8%S=(2 zO!%&`JCtbx*IOmwy_kpQX5zAc`_=fSJlpR#fU~;YQ@TK0hE%}IJ7_4_ZB31v=z1k5 z)s#yp)byvaQ1RsT$F7WQ0x*+=m#2iOWcaa*EbM_n=*AW?GTrZ73;SBBR=>I=-+^*r z;NJYmJIk^N6Dkn&g;BtD{G$`KDd}8U#j#ZU(gy}~mIGZw#2<1g0-0w~v15uH-`tw# z`KpL2B`MTRExRkcO_)@up3g>K23DSYZ!h2qSa7ky3jinL8AUBPjQ^A)F3dE8`FhC4 z^iV%P7gP;zh2+`JE1nd@qL$O(?H$K*cx6eJ=dfjcV(%EG67AtX1&Uk#icn#{_uJB4 ztVpAK+$K@MJ~-Xi*XM%8sGt>246wVqLiGe~1opgIUN)qCI1jK_KkudK$lJ&n8H3ec zGQ-6e)U17d+?>sKmAYlWmtFN+#o2&tl_MS6S$mv%_BGKad z4Zl?lk99F|Pn?JNP2z+Q(c*^iZ!yx*mo3%~QpxWU7d|_b(bCoUNM=7P=C5xhO&qMT z@ZP$wm?ReD=M4xK{35A(`99{dDmkWz|FSJ5DEUD^2Dn2Y9snofe#k8_71o5VN-ID1 zljQR~F^!yhc1ii`AQMK`Y149*+u}H-Q_Rur65MZ={70|;_#QRZTk7o%zS+fw!qcba zkOl=Oxo0(8uyy>xennl!ke(hN2YzsbkKr$m>yY`8K|>-cf;geHQ#h`Hj-(gx)p}ElntdCnC*XsiT^8PrU<`7GR&a(unK_eVGG@FfUEZ^>y)*At zmn4bMZ9+dV!T#TH$WeMTDZLg#`T?oqg5%Rv^3F6I$YB}($^SN6GiU4+3~1r0U^8zd zp&n<>NI5N|pYHrmlo46*iKG@@s2%~pB-%z!{4{pWBIN!hTOTG(o3hLkICp7DCN%gD zfH zUM?5l!7YXtNxX#kpj|Wn($YhyxahhfVmsYZJEYVj7fB)R5*m}*17e~bcFe!cc=hHz zA+pXvG zlvxl@9}R>N*y;ue=sA`nFDctaPH@tATsCw+x`0bQ1sdsgNj~xWR@JAUxy7rTz3(wR zPX--ZA_MGe0vkC(XLu{cI51wQB{3EZ_aJfMh| z*^9<_{~Q;0Q2pv0-dJ&sp|a1SNdpbMxQD}>pmCFr-d+;yDi_P)`6>`oXA{HKhxb$; z(%g8{(sd*927{fxUZm@#P;bk!Ds=-H=f|q!_!82iC-hC^s{{?dzf9fVL*24U6HgdF zwEJq!Nt37#beW&{7RQE;pNH>QBxSP=-VZT49r&lZF&aCu-}ztw(tX+BbkW*ET;HJW zQG(iB;>2vMnV4E#@V3Q3EV5y@M_FQH$P(;k%Csz>VDm?$%;?%LFyl$oO^reOU}6g4C#}t z@UMAh@-@I*pcl_YNl+I1^2-drFYTc{ukSm>AX>L9xa4;JtNYJ?tUostoy!{2KZo7g z7FAlxz(3mY#7SQKKA0iml5~{AG*z6RT=FTjX6MOEevuK0e4)-fOx(8zu>~z=*g z^rnSqP4a#?g8)L>RQBtvf@}!F-9y>znhh=C3^4gnuLB_X5aM{4H~)g22^{WV$IpZo zMo>$%1Ql8M58n<>vNlP6cvKgfN=icPA)9ntEez@-wvj^Z{$HJqr`BRF&YXOI*V9OC zP?WEIO{p%Bues9oAmgSJM`)*%mudm>p`A?PW)djW-bzyGdlE{w_)zzv{N$B4N7&+a z6HRA_^5}}2R}Tm$I)fL_?g=|0(Yijgp}o5WBW)Iv`IO|u)`l3eUuEVFdi$BB!?V}E ziFam#HYxVx^t;-%qaT44cN6N((-MT^(hiFX;UHa3o*PvGN^xsT?OW4PW{lYeoW$gB(h7@z3nsox_9l25uB zdYKa=#h|8YRVp8Pr9AIvmue!kcu{U+HLbg=+al1ZPPR%B%)0+H{X_MuTiyHTTX@)c zQVb)kYQc7)KtDJB_QT!OxoKxRXvv(R?=79RXabNmggV>|+g{x=QQV4Wo`-H87EK^G zwK7x2B^vC;bFO0<%9416V14~G3&*sL1^bn3y>6j%3a@XiFE>wq?8j2C=$zpmi7_W% ziN$Xmo@HIYU2zB*5aC?FTRuea!Mj<^RdE5LHr-;|{A2P7I?Tm-n|_RT*~pLCN0!q6 z{;}SQ+jzhu{O@hxQj#lgr)4R*sAlUbY^`%b9hYyWVCZ_X@J%JKPJg8g6gCpyrKti^ zDaZA1Nap`YhsX;?--6f0kd9-%Od_W$+{QU@@UfgKzSkE7{=Z!Ce{lE^jB1)ebd5Zu7rNXKEL^7pa{EnLK%{aShn7)AA@ zo{MA=GnwL=4MUHuv)tB5fNQltwq-+nWG1@8_{+MMSz$SuEQG_q_gp~tCj$?(HA6Y! zfZhp~b4g`eFFDYHL!HWO1$i!T&1Zt=*OTL%9eAH}BaQUK|NI^U6bms)OPsl!ACa=e zuq66dI5L!0)ix8kv~;o{9(20Q5NG=I&rQPPWpjQ|({kC)R7(V;WYzGb#IX31aJ_T; zt*~D;FDGRMoFgPrHQtX^MEb1DCWz5BFAgTClF4qA7tPFCs=+NO7O~c|q_(DFe;0;Q zyUd!vhmVl&QooY@gN?@+_S;+$R$6%_lYgy@N5Cx{S+$XGJg+^+RKNZcPfWL1kn9U<?j|Cjr8D$Gh_c7Fe-T=YzApt26UY{@ zJ9yG>|&4^uagd*%21n&3Ti8|Nf&3H{Vk|FtSGN2>|# zMdLQ33UV)|s zkMYHB3%D{KT54MPNLA^sY*pS?9YagcOra?!U1Z|4v~3YIK|E%o5mWv_WfpFCF_oK6 zQbX6(al1EUd?OZl>9@85#nWi2>g^J1P(@2VSy`iETYXKw%_GJq!c)jxqO8(;D+V|3*(A$~`K)r8-`T*FE^AI~ zynlDD4E|1P!K;|5i@@{^lJ3^EcR^wGN;sRw%-{ae)xt8)!DB1KU@t2)Tg!{l!@_js#oer4 zt(M8a(V*->FX!k&S2(jSq`cblFW`OrlKj;n0sg~*25tE-C47TRId4e^Ne?(k+!FbG zNE1K*wEfO4VGp=^wxyt|-~o%S$L4_HHXDbe@Jda7gmV%4C$u!eXfCg^X=9aV*Zv2E z^tBXtD9l2-k5*|3#~aP@gp*O=k&iC(hu9x~oWB4yUTdW)2;*=k3{?h7WIG>Bp;`FJ z$e_Vkb{5#EP z_$M;8K*{;W^u1`nANp6+#jJLmzeB(8`5S9bbwyN86Q-}o1~p-RU>wljwoz0JBU=PT z`(^{ydpFwwkf8jr#TC$EHhhBq`BWu0a}_YEKTxQ3wcfvO!jxW@=-I%Gzcf0|Bd{-P zwV<1UdgRn)Y3gxo;)KO(MB8~@jhOJO23$KlKSHGJE!EBEKkxeLzN$OP_Le5NO?^4Q zbws0x?iHZKhUU`izjm*Z*b2BGiZG}0}#1zwnv%)?m=Ppei`jR{bS-=I?fa z`|t6YtD5IkM!qWiLmyqMsZD)LrmBQF5R4&j-Zi zu^kzw`fSwjsTKt`fdO0?ll}XXhe|V+JA&|vk8q>T2bskqcmu?lySQ5GTOj%T!&LXp znVLCV?!(2RInup!yr-)7VH1~IaLj?L2F4Hn%XUkO)oHA92Ll54t-K15^w7hSx&i;p zBIDR33qEI7^Xe3lBO~SnCk2xIZEx9>mV_0k-!XKW7{l*&vH{cHd~_b4G_rvlC{9omiGN^N9{=In2vxoFY=dx>FEv zAp#QyYtu@6pu1YGO!|4}aNVco8l8_T z1t%zD)W*H3z6Mq5?dF+N68IE22U|kYRU%|j$Ki>=xFqlw2)%nRpOy+fKIoT9hTbc+X^hklj zz;x%`=wZ|*&UZFqA8GaeK@wx>c?%iVd&O0u=K|-nZwz!6tfn<~OpNxJ5QhsSK>sj?e zM{y11+U0lTcb@C2wUOFtV5Stze2;*~&LjQX$8LYVphl#*eR08Z4bI`U+S`GZns6dC zg!k{HEHB6>{JF-z1DSChK~~^|D%4~yI=W!``eysItM}syqr$_@D39Y(YBYQjHDRyE zKqddQdl9Ta<%j2q)v(+{3!l?%Na zt}~*)Co)@1F_ZW1vG14tk-IBOS6gv6fx5fSUp!+KCk&?gl%+#@FIK~)w9StaF0@-! zUYf?eu8B^DgjI7Sxse8X8!#S6;L~5k*f(5pTQ0D(;plvToJUvmIar4OP~#uZzf~7s z;)yC0z)m5 zX0G<6ME|FK-R@kfK)#k7R_zZ@P-k?BQQUSk^vBYZ*Bt&kjD%g!gt^)%M)li~%v%2RW70(eKNaPo{mpG#`}h4|LNUl*~CKH8un1RSVuVaGgK<4IRJuL|GMcaNf%O>F(_u zu4nEhmDZ;h#GDm^0{+Wq8gxvLPS871ZVbx3XHYew0pDraO_Hqp5XU|nop@hyrMarr zllEnMhDlA~Ut?`S2C?=a1Aw3AG2n5o+Sj081BE|k9AWnv_7Ad6iTyJ%vxd5br&J0Y z4Sp!Ta=e5Y=C()-r>sc)q|}8cPIX#Hnn6lms-}%ZL_)Nr99g|giY}G%j0VN%1vk+( zPQ*fUFkU(aI6Ld)<2F*kGvMLFe#&*m@lfnt8|5alhP2~T3p)b^A)X2MYxc?s8_f3Jd zW~!*-M81vipz1+uW=$dDK?3$5AIOju2suooN#fM(D5iAuPB(p^*@uj$-y%>=U=xF< z+1UCy)S(GwX(t;@1|a`PhO6%ek|QvUUqKNMwzhm5;iCj=l!z^Ky3_QmxTj^LY$~J? z2+=6ZjHXRDlbdGx325f$naxD|aE~Ks3l94aw6#=Q!j`x`WJ%}_)ZGWLTFlI|p3V8A z{BJb)MH;D*J2n-I@fsh7l$bG^Y?byq;wBiiqY@hTe)*$JMKp0t z?vL%@Hy@byD?)SNv%C=p)id4f2$u;sViw+PR4j>V77Irg)}t%qvNBiBzqd7Z_nIXG zw%w`g8wliLKV)v#>|ymC3@ipIrQt)r5DkF&?a*TXLgxn;9&Mhcm};M1-; z2%!hMq9cq;n)Juba$al=)+4YbMD1*%xB|Ci4k87XnbS z9~QlltL4;>k^aVCYgnQ^KP&#sI502K(V+Bl{iMi1J%~o-ot@R3w?g+}T?|B)xWUM$ z8XhIW&j#EYB2P{FCZoTQC3{ogv;QS?P|CDlcyTobb8e>T z8~`X=HKBg@gp0-OT*l7$EoVm!@WQCtm@|D}4Se`{?mFTb%BccBP2Udvws!Z;SBl!q zq@hV(INruF{pvl|R0(ZhTmDu2L(*59W0QX?T%U^^*Xv-0i#5gRrh<|NGuMCyx}wmw z5{@~kduq47SS2X(vx|{T8y;Sdbk-0$fmTZSXj)_=H}OuBX)!M|8&=vq?>TXgr{SIZYGaJN6o$?Wy^QhW&`c|_kDjc|2XDYm8Cvu@32Zb>qP z+%8{VUJu)gZe-%{tJ&*6!tTW~!|&|Rjzj~U#s5tk_;-~jE+VE{qiGy>BiN-$mvWR< z$NcGe^CK4uIeZM5&C0|soT^jABZV#LLP;gqOxP!jK7O~swXQ2xj7|nU<)tKO@Zqg^$j$@^^OY1n$~O# z%*{lWEyQOd`i1Vy*u960Wp-N=x$Ba7Cu~f1d*>N}64}m|B5s)dx#?-S_p(GW^3cWj z)aToLP-XnE5XlMYk*fsP8oI=bUYVxY9~&Yvz_#+0SExrl22Cc zzRq>X^AaV>SDW82r;pFEXju6rOy|N`MbzZpU-#Yqfpa;PXr?Uu(rQXM{iVdZknnuR zW$)EOFr-(o;RX(Q-gIIy#yIMvL@wxN$s12e@;Na^BLF@m88&;`jU`EX18FDlI_e1q zPu|BNEA+0HYP`vHF)x4I;s5IOHsC4Zh!#IOF*svmR&gQ;KWx(h+0rmjP|t z2p;m?_uaCc&POZ{^v_c-zmK7HQ6@`P_^@x7_20mjyyvHqo|7Ekugc5=G;Cf)w6Snsq^kxSIwbV7&5}K z$>@jYE^>Dm_H#Vk%m`!J(iwaekKrOSYKq~Ug@P{u7!HKSv6sMAFloWSF*Y5t_U*DW`Ty%TnK>7<)Xrx-vg|kYN)hQ&7{?-Fey_HsF<- zyYqAWaE=`xpJ*yfEtbk%)^vQR;Ji&dGn{(mb-vtt(K93FjS{N;y6y0{4-ve zp_!7{!VT@@Ix!v_%>8NDDB4$)XoZ~9LF63yXEY*#&BFaFn%E8>Zyrrt|HJ7+-J_Xn z@v}QOr0)R;bQ%6v2{Dve@GEj-US3vkUWYcU*|Em=KO}0pWSH!0JLh{PMmHVy*DVYH zS)d#w9NtyH4F1z)aXO*()(|=_9}hn9@LH(;gK!ojWIgS@O6iIUZ22JLna~<*RCtA- zvS70)%v;bd(L2S$$WimbsY_{`DRYC3opku%cD3_@r(u?JeMO--Uyu9w5PSsG++sV6lyx@dTDT8cBIF+;-2=Pu^&rI}xv0W(Uyb<=Y)v0iW*^bD z!CoEY3>9(a3=rtPfY@9z_3_CfJs3{(Iz3dIX<8q`>yONlu{C&s8^);YKM2Y2HW--{ z)ftkV=z7u%JATahS>y;^i5Ug;ODDdbHIc)>-G3=h%?v9~}` z-u+pp{>~kX$z6i0#=-cf;y#&0bvYxn@RoK}Vc&^5F|N@kd0`TXYu(VDIK!FAS?St{ zO0K!IYJZb&duzBYD} z(;xF7r5ja3(ig_-7pr2rQn*Es`_(3#x~fdkpTHBZ)py(oLD!H^Y$Mc&hm;(Jl7b5V zot+i=htiJ|wRoRPt89Pt1$|s*0(kgMZk>dY1s|aado z=Lqz2uiL?fI>c`HNz$1;f<%|w%HN9SgxWTnW~wYSwt^@3la{r%S`zoo6B?aM!tNXw zFhhPbH)84aC<6Tf$4TUUI3d^$3p>_0<$4POf-8?f;?cbdKHv_9f#_WkqH2?m-ocHT z^4lv?mYm#$LorqB5{94<*ABq?qcV6KS7wpgH)%BL2bM9a@F%;2v@-sM&b;m<+#^%) zfwS!oL*@suY>|7~R>_9F;}&=R5r-eOp4bb7$YKtW3D9HsrmK;GYJ%+x;_t|P(-#xs z*gD(%+^+nN0Nl1CGIhEd?R>tXF7IY>2B7+T$ZOD-tmE5xl-!WHrls@2pPOKL1o0z%BZxgaq ztMbN)o3^FL?bf9X*ICJX)$up;seTLYSWRhr1as@=_4cTgputYfPUy?7T1+BL^cDAa zf-uXvV#fq&L#@_6&UE%Luk!M;PsP+R!u(fK{^2%idorLUG>Ygw@21Pyvhw0-T^i@k z8|e=FPkOa=``n`!K@(EAfV5Wyxjd^N9apLs%JQk-0KD3Eusjibn1q!)#ppl{|T?Fm>8zO<={fbTMme*`oStC80Mz^3BNQxNp;0 z=AgLWZM)a3sYy)UZBL1Jc9TNOz5TXnGsdX)Bl+zGhg3xYCe@*SR9E!sG@&TC(6=_c3}I5B=u2_OzZ?O(;p)G;S#ZK1GMd zcz5tGpC5;`|GjKMxzP7YMEgt!iqd+T=x%jAny*Xk*=>R(>$3QgF+?GbaEgdk!`l9MVKgv1wVMjO`&}(>IW2L9WGkLn(in%}9!VrOX#$gN%ldDD<9SHi0G%va|?oI~1y(Yb1+8(|t48hKNTl!61IR0Mk`y+_ zgtk6&cIHaMSA)pwGu=kv@)%C&9E?J*tIap@$(Rd)?*wneC(L7IKxVYjsDKv89PJ+k zKbD^dEz!tIjPQc*0HK7V(-F;~uqw^n`JFJ4vcs12GY>uf)#9435QGw{3i%z{CUfie zv%i`VT;!f;d3tJ+ru0H}(^!yi>$5NZW;2!47VUV0PtQIA*5ZlENqpSwXYYVu2hjSi z3yN~LyQhyNhiLai@lp()>AbragsMKjfUFmd9d6L=5iV}vlXdjB3&l+9am-g79}a=K z|M=0C>VI0`#n%tY4y_y{93MXTwCd03OG*>^z#s@v==o&4Q2EozcdbOIZG3)E3vXKa zXAOVen0B8l?|58VA{f^FIuuX3;Y@tIy26LMcR*P|y*2zi{*E0Q)mw`5B z`;+BXCF#+&yzmG8yWbaho%XLbj{*!vZvhSX8I+7*o25YI8#`5hAN+{iZ{3&V*I4r3 z;~l>)9%`ZBRHBwS*L<^BLrsQYZ9^Ls%f-=@vo{U%&+*KW3AFNc}Sk5t8&TSvDzJ=-Zq|3} z`0Bg896d}&f6)rxtC+CwwfjnzgNsZU>*yN{v!goC7t#({Km6`G8IW|m_{iC1j$g(@ zc8@XpL!)R4SasY_wfl4_DIW7Nwp&>!sb10MXrOpchMn`1XuP-gM}+cU`%SF-uqSOl zK9fSM=>Q!{;__ozJVEbd5yIT>VfaWuZC%k-C_sWR5}C-R;#rvp7pmYUce$mzHd) zC$-NmB5DNjcM6DUs%l}dp1Q37$d7wCXLFPDiv|h0H=}xQy3c%E4DwcD+di;L=bD3x zrW39Q_zoP*&a4Qjh45B+oSg7yhc0aeAE!+WtxRoHnM{<2{hWTzMU4zeW_Pybr^QDn zTtcyv-n$xTEWcdwO2Zbi>D-M2 z%BQpqhpYW%(ihQg(qDH?U!%Dgn{*#mkbFBoCn~j1b)=HMn9gANq8Oa&3I#p4SaI?h@(u7 z|KJX(y*3eQuOu{L^I7S-Vq2C~Di5&Zgl900pVzX6V;Q_EMqrmKp`9JkP9(5fs+5}!QUtY-n=`zGMp4Y>paoo1K?9VLaH~KImhGsPXU8FW^ zK%gv*%kX^E(0Y6_?HzQpMPrOn#P8%E-DJ6ay#-4#0iz<0%P_&-t98k^)kAGY+x03< z;)jm@F|NLj5DU9?`>M77Qm?!pECyz3eo6F%{-H8(TI&&2I8OJrq8T&I-WeF53kgZi zl;DoPAHnJ7fxU14ZBiQFXlLg4^^jtQ6w65c4oX372(fjQ`3i{I z%oeG7w&t%o3@fwBdMY@gDYz*3-_itCkP+1A=h-&>d3fJ)^U)fuTW!;hz2DVVuQBR% zuoUpDq(*&5araLXGWW4+<}5?|#QUZ|u7Q=^lzPE#LuwhBn?bL2_G_?X%>4HwOT)e; zN%KpVl4Bix$)MZ29gFqw%7R{Ij~>g!^iKI0OwBj?#lG70d|{>TkAezNci^5|?|&yu zZK}3<7tAoW6EBjZ7e%rAjH<$j( zj*d-#^Zyb@O5*FDDSIT{Im|apjm}ezerzrkV+%+b@q$rsE;R#F^o^p3%qswvSk*3? zTfZOLVD@j385jNzYyafI@a0Ca%2P>O0)#d$mO@T{H~e9FpW~*`4fkAl@=~b-&I9Hz z$OoXOJD;9gy3zR~CpX%o(ZqOfgwG@bh(bUwU3vie%p`g7T2YTF=H2e@b7@a4X8 z@My~HZmaqk3o5H;ZNf_Z26Hyi3TRO~gG5*@9sQyg8BQ)=9!+z2e5l$SBqi&6S4~ALMLzAS)ONH} z^2DRPurDGkr|$wQIG(nfR;o4&NkK%1nAv_l6dt(f$+d8Mm9kDYNEG$nT3wp2sorVr zj^|9GiQ@>Z-StyF(#r-@M3*V~z z$!8L2y2m)lt)YKgnZbhWKv}DzwT?RF%>BA9=l1wFwh2xto~mm* zz)_dbCSu9%i{L~p;mvJ&p7uUvw|2*f1&t*4P;3E&1(7*L- z%P|+1|t7xC2<&!;(~knU*2dCGv)SCY0!u}H2aI5{vwZZ#rX7kAxP-21mokEC-{Jqtng?^gtGQ=y;#0?U}0(y5$ zf&^h;*TNuOGpkr?QJEM0EMnNL0_)y%<`nTdzrk%P5*aEEigi_|1eWQNm0io1Fp=I%%AECUHbuN46QCnw?dIy9uKJl+LH%Bb zIRJst>dtF_dXcD*vizY+g7O=^O?1<*(ND3jpal{o(OomfC}y`MT$5FLz*|hCxJJbH zT##b8b5FGf5|r;}|GiveJoW2x`JAEG_qolz1LR?4EGF}aBmnWftfz9^9o1>=$sdvb zBDFMtm%=jHpALJ?uAZzC=IPFJ64F!WvNM!!0bNNqUC zX5h63=EV|@EVb>jL#t;Zar;gtE8B;sN%G)pz1?Hs@@~O;Z>Hvck%7Rd&s`SHotZOb zGb%qm()F6JFAD-uu{W0fjVKfl!1ZlCun^c?U8nAN$C^U#Yj2uXDIZd|4)bKNXWsQw zumfNa_@a=jQCXpV)qSs}%tG!0thIl8(|-oAgE)-e0oBj+(Q69FIqX?V2dGIqXCn17 zE~aW4F+2`wMz;7AHiW;)UlC5fAapdlzmiOE)auWCP7)tcv4ghPVkNS(9fZ2p*C-*( zdsnvjOZFjW>)fz1<_YpQ3p8Qd-S6&y3 ze|4KOWiWG}5~anI->lAsE7?ZX!f)az3ABgA3ZmF5FM1%W3{{{|ku$yIH^M7}CzB;h zbh>H_B>=7-^CT0IRINg#DyiTgG-eM~YBMNJ-#2JA7OL=vvB{KoZse~P<35FMiO^Pe zuGZ7eJ>ytw;84}Y9K6gTJdwyGhrIIVvzNEJq>vrgFVeE1vg)HK0z4kl&-eGiFj#3?UH(K4>DctN zsQe0Sn_*O?%CN4AdZbggKY>@Ce9&JC=LXQXRAX#AM&aX)h6tg;v|PM z1zuL0?ja6G2%zU@7r&*!4*K@zor4DF17O3jQto-FnR_vA;rpXpKc9u+F#A$^oN&{- z&BmXRv3bBa*v!`y>(5KRWIU_I!?(X~^DJ3))tFNS5#&1!&Q3^VQ&e|Yz3++v(Ef?M zHSUeGx7oikWNJl~6ZK)48n_?};Z{`|u@(!T2il@B&QhYccuu?dXGoSaNDq90Js#{k=pAx1qo(?uiBZ~NH}#tI@q-V6`jQ6Ob=!-`7SRXau(_3fG+zz#6+vgO`qP9= zo1=^%W!qLWVqwHh-1Ua=9QsOpng3~rq|hux5ure>m=g)-6e%Y5uxKi;3`H#o7VsRi zr1;f;Q_h0=meCdy*NuT~GVRn`i8dm2Wd-ely<6%}0h!hIX}XL$7iQkiofGvP^FZ-+ zEixlDWA!~wnXfz%^sUgJDX35|b|1SbT(I>6I(|@(sJtx;n$V~TyuABSLF-E6s2&$f zpbm2-hHGk3;zNtJ<=dYULyd}By3T$kD?|^Q$Z=u1s|Nj~B4gCwOt4*?`PByx`(8`r>rWwDa+ELP5SU&I|hv> zDefw`0wE1jB2mZ0Mq6!V$ftBq!uO7@-pRH>eCr$hTiRR4i&8U+QwMQ{cBQ;S(?d(~jRuTM`& zA7L%9W?vpID!4>lBvUx&O$F~a!pLjQ!>_Y@EyzhbnkN@!S-)LsqM`4XGZ)n=JPQe* zJKd|IuNclYod?5PLQ*iGcN(5yciyk}XY$LwQ2z##ca3@|q|PG_ByP96Dr2AbI4;yg zvOC!sl#fI&Dz(>loqs%kYTR(X@!#E7DX-RN`XPD)1xF1MPLz7w&rW{n#8A4xo6wtMZ2 zB>p8qW9N!RQ{i7+;e&3pS4O)g+QfLbPa1*cR00~|VoE{Jq^y3X36%W9eD~)Etnk$2 zZR8D*v^-X9t<=&oSik07>B?4M@L1yQ8LmF(+U(GFh>|F!TB}sQyRW5NeFaI3W>2101go^XUCc3IluQhbcK?hf?|@H1&Bj&kpZi8F zYajBsw*S7AH9o+x{7TpYFH!>=h=uc5_d9cbBk|`$9yHNE9%Y7Oe<^m^2ugV1ASnf7 ztdp^lbiKAWuYrfsW$-v-jLFFhW;AZEc!cSvuZXRt4f6N{$oSr^8Yi*r1`FmlMi?72 zrQBtZo2>!yxdk*oLUKXw-UL1Tm(_L6e(RTe#6z6}gy)dS zCqtS65FqEA60(zN{X4%tozjRAY@3oP3Q z@zmhUl39%{E-4Bu%YQN;v|IxbY~tD_Z13IpQfReQ4P`NudB{do&y6bD%n;cHiZEA- zS)d97`Xt{@I%97%H3x4M_^Iz6fN&c^XQwiGi-EvQVv5Y)a|l@Qro>X3B>p}`nxn1A)CsO{W)}@q{h6Q%! z$(a99xrHCBZITzka+#~-yI;6Cce#}E0K3%IiDFVp^s`XKMpeQ0UT0KprfV?AfdWSO zyS<2myWYv;FXsj>1tYCnwf!zdqJTFiZ$To^>6)E#Rd5=DG?Vo4yuxF%j@U{)91$eh zR^3o2xm9Xh1IMgTBWr~D z2Jr9ieD6i?x!i(3Lq*MOkF>;YwiM67E?y?3-#_JH7nxq1v`4hVzAPfl)loHzCkyOL zSO550y;0Pd-?G3>dHMYN4HhBY72L5e%&DtD5Bt%XCmwfA)=~c-kbC0j#4v4IQ|TUC zc@E$?LHNH}`bP=Pwq(wg9XXhs>KTf=FK~US zzijuiiF#+29=-Un$OEDuB(Zv6A;qX=`Do)hUQfKzP5m;N%E7<6$6^29BB$z^Pd*#A zVw3mDi$VQ!<22uk9fhB$!Rb&O$b{X^9oAC&StcI**$i}Sj0&xW>si8ggH5;ObeU*M z3|8Xw%iIY^qn{EQWTNIG+%B@9Ag9$#hekbtH7LA-oUf;gOiOIgg=Fu6M!Kn%6p+8P z7(<432Wfd_cZO9w=F7AO#!nwN&VKf(I~wyJJG|=BWEe2l(iGgeZuo-HZD7fR4Rl;~ zpC{GMAB}#@7ul6C*^#I@FP6N?G`3Fd@5_9HSM0sQv1#?iEc|$(&UX+;m4l4#ni@hM z{vQC$Kr_FoFRm|jWS{Ii>oF>jA|hkEZ`XtNIayR!lJ^OZpC2QQ+U3Veq^iuRGn+>< zzozX(!`by@5BTDb(Y2j&iLlINv}u56(7$#pt^_aVLcE-xA!^-wec~z~ox5|XL``ch z;Oe%RC9sf<+?`XX@VR~Il<#NxiwJwJ#@Rc?NTQ+ONA`RV?cSAI6O);3a&-QhbG zie4TVkgKnu^}70sLlm!90dkFWa9PAR0qU)o1&}FDb2hQ>|Ku^nuymjj>zoXrXK?x9 zw5T=9SDEgU)MyN5^Xa`KL_N-RamzQ*`WL4L^I(`L!%JP5ZI8dJ_}Zm-Q-01LH5Vi5 zjD0R}bPLz_YvkWJ_Rv4BU!v$*-3fG2Vw)D#g&SQ5^GekFZ0CaPa}i$iSVYj&fNXcT zB}vI>Ixmj&4kTU9WsxQzZpOO2R*p|!e{y@JpBR{Y+Uepa|I&nI{v@0*iQ1pc5orCU zwI?k=kWG(Oh&4po{3!^b4ujj@&S5V8aid(exO<*+BcHP?&{$J2uQPqvt-Ep7#r58y z<@!g|Qxmvfur=5R_jzqzYuoXcBIl|P_&LrzfLwz#+CP}Bue_*@&=Q0!1o`!M@nzhl ztjyPU=DTq}{Zv0H@M*la9r)%qzxm+czqgzDoWl9UF~17nX}td(_>j)+S8=z#j2|`r zRn+;E;|J@&(~tiD!TR@Avwx7c%Rl^YU*3M}-~QtVCHsRpJ-v4J1FfE3yWTU@eBi>v zEziBgGP1&3i)c}u^V|-iLkfcN{CthopNDcD#+}R9UF&+xZc@!uQ0yv(1b8Rc%1()l z;Tv}FcU`G(VQuJQK9`Gt{nX&PmDC?h2v(nYqOAJM*G$eA{&ACNMz=an>!KR!22zT< zZ;CsB+RE8n#!!HC>a*@#F1c19b*!b0_>SGXT5mvmzW2M*q`k!MZ^~ntnwNUr%Q`gI z*SVpt*GyLDrzg`{>eTB~ePw@~?M|@WOK0=w|0uv^_?F0YXnLMp)Q5lf+E_T?hHnuI z&82>&3SWNdkj*)4BnG2{%D4%oFaPqnm=RJGov7{^5&3;qXD^rfNiZXKxhrPv>da;A z6q{tmoH@^ElvBXf&pmTd)8pi-?@U8q`O*I`ZXdZ9AlInqa;OsdTC;mQv3oyM!0v@i zR~hF;Ak_zZ5f;`xJ(BePmvf$NV(oipN=Sai^rw9M9tcqx#UG}1<-=Q>+V1(GKlJn6 zjW6}%*sB>KttL$ZbDhmN*Fd~wIlO;&F4)j7NXnY>ul~(&m6L4t)I1mM>5;O!R}`zi z-am%CX5Xbbv6gc@o1(2J-#fA|HRslz*zHFq`8`G2PM5NrVF$bOXYKwai5$^}*qT$D zL%z4H_c=1d^^^9+vyb>PnShT(m;QG#Gd$<8LH=$aGQKmDbA&y$j#;GeYM(&tGnbb9 zYL++t2`%iDySB$Qd;E{duAV+nK=bI|p?>doF75ZyWAt2&x6y$-;O*cYXpx)B3CrZ}Lx- z2;$?t?Q^}qW%p=||FSV_PXCBo+rTWWqu+VH-q)a;eP7Ox6O>ZE)*YAgGkkNnqoi$t z)6?>1zUGRvj63LMIa^x3uFsifqTfO6(qP3_uCwvw)VBm?Pm1^Le20>&ej}CedjDL( zzGq6_o~K!IG^b|o#kJUSY^(*h*uq}uE)Du2*>cz1_;O%OQ>eiG+vycN&I!QLzxdrB zgj#JiSu-ZV@PRp()}7-42{t1g>FRd-#xwo@slK^rzh8{*>ZzeeF4UFFdsZyUiSvo3 zSNie)t=N?gwi)X)aeyn=td{_!COZVYKlkVEYzo`Ag`OGswOu88jNUZO-QCL7oSIz{ z*pB+NzQpQ3>S|9fHKBbs8o#)wzT{BEM%r=WT-oHr-@SbF{2Q|Qx3XvLWQ|xwOPaO& zYbDs>mz|EVDoOp5nQd*|>pcbAA40$zs?0zckhR-?h1b zCFk9HFZE9~vjOMoW;CxedF+B4_`v^|Z#YNtnAM*^_LqhCuNx0N zT*JI+4#$oN+qb2jna~dmxpx}#)3N$b-NRRs1Wi9-kDi~Sr#rom$SN2^vB%G^VkBZ5 ze0=R`=Sd&`+_&@ra(m*f`aVC`H)=fB$C_!Kvd>;FjTvY53LtenI49YF;?ozcUDwn> z1>Ij~e3!8cusf;PbTv1c*g4Xg)Wp@vL-!|A$}^A z$gG*&f0|b8PO@BqH@}oEmvfW*2bmPju+LQG(*DE0pfV(QpMI4j0mqVHeN?q{KLq3H zJ8|FdyZoVjSNwv{4mlkG^)6?(`Yz<35WP#d`&Jm3W zHTDA(;;CciH~QqI-ZrgZxaxI1;ifcsya{}INud3!f2c_-_+ra&`QB%|sUddm&G@^g zsUW!%o31R~dXvBTP(D~)$VClaQhV+3Yw|eYSx-HwaWLcS{?YYl?VVR8ifZpZCyM2# zn=8}c><8QAYu*=33p)m)T^Rq~!^Y8|E4+m`JL%e<&%baa7u}8xcBu?r{zx?2q zkA+9|q=3lymI&+d8)x(+^?ZCY>U0 z54lg4aOTy2WA*kUY*kS3NQv&za*gjnuf}ijg1gWj-6k+YT=}Pe_3zmwS;;+;M$V5! zq_O!GSV?2FKvsg}{2awM-h*LQJ8;!x1s_VcaOSU6ee*_Q#dWz#9-9lom5qLyg+Gp* zpHfoes#Ln>>Y6&TT6t}F2iDu{;!;>wdzLkeu;={RO|ArUXM?r2-J==EoS&=j%FkB2 zUrHV-X6_#|&Iz>V+`h{wQFHb>_g*+S&f8hU%|D0;c8M(zKW04*hDz_ zuYRwF&K~(=4tp1A?bVgxm^y~D9g2DH*+I5_^shTJuOj3+hN$a4Oo+CZE zoxgKqqj_Y!ZifA*d<*jv0Nhb{hd=y>V)PCHI_E#mAKa_gFH;lbp=L{2q+j7L0Kjf! z3NsqFi*R+T99Fr1%auCtyRP~luoHOX8srXieVJ3db5Mh0@-eUbSBdfOW;CGLdz1p0 z(d_Kr0-eP5C(CGvpYtP7iWr@|{VwvM18yWIJ^A$)r{_f1xpb=du4ZxJtr%{-=JwgW z5@r>EuIv$9D7x}@`cQwI5ZM!RMqqN-7X?R#Uoa8tI?F5!oct1KPnr3Xx=w!xM|z<; z;!WD{uV{W!8~%*e)BV7%k9n1!jXBu(NR%;6&a!>$Tx{2CZh%=0bx%pESMocX{Cl^_ zAAfP73j=Pro@WE=T%P$Ju`lOr>Y$JZ{v@pnI3|6F#|%%lX0YzjFz1UA=i-R{G6vuTlUiOVf z){dE2c4tI7I6tzLlrOM(sc#_Am)XeIa|KSk>VQoq3{IaD zk=yyX&IVHdnS{nSbbIiJo^H+7K)NQ@ z)UdM6)(o(qtt7yduYGsPUdIO<-#QcK2i>bN>3H&6-c?52YZGlHG3~mxsJm934;VKqCzQiUtF|fX;<*9(y>%0?p zUUEzU&foPEkja^oKjM(`LVK|G&1T7GmSQ;%Y(x}Z^7#d3@#8f`$=@8F<9FArt+h8GZR=<)2hhC8Pl@pb3O4ID!}U6G64!x4F9)zWFPXC;qWP23(pywI8h@ov0_FU`4==T5 zU7v%#xBw$v!}utLx2M(t8{f)bn(<*~U%|NiQ5{G?Bp08^!`R%C2{w*^T-KIRoynCw;Z%tI7|b#} z;;z?woj%G(u5cr6dkR3>f)wncEj~7(S+8vI(G%3%S6uuN7T@J;%XhA!q!z4TV_mP- z#5k66g3&_y;t$6;BAvXx zDIipbq0u+Z_m5ckVDKjv-`qYS!e8;`n7JJ1a2`a(YT7LAtA=A*xI@L7%VpksJx$3m0F$`B?t~=>4`nAL@Z9LQ2Y?)SDhz(sk_qVO`EPbtqT3R&-BC)Uok8N9;M9 zEXbb%njPnO00axFFYlX>#%9lAPlVq(ddA^1tlge!&7M*l!R*c)W9V_1IX}S|KYf>g zoHLA-1~V`E<(VZqS&wO-^DlmI;kP!^M#ncvpq-{pk~MJx%ZL zeE*>H{_f<9SI+Ohe)__dFW#?r70Ekq?&F7ehTqkD@>JKm+X3EAE)PNPZmCa|{eT_# zJAdWX?f3ud>yK~FW3hx~^ijIc)=3vH*F2u{pu z1|Upo=NiBBlYJ*jP4cA<0j(#DzWaYCO#$Bj6o8~Zd}~qNi1?OgJvC5q>NjHmnhc4r zwb6I#V}0HOG|~VzC)))Cfq5h&+ht9(o?!80v_$3;Q-3xySk**r5Blc~!;ktIpEPSv z=ndQ%-BUTd69U{+%d84g86oH2dC;zp{U>jBlFn=mV#&4nZ*l{iuQ4>oQOipf+)|h3 zOYHhQ<4<~HEwFl$TFp`|g$AgVd3WIRIBT0=CERdmZw= zD&`((UKPoxkNZ$vNV`{&c=Y@jsLZ32!e^7zrQuw2aV~sQXZuGubzm6awX8LujHLOl zFDZhVwBgIe+Hog$9m%itZUku`?dUdKl+g8sYw^%=eRC%aDgIV0-?DO4Zn_I*u1o5TvL zDSKV)R47f}<)x0v1#!w>p5eppJ`JNL{n>T6kmMQ-aO?bzT`seS3mBUOtWUl|xL)YT ztiIN-0-%UzasZ)5VxCz)q|1w3(I7kO>l&Ri9{**J8=8G8VN_-&e=$o6r@R!me7O2{ z-#L&&!Ah%trdL2an)1E3al6)CK{qhDnjWF>DG9jesoT0^TUHmJAG$L@?{W6jI-sP_ zA)AXSj`wPQVqEKs3`xN1KhgQA6iyKA+W)~%jYBvKAZdajTeA6a3BX@bsWtGKiB7HO zK44wfX5oG?h^#S-m4n_*|LSvZMDUuK{F;yLCz>WLzMSb__0~+}I=Uxvk*CA=)cJD$ zrki(r6&j54lVT~zu8)3`BUL*vHeCNTRx4}ZaX)91zFi0XZu1uCSxFw0CO=xz+3B-B zHP-&A-axok(1m)jDPX3lD~>pu-#+#vOwLdCvic$bUrfr+!kAR@%zlU5txjSX#$0FA z^T&Aicwp><*w8L)fm!pqj5Z0e8M%LPwAS{g80OVKfv)>h7WtfO1YGM$j(}>-8CmJ! zjgO5qujAA@BeKCpDhfsn4jni9oX-x3;#?A_9vw0q(V?4SYA&ldgPA{TIF;7uS(A$pxV)YiVXqg{hI1_J#Dwd8Q)so#wO;AY*|Tzg{(Nq%oy3kK z*dcfKZ)?@pGc~h|oI2Rp8WwP^PTVt`4(Do2A7nRW=nl zzd^ZhkJ_(|<^EmA%I}+#4jQv>pa@myyj|^|_c-Cx=Q^bA8Wm@~YmfthCX!fBn{7{EK&o9*`=KOM;y;YiQEkQ4PN&XO9mep74VSM3RSmASAruIXn73gPz{dzTo@dQu+>*j0-cy1-==Q%!u1=^_%(!tTuA z+*gYQR$bFaV}GddOus`^ziU#zzr48Jm?j!w3K>2<&(_i>yGP*kqfoYOFd93*m%i}6 z;W7V4$l68rmON+^_%r9pPxfhF1N-KTCp&2Pu^9wCST(Dzm9u^mM{9Bv^Gd(l{1xB5 zID2MWtvb*_Ug?85`d2|BqlMBg=CFl5&$w~Atlgd|?`+ou0lx<8J)*!K;@8@Xjab(3 zNqWBhKRCZiloWkmuyd3f%_&ri%l;p2fI-=?vu8U|MlD)hCx5-fu{S0jT?Krux1W!m ze=~~}c)MY3UDC4{YbW)ebO-`~VO;w>goF}AnBf~Y?<4B78$t5#x4F}v!i+g>WAGja zU`p#|eBYc(fyO#p%XB=~amha+-bVaM*g{tWPVM{mf9X>*Kw0)IvgX=o?<|SxKkd^O ze?09iKF%y&thd|5jjQC$i&HM&pWKxr&UO2|eFc5PhS2=XjLC6< zICi}MBYSJ12djYE5Wqak+sRQt-VYFtfRU#y-UTD*WB*P(c76oC4s;pHpNhB_-r_aC zA#ZM<>i1#80K+g{i>~91!ikIjv#;4x&(G8)%JQ3j_x^7rUA@zaM=wpE3hG}~j^A7Z zlLeZVz7?7uJwMhm+&RE7R{vRoVVupm_!X;;fs=D6(K^r1Q5X0_%k|=O&WOIy^9%2P zi*x@5xO;iLkAQxhzn8E1o#(Gre(nYGOYGkE9_3v8l;W;9r|*n=Nu=9$xu_m>S^BuF z{vW>2GMBb$vF?DEf7VC)=I*6t?_p}@-Ypz^!|!pb)i*mcY5`uE02Ax!Inq|q}{TuWYc8AI(FN$>5Xa2#g1{2Ys{ zf$wo(a0VzN^+a1&`3DJT*{KmYm`1do!P@{|uoMQ))>TAjXVRkDvZRM>|E*1ar!nbN z>L~#;#jSbaDq!|p?tNN&Pu!0wVDsnSl}ip0gau=F`{#ZjuJL)c$x-O}TRBZX&(F5c zR_6Q&-2CM2nEc-ADXh4C;J~o+DH&Hs%V(E)mTcshFS=26A1QKTYb{#yF5iKP>K0sY zzYc8w5?+1`6el9X+nNI6&$)j2M&AUWFHph9=p8hB2{_=`#c#%3irt$`ew8`L$3W-# z|Ji$g9nG@r$}cjrs@kJXg8*NFPeV%p>ByiZLN7pbBpIS7KmZ|25FkJfodNU^f-puK z!f=K&q(&G@a$4fBySgeXXZ_aN>zs3ML{??@RCiZqeJAp}XP>>-T6>>;Pek6xj6b@# zmw0LqpItH1{}+Pb771I!t+)#8^OJoVrli&NIaxQkz0~fh7x0Q@?YbOnU&{e}!>}Iy ziMr-A?b+oe%-Db2jFo=!C`VyazF^^WO&rkN7Kd|wQ@eG~G#_dsJL0Qm_9p)FYZ2R7QpjNN z^!~TzDbDqBdGqQEJrhw7BWKjLkE{Gk$E@jT(_jlO7NHjzPs^ z2w~Ux-SavpYShc;CmLr}yDlYlUU_J=_P+AZ+JGBoRVB8=D+*$>C6B3h5!6lkv#Y2(Rn`%_o0|Q@IZUL@)WEG{E5KL!!yXB z`%nz?I`Thn(7ktEm@OwC z=#lpGer>DxB0y!C^>Pgdz@IoMg2$oab5OsH@cGC#ef_ z^5kz8@+n4XsdGs9Q$XCcC;t?;>M)(g3@-WbUWe-+SIg^+d)v((aQ$R(|Kgrtqjm0e z@_Ba-s!QpgRy{YK*%v-gL-&+~fE5T=0>&;}Zw_2Jhi-e*=PXbEoKry1tpnBCR;f@6 z)9n3popdP;d;FnU953Y>Ll_$kZ%1q9<}5B%5!B0~2w-an)c&_d`0fY^ibK}~6#D)j z?p_OHP>|#=>-49FQ6stAzLhnjq`nHJx}eyMLNfBeSrs zovH|MnF+F9#peFW2c}N*N5IT|!JGTV`I-J%Z<1IhHrU=vd#X-{zco}EZtc`5kcKtI(MP9oWJ1I>fWf5;ShSM}Lj%8!-0#?vU%;$;k6GnZm;$|o z(TJLNFvxPj_WXd_#M&sIcIp?-f4GE`3gUNAfVMm9sb5YQp-Gv=G{8!8@syIAV)W!B zXut@WFZ&#dyL;pVE6nx&MZovU$ksH{)nDgDYTeN6nHs{6K8Z?e(e9u8-ir8Wl*3&6 z?l0e4YQEv)bDqiP?NeKmkFI`UpYzrY1Z>yLt=Jj}YcyTZXJmQ+W>l!3J?;_p=J5WF z#nKx^u+E<|+44uL=V$P8!Yw~FPXC;K&Z!eq-Bh61*<B@nlUv0|Cqk3ezPJLssF*KnP@b{cUM11&AGN?-M>w`?(CRe$QOUbqILrMu|H&DEAgn^CVlY z@ZWcSf|#b8f45QferJ>IKRL~2o;rxtb}i#i{Zmag&_db7w!N>>o#r?{`x30R7?x^7 zkF;B5IXz1@^}zN-JFJ8&xyfiB3G6*;awO+v<(Ds2p4ZfORBt5V2={nH%pK}i10Wtw&@B{u0-k4#Sip+eVK6_cNZX1LCO=5WxI zYi?myy@P?vE9XZ5{;b&KsnpW#xeC`sG^V-y`d4X+u`OO;Y&ZYpP(US^vFakUG>e;g z_5SdOEe8oSR{kuLUv_JuC*dS>bGc4)S`mw~nq_)G)vBG5y-jjE>;_@F`|XV3uC>Bo ztRp&gxqACYXr)gsdh8y6u`7JJHHMFAWgERMs}^HNZX^N>?P5FqAq&^_lV5NCGkqX^ zYqFHZt&ly+2{-i<3_m1<`Tdg)DVBK$!YJ~kuu2WA(riRq`585-m#d}W)D z@BaU|Z!qs1d`IYybv(}Sr*r2YKLz0XxtG7{cN%{`SsyCDjSlcrG9F*_^xNq4_n+fe zdB6PG|MvFjr~lPnbTDEB`iY&*}rS8Rpu-bsYpPsBC`{M`1#Hc;~F zc`~0w2zTL6JkCSwFuT87dY;7dU|s+m_Lxte`=k!0*!l#UI$$Jj1Bq^hnPGnFCuV(# zT64u)OSFQN&eZl_Vn!h_y*7k?ny@Mo>EWoF^mp^Sba~h6Fx)J>P{Iu}k=+MXPX2wAk&Nvotzq z%T9asdLIC7Xx=AJ-%H8m>-(Y4t$3XcU;OEdZvfdfdNYm3BU}bSfhMS8u=kR*Z8B5zTp@4AuOWj28ADC-W?zHuL+&cYpjNd6bf8+c!;zCud7q zknwxHZD4G8-71CdK9X<7)m}HCfSLWiDAC;0Rm3wRecb2foI_*wyE{ zrF_mH_Q#^0pYU2&R;@(db+hDi`XbM&ueSRqZ0}oV=O0Nny=%GJs}aaLXXXz~?~>14 z`_{OqrD^%Sq^7={Sue!mT0OR8rXvNT#aOGb;D z8QSSu=XI8I|@Fl zDli{&gwr3lUr?)P{gr-4d6f9Lgw}1~x~Ez`tK0~?C+DqhpXx*NWS{mb!%iieqTRO& zFf&#y+y3_RBc6*$Fb=gKn29AHy}ptbIMJ{g@Z1f)y;|#T#r8zzidxbiWcc}tIzb;Fi`bK0y2QFw;=&c-W=#J~ zsLkwQ;MEo<^yB=_OzG)m|+jMdg_pr;o+(9UJVVT4ht}kLD);Jbr(=kHSZN z`7wX@KR3=FnDyi1ALHZi03VO`Uy>jHejYn`bm05!z~f`x_u0)KuGTj{e|q{?|IIH} zfqq1uhuVI^K@gi~-1U6zRi1l$jmVu9Z=aa^fM2hSpSKOy59d66Q;df7 zWY5xRRt0|I4&M*#CM=@)Y^dp(q4e*C+Au67!=EUGX-RWO(r)u*mDKbI;Ip4;NSbOV zr0NGs9kvxnP5Q);@BZ(n4d7aU<)YAH-G>oKPuOcPhEtB#i>fu{uKjC;-TD+7KGqED zVMh^uRGwc!oLV4T2X;p^v||5tj}8F4t-ZZMeI4y z+M&d`@=e05o4maVHhns6GJ%~0vYI;?2{~()%NA!S3-6RTW!Uy*YM-2*whe-M?Fl^j z$F`1wVNlD}cD&eBnDlcGn0)U>0DJXPhI`%o5(C!$Mb-k*Kp!$M-1>ZJlGzu$1zZ+z ze7R>SAo=q#F83n&Y7<}gbM}DFD*CXaD97NMAAW7afxOG-=x}(Q@iPthtT&>y5qrtr z*}`Fc@o7(sceANvVOL5S%Vz7X`m}Yg=#}f`DvUYPKij%YXy-rn&_=w_faMZ@r61et zvBB}OFIBAm$(^BK<2IVNP744P?i=f}XPC)0A3Qh0Yy1!N7`zVy)7LzvNxIoXOysbd5VTsem-) zX-~{|4sFAzzf!TOFZ*!0BgL7>8s^#q-r?Igw47mjMJ`6pPgX1c2#}MveX@ez305MM ztQTth*~e*vYUU^Z1Oe7llKF6|THB0qF7_Cn>eRgMz0~eDc~-9W0dAelN}9SYaIwLi zXWa$EDZe=pkk9!KJJ6nS*m?iOI{UKfX3yq>n1RS@kbGLR1uo2?1hD7_EKnU>KoWe6_&-T|iN|Gv>yHC70H;N{?Ytz;^W8vpU33mv>)FMs(0AO7XW;mhxdi5A0LxmXv)L& z=zu!#WB+2WAIl;5H~;;YPrvy0`$zwu5BNOn_E{CbZC&^TVV;j|?_SL(dv?^`3Slbf zCu0;ai3fw72Xu19c3244(uLruN2u{x0ly#cdEy>>2bw17y@TXmvco|FU$m$aTbF7% zmbJO|gVF$3tV#ApYjFMqYcSMbdiU)7vwxEATHfWW!dEQyPhme15d9ZgQ#$Fu4&Cm(3^UjL75$x_`3?{BV*hcF3(IE0R?^`BSf>vRUH$6qN zg|)9igJC$o4KKNY9@QD|(q!#S2fwxBH*ZMEx$831;Pl^G?(bIMzNQE;JwJGk^UHo_ zz3M-5Mnjlxa_Vxvb;$-cUv;9pII&$G70Dl4Am{g#{>2sl^u-u##XJt%IcIHqFxbwo z*sdkPE(p7->Kbu zr62{nZ);H}{+wIvgrij`bLvU{?uj}4NZX$LZh&poz)T*^?*Cw{oAk!4o)tbgh>n$? zbiO(#8jJ-xY?D=WR?Z z`GdhvUt!xWX8fSsm}5;f?;F)2e%j>hdgm7izj6{|c#q!i)ou+2dH<=wx~@6u-t&|f z`@ks+wZmC@GMy8R+NPu~e6s}TMfg;LR{2`hc9HSB)F{l}z*%v;k!=IKl}IZvLdmq& z@LLlz^-pQZK~#Udua$-UL@)VM`v51ANzR7D{TnT3v;aI-WHwu6=8bi7;^%%hArZx9 z&94E-h{h@mjBMIgaxLs3Rde>^m|FZi5uV)&Ccv)3Zocj0TNNDtqJmZ@br z1!*w8|0C?4L3XaxJdD(G6q?!;odQ~d^GpG@*%(3lSWHE;Ui}j$u-w7gWjJ3JzE(T= zyGw=GSI3canW`7<4$AM^IVCWy8EfiVUNJ>#ny4KLJJF?QsXw^Xy#M}K6`?DBEASpg zab4(+&0LJN05I@7f3VK!*xbv(vFFB~^NF2WR$jhU>tN98z;ynkPmT#XUx6xgwln9a zfz+Aij@?bSC_!DrtkX+n_MdX5w|t2gUj(3!^T{6^*<2?|vjJ+)U}LJ-+5hyw=i2$n8?A<% ze-=z#yO!=@{K+--C*j&lp>lX{m%RvUZZ?n{@U82~3pCoAAH}Z#;Hy}^`syoM@faUz z2Od8%JvWYb_{XoZ_(%`&t!zG6^JC8aLHibaEI+IRzsipq|1iY|>W9z)e$~t4{o;pk zCw{#eKIHxK|N9sE(f|L&&+|zH53Tcb>j%^$?YQTWTMw^>231<;(7sKf!Y8J7W*+(b zX#nVcih{2(KX@zY#dq02E7I&I{^re`PXbO~@dIZ$11!T2?blKhkng=Q5W}Cwxq;N* z_pjEn=N&WM1*jnX`TR-mm#<|UzU=Stk#K#60hE3+xMlGkbm{b(rW__1c)^l9XNF%JXqg`9hPfl6!#jSoW0rAzkUw)$>x7z;EQ#Vx? z?u8fR>GJ5c?^Pg$+GTzuISZ*N>$zdbB_;EgOv>?{nhUaw)C2V7TL8y_^VSTU{jeR! zYdAOv&J;n)%X!T?JKjeXi+uXh)pd@-_OWK{!g62YNh~c%_S(tYc-dXwXMTzXzXIT; z(SA18dsR)((~^ttB;;_!a|#T`y(;FG@DdZ==R$MONas0#09I_b?WoN85kM@nQ_4i6 z`8*eL!va0|>#Q8OV=jS|| z8&iC7a9;lScWiby&>31OT!(M@*xBpdw+J#0zBZ6?_jTRv&)oaDqnA~K+cNT5zsv1a=4#eYj!SawWmXh`hl}{b9T0V7kloO z@z|d9g@5x-Cs5x-)%9k6h;^!?pEX(?Ju|F}X3p5>x9iNUMssh31E<1%e+&nx;-a*F zo?r6060s_0fysqU`i>J*d*(}N!n0;PyH&1fZ^bxryeLpGLO}E%XZla3&)(=`@R=97 z-u!H|{8NC4+*9uDBFVyD9}~UFAv%_LOcy7!9|!R6^O`fgm7|h)_`lxuUJWXzuQqeW zK0m3rh{iSFdwdB^|Hk*e^Wz>PMgOJ`b8|G2d4_MSZ2P7b=O^x)nb`QQrR6*ud4obF zOYj>9)&U#3v@r%JcBWs=9Gok>VUapq-t(EHXB%7+g6?=;KzjzF=QZbN&Xcmaj)_O< zT0wpJH2{1sVDk{!*yIYjSAI|QTYmh%M)D+Yo_{L1e8cxS@3I}hb~E`xQMy*Smyr+hdIIW{})bw><3F8uia z*ZQ2SxFhsl^Ll<%u8>oj=Da_a%sS(W3X8~QUX{Yy=V$XzU-PXzlB1vb^%C-~W<}4} zrd+OSr;W$$TYd3u7v4zc2-)&-BI$A0ZlEci35a#XzWw~LH)>3h+WY*B(7jj+3)r)B z+b?Mf+CH#z?KkM(hRtH?|`&^BCuK0^C>YVSfD$tvZv&ZN8>9dLVBdEK% z&d>A~?@PX(0H@#B+^e*I=ilp`AKw2&99nOm@n`wgmbWv2+A~MbOkY?tj$3*=KRXtr z2ra<%jDU+PV&2CauedPnr;&=YuQ#tg^Q$ptM*rS^etxDAZHUqP0viM)cJp?fSmS&3 z{aDxYlUiC+W9K@>wqn(Axk(GDfE%W1V|^}&*cWVau$P>h)jw#0Dq!4GxuorpR*$YXnaN=$8MANzja znmb1#HCHYtC9C$I0$rBeM`rsrZ(GHbzcQS4pZ1~_IXgNq-4C@p+9c+VPjuI5UiwYg zs^ulUj!09V6h3%!H!oy!0$GX1ug_7DEYoIrHV%@(R zKw@+WcuZC(tcRy*rLy&H8F(`C7H|{JOs<02cS9U z{i@3~lSHvge$qHUH8k5|Y+rfJFUUSW;R(EYMt3|&iDBNjijyWW(xNcw0~&f3VVo0% z@?N@s28oQ$nHF0XHBeq z-shL#yfh^r#%+K(_(VyCo^wqNPESxHH7L`;Tlo!i0A&Bjmd`N@#xyJiI3MDM<^9s# zOEQ1q1=fC9JpMGFll#&gIIpD+e(QvGq)+X` zT$18_@?QWz1N)GFbnan(L>=G(=kcTO_YHgWV)x=>w;o@d^s(Q;NB!S-2Ob~azVD9y z@bv!eUw!%X^MAMhF?AlV=K(p7v3=Yn#$z;(*Jwx2j?ku=FLw)w@8eDY!;!)rb8*Eh5CQ5rZ+3?Ag2-u?vo zaKC`Kr$)4GTEH7{%sT8={)KU(_(CEh#PP9gUiLBg6cwbe5_JqX`HSmX@qU^`Ecsm^ z8C;(YUr4CoO<=eH3{*YfGg7Hd+juuR{>$2R9+;H_u~8pw*v-?-tH;g~PItayvwy28 zx$|3Fmgk-y_|d>P`3t8o3W?>uVyCXui==B{Nj~ZypV?l^;X>pwE*RooOT?vVS-Abg zfkHPWxP=kO`N=l|?OB#0>CX~J^vF-$cG!(go}M2srykA^1IC=6gyVBE3v2C!N6uNx zpA5TyStG4|1l3S#B9)Poapqb{lh9J*xAdt^D5q$jNr~)7$p3J@&da z3?}zKPPmNbWp*BJ;Eei=As;btvmxIPwC%Up!dQY-qsuz{_?$(&XlGB6%2@`_IyJD` zJ;U#T$k=tIDa&o+QZGb6tPM3b>eF#Y_a(8gu}9Yc)`}nf$40ZeOGYGjgQulpWojTGqa!71^k#%zG1kU{fmMEI! zZ5epo^Q^s0fMx5< z`Qd)$ytIb&aNaQdrX4&u)POckX zDEr;L=CvzK-SuD7U;Hviw&k2xElWjdw zIWc+Q{kxk+S|BoSfQ%_DWQFBNob$9n1=h<3zuB951B+QKFM)lWeFp-E zH)$bqmHZ2!I+FenSHauAL_;WhVMb3R2_)@NAl_>2U$AMzg;srP$|0)yXI-~()Ugzr zOVK4sz%T91-qIjJq$Lt&nQFao5se(xks15t^Ym+zqE@d);Q5H!_GrfSSc8NVw5Z{w zyLpeY!`Xs!X+jbd$84AW??@V_Ca3KAj9L305~QgTIA?yf$1 zLXAqHd15rXyx->aIC#f6%}|cu(28)R9LMG+b}2gi0>O{KVcW!$t%8%q3wWhPh()Ww z^*18pLv51AwL&P$Gimr_&5c)dKTD*M_-iJ0Yp1Fo^a^BNbC)GNeKKk1FvoSeeVJKI zQsB@JJjCBIrR!Y6e0)(qlkE$kT`$S(wdmMoH|$<5oh^(!Kp$Ze%>(!%pAkz6TaVdG z)Gu9z5zl_*EA=qDZCwtk0AKlF$d?9yK;HrMxk}*hy1BIEX_RMh%_!itG;Rt(*HR5S z#w@ZD>cudN9F~`nskvfhx?SI zBnw>+HUv#|Ck)dL-smhxY$Zr;N=qQ9D_$dr;(EaJjYQ;eXKEQ_(wE9Uu+GFUL1yQ? z#}_>o%Uh|-V}O^6b`*I$fBebVGBKLYfTz#25s6Q{sFePE1(U3{Zn9@?+ujPU!1m2P zqyYXjz8M5x@`N&#TQ68S(%`v&8Fc(XAX;GQRIw3s8Uu1JW^W(L1ou=r^nRI z>)ir-UB#-#bJ>!N#<{J^-bHW>vH1P;1)}~V$DJyb)KwvkI76IEBOrEGzTF#5rX=nf z=2TeFnWmr6_H5cKgyGOuTYggn>$ZNYX@Xr$o!P)vpGHZDO z&$CEe)2MlYH`Ps!gqKTuC*r@>~ zJnNK5T%~BBhk{*g`GVOZ@!^>m?ecfJTRo3-PPh9j0Xt#8xel@RwsiYx%dZv1x-ELe z{6x7rZqcQ-UEZn1B|3-J{XNqaa(q0nkdCwjBI(u-;$osfiB_R0`zq&fgivT_S7Bm~ zQV4mF!wvKoVk`1KOjq2oh~k)c{MbjWQYIkQ4H!f7$0w<(O_4sFJfTq@QcqOgEgw9k zhCPF1xRe*8@;Jp0PecPUD({g+@#_S7g`>Og9v0Z~Vr^3m$puKbTX4>~`SCMGKR zP_Z{N-&6fiJT1X>VxVNVQjGu&4EEOt*I4pLZw!rh!y>-nd6VTb6Ez zZW(M%%DNl1Rs{k8(PcOKnZb>BKA%RL1A3^(_90?16^}k1(;Ao+Q$0H??{Iiy4V=YN zJ@-V(6y5n7Xg@$YDMEUhoww5#865se=a?#Zrk06q{6VduVeOb8%M(_ZvT58ae| zKcW37Eh*CvnI{e;b`83~i=mZkX(20cT+&lE0L$=&kOb}M-@}+XK*8zYzFf_|kB^A4 z!`S1V2?mon=_D?e*v;u)eP7={DTOX)tT!*;9K;WMd^+WAveHta)2~c%=4Na=l?Wrg zHN9=RUXNA&k<6*8@y{=TiWkPxr4j^tmP@0b8gtauZyWM*Z<-{-C|S~BhhC8%2KqBp zy?0$-UNxZ0I9TR-bQtfh)|V&DlySO+z{dEabVQAo?*8@eWRz;3?UyJsOgmIXl;y}+ zH*}R`^d|?L@$yDEk8c->S6$cMGXKOCT#2dv_TlCQfHa*p8nt(tq3r9^4B z^VVhK$N@Kxqi#oOqrEW}=5Qfvg`J&__=9Mnr-h5*FpLAIYg!6#<%@D8Dt&zs7ODTF z$vtS7MKyX9ln1l!<~#KZ%J-amt%K_WGs%2OG}_ifD=8~t7h;A}S9P`bwzEHE>zaWW zyiPPR-?e=9-tr?I4r;xx>w4nfACxe;|A04*_-WzJIOcqV{Ngn{{6qD|)G5oIzIPS6 zZDmla9X5b)`rM2tiil5m(*ee6Q@%Sh5eXhu;y4&4spB#y3%f><+%VX9Y?md>7GxYv3 zx_2boXSt?D+mHIT^c9Y__CIjU%Y)c6-N(#dCaeblo*&Bs=nGi)!z+FF6~-K1Maqyq z|3@Z$FSTn}7BvXJ1N&|`<&ri0JIX3l?Jkww==zb=%jY|-ms?Y%^99cvkj^yzr2WsX zzV4kDcj?#{;?f|j?K18gs^Ss>Z94&RAXQ#U|INK05q-hQ&425!KU|-vWjoTIJTy?C z_u?F@Y`0NxUVyw?(i(47HkT44+hp4qZat(WJpU8*jYQ+#u`ktp8_>>t?4o$P9#pqE zn2zmb3%wj(6S>BuK&m7XA$nR>xY_Q%l)rYl$jYAU)%LK&GB>8l?SZxY)R_%MTyV=X<=Gm*o7LtNwfEvR_#XlKR_`Ji+qWNn`Vsi$4fs({Z48mxZ5AUhc)ImE+Ic-L{RFYIP zN%}Qm$C#JeLk#V@8m>uWX#vW5{p(uT&TRW&6W5pNh)hO^#4ZHD1G(gJ5T#rpGSh=$ ze{!4K`~Kb=6zgu!0&fG+C-&IvGm);-;V%`Ybjr)xhP6=^&M%19YPy8S1dncyFE^i+ zAKtmG$Oac;I#~;L588%6u7w#@-oqdZ=5$Dvy-mZxJw+0&Mgu6aW_(Mo%QrzgH?V#F zh1avBKZkeLrgy}DZ^rAXvg5<~!28KB;sU^gatG<43&6m+02?bI{uQxIjJJ6w%LM4p zy9GF>k#0xhr(}r;ficYaJ{aeSt1hPPl>T?K;Zr{r=A7eDfSh z@kPrsf>pIFy6r)xxlrcE^E?A@LljGunXu% zTJmTKQ9cHV19?fLn{b;`ZR2$G+_LMEmt)lRqE4}!-kLx0)4MlgWplCsr=IA+btqd+ z6;+F`ZF3)q7ds(JAvqT?%U90K3j&HeBI)nW=HixnTR0$~ zI(^~|L#M>ARW>A3Omi876g=>>&TI9`>-R66tnIY`_oMJNi|5-cb;H%&+n{XB5&!&A zx{idXuFoT}CI{wbRG%f=FFS*sm%%I47c^47>2qGR@x+P1BMJ%w;)wFFT=ct}E?-Cd zHj@<08m&R};y@LfkXyxZ&$Mp^fXV}oa8nx>E}4EqEjK(@yK52{MC_fUjycWtvdc6` z;>tqU7&V5T4(bA}Rd@#M@pSra*{p5HmIL#^^FCOhIC2&8u$A%Z>9Q>k|3irOU#^sA z-fS(I$}tX6IbAt8-!WXG6{0+%^_JTHE8g!q4~{NAt2aBOmOSS6f=$J18VKHH_l>!0 zO*;OY2;HU>ST@QYQuKHjRDa1-2S?Nd(%cP*t{oJShC$)I63cYJd9qJ1t_Xs7uf#d z8`_b{vn)>cC)!rcNN)>{t>D|tjba_jT08USq0`SA*P$^M(u*CN4vnMvVZ9J1mE|7? zeH0LHkF*Y=dPz}2vbV&(acYjn_^m0=K5}0eP z!g~8s6-SAv8+oA$!Gh@WFSzT%moLSY0}R{7DO-Fc6bBhY9@6z^O*B+gIlW9>q&RbX zvKVzoNS3lnqH%YR&`@ZNUmw{oY+Y_|E~RDBmyY1JHn99lQ2+AFJ>*kqH-rgpzAMy`%XXD5`ip5| zdhIuScaDXcb7HSQg`|2TVeQ*D&3AM8mrKS7{y+5==!guL`_dt^OYc*QL-oDASb13G(xu<`8>M z;I`q#Y_vL>iRtY3Kx%EfaUp+Duj~S$OuZNcFWce#Z`TFUV8#j0zjQ9;I^;k%LCmZ^ z0mPlodBYu;t)MnqDNPiQz!8PZMJTNzMK^mTT+&UjuhF10a%| zEg|z)Q=PBNiaI>9q^1A5P(W!9uN7wIi5!|I`kPdfq@! zAEkR+YW}(P!~LB($su;sw?=({tjFkgEpEK&WI}Q?{XN4A>hs=Y&*NO(J~tVLS7zsQ zsZ^EE@6ev>+yh%$zdae=FOu1b|6F48|LeCPB9rntl!*+XpYFU z4WCd`oHTa%qP}Jj!xH0s^F**|)hQ1lpYdQN=-*$N@T04024dO({V-S5RTwp)O0U&T z{`Va+_FC6-ix-Ub2#}aP;~O@YQ?%>Ty1I5l+O${6{9sM=FI-=(k(pV#DDfvF|6(ej z!$%-|!vt&BHMD0I!GI;9onI^)|(cpKr)uA>sV0d|r9qU`5ct{$4F_&f5Mw5j1r zoCO-XNxAxLJ_98!ov66uF266>EHBrsL{GY=v=9A|#f(h(6Wy=Dl|oP;*A{+am4y3` ztvR87VXGt!7W5jlzB8n?3ugt;XAP4tI6i$Hjm?TVr+%s!1CKd?WP(Yu^Hv7pQlW0I(1y)>ol@ zvW#WTmpNkS*hK<>D+X6_WbSJS6*QS7zS;4WJ67MNcrEMZ7=*|LujBN z%&5n2cs?dWVvF33X%pu=?XpZ2*G#N7^omhz5Xe{VmfdKZL!xyFK_#^fBjq|;nZ zmVeMne<7Ssi4wMIFTEx0H)Hs7u$HIACzt5OIes8&_|W*r zTI#7B%zH9q0Nn}CKVI{nM58$Xyhp|u7=D9r*7XDe^Vu|f)n=w3_=LAHGMY5Bn+PKK zH+Id4?V|nr6OyGP(lbWvWd%;)|CU+xGwR!s4+YdOnYXGk{bQHXnv zO#-u2IQEpdLiq8&=v^6qI*u4MLslPwjqRqFd^sn7bHkEEsA~RLS45Xfq$Lj@te%zp zDP7pSu9W%If2@B#bll!u^0u?7eLZic92GN%)`ed*SS~Xn-`ibCHtgTKHy-r2?a8>& z11kc38|F12*)W=Jk!b9>S57cBvW89U^|WQ3J2GbiU{YumoZO_uqT(+4?FSs)rsD$g zBx>#3!u=c4rjx!;rrdo_;eLYthn$@_3$|H<# zIsW$b>j$pHK0y^~#&jM=M*{tD12<1jzePhK@D|6yNd;vVx^nF@h7E*6ReTt2oAra9 z$9V4xJZvhm&G=Pmpt!a?P1i!1(tKT>z7WT8*w+DlfztjIEZR4n6Fyy#dpPVcB{AX_ zPt_(s97Cv;CR_<{Y>0-b-mNwQpH<=O#a z1lLUT(NuLTf4=Qc(T&FXg>aeYB~GiNaV~}7ph-YqFNDC{#u-9E>)VnywQegIhKfqv z+Irjt>`%E4a`SP%X0>yJGqP4$#25-<8TH+^!$sg%?jA$IcKKcLS_WxUty4L+t~J?5wS(@)C@PYEmF*^9DX5kpTh@A zsUVScb$M9|y%e~rb9X0RA|?apya%6`z8Oz*Hw+o;w{xXC#TD*40|46@LL5`y>Vd0o zYc&I_keSCCe5fT&XSvgbERUESY&$HCclsn2&cc5KX}6(t>{*g1-tVZw>P)p!uk>CZ z^W)M!pt=dbiTce`IlPIh=_q(*Q+WwZl>EuXGAuu=Glb_QXbxjsv z!Ub&sT6uC<&Q$1{oD0jNU_w=U(Rh2Y7m6V9J zbM!ymqhVOYDn;0pB{#kgFf&4yW$zHY(_ppBh=q5p*0dxYs2h$o9idTAKljGVBMG=| z8%vw**UW^brtg<+84Ik*{|>5!hO4L2z(&)RGef@DA2miU=&m+V5`M>=5T$&6x$0DC z<>x-OfB;!8GtU#^fS{m%(>eLy+VB>iLUX_-slXH4t5;=rKh=bU$t3No95!bWqKTik zCHq~2j1Y%PIkNs{ocsBPCbKXl`#(S=vp*xzGn}QVyWgTanF3WtA(~TPoT@!gDhvlHzntT2u=Lf z2(b|=4sQ4K8fC;cMK0(8)VNoWy>{g4*WDE(Z?8jg*1(>von2V+5yn*_w!e*4{d+|v z9Au>-0ROEX9lNDTnmFpcoS9kn-6hoXGvnhu6kY9E;g2V7&Sr2V`s=-@SABEetev0O z29&S4Gj8)MWDcy1tEAIk*~q}SoGv|$Fsq<3p0NDsyuct%^m+wMah^fcQzKIUh`FF@ zYq^IA+MeOiP*OtkBV|=CaHLK#Ra*RTOj7&GCM~p3khUu5=P)Bv&O~0YB<+2JEwRa` z|5>&n9_rTPb_NJ5NzxG;+-vz(YL_qnmakW6qYQqaNuD8J%9@qp>4$&T9JuyI1SU25 zP3uKCw)^rP8Yp!(zEHEco#I70*UAwHC(XB-TUn?prz~sXo9TM0GzO(tEOVtSYLg@& zwma^WpS<=aO2ERU5ONvr+izL&LeBh)V_@NZ2|$zXo%!i`|DAJQ73Vjhf9(xT6rW00 z^l|9^zm6>w3AA67$=LDty);DeE^Su$6)l7mS#4!?=67U`QcY+O!!VK2(A0E!9av>| zHWx^QbP+bt{hZ7=Ia`OW(Sb`w(5ZF$Cl(HL5i%G3b|i1f7%hcLAAmdTZAwM3T*Pae zj|67#sNY;HGMTOekHI8F&H*Z;oz_8lB$uoE@5U7AjhgXX0}p8c{v$LRdBP6cf#&A& zZ>(i;1;WljE075T6n`Ku;4ahNNA)4)Ox-tAR1UIMXwE0&{ZHQq?0TA$F>e;{b<;IiCdo$cYb?HP_x* zFeoQ$ZYPYLyfgPYtMMH7@OBE=k<~o<{JC~dBboHxOOW2zUMTARzs7@YtanydJWXSU zvU(7bJ@Ypkqfn(m|5^Wc zO2uhrXq_G&lDGyN;C_0ZVjwZcwWZWCT^M}fd}c~&xPzk)CRnz?da~GS{5Ra`oeJ^4 zY**ZUUvFDQW;34evRid;>XXD8^$sDi?DyRjAmZ=)pS&@EhUvrHgjdB3#~vGWC@e+w zv5cOGIm!0h{bc*sDe3_AvM(HcNd)S$`ZY4~2+|RBE>Pf(CBSI_w<(`R*7nnI;AZ@OHmm6g^3`b-BuV_oS z-jf`xkPlB0fkpfjlBz;cXoocsNL%s$A#DjQlla`BzM|07?&^4uOs^!|Sfovt=j|hd zIb=G9HIyt++#+;c-a&F*cX&trwmKB_$vyOA*=5-RrP-(K?1{&J{gV)3{152~vhC~3 z6U4{b&?3>L4)==Opnmt-DYrC}%v`TNQ-TUxeAgD_;Z**9-g0WkqJS@*&Qoj>A#qg(bn`Ej_FsSY&wnx=$$*KuIc z-fSsV@ha%gPo+vNef5Tj&_HQ2SeL(IRj*c-SS|J*tMlwRA_C$F+vqa1pFV1@r7ta{+Rxf+wB(4o1KBqLz zN^4=1AEjjI6qsE=N{4qXWR8k^dKXxBl0h+#_C}Frh7X3_JUYjyfcHz|W1I^}4_w{0 zBHw$SS_0#5=;|x9Y5a1v#Wv*iM$DXT^a)sqNl#g3Hqlt69kY*?crZdvX1G+3i_%8{Hb9*z4P(t8Vob#n(8a-Hl$;|hdK9lV0K*)E?LavZ;dqqS0zY!;as#ud)Ii|)i zdo+U!CjD*gQxtU)B=gteCa7Jy8|Ag6>FX0C440f|rRR!3?S6(8_(VzTn`iH1v) z!BK-W=H?m5X;YBt)Ko$yS=!yVJ#~FwOT9*UWcs_v@p=GKie?Ua=HlUi{;ahHkHmvX~(Cz`7C_d{dh%08#+V%Qmvip109xSG?|JagI+Pb}i3~YMWH)aWX8~ zNMp$FOcfb?TbQ!kU~(h|z7BswvQd~yz-vRiN_)>TF|7o?R_Eq-L;O{*M>HaBxxNc} z56|4TdH|spBwu-~T4gEZzg7TU9KLV380Kqx@R&bE!n%v~JZIV9UrFiN3^VFMhMq3s zJV=W90f1HVP5p|UN27JGZs20&emEem8Av=r%>D>>nD;A^wU{eJ!8~ z@c6XHhTRQ&odKIBK)1GrU@hM?(s^~^O(<8yR4^%_vy8pO_*@y%?EA=w^fi!u7d`HD zTYY%aot3w>#@?QFl(v=hw5qZ$)i;ec152P=Iy&jKn6$UXn^-dQp=3GLVf3RN)$$oWT1|U-B&@Upq1tk-7 zALa`x6X>i=^5h!}Rl@~k$r_PG&Dvq4w+NZ6=TY;xxsPJ|&%@?^L$I~fdnUh!^JZ?1 z!C%*@$sXMH%hU`dDPHg&CEN5D3rwu6=6JsH3Gzl`I!}a;_e?|&R#9>NyrauB?e2%+ z1B->`2U8;ERf*&6Gh*el$EmA_d}OUR1kh)ACNB7R7uxYPmJV9BKLKw1N|)1dVbqTic-aT)7;Ok ztq6?+ec~gzm^91fQl%3nKlPq+0J5!pq)F1(G%?I*>s5}7xIlIq#=pKhbm)=8A>@5a zY_aH4kLxhNLxWj1xr@-r5!${G*3b23@$fdQECssVZI<)h_MHr}U4Ne^v%#^9Ab@5~%)`Z@Yf%n?&zMmrSg%S$zD}e-hW! zP}g^eP%_2JjZ*ZtwF8dvS7U7R`T`@{{5Ay{e<%oOunhk()qlus?=t@s&rd`|4pP)< zu9-)P!(=)?+lWSnsL}cKtIIiAd`HjU9?12q?LUe~&QD%Kb^~4`KX?P znC6Ygs8Bs(Rw!ci;Fn!QthPZ0B&Uk>9=E{hdl!WElnVQrvD3d%{|UD}Vo%0y=0BGr zr4Q}BeowuiG&qN)9|cNuQ_abAtvI|$?n9kdTh6(TI>lDm@RO#}v)6IpxpS9r=|WB0 zp8}6`)0EA{!|%4?+CokTR{|d(a64hnhKT?1ZE4%xMSmaW62;9X%ot2ev$0YW>S2#8 z`{=ElQw*58EFN2I$_t3OTBG8BwNH3Ex9{$-Z^iy_qmGMW?-QI2sn+;eVU$95Tl|nuL0mtV5b8SC=f<3#P=8=o1N76j zj($h;rVq#kj;%2|Oq0zBjz!#nmv!hbJ>1KGfg)WRLqk!Q~RmxF5~9oBme;YVYvS>zm{UfI{N& zDcYKS>%W6D8|(GFWG4^@#5Dyq%$Wy#CO_%0$Al@-j?)(2!k^OOPcKq|s8n?zb`IFa z_N%>I9EZR|aYxV`LWB~3vCjpVfFB3MvRjbf1flSlN@Dq@#=Cnw;7QlB)n0V-Bg@;k~L0lQ_*6!1oDvRc}z+il$R~&*{%?j});CU^Uj0|G>vqHX})T;rX}cqMd zulD~8n42Lf{QQ(3UHRw%BrdpErlUM)i^6%PC0nVc=VQ+sHHJeZ=w%lgg_&XelLH$V zPSTBf8BHB~VXOwX-u?c-Bae(*%DT+qNyYkPjS9XbX4jNC3@%Qjx!CP1Q*KjMQ>QxM z&YFsu8#nT#`lDR~D>z=mjpqgwAQ^+48KO(3RLHxnHLrdO@` zy*R83N!$;}uO0G<`^xp7BL^Gs+Z8OX6-yB;RAN>XqtKCiyN`RT3DD63fe0WAWCa?RIVH~E_vweU@d{b9 z`q(^fylsLE;k0TvyEh=MQ|BG;Q&+Ddy~fh2`3_r}QS*2Ai`T}iOd`4uVa}Us>iZ@( z2xIe63c9McA5I34uNT%7}!2! zv{HU|7ky)kTQ!6=eADS<&Rl71cUsy}qZum9LF-^U$X9EO7E8hxrBZ+_is)vn1%NjA zno7F^1zAj&3&QHkXxhve1BkHcnbe(+EIQBxPL>Un&THp-8kjlwyV|b0ZQtKK%+}EA z%O(~Rtm)zr;>-L<8Bj2j={u(Z_#S^NtkgfzgM(;Q zt!6Y*D$ec_F1h`NR|0- zfoL(AniKB@PQ~9a=b6_bhp6=Cd$Mo)*X@Ij;s@c!>@3}-947NkV%lcAH5mJC9Yc?` zeO$ms^GbTuj&$|BZz{a=17TGVpPY0Eo2-S@ab0aXe#-khS6(NSJKg-9(q)tfh}DdO z?C3M6eY_OV1%j`%wTK9nB{^58iH1L^PAQBq6gJ{JAqj-q5_9lJy%ogkxZrRvL$&WW zc5=~UtV-b3un-|~n`YB&d$pDvL!<7IF|Bm_Pi$=&d2MpS$)7xE-nwRz{>}U7&&njz zg2jp)=Ja{;&F()9yLcsm==N&13GA#Dlm}05PqUZxWiDuopOPCEU~6t;aXZY=pzNPQ`9h3e9{;nc z4wg~GbpHp}{B1Q0-;SxhrhS9=bLB49BP+KWprAkQJ=!>3f9uteeqr(~mB?V{cnoD$ zTW=ibZhfdHUTcyEHW_=%eb?oq;ZLhFX|biQrp6Bo6!FXz-j zV4_pkwI0PwLhc|<>a>s1w-YabT$e+x;%zXWF}ILCd!0}q4gu-7DeX8v9OmyZkUzV3 z`E-kLDn^2F7$_dI55ixA0Jm|Sm=vi_^o};bA9>M12%&83rvj!xpJ#4avwzngl4ke! ztwShL%BED1Ekl1~KW}gZOj2e9_}WB(YdqH#WPH5>4-@9CzxZ&+RumjyOQvp z4+gh|W~o&bhp$PN?R5TLT7G(ckYN!bNshZQQ-t--ts-GxeHPktzzd-7 zZb714je$dE1^fz46VK`+EA%gYZ_%Rt@b7n}lsYE7O;9Y<_%gbsz|p%(2~%1OMaxt0 z=8E9e&?fA-h=TF^*)AdUtFfBj)=vyz@OD^XlU2aY)Qx7)^#wv2V2GBb_%$ENdU=2F z2}7nmJc&;7kIZ8qjQL>E=Bh)OiqO`M$|Gyz&Zf{NKw0q?V$Rqg-s0f-D-6YU(4r~c zEmUQj9wE-*mS0K<45wgSayE2!Z)*gI>UW-9<|PN){}6CMdwD)N+2JYs_7^ zP?P#9Vghng^UXLk`Eu8bWDh`zstSN3coVNmGbv)&0lI+q%}i6zyw!s|{0QM@fmYm&XAw z?I#{`)ipQJm8~?uK_7ic^&)pR(7e^X1V`5<13+^lz?DmzHw6nP1MSB^!=zd10 zJ@2KzN9~_-pRMBW#s*$*$((>uQ-u@hueE&cbdU&+wa)-rkmqK!*Nd`G3(uB-e@i3> zb(nwv0COrLk!JaLybjOyLk^_o*QiF$$NYK#_U%!L@W)yQUa6{D)ymek9_LU#4zRsR zZ2x14IRZR>L9_LCDi-0oi!5TOTX1esMfFH1oh$`?pW$j3Jz?t8bujW zYX71v{JSRzASCbEv+Q$f7(}f?7y$O4RuLX1CQZ(I;&>G9oYy1Y$uCJlb1!j(J(2?6l~- zVjhzm__A%@U3PxBcIPz!t6VsYYx6et+T7quVBqtod_LvSi9N8&@>*5z*ums$CpzC` zl#Cs|GRfjIIXEodhTq4w#%m)+V>Q`^;HDj7%*t2T^rY(x$-0!l6ZUIInVJ5Mv2EG4 zK3FHW3T_0A9Lva1%58r&5Ydi@v8WsJ=`q@Q@cJ58AJBj7cVGFGx!L({&aa+8d#-+< zt#Bv#`thMrV7}}@m)3OzY=97~{hwLyEKRE~Vt2m=ngeVY9%u%yS*(Bvf1yuaNU=QZ zf4itU@SF>HelZ2cUHr9~%8zm@6kIHoxbLh<8E!2s+UKA_$IBk9FE zA!yyet%hfZiDDbOO>-RJD?`(#_j4j(*SU+faf{gL-lmJPG;-Gsz5x1NI(2Q0@|dq2 zGO1&U96KSlV)V<)IS^!lNqvS6?=M}htRc%i%MOsAOuU2IcK7pIH78%)d~orG_)IkR&gT zOT-b*U!j5{Q&w#XxBp5XllnN-QkL9c2=SAvW8~TbuB1__I)l_>fxI)$?Pdxo?YZZU zJFosD0V(MN%T(TaX6M}h)?XcitTP+zFl~{Y9BWeeu_M8kDMbRo*V0D1+p!Xi*=Z)9 zL;qm{t5L9~7oZ#!y*z~55cPYT*!UtPrGTOXL{?&DUUPx`oHZi(#2QS&#- zmB1Hkv8Ak4!jx$X{t0`&!`U}p%IwIdeF?!M?xDZ196O|fxVDGVflHwMt@A&{T?6ug z_zrwnil=|zpn7gzU6t%{zewe;e((D454c4ZAOqycCfzz%!qgT#cP5p%?8ed(>91bx zH8%T@_56+A`iJaxC98g2O$XSog?3M}w#65Ihc)=3iC?ZxzWch^mZ=tqbwx5ADL;2F zFtp7%{6m-_&>D$R%?^Uw^Qv)@om=U>y+R<@o?N)1E&~jHyja$TU%;bos`tLVeXs-< z5*iQ+JPk#1$jZKW;IQe1nAm@^X=6$?7>Z7+gAvev#KCIZ%A~>p)jjQjcu3 zKz@|^*rOo*VW!6S$52xJHF+bml>-vmU}LTxb(=;o2nOR4dAD>avZQ;g(w^wKXdy3# z9UNfsy?_zQaW&YN=XFx=|8BJNX0Z0QuUVvnk(9m;xF76ZXPrT)CDDXLWb3I;Yz+HK z2)z$AS2bJ<3i`pXaS#)v5!YE4JP5qF0Q^OY{%*F?zJ%*TUfr>ayiSO}drOqsHj4L- z=2#C4i?-_N;I|LA{`h>UejXjCa=TLDj7nfG^LlPC z?$>gWKyiutfOD+GtR8$7@+uiq`b%=K zl-Ero()$E)v``VwRFdiE7ub8%Jjz1@u4G$A#R<;%)Vk$C0Z0@`a^4=mSk2Yq5mnb> zH5|?}iEt0p{2;08?O-Yg7=xc`LqE70mjfL$RbBtphpcw8vIlS6;`h=Rg{3C>&5>iI zg&?0CK=h|3Qf$B&xJGN7KDiTXqvyKo2~kH^K5ZrlA?sAPCh5{}E9(%BZilxZL3nRh zeh=(bLkISps^gT3pFXH3Fk15TH^6`Q9JjW*7Msq$ckYt$;M^t9XbYbDvaG@}Ckq|S z{#yHGS;Uoe8Zt@(EQiQF|BDFhaPpQ>ok3Frn5(jwEZz%5I9`+WK{`EBR{vgM5Wen3{2I`dl zFqEo2$@4l4HCkpT|H%yRfV}_-XZX z*56rRLfu`w(X%!|#G=en3kTL$G?BFNQ0;oCzwY{$_r@@TSaHZ|O~{#`g?LUgIk~nM z)$69!Br^z4JMhxh3tmWZG^2v}CX@Dcy%Y^;)r|koz&+y}cYbP4&JUTb7P_@0VQxGX z#xRm`h+{q3bsHL#ntE01QtM5s^w*m36MWk-=Tz%?o!#x(lch|Ge09ht&ePHiU8#3` z7p-TOF+xeR8A;-8AtTL&SA+YuOBG))7kl3K_?hc#cD%~5(p)FoSsZ{@+UyO{GE+oWFxMxC&$_cjq+gUjX-zfQv)?}hg{|=SR9t$h7p|k_k_nrw#?*pheI&8VYz-urNV=Uv^wa-CHXj_r_SxN=_a^YuRR;e0RK=%`mm*L^FeUt=n6o(s!~{2w=G150u1+3KP?-}+A{Dx4-Gw{ktz5a!);_{cRv zwfW-N{;5b+wWK^S$&RN;hry>QvW7=k2C*3%NDgnUhcN;RCU zZ2ZgxYLW`~@43w+1j0v;LkwY@BaE7`7N1$Uuaa`O|{z*bgBUi|Z^Zn|UNBdJtQsAT+>3RxT zap7Z#&fc2YdE3)QpGS=N=~9Ut@C~S9L5RaunWLN>xuJ+u8I+^dU0=}f%?mqKFfZ&7-7uu^9SylMAZ?gZcdHS#aTC+Fj} z_&{L%oIO{OOHO{=f?;jDq>&3sI{0zDTA-rI?lb>4eqSz0T$ige?TQ(gB1&Xqb=^1H z!>qWrg_fsjvWnmK40dU^g4Ug2stw40`q2=>n+^rhM{Fnb6b(S)!3DTwPR?zo&1NBV z7G2%@LJ>>x|A7F6s|y2QTiONuh_A)MNx84$^V5F0|DB03{~eE^Pl-K&iSlh=1P(`@ z1z%XzA^w151mZareqzrwodM+njc{cO!+TXzNbKFu+?F`1mfAH0RRHW($9|{VZt*L_ z?PW??*yae8R8!lbS1XlGa?yz;LbcxPY&reC(i{39t--3&vX6>y*q6Rb_Alf!+ulk5 zCSz%>$paNBJH0zWOf+-GXUx?Rp(Rs?-5fA%W?8hOO)G}3(+$MJ!okz{DUmV$6|SE1 z`tAh}DNIY;=g;P6_W0j2lG)Z3f1C&dnu?~Bfs?Y5(s6L9tUf#&3^_>;g~YyJpRNds z(VmbZa@+)+^)trJ< z`oes7Y9q@sI@*crW>AIq$5W!sq76qy_Y5jGPk{NfktPP}BvwZ&_&BV6kFYjG5=zW& z5$1c^;Xg%~PUJj`I{ZGLEi3Y2biaHau7TesX6X@y2CD^#Yj0AUeAjCBSH3KYnp71m z5g;A$LZqDMM9&UQ>3UDQ=xDv8GxHkjmehnK@b#yA6HsnL<+Ixjv7((9Hx`YMudjgL zDt5XH8~&5s#ym-L6o9MHJOA)RDnjWpMaGQqDl3pTuaTMOsXwCEoo!1A78^s_8mu06 zzEgUeI9Ac6Hi0A}ZFuhm^fyi>Z`XICOD`qU#i=-y&Fu7hj++;qq^|56cOq*kGhk30 z&LJwZ^Y7NAhXQP&Ute%4pY4f>O9n35&`!W= zL;Cr&vGKJan``Oc0P=7PxsyWRQt1l41YD>JfRkm##j{_QVqGo0`Jur_{=iIGChcgp zaHFR(I&W)%yeUKO(wmhoYPwfZ?cG}OyVE_LP@gP_-|9WC;Qg9Id+FwC!#^VKl4^e2aKtg=rb zCZRo0Dima2Js0-~-v1tf*L3fXx`S(>$shKqhHS4#MMO*gl&#SK?M~d_>6rn)$h*k0 zSmG#$l2FnehgAu_8o7#p$-X8EsIFmGPV>g~{ww#T|NBU|aaLO+^*oq2#F@IivTtrBXc8P(u# zTbNjBz)vvQ*yJakukMs_IjlqF6E@d)H?yZh1Mh`hn7lPfrGE(ERXbs@ueX!mZ%T`x z7O?$sd%Pub3A7WH$0NzpIzEc7< zx|Gi7lGY)mSx2;TTl2aP;Der~R>Qh#_<_pU%=0qQJVd%H#ZnO&VP|(~ot9BGFwDsv zo_Q~w;&+c)>>IvA;Z)gM4Xt}F2*&e=KY8$d>cR(pz4A)eH)1gcUQ5B`3w04Pp7C7p z4!2oK2wD#iUhWSTo9{iDNE8W*j_?Fh8od)kYu0}rR#MX=%lLpQnhx|xn)*I+ zEoue{GyCCVO$t(Z3fzJI6iQH-r)c6H0?OoR>Wj-q8t-}TbR#%OmOeU~FYdFi$*5UlLfJId*uuR6VfOgwlpdrbZ5!fU1s4%>Zfj8;6ihkbYBYL;OPq`FHf zTeV_ifzz|t-EaRWxDWH!e|l#MRTHJU@MJ($?xH_qqTFhCv#%mCyDIoA!(Q78j(Kg6 z@C{1^v0dA!KC_uhIaA_j`{p!6T}Slg;_D)%ZJt#Nk3MM*nKedNM~e6NWpm2AlzCS~ z+6-_7PCg+|!)J=+wS!8{Z`aEnSGdb!KZ~`fx1E}YcE`8zAu7&JaHS{OIW^JHpYJ+u zZpi_-r$^$Wa%3OP4+Cy=xCD$m?SO&9ZmIT)hvt>ZRwwU#(+fy@=!Qq31xO2~2a_Ge zTiRFo^Jyx-=NRv1^C)CAgpnl~W$?7%iTQC1Z?1)+t`u!$UlzEpnQJfy+glc8`i zbtglCg|`v6+C)bM&A}*n0Q>vIQ<&=|-?SDz&!+DDw)2+=J7up0M`ei3c1Ns?jNq9QI*l1<^f9xKUb19V?UqhX<%gU8u3pLl<5Bdv#O( z5n<=JJg!j{c@v3`uWkjGbuv~O&E0PMr}6v-hZz6f>TmKk_4Nh>!g9LqXnpU)x13k+ zLD8SS2cCWa-3gF-0K(W>;5mGAG@6`Fo8zK-vs^9{Bv{7k7Ju<{_m=^EsUjZ{Jb(e<)MhIUi|qM|ASwo{5HHxX zb=LJv(Wh;a6Mf$e0zWOae~I~t=A1~A+i)2sC>El?;b{v%ozh~YW7Qo zHXN6=M(}eK*g$?jOd>fZ+SU$}dWI`UtWb;7im-TWSPg*^yTo==}pypGzo})nwH*pVr3sm)V4WBw(3lR*L z%{(k|`_(IObG`Q0kRqVV{0IK=Es?4ERX*hx8OO2bE-8A?ep7smFKv4=5`dGaI?Sgj zd(N*S0k)$!{m365m_IG+&V#f|6k6SiJg<;@D=wxL52kE}$s6%XsJ99n01aB)nBxvw zb?5w3rdyRi;Skvyn=z-KB-14KRtaAam?!XGMiuRw!|we}i<_o_h|~##*W)*;J|#JY z#&7(qERwJZVUs>=&k&uO1ioZFbdPJZACjh+16fPqa6YZxOUTe(I29o@5gy}5z5#@_CqY?x!&t@`!3<%->^zki*Z2a5@3r(1LzhW#i1 zuC58FZBv48@k=}~S-xh8xLU{a0G%^Yj4gd-d})`mP>Eh_1l)6?NIQ3Asi?cSXa4h9 z+s6;m3uen7Yr*@)X7j1}H1wzXhWM^AM9shjlzgT+UMsS)UKA|xiqyX&$YJ~+0sQ(J z*nxBBe1>J)Nv})=(%#}@M56(^ldsigQ~kn9Q9(z@7t4A4CKUCDH*O|}mU>YY`zJ(U zb-!!oxoR%6!g}_Z29&!}|C*8*RQ=+^P5}-=$7;`XID$1byZAic7hyu0*iy=GlzK|j zJp)fNkZJMm!X@ymAZpKqZSh?6+y#E z{$nlR{)hBdN4Sqwm_+W}aZ3&!drP16S6o!kE_YVn!}oChwi(yx?D&$~{kBg-^1Nae*Qcu1y8#~1L`~4Ir_D07fjN|U`?058!*6QYZqBtkk(WjY{V<$Oj#Jed zLqdlDjpy#k5!e>nL?Nj0rf?W00KJl`qmr+~A3X%lFff_R1%Ay&p2Y2qNUHw4waIT;~ff?b2p#3v7TFaB^?_N$wV54aY0%i-Slwa8!ANrK0OOYnm#Zbuu3xRiCDU-&t^hB-DT~;@`KD;wXWDiZ5`O`}_ zb>175oIm+TCzZgSv`EtzMsYx_e%p;3p4_NE8kY&f5c!l7PA|SZ?7kW4spoxbMnwk zQ4L&=&#p-YWY5D}*sWYS4e&t{eHklRKZ<#`KFTZBT%A?uZSM7cT_Je}8(3_e7NImc zAPUNO24?rDJ3F*A=)0Wvr01X?mnzxxNe3;4BULRf3{}NOwEv8L%rOoc5wWPPL1`>g z#vRv#rdm)`!;03ow+}~^#`T6VI_GP51-#i{K?{J3 z;fT)rEy#6wEBu<0qcKs4lJgdpo;l!DFh;U0gz=H6Cn+YpRKN9ie`uxKIX?w4)*5-| z8Z@DHSu*rZmz`-Gjmg38@~qs_z&gjI>nan!~`S#W)><+Y(CNcR%_mzCAxv>o!FJ}TXzRgYUL zzDM_&x_#2AbEoS)+v=>7AocSZeTofCUF{#yHUqlF^A1<|Ka<64Shq9E8JB0KcUxvx zu`sLT&cG~%{$JV8;@GlrP|gxJ>*L8*ofoJ%$?R~Tg`*`|9+2fcG7;{BO?*LD%c@=7 z;x$CtYU^u!s!h^ax>=vSW0`5yWIQEi54S| zs*WGl`!g>;Sf94t*9p>CFVz-V(|v}r=j1uycAip=>+G6Ts_!k`vAGJGub9@UqX{?+ zaZU77gI!-53VgJ5#jHh5U_)_Wgy^d_-LS(Og(;?Rd&6qpB8nCQGp*}n6FtTI?uM=< z(03B$r5t$hZH~JOT{f{-sWg)v#f2<1Od)RXyDIytU2c6?H9aYET&+egHI^6NTjhU* zT^Wa0=1ib_Ti?(u*q__~CjplhaF$48nh1yQ18Upa!ho@%Xb{`*ql*Yb78%rLC0>j6 z%`YyABB$YneEba_e?ySR|5?DSoMUSu0Gb%7Eqm9lEI_Lca4SWOZ);zW%{2ytA|||c zp&H-`3g%Pqb`Ldu|I^GL4=Fbenm$k?rwoacdR~h^5uNgmAAF{{gWM!B9aucH6Fd+P ztcBrgu%oYCIm>QbsV-uinxxT>4TqZitQrxa=~H_u$#1bJ!9T;GL-wH1aJ`l`k$&>a zm+jZ%pn(rguXQNfpH{iYpHowvwEoyMwB*LQUqn{-5*ZdM$oV|P&2_~Cf5iF$Y5zc& zd>LE|!e7pm8R1HVWkw(g3m{`L+eYwn%nS;4is=Rtx2O7@yAX<2|Dh#i!0%vQ~J+0i}M@Uj(ny=v)kkR4(9;xnW=%6d9o27qf8Hxjt z^{Oa_Gj6K(T`3>`=K5d5>-V&ZbxMoVt_ox{m^SUfe91N5uE3Fl8J_8_qLTVYRSHY@c3RN?A!W+2nZ&k>=Y->n!ZYFF%*C0dL=lDUQ z^}zK{6cZAy);+U9OO=CQYqz+&6Eb`HwdC5)hKuba-FZa-I^!k4l{7bu79nY;yvBXn zE1r?Hr-~gHx{DlnY<2I8d0=NjJ2Ui6T>TdrH{AXig-NS3d5Fay;~Kj5O|(6xpyH#4 zl!pLl!W(qXu-N^IH|wR&LBbs6K|F(jNKIrRa*=4Ce7$8r@ZW{H&dv!Te57j_TZmnx zNSO5Xs^4yrz9i@SlC~>7$W@0vyME_rg8JW2KGe|}`Yo@|4y>E)7@f$?@f(#QvzhLF zN@BxQ(#u=V(8@NOnNcs&fCmB|^XYTXA})*59Y7&)-C4NhZ%oqX7Bkb?V03ChLTUWFk7%lA_IL~-1z}00lQ?lTgB=_-Ro}~9$b@_w9b*Cbu%|SpqGEV3y z7ztU*qTq(TklZwiGh|&c)1{o96jx62l;Y!#BM}^EM?CjlB}LC>0Y=tpUG<$x(7Ph}|1Me)j4IunuOwvx zQ~ClkWqeRu)ZW@)H7yrb{iq+!@eezLx=*jVtz7oLlK(axrrK>HLlB;~JDK#tELWXh zi{53JinA2uQ*QP8Lg0vy29vLdw(@2Mq94#(;4n`qZUo(_r8r$Y2?%+R?bw2vhB1|n z$(RjtDW>EH(dLYob{EAJKg8(;SeNqcHeb9qfhQ zfs=Ly|6A1y8pEA<0&t!p6=33y2oUEDM5A^raLv7q;tgYfEcrHc{j4-akQ6iok=+Vj zE;UfIMjuGO0T@M*Z zYU_-+ntb_VDtWy9;-#6BHThgLJHathZw~|&kuq;_#vyP4xTml~UlKA5pjq5<3aR?m z+nHj<_R<=~f>2Ulc8OcvA$iyEHF%{w5={2r733odDNm@^J;7!39+Y`}`8&!l6LjZ! zJjr~E(QaTD?=X4qpLnuGiGc8v)~br7b`y6|?K`4B31=@}KSQ}c=(dj3wP2>UM|z<~ z@Ju1Nz6cLBSHu_hoZGMaHE(6TyqQA*?dC6sN>uF}eV}(x+lN9|haQjqa44H}DjTXf zeD#K|&byQ}Ex<6$-U23l;o`2xMTEF1m&6GT*SBrnq(Frvdv=thyJZ90l)Wb}Fjc6M zEB|ilAvO+z}u8j9Pj^b&c0G`#R&8Kafv zG$eGhFY$&ToAUv7wY1oCB{omro(-XL4;%kNia@FjGgLvSgvi6es7o+QJ(S_%&T71@l{1-}^jc8Q;W50=D@xbZds_HY zeGaF`BwORe&Ur2X{gd|aZ(?Mlpk%ChG?gLH(7W(oaO#Bk4xbrEV(TN^jQ^_dzlWxV zPB=V{hH;fPYChF0We8&4_n78s zJm?%szF|{ua`WGLdP}EVAnB%fT4sj>S%K=`W!7K;x2VD^L%Fd|yg#QTA7y1J1s2WR z)&iZ^xc48-KMRg-(oF8O^3!dxb2~JLvPAkfMl!6BM0pynZ6t_GNng&d2Nh@QVv*CH z_fc&yCBfL0ZU$?_o9HN=iobgH?(4{#S%xnaYS`*%a)oitJ^&Jpm${Dj(6rVc)e8GZ zGiD8lvY(7AMbDib`+x5ypR4!SL;OrgcpYJiYYbwzn`zmP?%!{*?*=K^r7^Z#bY7?I z&jGj5YcHDw7`9srfT{OqhT$G6>bEUikX(YILMS;?cG2X>mjgg0nlZBS9Rbt7hE`jr zt`AdLi_#S?8|%KW$OeBJD}g}ue}W z6nFnb*Vy*-@yng;^_*kBU^0Jv2HSqnK>v!v!2holZMp3-}>aM{j+Is1@w_peS|s--(WhQH8)q z41e&AM^0G1$S;bYy9*^0+_#_X*A`L!wo~1p^m&pLTWI&j@x5xe-(P-G=S<-c__XdewpUZ zcGW;B^lj_U8OXETX?M*A=&dzLduLD^@D*EM41{}ZJ6WX0OuU(Yv%Jdl?U-f$xqCWf zkcna;Xf&KcELIa-7k@QJDi`VE6IN!%t;|m?G|)H%Y>z%abp>dX)lSntOq?l ztO=Mn`DbD->%LNhcITS4$i2LU3=;>LPc86CN(PLgYh;)~zFRpbLXmws3rfr=-&0~JvPW+gigBH*^MrkwR z{U{fW6KbgZI|aDAqGEB|tN$K*v|!&^|sYBWS*xaIQ5QvaJQO(zid_sc+*sF zx=@v}{-2}~cwYci9qn3UH6Na0)IP?=yuJzr4mSUA3@nF9Yy$>?N}Gn`GXin4LB&NB zFMVT}DtFFnpkMxmc1;&Gsj}y6S0Fq`wBp!G?vJt4lq&w*Q4-{yU~^GOInXF=Icsr8 z?jg)urhIHq@+gOq^7&jf}zmqtwI{rxZ;B~fg0XzFda5sE|O*}5e2!xp`T^MZA8>-BdpgVA$K zN=CBkC%!Nq^%lI!9;wPPzEa*`{<5uTUOdN13z${`=Dd{#RxUYf7f?UgG0&3BKl1cZ z9zOZ3YktFR{Oc#Ky8t}>9+ofOP54>iM;~xAdFZkNVEqM7mNx2@1U{$74fW5Aim&o< zjq$7}cg;6j)?I1~T#Up}(78okMQ63vgK>brhi;fI%~V;z(S|Ipg1iQOEex0T0*NzL|gpi{*QTX+D6gMd3o>~V(5ZuvanDrZ^?$#eGW zr0+jw6LR*xQmmk9ZVXr(O*0->y zSeuXogmtNR1yZp!?yWfUJxMnSOK0Q~q6n$M`7VO(AtL zxt>9B*#IM@}qoa0R~CNt;*rIg$~ z>z8v0HH!`!t{I7s_RJA|$1{xq|N<3ee37%mWw!{DK0e7xTH=M)gqCj{ZHr+8uv{zEEl^=*hfULZmdD2Lhtw3Z6Zu1l31e$R3%}xsVoT)BgdFP#ZOCab;mgPB(X{JZjtDGQtEkZcEd9*G(>QkRL=detv z_^jAwu2T-?eh)%Vy@;V~edqLhve0+2n{8hX96$!`C#E3@r{WhL+@hTaB-KS85oA&g zzCV+?dFCcx@biEU2SV#*8&cG)satu!v!=RF?LKN%o3`hq3K2IW$Y=4@5VQ29y#q~5 zvpKfBRSwM{4L6G)o-%Tfn|!jPUlB)2q7V9)UGEZ(0QghSY1fq&0E4fV)FWQR6!i|b8$!qa z{sxIAeb!>EPWi%FkW$^_?6Jd3UVp}BrgxuGh9Q^VqWtT+a%b{<=5v2qn;6V7Kr+7I z;a$`Z0xf^DnQw_nJ^CM)J^lA;obF+P?$cMd{8WbdCDDXkNoG^O9w=SO<7`Ak!H|!| zxb3q5`uem1W}A`s7wV4=W5jh>pwJ1gct%M3%h28#t*8?tG`o*L@N(Bk;`1W#92HI8 zr7bl`LPF`k^WSHqv}5kwxov#n6bqG(XAcf1HjLU*SuboXeMIT||xb zS2S1&fwzkZ4@Y0FC~A!Bb95~;*o2`-&b6?U#pXtaZIy4I+@99dr+~VLyuZu<F@N^nU`;=Vv2O*Ni!$oI% z+3ZJqePt#7X^G_1*$_Ki#aB7tsU!Juqj@jo=f&S~P>Bu5PVY-a>CtAgOkdibw3XF> zUT(OOB>8Ol!M_g0!FQR+ufMw6h0U+u0Xj`o-~TXs;2HP{>gP5R+FrSoS&pR@TmQ;* zHc_=z|2G!tm$I$^nBcS;G5wJVUj19K0d1`fyWHZ3uW4I^w%Ge!_0+$|3G>$Jr1upw z$*(yx*}UqNwg;7rshKi}$xKbu{I`_eC)J>}M7Ry?>Z)+F6=12PPW_Uzk?f|daSffh z-b_AWq*yxltAWsze!y>3Jsb;I<(_n{d>7Y28^bO?dJMCbLT3El(X$%mo+bX|2|*UpJ?*=)LFv?Od`xfBn?W0P@YQ`Jp^nf3 zeWx`S#vC5QcvM3kTz`Y1r7FYS&KiBz9dAbw1X${zK&9bKE36CQ4 zT-fl;0=!RIe-J*Hue2-@_XqzAQ3FY5mk;9$ks@bdB8`97pSd;#4K@S~o>OBTM7H0z zl~Ex^LuXwn{k&{G!zq_WgYli0bCW?=LXWG0+?l2yd{rK{ib({O>EIkjzpRsv(gQN-0Efo1M8NVaN*Olc$IS#Fc@S(y+94w=q9;t@+GkTW!~+UU z%tmB$ZPIh1>RX*Ezwc z{mBW+1X%0Jbt2e>k-JeUIeze6`Fg{qN%uEbql}69HgkZ}Y4AH(@M_Gb0iKKf+5ms* z?VY(dC@20VLwE2jf2nYKASis#LN2TK>MKf@2;9T*`+Jtq$+^LrqMnY?EI9H=Pr~$S z5#NrbW9!JSzJavpR%8%#L3t2-AK3GhEhY zznE|t*n6C&RxtwMUq5a7bz7!Ny*O|8;fG`+7;ilPM5_C!CzV!8S^r9^pYDaoNZokWD;8tNTj5iTl9^cQzbEd#C4wN|96-YjK z|9dEou%Raseht-;e9T5<+EmRMwVstm_+1Y%SDjvW8os_xZFb=qw|rqS(0G1!kT*J4 zlVJ9GEj#0&P=MBERE!nF5{L|y#z)$~67T1|6}vYQ>(DfE@a7bMJ!-~Z&%8G{aYXX{ zmbS{~NP4zrBJ2ZdI`0t+^T`|+Fdyg5UcF ztLTPJUuG2`OfeoS{gT1&hEf>n*>*St>C6`4_v_dA<*8@JA<0a4koE=Qp`AV{n_>au z5=8;{Z(JZ`ZZLUCbh~rHse79R?p;@8B$>E6@`*5@=>0JAft0~YlxG&d0BOHqHYA+{ zDZO3tNwdZWTt+P)G(~dwAYl70Y2u@usVVLpBAn#c;mk_^Qd>1+%~yoKs09E^+Lj+f zkhlv1&ysA5pqa@K_Do=^r(F*;)2{dXvgt*d@>C<^&#WuYgN$SBPh{7(B6&dm;9Nr<`YM9M}SvKl+JVCyLCk^!&)0!H(Km_?QbRz5Pkdtm$50F7@2M_9oj8WkJ%D#KeMgJI$i>@FwXL9 zMDF)espR9oy;C$(vhVuKH+t&N1I9AfO5^=asvEqn27b2Nz?vMOWL38^p3E~92vVo? z`6{Qd?@EGpmY(@sAA-EK+?=LtE6?&g$t1nhV732~DZNcX!gDpA3r5p)=y20e>{HWFqkh%<8E zp!);l%N1`TMip?Zn&u0`=A`kEmU&=A6a{pj!()*AmurcK0uqEdV@gLv!)O4r@`n)I z-(I-YdiQoG3bcnJ>4B-*oGh@JgVMp{(&ixSC1BV6WKgamV6sGb@ziDU^rz!OmxVDc z=_pO<@*g5?j=BecBQS+_QsFzq!kIe&$0wRDISW%c@|_+0464gcBC1JWE}H}w)ZR1{(|qWX9Bd}_h>udcG6 z3+K$mMQWiTPua0rwT+V z-QSlxDp$Jlu9YEcabBD2qfXP3rKx6CDF^Va%C7bY2OU)j50Etq)zti%duiFMxcC*! zJ)pPpvcc%yJ_N9x-6}S^xOP*?VGKY($?*?u{P;#V~p5GCQRHlVV8Ok+XhWY)j1Uz%TkdIOy6k67{84a$iI8uM5SXZG& z%}zRI&;zCIr?KlX5Ua2lF2C%lDtx%N zy(IO2SrxlfKB$7Sf$&ozjpY!JNrZ|abc-Y(8Z+TLtJ#`X* zftM?CZX6Jh5eg|W3;|mo$BQDk7z8e7Z)az&?vUUx*Ep4$#*gJD>qp3|29NjI`Zt0% z=ROvcEP5vfnR-I>ips8ta+2C6eyX-+U+o(YeBcyJ5ncc)&zK#5zmi_t0Dd?;u>Q7P zbtXlGX302ku((gIpiexjHdUBUY? zD!a_WM?~yX(zonN+K$BJ!)mS9xOW>5boN4}=@(SJW#P=f{)~L8dty}K_hB#rfsgzQ z4`x;ueOP-L1w|)$c8ATQ?QdIOgJWis-(iZ<{5Ib{94+xfpQo4TY0re0WnI2KdvE?K z8U3UQULIC;BA~H|8@0VXF)U&|T>)An({PtgRu9cZ+1W@4&y|oBXtFi1VUb($pER@L zNhvJR1ibAd!@TTXC%SQ}(=tb+4g0cO;b}PV?~m;tH}jVFHlsPPq@> zIVhphC8IXmQlXOfRW`jRpZXLUoV^ZQxTX$icX4JL2b6koLC-U;2I>BKM2z(JurrTu(1Ysjvz*c zr-_Z-xiv$wq7U(N$na)db5@e546N7OJ{PS%RP3bdsct^=d(M};%o_cxA%4)@$jQAc z$ZMI!xrj4UeX!-DCJ2w)FIb_E0AGeHjp#)J!@;*!y*We<7zjvLB66Jre#9a2pTM-; zdFD}a`X6IQFr@%p-fSLs=>1;kDWekUWtf9aZ>{?oeU=RV$#vGwLuel?0TQG zfum^OzxZL-Q}7;!@Z0pbd%q1#j*mE{|IG`$Ppi=J-9a9Ss#V=Ob${F!0)>RQ{ffNe|;R$Gr@hhmCx{zvbinAa=2 zb(x?p^-P>}d(Dx~|h&r)$UM;g`mA0AK@Z zEFk)*KaPH?h3Rn!6QB4_<+hM~(;Xq&p?{IC2u#)M_!a2;JyL&;;`1W4a=R02I@=4w zk`>aHS9Z~3hgw|`rkB`l!oyc{{!#5v|D2Oi=bO`~l*GSo3_NX{35Eylg93dqTV-2Y zyj7Y7_^ybtbR#Wwp*x~Whz{e5RjN4GoZHy&{mJxhw1U_z7VAgxsJtG#SBfSm&!Do^ zwO*8;5_e6;wu~N5;AEaJK=EB)n-}r<^CFOFPrpNBczc)FQQ(!)tH~GTb(iZrLeo6K z>%Pu5f#ji_E6?@Y*5dtcu!bIISf}N_@f2C(1Jk|>!O_K7FaL*2OGFU6@Z;pQYQuEn zc7q7y-@ff6{?EN#<)U}t9m4Oz-m||goNIMzQQDZw7TjLAD0&VTWcv)N2#x;nF0SN& z^u{fopCyc!2_1`#%xU#$eHfl`EL&2TmA|xLLcNl(xV7gQpvqJWH3shH8E@3p*Hm3| zKjE#Qk;sZy?YxrFB7Nr~<`(T>mYWlKpPsNqMbkL*DNJ17NIEK`k=QBDorc_`v66wk zYp5&HeWY=fXY!cmVwJv;OIR)XJR6LW>s>SVt5o%Hu_^kgvMdzu-_<#*IENM>hST@R zjMo;8Y6?@`ab-Xpwe)W|(W{*5>M^toN$aQ}A}~OmBPxdT4OS)L9(%69y#b3UMiI0O zp{9_f429Y?`b;3fI)JINjSwQh4bPY@VK=|O+?#Z{ zrk!$H8YLP65q&rJdXVqtF?9<9M5k(6J^-`PLR(j|zY*h~OJQ1*>9bGWh4*$NQ@EE_ zwuM~gFy!1k-v%>?%50Zad^Ol+Y<$=r^A@@GgB&ybO#h4JDyxa9>D4i(SVg)Qcls8r zFL*dl*m_Rx+(ic4)-%iMz;)8XoER(=EQ-s~WzW1^Eu&T+`t!LPQ4^r`T0c zs>}Jaz~z>+Ucq0~Rh%H-bJmiE(^Gj5hHk zv~O2;Ref;uDcee9!R%qFY!=qgdkVArJj8#d>VX{rP-wr)tuwarewryGA@Ov}K|B8U zAQbP8^AJqk3=;gCe9aOxt5-F&F!=wdde5My{x8~_4uXIPNCy=a5$R28uu&96e2qGP%Lqd~I5J7rxp$7;hft1Vd|I9OU@5{`2lR0zF+26hQTA$Us zO4J`aH_U}LDwl&nvpSI3%ghJreTlE5GZ`H$|D424RUYgjpGx`Qb!k7Mh~)>ew_fpF zZ}xwP$Z!}8FR!%{E{mWyOJ16mN~JGoFO|33RpE?VVqDkgr6HTaXv4Npi5YJh;n1_q zfn?HTvi1Dgc)bn&?Rf@nQQ)EyTwqHN3zb_p4~t-DMbem;UbUg=0b#)Ddat0f`>h1T z!x`wVyDd0)W@bJh__u`3!MB|)0pyZ^6kwkgu>Z|bM;scAOK51btPDiFW-kx|~#LLM2hotGeejvz)$gX0(WirF_6SJlpWV*czFpI;d{ zemZpZMbwgXXjz`=hn1PrH(Q+;gWC7&_L4L7j^__c9mk*I1kpDbafEyEjk)M`pzux! zS>=I0dlX5=7h0GBiv0gs0Oha7$$cLiBNqQ%L-!m zgFFp>8U;rfw|!31I+H&Izq+DqTeE`K8FlBjpX*NMXSIfG39=5o({guUO%9GKJIFg0 z5WP^ctxC_8J_~yH^M3hDx_U3$C;Nrs--9UPw__^_f@xqD$>32D^ngkTwDgM^^ucvR zen-w$23k>##Ga!c><+YG%pLdn+nB?(KTLd&>EX>%dz>@6$%EyYZwL{8hx z$RPpHp}YT~d9}_^`CH${9nm}TYby>u2_#Gw_nns?SX*GHy;HadZn}GW;<8i6&R!M= z2CNdF6BL4(Z&jXa*XHnix90d{H`0loNk5vu$tSb}a?LvjY)Wz=S9PW5p>tnV(_0Op z57s|SmQA^|-=#W8sc1daj80B&#m_UZDC6kA6w8m3ABIUdtD-_m8sa6ZAeiesPK=$o z=jroT9G>JH=};fqR>Uis#XR1pKbTj98$#+{YYuD}H{f-dsof?k?Zy8Nx$SBtdI!a5)Jc-pe) zOZ{u*bOM%6&9v(@i|#d_N;gjb-ElDc=XK>qk#3D(-Ns10M<+OhEo4i_?d3)66}%YT z3Vix^$XrjHDKatDtZdLqCpc{Fab)|Sf2W_gH@dIV%W4^HA~@c*;ptLAp~S~o3|65? zT97~Vqr-PGm{s7}%Ds=YF)~ng+0h8eT*$4$(Qqb^Ct%TbZLw8 z+U6^+_hZR@mu%ErgN9tl5?#pf&Zw*0X*$dXZjO88bl~wGu4ZNI(+v)p-RRQ{!4s8e zuP;lR?CW2zC*UmmUtbqT*y&tuJ~l7qAxQQ>T7K%4I?2-Z#eB9ZE;{xU0dr2%=%-!Z zPu(OJ0n+o3PP9z{wrQaUD_)cqx1>!Y`_3HI$^D?ah9$)d^G~emz9C`S;j^V&$zCC> z+VLMYG$i-Y#22XDXb$MsCdpj$Qd3g#%)x=A%J?dc{DYG5==Y?b^O?W>0wApule=#e zrYtp~;$x7iX=#bCQ>_*vc2@UegS#bZCsbnQ@^g4TIXtdrdzbz4Hg30J+ICOiVM<@l zndpfb^g?R5a>7|POU%G5iV#uT&B*P;=cuFS(!(@}{GaTQMcR!2bmqvG^EoV(t!pTB zyRE3=0^AymK+Z47p@M{hRs$LWD*5( zb{Gx_nNCKi2b41!%mgb9(H^S%HMQKNUVG!O(e~^Hdto~-5>k3dA1Bfqy_Xxpe=(-n z=vp6AIm&I8NU0lruVb7K9Q7U3m&wE*R$lIre$pKP*-;YZeLLWVzzt@9G0>Gu>HY)@ zeZvt0Y798}!o!PFVY>u#V+oouTw!rM+>nD{(pbVzW(o99_`z?&V_A}BFZXx~5yY+q zUX15|D7tAd!>eND7i!n|J!F1MqE5Si=7Tp?aa+mhX!({Sx#J02kEZ+TW+(5&t&61Z zi>5v3w;KRfYW}(V1J+^o{#lT+khRA(rk+BE`Ge!jL5b`_28r@IEG|1}U5f~XMHBVf zqjA5Awh|X_=E+(WrY`PMjhaIAhM18|Zr;ufck9Rg-;M_Fms#&}ed)_?IKahq!1GJO zMBBdos`&Fm!Xu^AM)69PPv(F>zEo9x;d!`;ApuNDd`$J2>el_0ww;Ftf3TJDVO4>{ z$r~N7IE64CxPsc{!#5E(ihT0>R+$Aw?=s@M+1Z?DuTiHraerYO-_IS87k_-Sj-dg> z8p#9Ig43F*ux=8>87gCf*-a;0*#X>9GAEBoj(XbY)%yuqdD5&Q5y{F}pBLT<{_kG2 z_wk`dMb5Z>3u`d(FIs+Vt5W9TVyNFSc7YjI zsI5CgWXCQ=woNU=fSQ_tbCE02WY}$IODiG=m!IiWD%C7laM3M1^K%$wL){ z?+IS*O^6^K%j-nOkd%b0;uh4*QhwHHqUrO&4@2Jk(DIMag_c=nIFsZtaSeB|vdqk` ze-LKR+kZ>YzDzo`@+>{q;SxUpg*YYr+IG*r^XE*pRq)t|#?LCm>4}ITY1<~!4O$(I zxBy%8-vKCkk?r=KXv=rqYEKsofY=mQ0m6F0{Y$Wr_uq1z!UZj_Xf6yib5HHa6Fa|G=4-LKQ2(w}8HdE-up6 z(Tc{RuQRuaaSWB9elIA=u_k$Nni?GOeD?Fky%~a{L&bv9nvej)gQmt>n>4l4n8gO| z0g0*ZMbJBikF@jVk5BY3zwDBUucCPueJ=sB^H07ERFq2{CR@0{^A(BL7;BBopXSMBeNhv5g?DJr-3x_ATCyUw{+0JWVIB)m-c{vh_84ld7)YC%aVoyd(r^{++FMYbXKNF>`Ndf zSRph7ZlCzvt@=Fg7aub|lq&60$S`(1UYn&k_qP{k(@jQlsM?Fg~Rh=Uca>RMrWzE;~nAP;Asd_(%>0nZ+ z@;Bz+QmB8se#`csd_`n;DHdH7zZ$lQcm3rIZXJnv@_3>%`qB1Q3;yo_!JO~oTl`{f zXYlu&n}Y|B$a(SCc@>JI<88d7Gx*}DPaLv07wy(W>m5ED9EN>OUU=)4W)g6!bJ-l5 zlcl_@gRV*ckT)xZD;?0Ax<>DMH{Htc5e=r2J;oco8TS6gQF?Cd3r|ubpq>8leRto) z+Y9SmaqlV)%K8W8Eoodm&^C*<7fF?n1bB`H26g_%AWv)}I0^_~&6}QkJ}t*xSyvWp z4;LtUNtoez>}O6A5TJB_>1&=ZZ~z?aCCQv+k1%Y9CxRO9+v`3ul36QY7lGMsq;||` znS2}fe)%4+usUenfsXIflnF`wmsKKq>OfG&)WeuY^T1h27sqp06J)y{y1izN4Vf7D z)q#=T?i3+cqJo#C$;;Akk)Zf_)qU{`;vn^P*n`kG&V|2os{1zs7fUW?InpSc8VVFV zU^(wgXc<0l0qT-UkXt2E#0fdTp(wyN_+N?5@g*OxMGApUeGHa=dJ&0KLDrER{(?~i zehIyP>`;WT!03(L@&LqEt1_@p2b(1xs@I`u%S9qT>_q@Zj#J_Rz@}7TZ{gX#@3~UO zckK-UP}9XPb7OWf&UkCnZ~mD=7T?PpIfzu+D|C34xa&ow#*q++kDMO{%Of#n=*eO0 zuQ$Mqyk1%m@fA;OT-v*Zu>Z6k?^8XJ_-wY8UGvkb;kT`2pr)lM NXWQF{mr}FtH zMZx-%M0mcU^n!^VG7*!oNSiwC;%tlm!`oDJi>{#UD2Z4a-)SQrFh`{nik1uR1wj6k zMKHTrIvq*Amz2duADwM-vl~by()XEFgt7X(zmbqfjBQNdxXVWGj<+{?DoKSH;V+(= z>&#n)yNB4aIby+*nObQ>wXd(=_WW?+7_2j|#1QMKx$0k;TJ9*St$}x+k7n8i=5CsX zj`&hmv+LI2iG}9*n74FsLnO{jyS%||k)MH5_Z>l~2Y{bY8x1i#w}`Uc*?&b*RZF9t zMzPW``m`L`gota3;Tu2GjQA(l`HcoO)maz*yr_S z@!QJ3H~RGcgmK8(o~UpIp7t`DWNx4HgwIlnp$Zy_y9J_)t+sh0C$d^@Db^P80hCp- z791meJ;c6N!!$$VA6#Qn5&G$mVID94?*Tva00!Ukr8;}}%kM@H;2gVAB==7`Wt;H1 zq+9UXQ*622<`BdQ-R%A}0v0uizDs2t)L7YUm^cc^P{4dLXjB!DLWNpG9z_gX#>^JI z59t~8H7^kUF!&)NkN$$qX{1Y6sl&oi;lDIjkmzp9qeEjit#)#S4J-|qF1zjj;F3AD z3P8Y>vXg>Pel{!c*)!-tm&Jw2Kx0v{Bgr6C=yzZ!+5=Ig@T$}KPTlet*sjVLfbLsv z6`E?*eke-E=QuDw2e>DaixFQe1yAkP%gh4=!nRpuW-=XX^|C_gr6}#TToX4+8PqCE zVOt0UF?m6R#{rBTn^wqfWh zoA1U;w7K8Dz2x}|uiV^vxiwE;OXL{C_`T2yq*SG!^H?Fxka3qgN)6Mc8Hv5&2k=L+sJhdC z%{PkX^I#igPIW-$fh0diof6Fmbo`SBM!vp>+UMQ7%-Uib(PzmraDB;VXv?4K6~&6e z8RcBu4})ed?w=mw<5^ex6`k@OWr#~pd&&T>5)1lXz#S%ryA^*zr41OBG)L=i-A}%R zMSkp*wiZ;UE7v_PD)fg&wy*z&8>{*E{*CvdSyZN(l)jHlP(kg;&|7h%yt_(Srf9(D zhZ0RVouK``(IzIzp=IX)vKrE4lg>LTmv?iBE5o5!ooZODFi?jZi{}}LT*(Lp} zQ*SBV-@`oK95D|4tZhI%?g5BnKLb+0#%^I5f+~P;LVfMOw;{hWYd`rHpoc7x|D0L1TEaNztZ(tS{qb6mAZ;Gbm# zu-IF;$x``#^2!w_LxZu}>opWVsfI}i=b?j=YuBy-l?`0^LJ7IMKupG9FO2>+aC&6h z&ocum*s&?>n1)YzvWymy%{Hrf8tQfi894kK7zS&hz_A4Q0G2e5wVo%gE88O1-I42u zO%ttqhpTA>z;(;^|1D=tA-_$nkc1o*;ZPoclh3#i)z~(+EU|jI;+0@=YWo1_T7Cuv zf|ZBPuc}P2=fFwo5&+=0;5M|pID4Mi!vS6}WczK_gFknJj1&pIoROcp#QWKM&^(bM z%W1rdD0vkWz26PYGZ8h_G#LKhH%P`?@*f_+TfrVdDZVu2?2@2HYs#`RAiSMT)?!-x z96@upy)I(9hQuj0NyDbrnoaJ*68o2uVu3AZ^EHmVMZ3$Z5@;%0-GUJY{av3sI1m5Y zw(k$KOqYu*b|t!1=Zv33e}1}UPCb!Zdhn(h=KS3ROW`1a42fyOs$5;!qz}U23uAtB z=nbA5+PhiH3?a@y8t(YQ-~>9u7MV^NYhp}fko>tnuK!Uo$nzfAN~ zH-Gazl#+FKtJ={^Ig3~bKwBK%F!EWSEPqRQD5u>MVD?5CX7VLQTReBvX3er^(LxW) zop6Nx8GT|ziK>3RU<}!#2QAOnykE4w)W(`_`q(a1t;hvCg;n8EgglmZIV-uG9J}81b;vY$ual^EA`ATq4(Nrd{9?R zFKOeQrjEl0oW-aiz6gJJfA@|!i8RQ*u#+S`!UhwvsO<=Hf`ng6A}mI&oq_B&_3-D)xh zY|qZybpw~Ap;5L=v(GjWGu__rS4{4s>{^bgtC)Q1yL4 zLNagPHJ|jus@5rcUn!B(+{rN~=vgA42CZQ@UV@*xng#0T?SWVrVO-I$R98AyMagKQ z!X{VknvN0>8pb&cEs8mE1Wz?b*B4h7?>Fu4GpaS&B!=$Xg~X0!l<%r8W3m@G9^aXN zuT~LLQ&`>I7lH~qx}|$%51~?<-}TSz`3^r&uLRPH6pasDqtXxIZo$=4y`PWNGqyTezMn>g#3iTW2GZtU-_)4sCoCB=di7yr zq)hC65*D|9NI@8;1}th4p2#~W2b@Xn#|)HRZXst}A-hN4YpZ|mK8l)EU9QOl6(p^`tV<|Z_?{#no>6dI z?IMBaJ9c?Ws!|6^wj0>paXS%m+$EYfzw3og%paYM>1ryC?o!&J!SnaXBe}K+%7v%~ zvu3_1X7(@oLg+XU2*q4*X%CVDt!yY~6R`I?0>ts~j6zxnEfqzp=|W2P_V4T~FCqLV z|HXLZM!b|)=(eRPGC6d|A>$Nz+M4m7(1#oqCQa;+wyMfG*xYT?p)5pSTqEV*y9q3| z3jQ?PnLJd}Qny5h8o@=XCaHH}sPRSthxms9FTdgUV_&u5%0=GQp6qifq_@>dmgDz> znKRxmMIKrWMNmXN2=Ce8B|gr>PYrcO>NEA^M!I4Fs&$u!0Xx|rSsPj)4+|5Rt!A9H zb=nL209UXyv!QXaQNmAII$nLuzM^|L_U_^8vGaYQM@-^}zl9lpbBsv*IFX;Xi@%GW z{k?S$#9RISJY@*{!Pyk9Qj^nS#_Bw5R+P}KJFd)+JG+RU(P23R87e0~E@ka31zdZLtSlZ7DJp-k?RnmhoS5r<=hZL7grZE@LdOLz!{|BBSq8pXfNB{>eT(o`04fx=9Gfa$SHX zyl2F)k9bN9C3{t|xvA5|kL(nLEb|V!m8~_#?MDNxxhma_g?TDn(ml&O%UozZ5w-th zZi2mPPBa~x({}<6NtB(|(8}_e*Z&CfAS|mL6aCZh7n8Sde&C{~58x(_xJA_QTWYT6 z7n2`LScEaW$mcDgx%!0Vq3AWUXC4MjO9LHusGr27?0=4f2)J(Cq~_*N;Qp908<}#& zH!TMYCU$2!Xl&161mB?>F{^ve(bMOl<5r*~*>x+NIT#U$XgzI?e+L~cqr$XD&%e<* zfA72FD)iy1UMaJO-(T=(RS|XewfWn_R@?YK*u_=|a21@JFL^<3MFZAewr z(TTEhYK~QXstsDUnS@*TTxJW6I{mfOT7NONk*%e(IV-(qs`v~+zT_j>+?sT6BElWv zHZ?r>E^RjS#`&L<1;6e*xZQ3*NcVUvb$~O{?Q@#y?xNtqMRrX)o6Bo0=I!szldFQ8 zRg70rAchFrKbx33>63*a0y2iqYl>;5e+O=+tEo5u&catut?X}x4}FH&qi={YZv^*N z3Rzz_-hY)zuC43aqkC>h6V2LMdyDqmJI@?$t+$(-?H*|TWx~TP>QrTW`pK|IrGU$n zvE`#;+-&+wT?eaVT$!AtD;@$@kJow@ zp@;MrO7CG6GOTYKHJRiz;LPo$@{KcaH7S&PGydHokS&&X=s22E4fV}xu{?g$-0U{v z>cST-5mnaD&hGtH+>jVAU|);SeoklY=OGrGW!M`qZ?}JZ|L8lVINFs|wU)_YXqxRJ zT{+A1TqNM|ukwQ(W7YQBZdh$(T&+{z`$`*^t|vJABgZt4svE{r!yC^i2x^h z?9umydb#XME{|P65(e;o$4O!+&zobrH#q?SF|^%$BP=F=Q+S0&1#JHrm!{wBxyqG- zi-?v5gLW#1(d_3=7y+1uZL0KU&DYMPYnH>UaMrY{5It$?d7Xv2foeo<$+i8jdV*C= z_N>(GURAW1=h~4=@F6cI|Mk83(-)s?v1s$6E;mk(ZF%e|l0|9zOz7X*!&ZJ97}Fm` zHpUr(&cvE!*mFM%vB_1xRsMiq7uk0JX2U0+G;|*udr0Pr1p215chZ+JGo&BCDD|Jr zr_WNDk$bPl4Mu--e`p-#`HeU0j97FWQkLSr0A~@x^yn{!j&t`oEQMf{?W7m1mm~JX zfx-QoYtk^nn#3N*t1jg)_@S}-)juO2?cBhfBs zD>KNW4t*qY0QstEkxhJ(ThuUq2-*yOG{otk(T1N=gh(?K^vMO&u)=N~u3G16ieq`i z?=Irxoux!wI3>5k|7ISYWGTFh?+zHgkan(IyKO5&KP?S^Y3ug(TleIEO_)b7S|EWh zps1*z8pwNCMhtlLy@rb?r_p~(*vj`xsVJz?Zp4iX<}t<0}(TT$^RqWG15_X$0#Xx^m+BHs@Er5tSsP)fGZPEk}a_BR`id% zJ}YAx0*CP)wvXF#Jw_-8Be(EFM%7M5xu7zG^ZNiZX8$UO9IyA1QWlc`gQo{jCQm1| zraCU*>3XSVlPlL`pyj{EgbThfF$AuPxeNpC`+~=uBA@<+y_g4t2xq&0`(7{Q;Ic+~ zaL4o7%s#oOA#}Jl@#MC^1H9{QXq z{X93nPJt{Nv}neZuK5h8!oY+2L-VJT+SCj9zGNz}-nzKmVM2q-U44o@gKE_*itfd? z3Zr-E9Z8#lj}_bFNgcn9gow=s=<;MD&5{d6bX8*j)AS>7XWT9mQk>$AA6nNeoIM(w zY!_$g_fCiFWBkgihD5Bt+**^%++TTekElC+r@&{-{==eUp>r!ULrAwzRdAE9lg*cL z!t%;i(q#rD_sGixbz=+P#eZNo>UKMTL!;Qy4Kg=VpV`fF*sqTw)Ip`+20k}WsAcAA zODt#fr3xSnbI*H?4PyyQLVL;`uCuAy= z(EepxL+wGpZ*eUj(UBegoM?uL{j}4cBt~Zsw;ba7orXhG7Qe_Ug+d19)x`+$Qm{Y_ z?SOD%`HV<&qeA7*7&q*r;Hf&H*?DhM1#R?A#W-K_0rT@;{;@+}d?w*_-{*$dZv z_h2_c(pHDF16A$f{kQFH9K2@g=U}L1#LN!y*QM-G7sxKx<`UySi|QFBx)pK-4wMT( z7+qrRJpY;Kj80ZJ)_UG>-amJiMuqihvZUNOzb~H1GPhS!RTG7+l^XO8Dq#&>8|avD z6N5Ee$_*d4|L%p1eWBUNi{9LcZawFDSunry3MDQWiw;?b8WfJ@&i`My^ob99lY<(= z<1{iK3Z>gsiyT^QX(OaHu%t({x}BXW9+AcisqK-v+dnbZTN=&+-~$}=@KUCUzF$;1NgC9-{`@5Cl9vs{ zdPZ6Cr3BPHVHd(YX8J?0z&2azInPQp^-Q(1=aKtSjo2mwAj5TP6ln2d{-V=jh7BtzTtT3c|)>`GAZ z7qyj(q(L3VJ&16N;OUYfccAM2-dOm;Sz}->bmghnX_^-xYi#}8Pa||A4FYgjd;60E z_bSli4!l(us9(Fk0kQ%F=eab5E>Da7a)*l{Lp!!HolOnp>Yd4n8|s^hw}8+!3!-NI zdMv<6_aT0|{eAMV0*;>E3w_Z9AP>|Gp~Co5dD{fnxijvO3y}KOaBlY9dxU7OXPoBO zgH5VNynv93KjS%|2P^w79m6x>DsImhl)f!JvOmj?;;@V7Lo41kmsg7O>?x33S!62= z{~p`fxcnBe47bRWP&(N8(V7{&rEL2m-@odfEbdN5)j@dWdN=Tn@sk%yzh9bG9Zm;o zs%@r(dQH-CzlbEQCd5N6LH(IWpMo{NuruU!C-Nxa6w%54RM#1O?y$IenlATDQ90Z1 zKh{74S2p{umNj6OI*-3l35&Ni?u?Md;JV|C%|_K3iJv*J_u2k#v8T40ept+R8Shd` zB0t?G61~S2nApa@HMcFB+N~c%Yo3O5p6Kt^)D~@wZ!_nKu>0%ZFy^dv0`}#Ao{by5 zAbw$d{;6f2Q{mQQ+h2c2!%_wALo%w@%V4)vLy5Bz>3VP75BUn1LXl=v%LiiDJkadI z3Y;#()*|Q8z$~81^(Y^=uVrlIHAtbV{?C?4sROCZ^;qJZ=?HHe!}=Puf^7 zXt9@EABaWCrSKR>G*+IOq)bM=Z3)5x7YAwfx}2~hxu0FNht4x-Bz7K)HX$d5mL9iR5Gth}+!EOyF-K*t!)2f?mEh#+nvdv8D;@5+d72N-7?WID@(7 z^whWKCM3S!>6V5OFs?2op8qg#KcA%d7Zxtw=vL}J zaUZ%ld{v&U=8&uZ*mCK=1*_v-`IZkk?=Q0A?_1CO3xpEVl&aeN5|@adve&}@g^XOf z$FrUAYEI#8TO`BwKWC7$FWZav3wbVg#sT4}4}|IZ)z%}_R7|Uj-Fie4;(lBw9g~%J5|N-e@01zEN#7 z?YyMsnjz1P z15ObQ@f~A!w%H6GGncf(y7m)k8;+A(uT#JBvP$K<)lwPwQ~gsv=|}3WvsGpiH2`rOwjF8Ev*DkO zzBW`R`m$o0_kkr7Xzu%Zb6%shlgui)i52=1dt>-2_ zm=z&j-N<^wUV9N4FdXvp$EoPF!xoTgmM~c(f z*fxr#kWds4DE1VJ-Tt9@GS@;py@1pJo7w+ElmXTMXWlxp!5-U?6YZcf5j_{Ge;tJ8 z-iqelX&1Ze>;{}5PsKwqIdf{l5icc9w5%&4qjNE&cEGdTP4=@d>=yEvoF0c=Wh5c` z=mL`y0SK6q7D1h_lwHiHVw3;%0LTaMsRbQKmkxe7ZePWjL<`M&H=k!wJ{1l{?qOW_ zF3z?Wh%{B$#g8pG27b^(#B4JHizrz4y+GUb;v%><+^_;kf#uqe*E8UI;F%I2>bOnd zD2TLaz}|A;hqX>t(^!I^j;@3Pfeq)O7cB}tSv3@oJ9h?RuCH;5Fg zu&#(?{4Mwq+pxU5qBus>7f|ABlk*dTP3#9G5 zntr{*4cSs6E=muv&5*@v5VRjF2szBTpO|lmU3mBDHy^*0ehX50FwrPy=abrxzt#XM z4(&IORz~}imbkqZjz(Wit#*yyKAkG5IsSBzwO8^7dl2D^V*T&tuXsx^RDTC}T+95Fg@)H6AzV z>-an`_=h(uS!fKg;j^m}Bjyrj6BILc745Tu@hD3EMYng<=@*y&jQ$&w%;OI@TBoMotEcRi>p1s{fzOnrV}4}x&Gi>-n`r>Q!#~N@~^31E?s1UYCSCg zKXs8d&$AU5mGm`2{~?z9oYlMWg-kRq=unyhgy^&6XcZ;QCM{;<_w z*xo9-ZeKjK-0!MrGn{x4Mwe=dgvSn*k1;}cKJ%v;#9mHdyX zwL$KGYev?sFcWKcS(BG;ZxQ)ZFZLX^=s?KOuQ!FSn!c3RrqXP6k*SsTNd+-=V2E95 zEj?r$p@(MNB3ODI`00t^2608y_>jl%Q+!dCzllk!u7Tvcu=crc*G$seHVm@Bnt1Zr z2c(Ru1G`XKdwP-r6}T|QS!jD>Vd?4RSN4O#s}uF`K5hi7ScL2kyU@gM=RAEup#a8! zTZ#zdPd>R~r>`K@IPCL@5-H9)=4|(0$;2ZnvLmlx>*1u^8_!&Ov`&CWC2OYG->a2z zQfzcZnK-pBwrc0typgPFdo`ZmD6f`BhGi@V#8_b{_5MRrk}vre7nOuZurc6e|Bs*v z4);qOh;g(0la918`pY_;ycjjB0k`|7n_78gBl+bc%#D*qy!sA%MK_M*&TmGQe~uEK zJ!<}#-72!qBy3vr_)12&ypYB*=-O@8Tg<=c7maw_4}0CS+QX;NwlA8pQ6|yUo_Gxj zEo&6b*CBZHQ$t;y`6Sb1sO^5xJjOfE z?NF7GO{=pINEy_?a<8g_^)93i5ca5!ZIu@aF7P_=0jhCiyU9QuW!{tYg?b0)Vc zXl~_eZXJ1%hfoK~3tq=ayz>%^Exu#)6f%683q5gx1%xg)j;KQ-Hisz$0PJiPNOpvY z6154+?_u5YaGx{s1^PkYs};|4TLQzz?}Ib|A?*S>ap7^uvpI+}wYqE@ND{^#2p9dw zp#YF#0S97+h+}ianpd?A4}>x~$j%DylriLUETDDuwzLYVhk_RY{!c`;oI_NW$A1m` z?>}g09K-_ENt*yt5%51m1x#KpSp{9ISvNkQG2itLd2ER~KKd$h_EotZ62y$CKw&Rp zVUOk(NOMIQ$fNJdBto_b-J(9I4zTW^xxU1?aBKNL!4^cy>myVfj0VA1L|(NMequw; zH-}I}DxfS7wO@!(C3Oiv7msjWX9uJ1N3>KE{M)g(YmixMtj}5RDH#D2IoG5NY{EiO zKn)TS47byO|2zC3FA4-Yooi@%5TPIM3)*2Cz1D5;!(v? zZt7SIIt%yQTKxexD0yVMD-d1%^}0%}B+Ab{P+NFzT{bz7O-be9cNn_NOey7j8OjG+ z#3w()*d>7#`X(gxmC6qI?qqn5UlMEchj^+SxFZl$Z;kzoi%xI-Rpm%Zquac5rJ#%_1(f-`F*fCBnQ%j!ZFs)TPD5Pz!?YoSgpI?>hw7`eia`c@ZYxf`La(*G z71wgh?>+2+*S4y?-5H;HG2GujES1i1Y)Dz{GSHY$8Xu&`+`m*sxG(zRp!_WzdKh>v zC!eK%hXk@z*e!nU6LW#)(k?pY@ zU33)RdjeT+rqRR}4AnBI;I1kEKAPfT%!U*G>&1UKWJtR9iRMUb*!=y6JAtJNXVqI^W{2u4-d(mTKPo_lIu;Gh?R)NOG5d1~(#HqerP4s2DbGU-vHN(Zl#? z#5Nj_XKQd+_PwmAJ>WM@m3kp$8I~(j7F={EKp)!4fDsmKmFdsKU*?XmQCWB2`srm= zE*?;cHYO@$^d3sE1MYTDCk)kjJ!sA=d>U@U`*L=0*C)NbT;3kNpBETnKp)^<@x0+u zp(|0%@MH=ll4_8gC+KP99R0`G5;BR$H={Nmed&|V@mpT_p3JiF9A}y}@|SV3ATDa( zwOje;*mXhQafY{o1iiLL4?oJ@dm(bgn`WunE&ZhGj@(pkKJsA>5AtbZq6JrMqqDeu zPT)}T!tyIBQhwbVyRO1(9~xb|;7>>U5a1gyA7ich;jGPGf~=l@H;^=6J3jxKbkz*+ zCL=m{m#wBR>T%G&TEbR+RKcw6@A#q6r!o*srPAOmYn;M-c`nFe$2XH!$UssF(b%x+ z;Hb8maWb9Fea)FmqYMMM`i)<#hPUKs82Z+DMFS`HhU(jv$X#yb&7PhPmoBD%sYEHk z`M68#e@3KbTeG5J{JnJ!YDeA;Z|AeM`PT(%e{&&pQ-v%nD2f_NUmrkQXgNb(Cvu-47jql&ylp1 zE3wj}ti)HkyQ{AuZb+TLSN@%4=#%0>akUm>p8)LM-Kd=dssX-y7pCmd&}&cggd@z| zH}dC5?>PrCJ<}GhhUQE_?b^N%kUq zZYBfIl(qf*T95EZSJ8Bq;^YUffjUaAm<(r*V-LaH5vQj+C}h-ImNFc?Z7SuUtM8#O z^zZldh0A2(NK^y#HICbXTFvN9eo*gl8|RElI;E|RNr_?mM;DO9NCo~{YZqMVUeQYJ zO*=X8%0+z`)}su0bx2^3`}nS@*D+5s$a;=j;;EWRX>FyzX&7;xNynDqaRO;7dI;JR zJu%yN`|698&WuY?i$#sf@%**Na~sqwF~jPb^|JcH%@0>TfkHl4zkf^8LM}fU-cIfi-7cP|_}>WrWY801AdO%MQI#1h~9^L*(#=OGDuC`-O{Pac;{Zz4U(1 zVa@_^UB{}!i*n*+$vFqZvs1ppQa<3$#VD%?NY`|R`J#o0We;bKKn2kRqB&P{NH}AJ zE;2&ODWkA6px7QsRH%if`+~?iaenY$F)ad~{{rGxOkl{u`U?g(imW@Jh(eTz1g$(S zGF3k(j}FWeM~f)u6Nuom@5&T_@^?yI^d5kO@;bW&K;r%lYm%@c`#eA(F^qycvN4^X z0VbTUPA%h}Oai-{&LQ~N67_8P^**(D%@ThP_?-QAR{3`>_DE@(eaDnEqY%We6_DeX zuHDg)wG6Kf&OyiANytH149e^}YJQy4PitM|(#wHca5zw7l@NaI+m&v$LXP@XbX^G|G$K#Ca!&p zv@{$j+;Aq5$9umq zhQUF@|FAYnO^M7rOOw+7%e zFrcdqS*vHee2;0mE?onpRjOeoVb(VO$^Jd}a-|j5P)4A0&rlB!>%!rD#V7mlf6pPE zdRh}_-gctZ4yzUdZo36SlZ z3#rDF>!#t`G!)x_6%oJLEu+{Q@i`ol?IO6<_$rHFE5=1OQbJbE$oa; z8`pw-IocpIk9qa~Ccj@Mj*9_W9trUN`b{}tHSHul9uD{EM}1)c3IN8O?uW=F#z!c&{S)Bf77-hwlN`-h1)$l-?s!sr6ZbyGL_7ch z?D+nI6iVih(`jIab-_Scz~J?lM$41)`Sy-Zx1=6FKie*o;av4?pO@XHyQEWhA|3ju z1Q|0W9e#G8N;#^4F#ABM5@MU%%EcpPLzMihl;Ra%O~vf`3k@TTlb2kt%`y+>+1wk1 z=Q%8~J=-kz@MY6Dv=V!|p>6mqrBuzq2XS3606c~n)-6=Me|C-Bq|CG2cg3j)M{n5k z#(3qdyST$OB)LDee+6XdP?RBM&Q?%4BQaG*Azqr*N~BM-_$UG$KViQ^@0bzm<-(dE zE*bV=$NGz2DUX7i3c#33kaRvu-ox|=JT_51C!17tssG_MHlysQ@cG8 z5G~#vbL!ABTtv&(jK503fg($naS>PjA8rNnQTr;k+fZ@&l-B*8Qy$;GG}g|ZryA8? zY7`0*v%Q@hqSbLrEFZK}+y(Zg)CD!c&~;t(+!KnLB@?M!9CtZ#;|7BdI!=D$9JV~7 zCL_*N@o_e+!?Y;K9H5S{!mevt){5F>4R!PzUhBM_-t_)!k%W!F;5?#OTDhC%r~4jf zBl=Lp(;I4?$yZXY+HFcG@j`HGYt_-;q12+;kGF>~T`JYzG%;e~3X@ne5hHs*OT`sh zLP=Y&ZUi-Mvh62ceCjJG#|AjB$X>5*@&SO{1B8I!UUY|Y(=BvFfd#xa%puz=Xg~2W zvK_75?G>PRgQlIE%%kGXZOMljh@ceA zFfj|T0`7laijrVlD4;Y|oHvaIhE4<$hF{E<&$cwNwyw5&#ZVG2+GE52cwP9)O+0nB zJFBMHZ2!T)MI2Dk_S!UVUrc2lr?CJE)NuCDw56oM4uM2BG3E20Y}i3(*zN>$2vLN$ z`pw=*96}M4rROj|Lq!0j1Y5OG!m#@8QMEGZXb<}2#0#}jZ#WD)rud&BC&)9S7!nW& z2<*!(Vwr5IHj(C|aZJYVzuK!y6NBl&ZKlfr@rc1c|(AKFQ^7-HI z6!YxtkM+l2Hx9pN7D{n z0V(NbKm?>gq&ozup`>GIq+?);VdmpKzjLnZ`yckc_OqXR-D~|kquM;?8nP-Hoe%V{ zkjNAN(6ww>`SWG3%GDyRT#i9e$BIjk`_nF@=oTf7pWA~*d*nlEt})i|`{+C^Qp;F%`&W11 z*S1hU zHEP#AlgnDq5Sakd<#k0R_ag@K)lefIzC_J=c7+>XYJtq^K!B$ zJxO)dXfI|Ni~#HOq5I&xcJ+Y2$4pu*{D5s`KZCGieYyu+!eu8({vBLjZ*SiKke&4? z)pi9VId~D`M*HjBO=?axAz+o;JM@uOewv65MEt_Ga;yV?{e`Ts`*sl%*I|l|kv&_%}WrDtGO$Jx_L#dfUc*uH-UwOXbIGwbf zQ3LePEai2ePQ+dY-DgVp%8kzN;eZ_wIYV7PFo;PtE&|O9^hOHyU{d_sHU_*;rO*@` z{AmS<6ry~|=&3h!KdCnXX=-Q{LR~8}8`4u7L^qcG=mr8vmDjoQ#d6woz=x}F?j)3b zy3hIV^7f&)yURGAY%_~=6WNjUsu8tg?SOqXecwM5vaE=;!?}GYTWZ*GTULHh#8x5j z?=Rd$SYd}xQuL?%jo76O{X^?tWDNvC))zbVRm~ic#_v!AoOjlCk7nPQwU0bq^?+Vj zzonjh>nRk_8vDWgW6dNS3vxP@XL`Vk|2p?$UNjhQ)&d|=;IAd+){M*z8M(-C%&sgN zJUQ>Q5>X$-F^uNY^*N|~uZc(pX>g2tL8zKN@|3{CqJRKQgjB0CDfEu2FnSmvG`bYH z_My!&Q4??>X$vJZ#o5usb@tg*6 zuZruDYi*F<>4|SEBjl3T0u;GBDbh_|J2He{XU+~@-9IMsBz2Hr|0+F3t?yNqUA3Fk znzF+^iO4U=?w0Hpkh{^j4)RQg_<8-HoET3?0Q%s+iQ(_T?h6Cnb%12rqxwAEq5Xm2 z2v|5uBMxnS;RZW63nU_txFwcF)#S7oq9*AdAm=}M`V!gRv>FaYW{q~R-U1{CeJ{PL z%~|gwkD=ccj+8l&>+_*8*kz6|e|Nn7 z2+PrI*zp=t;BX?qiw%1Ko!tou2Vk4D!-3JqUL8}=iuj64dgMPS_C18?*L$Cn5K2?k z-O0qP%oT3jjHMx6IS(o^_?(hx;6Tszthq#xL;MBwq(M)Qm@OuEIlbVy?|ZHktH+4~ z2S8ZI)^=y`V&IkSY+^hUkph@;m}Cx2m|cY*f>-prjstPt)uEJw1_IE9>_zeo@+J zU{aobUb+f(tW=3PvO)aH0;jku`Yl%@g6C6s9<(p3N+8OB80q>llQxE*q2Ju`T=qvj z#Ncnlv0`Jhw}mGVU2y?=n2&3b+;&64V}59#nD)~XUpPerdThy)D(*r++k5&SBo;Q* zEHieB&OrJ=`_=JD=JVfC1`(5R!5|?TJqh&Zp68B_0U?JDiVeRTd;`GRZh=X_kdl?^ zvPtlTwoG474!lnhUZ>}dYwP;4NsNWqD&X_VMRd{^JLFs&-aKGj4gl;}FAI=p*;==G zkrUJN{{-zYNYKnWp@--EAt_as!Frc{bjk|z!1N;85go4TR&DLp$gVl*-_D`=fUr+0 zMcx14Ht!`5?9xnwdcioI6sxz7rP((2Rb!63n1ff;h_`uw+TKj-uO23drD`GIA`X#9BdaJ%W?J`pW{*OSj1zp}6X>S2!>rZi10<&%n#wV2m%NK(_4eXY!P~zc!dS({kmR~`I*Q~+1Vj%RI5pNosFG2$Y zQE8~J4cT3EVt*8|>jrnB?Aeq~n_frciuT3&`s>HrUiKiRe8|QQa7tUf#W0~bS+hW- z{}I77#ur-ZQMl3~#y(-hlAa%Q-f)pV(!>srvHYKirY+$7+`W#p zaqSCf3!!(dRO`U4YT`Xl?2+%DA|hU>1hi$C_j|b5I)w6I+_#YGJw;E)%F*$*;AQC5 zEMLjTef=8%J;7@MxzPS`MW>d0ORzC&g#;AR6hYK{8%(7Fh^2x5`f*+PH_X3hP`WNd z_z#c&=XEeB_&owV9csXh?xtsELRX7E*Ey|DTM2rmT!9y`>mLS`0mr6x&wgli?`2yY z5qg0SV_!Y7oIKXNncm+F@VAhbwcbX_R~9jGU^5^SUnqs zca96(%nfFZ6aeA|8XQImP4T1Hn9*a;UR00F(QcQl6X_6n*+NXBY5k5r;3AAM!dX;| zVP>o2_$?slViiEN?a(IZ5qk9&D=XR;_O7n+{^#QnvTFdx|A3(2S;xvqlrof+%t~bI zXUu=sfk5RQ6mg9Kh9Z^XFGd5mDeBJyNqw@}?Pz0oNXSL_!nW)0%Z)m@5hd@^;iw>6sT6Yb!Kt6%#=}bH<xhZC)^E+et z$3u#CzhUsNZFC-`^>p?JaA#GMcni7bis+Xa@)#RU8yJ2+ye7wSG-N~DDp0MmoGp9d zelWbx`fjg3j;1DNI$`R`lT)8hYPpR8REO-8*1|Kj;DMAMbli3M9D$c1=;p<=rPrXr z_pik6Oj<}?j4~z$?91>9*i_8mY?LVutZhPY>X$RCDrOqqMzYFW=e6cfSTHHQA>TVz z))@Ng{?uT9#^c|R?|BrUl6hQgJb>@!a>e(pIFycag2n&!jxyFDsvebFs8QQKO7n^d z-&bo>0x0VaU0V};zPQtU+J8S(f}Fbcu#kyOwjP(WnDJ?O!w;7?H7zA*h;?P%~cZ&lbWJ(;Cu%xpGqR!gVot# zsCYG>*p%NIUe{Ot6hLZVA5Wdgjzh1H%I*E@zWD3I3Vd2?%d%#=S?05d`XkRXL0zT2 zy;1~Q4F8>0{aZoMCdajR3@vF@Xj?9N2jlgS~N z($TOB?5CDwK0jr}xzh)2;#1P>rt*ls8kOCsD)UZQVO59$Rz)vlS1``Y;JGpH^2na$ z#(Fd4pURvpm8cha30I(Sp+UE)IL|f>=EQN)D>E1#e`;?Ci_!|7`glkd;D;*CwK@I` zDA=>HIF?L%?cFK$&w4Lbs0-RUCt!sby;*nIw(Ok}kND(U@=V7~bY)jp#0^FBGhxG8 z=*MvrWO8*}YU4$3?2rkr)_f&qV!Tw0*|Gv|=(W?PJYst(n)f%ro@THEz+%9mz3fw& z*tO$s^*VVQ^Qhvq|BJ$mN(eOXi@oZpA#>VjmHnx!6>e_UY(e!;ltGv~su|8;zvyjk z8c^Q8cJue1499i1IN)`ogYj8^W>x<0>x53vh{S%29+{48C%NRsk5DTPk7zTgXF~VB z?oZScY*H(yolhITd0H$N09G0?gCHy`#bNW_;NVf~3rC?Lpy@8cM_fBOp*2I`$)>}U zoBgmL3_*Er+Cyi-(imaDF4@XS>HQXRHnLGZ=I_wH1Rc6 z@Mq2_S^df3`g*{~^zx0QO;t@{Am5I~^wZ2xtX*uEio~5UU5RsNVqud_lK5sY=|FFb zR#?U7;3X>FQ^g(b3%jMu z^X2?aNbHZ|noFl@KB?J=QN6ItwgzlJU3HGs;$qW&Fj*7zuGzMxg&S}Aj}cvJO-2Fo zGR*17M6)m6P;(IO%*SH3{iP1ltUc`e@j<9!4TAOnH##KS)nv1^o}s+hJ0e4`;-Wv^Ccuas%{&P(id`0;h(9Ykw6>6{wq z+=;wH(t_=XSu**kL!o=5|DcNh2REpLapo}5mAefO^X?y{c7nRg~G>pd^(19#x4 z6|3V3Z2VT^5~v-EJBfh)iy-W>G`Nm}8KLM}_<^SeDv=P6UddJYkBT@s2`KB2wkFt- zR_KAhygB=>j2QEi|K+c<+pjb=D9L0LsFWJI2M4Bf_YXO6RDqWEbX#2q{+ljcyaBfp zi<}@sI|mq`mv6-h%Pieryn?LK9vrf+rAtDmSnml`fOUtGrj*{FZ_BL`KBhX2DhZ%# z&9d*?0QI~+aizhJ))FWIgzgo}J$yQYA0z7F%NVU~JhRvPKIeq9q5fNNl%B`>rXTUN zt`7iDdQNwGT$spZAq}NTq-$Ru?En1eqxS&pFLR(=35}jyKi5@jV>Zrb(FkBPHyo1m z_FKm5zMZ*^`|TI}Pe50jtb2BjaAkm%n<4Df7s{cQu}2u(TH8R5j-H*`>D|Be-g!9( zrDd9(G9)sO7c1Y~JW@W{VpfY-%brZMG6!_T%nNs=_ECVw6V&y3h+VF%H^Y{kgxTc< zIzW`xo)xTFHJC<_j_@VrRGse^=C%Qe$G6#^mwmMicbhJ+{^Jzi`3x1Q7sg5nCmX8-PQ3Jl*5pT{wezqi zJnS3Cv6Xf%^iA2rZhHlS01xI`nh^xBiBW+#?l*kfzD_$Xqaq^KgJx4N#3D(uot(l} zE*_l299Yszt$3ra_p|(sd(<!#iIG*c)ki!b7ePz*!FZDKVsRcS=HaWqB={t(7u^%8`Tpjlgfpey1 zj6$b6lovnwSCqUibLWUVaM|qJp$5e^^`>r(Fl^pl!WE>7&w0f@lw{2Wwoou%Y+CbN z4h>6uCLy{7GTyRxs9G>h5r7N`fAShZf(6NJcZ$fiKUg#RQb(dt0J~4JTVSe9z~b7@>_1 zzNpliCM~c;@x=3%Niw?M{PCBD|Kk4V!WDMG+6I+P9*iem;3?=;d^SKC z^IPp<8te!l!!hEOLuU;*AEBQiyw6c!gq~+q$odDve+~s&Rn(IHuJY>3^@u8@-^#fD zJaCZT(R#Z4RT}6GE%~Fg$m(o=$*(bilxd$qlFMt^NcZZsah9tapY{h~LQCMtBZ+(` zhAIO7XM{5ar2$?(pkA%&yzgS}=75ro5ah3Ev?I*vRI!w zj|D~4c*`Qm{vdlRNx+FSY|)8%&a_vAyPYcOk9^8kiwCY@Q@0=22$n&8n4dbx1@1(U zA5Jk*E*2Q0n>Asgd@^O9~s=jJrsGUdkb?Z=U_ZW#A~ zHvp%Pk5|_Bv^|5&-Ms#dv9!(g(Ln5U)srWLhdxQSPBf9aZrk1F7~%yZjc=FA*3O)p z_PQiGJt?)+@t_Kp0@SCkt9$wAb!P(>&DWT3NAZJk^%>5Oqz;7q8xc%v8rrPb?K+F?D?PE^|ScDYDMk1V)HE6J0>j)-M#mXD7}biQVn& zP%Suc&ReJ>ct}X&m|^xmL>*MBxwOR#-bsV*v@CJ9=frMr5&;KDe8(~|Xa@rQx<5_; zkBGfhIW}KN8rx$9DFa6pI9r}Ua>7^ST|aLDT91N@0gy{NE(xUG=iqvG?pg*QbG?hi)N)@Qv7wPITv~>noXLdY;QvDWoAV<0u zrD^jeu|G?7^c{+a8^|1yKJa_^YnWAsYGky9+KO0nySS=k>9s?XsjTK*r$El!malFO z-b`OQ0*VqE_1FLDE>%by3d#_rt6sf0RJ?wih;)w({hT3&e6mh{e5m z26Ag4Yv;C10j~D;iF;_-ZkHZ;3*c50J%-Bh&;ZtwhV$pjMeKL1fyxohs> z6g~WuqOXQ~ZO}UGM&;Z?)87~?E_vWB=B=ybfKo5bw23Gw6`vRAW8Scj(%sQS=m|DywHb>d-<)0RNn<|R;E@Zcj?Q{_ zYfbafuCxc6?Is5}R)$(Q+FNZN;j^E?N2U9Nc${#Q;%`p)*XQkM4xK7y}( z(FzzV3a{)2sR_Zon^xClbV4Y{UWzE$6^P7Ct$X2#QFqp zE?oWli5|}To+S4$=W@Zde{kg27x!DMB-p2#Gz26b%HQ}}N+lVOH1$>#cs}wq-0;vE zZ1d*&&%cHw!~G}=<&?=6Gft@b{sNtMM#R2URYH@RKVo0`m0I?x!Zv}A!~L>=tr#m0 zq~J8pA#7vrh4b=kWxmvdwymFK|5Hdq+(tH;E;h+<8J`s^-*fytQiI^$PvAQBzI*TJ zzre6A0s>y|y~?(9TknH^(>NN4~N{Tn>?kn7~a{Wck}oaj<{Ao7%Xr zfLHj{HR-pbWrWprckU^A&@){|`_HpPkqs)6I13x{mdzQTQTq`oGF?jHH?t&l*lGyx zqC#4MciYZ>cGtQ6uN;%%@qOsJ5$Wbb<*#8pW9#ckwY*8uf-(_UpImC^mhr#F@bje1 zhTf2E#oDSO8?;box@!${7|*BBs1)hJ+VUBc@T?x9ilwp7pHvRQ7Q{P7JZny#`<1g$ zUOBqW#&_LCu80mbX#L*!Ibt<5dJ% zYSQ1&Yj=RD$~?H9VOfjGHl|*QAU_r0Jxon~@&}pk@K!cL`=(N)4vmsq6Cr9P1I0U; zowu7#ZveAj(sOdU^9VGIORzsw^TtL?gXP|t_n7~E=+_ia^d||@0EN#(c80Im4Xj3i zHxl@WE853)m90vWSyiako*(b?n(83~BEHD5^Em3}qYfz(`Lch!*V8}|m|55^U_(un z&mO#kI&|+GpkBz%(rYp~39SM0BjN)qv|NQfHUU8I znU*hKZz%`B7a9;O1}PP_4p+I!F?oZzo2WrgOML^l$R^!iE57%6sGB`w>y0G-%4l!5 z6t15i>4CIv3o*cN&->C)>JL1hjbcB05-J%sK2T)wjT2v7rr~MGu(7nffqk1ho#sgV zv^id<0petRZfJd84FiVscht&=ZH^3`27C~z_=R6f3y+835v$%A{a0+;W0K1U%{|mPrRT(C zpZUq(=Cl#-bNzLXX~8>wag* z8>sf2?#Wfq=2j^`^=4MwHg~tYHRR*>dHjz=Jfe4XMcyQ6O-LXvd|R61NK6PnbKY)z zQ1cR!?n9Tch+sqR#X)LEe4|o3DQ5*EHkS z^waV@G1YrinO~SGIN8CV37sy9i>j;hl|a5UG1rvx@?Bd1?S@=?;aS^Yh&g7di(JuZ zv}Y+;ejp_=bn-m>Q;;a_1EpzO=HJEvdoQy0VkFA!kJxnMKjat%U#MENWoI}s{2j?w z(CGA!2?eR7yZFfUj6m4cUxGD`-Byr*{wr7fX<*#*c@(y&sGj-d;vHH~oMqW$k>>=b7k2xFB=$%q2*6C0V0=^22c?j-&m(s_SvO2~;9Xy8K7T1l=pYvi3&?Y<% zOPMfZHZWox3-JwD8M+U3?TPfPC=S&|xXZJDsAc*^({f$Gde?!pYQXbQK$i6(8yB_(v<8|jET*tnI zSQ~^LEZ;ZIvEygCkojn#|L0M-EP_7(oq2A_bn>(7!+^{1cZ_^rRRoIZ^EqwuFKq84 z0BujRnK;TThA$oRer2VN^p_)n*-Rt#FP z_LZJNifqcSID$ZQOIcINa;*2{>*nCZA@D4DgT0x9GI%;|vSJKRAaHwEFHg{Zzt_rz zU8I{EP8!2lMx&4AfbyF8{Bd%bBXEoHdR^b3+-&|X0Z*`Ih|l+58^yn{6gr~5n2;Pf zpEtu+x3{weBHB*Oop*W5N88*xvSs{cIuXZIZa*l>rMO2_GJ7QmY=6pUA3YB`Ta>-u z7_aqrq8Fcv3U}P4y>gUrpA{+?^k5go=A0*PYWkDMUTI0M3n2!-+C?F$9J=aS72tBM#G%=s{}Z-vTExwjpGELh9%ZJV_y>=J&ps^pE7 zit$cz|E50qWb2go+h5fw1(HD^4&ng>otaeiMrKG)_`ey3UkA*(iJ+Y=tr)QjO`7hnD( zcCqh1)KJCj1*K=OQ^Kn86A?IN;~4{H_gAJI;$?@Utw++zI(G(w&wh#vd{r0y(}Nmj7tM+U?1XA)xl z+c&DNFy<^0cf^pi)oEhdVyfpo*wv~JTIAwA!Oef)^RlAD|3A{$4<8wijhyVb2qYbz zUCj?xXFe=dA4#_M5){qP{?i@fr*57`t>!pfE_a?R>=8a=j;6dTKp~_{3_KS%?6iEA z8cY>7v@F%GHt2bPYFP9PXgw@b!^*r5L1MVvqKW#i)}&%KrA{!_Xztw_rdZ9Z;_1PZ=e*s4U#yvpo_fB+bxSjEkkdN7mtRhMa24VqKq^#v ztp!ie){EVw6aJO&8wU2HK_UXFY#i5P3&oRime|;pEgo-`XY6IYPd`lSmCmAD@tOx- zEA_rDp7$Z=>vQV!Zl^=yeip+M4VC`qiUIK&2(u}(PVc@rmKAPl-W!Nb0^+N}M_Xh} zuDyG;oBP&dXH=c%RxEs(`>V;0e_~AsD}Y>c@vXN=^-aO&?Thx_G!c;(eVJ`8hwCr& z@s?0dPyU1zA6#W+=6&Cv{)kmYcS~Nre1y@_y)Jje%QShTx7FAcW&hoYvc2KK zq5bJ#(p^{xE7Thy=DtVPv5P8tCD!3Dx=CiCs_kZf2u|I9U7Jz5{bf0{+CzJ*?qB1l zij~}!8=tX0S8=TV{c)q419za6K}En!O<}3MtC$IWJ*1%dOoU*|#6Gyu@ig0*eC6Ql ze?gO+vTL2CuW(JjCAu-0V{28vWcH_jgVQP4vic0nA6O=bk9$4V#&t&sRXr~l(6z`U zK&9Xx$7wIKkycdK0)#pV;co4|$4BfX{y7#7I2HPb^N&2K9tE^(?98tVOVSl>{eVJ# z{9@ei8?B`~Q05{V?orOUtQQ!bdK6cO(sNgM4`{RT+)7sTPxFlNd~+2v$;`DdKjr7e z@AHjqB<49MX+?*XFK9kpvq0w;VqVQsaEyWU&gVks??kjnS6}omDb!H@{OVpy9;4H0 zj~9rkm76)!$^DyPQYxnuYW*3bpQn|}j+Ohi>s(R7*5^Ysah@Hd-)LUrmgZFtp09mf z#(%#xX;yxg`Rep^3qCoDwUMI!Wh?Szyt~o-k`Q+Atov+Hwf~6VtDM#f!qRl#+oKe? z5iuA{j?jxASYJzGP|%u@$aA!X32A*?uBlal%q)3M? zE`+;j5f|4*R8-b0801g2gH67bih+>D0r=&0-6xI1z` zzR}ba?E@Sy!gZF)<59l7C0EghtMx11Bc|1p|BIRw@oD?01+u2P;9_fPrk!f6{&+7x zm=M#k6N%;w(hvq$be!|3pzr>oN?%dsxXzF3h7(PURN89pTyr$;VRt%VF~zCL^oN!n z#2C;}=&}?WG5fVgHM$qyU<0r5SI`kJ(IQIOKPHMe)A^c+REbJxgl%*{?!2 z_FxaTRELm}otIKV4@#(!ChKu=K!`XNrJEV4+YS7RRx0U*!&#Y&m z^Z1~YrJZM5K#%Y2Eu9&QkT+PWI`TY*V_Tg4NjwMobttqmp-@4`#%OLSQ~7R4H_sj2d}b2SEGytn#NE5<9>-OG@h`F1E`Gx$qVY;3LxfY{&HbG)X;iLX-4f`$zp9;a& zgL9ihfw<4?xrZ&Jso-|kF{KP?YrUniNvHp9pCn$311JgdE}YclINHAbvTum|?r8@* z8Ecf^0G?Je```vz7C#2*?#TujsLPW_#52gU|M_{}hNxe`tbzsS-^{E`(&F>&O2|qO zyX{_?X{l$yH|(_Y#nHN4vr9_Gdn>x$BAlV9aT7yr>d$>y77=`|S&yO@YtwEe+AY~1 z+ZeWBI#bTq3UcLYFJ>TI1^~I+r_YlguEZw$&T9xImWXhGl_|YW(-pfyyx-ZmX-DNA zJXMe1NFDJUeHnS)HOF2M2EB2-k?9+zqfdC?ppz4{B+J?LM+@4|?QfN|nht;^-jtZD zor>*pokol^P>M*=NT(0*$ozSIw~!`*GporWYt)cY3=?^&r;CfX>g|^yN-fU2Fa(X4VEv$D>NE9H`#0x&=>8c6qYNj}?=9kCz9rULVe={(Sl$dk4+B1wc z-K%xwzY3s0mZ(=~Hsr}B;@uE`yrK(z|2Ke=6ZDPWEy3 z!R@JxSYgPQ%(i!F25^W4zD8m&;g$8kbqH4ca^;@&tUrG}ml8Lv3h<%W2)Xk;%_E-2 z1M-+UDthXSjdY%SEaX3`YXioe&k23H=|ty$i75Njnnu$mNB3V&Hb-uGbkI zg#+o%S23p|TJ#w$0Eyx-Qxfh*cq@KP;ybG8ahgK0WO;#Cw+IjVqzkx>u#QrW8o)+2 z{i3Y|)im4s;c#gaTxY1{^EAXUB5v61=J?I(%N+&Cn-^4h>e(6oHGho&*Z++4JZGws zIho(eqF2Nk-U?pPZN($>RB-WxzmCNY`<}Vu{$vR+L-z+iA)AUkC`6?4qy3Ho$Mi47 zX}>MUt9=bjbbit?ebFY|*PigFa`2-yLY-*a@Zbw@x4CkWPO7+n!@UxwN9gW9*Rvwzo6`p=?C;}L)}{D9R(Ex=2L>H} zbU)%OskuwT4tVzFfnG09npP(^qSi-V(=RVmC_#$XFCxa|A*CMl8|Shy`|yPI_*mN( zO?J?yP@&eRp;nxs0NOurhDOZ*;=3=HHkV(HLLmh&Z$m6)0jvh*|1#LEiP`WJ^0T#Y z)O_8LXNa6tUW*U&HT7(Fi?dM0)?xh#vgve31vwMkpM&&p8{u2xXD5m}?JJ0>LwdKAxVw_@+oKe7AQFtx;`g8J&7!`1FSS1Z5ef;;F z`C4a+aNjg)8h|Kk=Tvw(!rjum68^C4H1LWBwtR9?*;jMrb;b6Ap}?$+ zQ9&eO1W5n|bX@iaBUdPyl)OT&6lpCjywlK4A?uymkurWIqrU&F$=TQ>8d=HZE!O@Emb&^AoiI8Bzd~OFL;kC(m}<3pSdNBF*XoXfmQj^=I#R*{ zTMflZz@&<|+!ade!zg_V=$q!vxtZ>E^^PfA_Y5S9Ja{cGR2B6uK-n8(FqbG5ZlQ;$ z3q|@rBz)xNE>#D(1V7==*&cWH=q7%k2)}Cw2h*slw97?lpJJj}?{+Ef7#Y7SchI@T z^m%P5+>uk|q1B@5-U}QB#T>Rg=_0b?JA!5noDQt4X6sqTA5ZHNzg8QNBE>CJ%7#m3 z?$BAa$O4|Z!ZRSNlrnyLFKJ(d?c`Kjv1`(2_rI2XN|PhTRm{tY5aIeatwvQ>A&F<} zvI5V==D*H*S6&=vXXfFS58Jdj@r?TXn)?R&zf{Ux=Pu0cyJMi|sr8E^liNM#D&~bg z+A^5ps5jQTuYCLYfw3mSvpXnGkKdzhj_OFwNt1>!xt;6rjM`UyBhWvP3`ecT=p^m! zJyd-BRVM|M$bX-m>Gz`j$R;M6tb(Cl=9FowU^7hzOA$AmzF4 zdXkI_BRA;g-Dj%mkWJh*-mfUEfm^S+V;T=xcw7E;u!%y^hQMFRi?`dK9|Abm(;d>8 zZ0`ie=vvcDiAiKWpE-k z3@v?3lm~x5<&S5+yS0v4;dKAxZ#R&q0s=%r)p!ghkvaY!jPIO=Gu98q2TM3QwF{hUK zkT1~t|CdUk+*T$N)ucG^#sK2JMgtC}6BRTa6kIeYD4VH-c6%$9*dz4*-j900?R7;ii?zdBvRngkUjkO19cTG z1(_?JFWWBR3q134p?s+u$x3}oSwi67U?sLq43`9CP3f^{k^A{szFDqMUHP!ZePY-_sG2`OF?}+r3o(&3_)JWqIu<@;HZwM!oXy zW6Es9eeIj{`n>tY#4GA{IO{5rlK%im=Y!3U4iEovvs?;zyDgZqs~Kiita*B(LSRTG zXffzfTO${7`;R7W=3O<|e`o zJz~xFos+-y(-_a3l8U0N6#{#_>emNzm<-$)x(jgE;uPUy#dyso$%PfR{qO!^+M>+@!4hAGCC($X^Pg} zT7 z8!V4p^gx*~6t-TVS?78?;c9oT*Av*$61xo~;o?h>WbLe&?S-ozqNno}*&1_k*m7j_ z9h&BPe1nOEyINrnRM@_n8>i*|XO(H4#135};HyaZp|^;_s?8ET$gWP?tv-i24j6v5 z9@ajcG;WSxAc0VESL(9U-Uj=Ild!4v-&G_JSW>YYFiP5p9eAG|Q6$=Z@lxikvhQJ% z6RhhShufnS&Y~gq_N_jNlfbJB|J7TkET_Lcp%eq2Y9a;CmGK`OZm9OvheJN7cz+PF zshwegerj<7+ZD6zj|Wz)JPBBMhWjGb$$rZvJ>Gkn%&6Az4XE*n>2QROG!3X>CU682Cekqx?NNn{IP$WsM)^%k0C+z2%uP$Cz`B$859^HkTnY*}GpDxe%fe0T>K;CA= zI-zkGZYo_=IX6lh?COCI)3M~LtGG|n=PnyjiMi8Ca@<(cob}$jHDkr@lCS z(Ql;Byoe=Q@($lj_0KdqKd)3SeTO0Ice3j5P-Q7&@B7kt8e5C7B~scFF_<@;))%o_bph=gQK*fi6UV4={U1{mkW^2CF6i@ zyW{jZgxqjid`6xlCg->}5vgt8tgFO_S)|gB2LDvPzd-S>%8oiZ`ZXifU$lEkK($%s zxzXixw$fGbqr@Rm8;V`H`Pp(9U8pESO{_aFU?fC2R>pQD2ske9V=9r88TpRdo66C&RZGKY29tH>~aTz`bp8lq`F{=W&&{3A zRZtD&4yeW!+=5QePAL)8G@^}YlH6Vo&uQWIkz*uyTVVW@|46Aqhi}>AJdfMA(;kbm zek7Z?@$vIhW*zdHtaQG|2}R^AQIEnr5~8VJIFrWtZ)EZ%c)4`FaDL4q!By~qn$nQt zaOB}zQ=1Qo$%zy-hx*&ukdUhk!g}!X(EL&L0*7PM4+)sf?<^8&29g#0J_1HwNyTT|5B(O=0uay`-KCz>`3TlaK8OxyXm%MbSl1Y)V$A{m2`jSVz3^g8a_h?J#6Lct2QWvJ5@_NsmM(tkTpi zds{&?`A^l&z4waYgw=ErDV$EY_Gj+M8gVa29ig^;OOV1)?2ljP2JV;*o)^8DUP<@lyE1ZfyS5AJ zc;Cy~{lV&dmpeONa7?hMT!{X-2z1t&eCGb+Xa#X>Z}aSYC;?tEyJxX-6t#BSBO53b2JA z$Lu1@tS@&bVOS>8DyJdJp@!gqy^1+DST!RLW<0OTjJp2`IFau$bFgc1cfhDDBpCnS z9yzb2Y#j_60mGiv0xxQ1W05*5O{0**ohvJtJ>i`AjlJ!k$9Ipx%PTb26Zs^7{`eXB zG7~XF0eZp?I}uc#Tg_-5E&FlN58dzAtqLA-t9-iaGPxr1m^h8Zn`54k);(w5ui6`@ ze*g`~6~tCy3e(W!7wZ#rbkoNbUNKl>#Gc+Kru1YvVK)BGZ$km4Rsz7>r1Pjgw3F8Khbl~VH0 z8>~A)@8hgH4fj4BgbZ0rN~VfulAGseU-)iT#rr4Vh+hJ| z`>?&si1h$+>D=`-$(XDW-MK#3d2DodL$lQ8$$KXa-|ZOXq8CdUS0>>qTPek|6f_*BIB~x_{mc!^~1KP#Nv^qXYIN_bl zX&gWOIkFCjHP1wgsh#SHE>vpRfHS+TS=Uw! z!fkARKdqU@c6C{wRzLlmX^W`OYS#%?)$=G>N+0E(|F)S~avOA4lMn<5`HFevuD~e=xz;k zxQ@;%1D?H~Q4ll_lwI-9$((6Q>nqgRsl9XvvJ|LIEb^esp8E=FFYf)9jLfF}vrVA6 zV^Rs9qrbd!c(|VLVY5}`KG3jZrDaqLglsh*J$Ev{uhu+2oCN)*9dQ{h-1s>u!HsjM zFU_r}u6jPeq$exJi&sfmNob;nR_H=*enbnIw}Fr5vHUl{CFnl$C8n?DFl57`Xi^b| zWf^d}dHB=X3V^bis=pmVmu4dCN~ks%72iaOHRYlXXPp#GRm7b|LVVE6}M-EauNr^l^j3y$DFO zpxw9uB^@C!?bv8|UMY0Bgi&~u1$;hmt!1-!#f>RYUDDS|Cp)F!BEId(EO9OUjpM#h zwVJ%R0`Zr}n{M7Tm9ky`S%`EQDIM;qVs_9hj@ilDYZ1mz39SzXTgsV9&-#^f99L;Y z7Y`|lY`R|i_@buecBR*vkN*DB(={|wEI0|#zG$_&==*!-+7yy)cvQ#J(ISA1+g1K_ zWh)mt-SaeaEqs{wj6Y%yt$sVOvPBq9bn~Hkd(#uz>U$R``g|%>7ulenap{I-Qtr6< zf$n`t9_xr@@)QKo+dMeR_)Jgj!@L>Ky_{E{J zI6XdyS7;w?havZCPQ2vAnu>;n*7Lx(4)b&l!bJ`|sF{jTn(UX5Xuc6?^6$0^qC00y ze~6O&myR4*S5uFrsmGDXQECD8G%FLjzX=^gHdFq`5Bb-YEx3Wtd*zG&cu>;0NJ@j9 zy!=K~rLj~%)b_p^kXmLVBLqnifUSC{t8DSno;9MTzLqE4Bm=rDg{W%$d9e-^Jv9Q% zud8g4-DtvKJjm3)OPzjYb$8gmoupN@e(}+C-I|&leZ3!&yFQidbiDN-kp&okMR@_| zBWD$T!g2%dUYrJV{a}VNxGE@*(?ZIMi***PyZsZpS555IHgtwL@mrN!#EvqqJ1>*ibVQCCK{k zmuz|5c;1x42%q>9V-N&uHay8t3iK57(epVr@43!A%48&jJs@4@a%RlPs?xgiQ4xfh zy!SmRLf-Mr-kX)}u{J8&12=Y4$`RBm29u#%J~R}NeIicXf1$KQW=!RDcW(RSQt~Et zq1fEGv4_jwN2`{o1pH~ZPwBZqt$gGBl_NXEEHiBSx|hnyThEiF3QKZ$n2NDIjphpj^Sqx; zQxvX+7o<)N`Yt(QkJLaSF>7;ve6KwT9JlZ_txeG8Q$mj9?oz4c>IJ&kAjFQgo+#dU z&TFVjT;u7glJyQNw}}*Fvs!RzP0Su@aRj!GzSGU1dE3!;ow3Cq+Tkx{uVeY=<*LYs zaL)hmoS^+Dt=CVtxOy}Dsw@Zvyus`6`Zct2=Weder;~Q|nWY#fVDE_XhGWbu$Ff9% z*=Og+_JdZq3u4J=@yt~PpGrhl+%rm%<;pl;%=Y?+zl+-mSXJ_F(+HPh?L6{B?u$aN z-uLqO2JwwU48RAx_9lmm>zl)a;TF}31xO`Bu1ephpRa52#f4qQ$6bO*hIU>y-?BIL zY~diOAsQ(M$mhZvnD2hz{6Enq|bR&QPNM`RdD>fk$&TvFY1kG zkV@eVr?*0`-u{Ra#$@&7Xpg32L8k~^L{2X$OWN!*8eDs>hUa;je==M%lb?4F zQo*$K1oz+jmw2-Y|F{8wVAn27`n6ma5X)to`)aRf9jj@LEZVP;{qsiw&ve-v3BEu+ zJo@Ds*WMaq@#`o{<*-mi7g8=2`^)3Jjz70aAZa_g`W5|X^}FCog(vsMzMwYt@X6K(z4x=t>B|QR1W=QwKlT)BpQ4f zSCT=KwcfGo`aZs++^W{OlYBpFw|VnoSm(%KVv9Ud%05O{Oc98B^nG&wm}NcQrf3VQ~}L zcJ*?zWWyjnitDB_WSqUI%D$s~rU%R{=bu`UE}@~o^CyLNI4q#RuGtvryr=qHRpG4$ z@^G=dgXG}9${u{pT=ZvLjK^Q-DNxmr{N(*C+LkXb12A8n5~2}8rQ^kAfL^(tnUqYK zUHXa-2J&l5;bv>aF`6;l4JP{R|bu2l%0NPdFnrk_QYPw-~0Khz3Mp6Fy?^uT0sM zrasJAH<4OORUnO<%=Rutr;@Q^?28lIAhC>-WSFO3WI|T(oy#!q4g>qas1;Fd8HB6* z+0Tf&F~Q9T&Gqa4Ak!o(OZ!<1mrINIGKFFpm0(KGJ7l_>wn`PR{l||!^hFmwo?i2M zZF!N8Z}m@m@j-()-Jx#b#E<_dyGOunI+zY*VwJ`~&Mh@N&fGcb>!1mH{jl;~EU-hC zEJ`;3FIqt3HpT)qPQOt`(ZXMmSS)2h<3A+m*TIB!?V@x8Vgx%h8#KxY~ zsNvWMAu2d#vN-HmJPWut2BeXpXdvWz#Nyk1o~FZ(1xOqZ^=H=eBN}NE&|sW``zA^ zcZ|=F+8KKBjIAkY;F6Sx`**)|H4j(e%lBOX=!KeBhb<`%O?M<>Z+?3%csvw(d}bN} zaFrcazi-F&2jt`Yvv~~wtQ*9|&(4fG-@7QUqg>(hpsOqS0tkQ$*P&Ch+o%%8{$}*g z*|JBEL|X!U#&w@I{`n=xk8vD|tOmC`*H8$r!f!Qg6fFu~TUPZgyIbC(`adzu;JZbQ zJm%hCubl6^lq3#1iVGd9a{Tvz^DN$2(d9TsKU3%6`0Bi-j3&pc_nk@N?-Hb+fPr*c z0PmP@W8zKlOE&Ea4$tuESc^ZA1>(BnHdh|r<>Wj^>D1~HcGYqi+)`;6Q9-rIuD1g7 zch6cT-2b5M_P+eM;d7Q)n~txfJIa)p{VdFUwW$%BE#o~vhg!%_wxt0P?$y>l-6||z z2+L$TY|kx4u@KMaW(Yn{)#ldiifAhH(haEo>%gFCUZJD`-R;y&x>c%4WtF){$(;S6 z7lzh0EGtMbrbx^7%Ao5>L?*9r5Nz7iFhb5nCi)K$r`9s>5vLosI zYZHAk5L!_&Yp1ZlWl`DP!LMz@&84-wsr?@(YTmb>E``QPZyn$IRET{$WHkKyOqR9U zgywHSLW)O`$3M|N^MVVgm!8bHM*4yInktKLkG8MKa*J5=HbTwu@-u#&Tkpyh9Kl*Mz=rp03#cKR zX^dE7y2(ZnD(JhUN`u5vytt3A4M1_{{kG?SmR;?uLOLA{it9S;g^mR!|5XH!3hrgy z?2PpfiUe0@N;+UQC5e9{oU62*RFldkD=8M*V;nw@0^XHgbFa_hT3+J#49}w9AZ!oHVF`D* zM^4b67H)J)J9?Z_nIjVbuBA6C=ZsIL&#u?#IbK2hGs7sb4^R9P!^n7HI~D8NKgQlt zJUpT|-8L>>T@RPK(}ZR=0zG?gK#$PcHD;K^{Q6p_Xro7O_%uVxe?9N_WsSC@swW21 z8#_xW7KE}=SG$isl&BPfYP93Bek_W4Jkyjbh}CCM=1v888O zP48Ukt-88sW&T|w=5umXX1el<924DadeF(AGW?@D_1?ESDMLe`+KZ&W|DPh}{={k3;$L zyywgX?(qC1B5%&B%T?=pFzJ6m%9R59)IbG9$(D$haMFMR;f=^rubP@`X@S7F7N zj`!X0PRjy(D-Cq63=u!=(>xZpaWisZS(Kw)YbuDmx#V!|@Oaxq!-}-RV_mhTF+rrA z0$Gb(p%m6sY!Ky?rhXaIr8RLARs&$z0PsJ13|V*l-;0Jd<QS|(tXo3~=|lMR zu?R?a#4c=(d8NmAk%(9fArN8IgNAC+1OHuY=pt5wJWZoCf@!oy>%c`w$%4T=SZTv5 z!zJ_ckqLFj8pBm}4{3e!Asl&zqNG}{ul&YRJ*ay~#PIrw>;soAA=HYHvs%T;ya+B(!h%5;};_7ms4?yLE zWUqH2?$EMeUU5;#;`_~r*mKQWqH%Y|O5O`u!9=EYjFRXF|4LP!ft9$2U!T$UKM|T7 zeDa{pk6#15;@>p6qW;KF_`OECifT#{o}Mwu|2G0K#{G7wBS#s_QMz(Ag2Wj2&=U7= z7l$iiTXL^xthlOj{n>rm1YvhyH4J4C$^uEr$ZZ!cGjGP1pKOr&+JqrwI;PQSHX(nH zuYQRKAH?|hCHvRRx4mYk6+cQ}eXvz(&4zwV^TVuyH~^=8+0xg$&kZzn=VaxXK-cop zD#l4CjLSLJ%gSD(xpuDwRK*fsjBm3Rg%19znzX^B80$*yAzG~Lf{^z>$?jRaq>5Aj zOh6;t3bf#;T-u{z*Yb#6L%k;rYM2+gRY|9}#KenZN&0n`TjjUbjj2G{s3+0|mo5=V z420Ah`@%bsromU5H3{JQyv?T+we^X;(WL-dqeJCTg~C@iYyrR^XV&!`^|QCzfk{ zKa?d4+FZ~7pEf4Gm{DBZTNz_>cTmnYS_0RNKYil$ua9MdxD-@T9Xgc zwTZ&z9@V0+T~;hd7($BP4MXl#!5Y*8TxQQ26=<|}{&DC2c`ZSRPaZQ)$+dhPYD>}g zx|apQ=fi;5cKuEGub^LS+y6C3annne=QM=&AZ0oKJWzgolq@caFFIc-6mEmSE+^dc z^nAA-qKO_-D2Eq7WSJnAmImCI0iKtop$ULvuxa{ybf)9$my8T|88X-l&?~m?fC34J zci5>GALRQ&^8lG1St9CF1|s|ON5i9KL)c(>FxwEcl5w~3ikZuqrF!rCP2$jQLy&4i zVx&$(kcN3YX~*pPbc?;FeOKdO8kCr1Ok7D@4#l}iJvZuK-;$Z_hd%7t>|11}<7J43 zIFHWK9iB;lU`d*0?k;Nnt+ts>PV?r(bo(hPtnxX-)7ljIuM{q16oeKxTd_5KH;O{m zr>ALZmRfs{U)X>UAC*t9Zh13(mmajUe$bbU!tz!b+MN~#yZFmE zNQv#P^NiKy&u{Z@_n>`gnJG%${6h|lz~_$9?IU(!eJbgSiruwAUV<5WmLIN;a-*tZ zBmLo5i{jEvV%DFlVZfr6BK~t|-0Moo8_^a?+im3?;}w$)Kb}e@td;M}x1wT^&?nwI zcAc8c$Pwdt08%Q+Qf8yZ=tJ-w;K}mc_K9eQ-<9tvv2D zC_e5aNxrm)MK&S$E}szOL_t}7T+y2E+5!JAzmAgzWJBL`nWaMcerX@^NdKz?LqkUV(V3iOJ3;S}SC$D&4{0Zj zi88wE){q4(zpqrFWv!wwB5|H#m{z4Z+dTPKqrACA$h}6tk^V3Mx*1?Vr7Tj30*?(S>qHLnFvq-%ztW&dF*HyWIuR1QJ5X;r zhmBGyNl8NwLAQA_o0dh9tEU;%vDoyc%~k7A!ongob&QHJqz-K-NK=Y^7LNLA&t$dt zI#sQ4Fye?3A)nuCagDz~z`=1Aly~SBuI=&R!mN@U(_(G7oRW(Sw}7X|e$0(?3)xPy zm2~eTTXK}zy8*S4}WTg`58{Ac@vBa!1wo`zO$$qu}o%5Y{z@${$OQ)pdK&O6TC6>8p8QVtm&mCa7_o&9!4;x9q8 z{nmkw*W^Y8pLYV-{ZqaRfkPfKi%42t&GM?S#Hr~b*}&tV-1FwWr)bl6DcPKs!$LE=F%vv|8w9|2#CpA7H_PEM`}{>KH1YTy zT|K`WopQmuq^VDr%U+53ihbf?ujcz3b9&<{L&Q}^F+~wJr;<3U-RGrTxWfD2QTY6@ zbeMliT<}v?iwfbEi#Cv^&Td|YQQd4=iz%BGMy*Rh4`g7T#p|91vl`LxJB3BnnoEVc zZEuG9`8{OR9KUtcC}qd`J9n5<2cOjsSVKqRvs|>={A`D?w~f!a0YAv3cZdnyO1wG- z!vjnGSmcD{FjN8$zOQ0PX#rf8TdoGy2AJPeeh_P{t@e0r9tbKJur|RYhS( zP7q#Cr6M5lIDEO*`I%htgcEj3{Y(OknoI~g$z`@-imes^_U@l>Izr%C!wnqR7t^D( z^!Qqy;)^hI{yo{zqKEXAcSaF@&AO8tno5B454evw1N6{qU0Jp3GC4B#X<453_B^oB zSu;t&ybT3~Ab-Mc=6`#dE`2Cwa#&zo|C5_BY_A~o3Mj2R6{T6~3#+@J6#59duOq>K zkJ?}Ib)GNxc2%1(q}w>Is{DQU+$buZPH*GOO$2%S34QCOPK}llzqeD*GhoMJV;g)I z4Hz0u%P&8gLc|RH^1Z~;f0(AM@VsjP3=R_x!q6e+>EMFdHL!IB>&JdCRIH~3v=7W5 z9(;i;S%@0O|zh~0K*giGtJfjzgKLJ>uL}WFM zO4#*B%rtcvLVc>K_IV?j@L!b{Q`RrlQJm*Ir+p)qPaw||i1N$FIC3j{L8Yv7)G zBcfuBA^Yto&n>)YTOQcdj0d=0>{tEhuT3H^{Ri)4n?zvJnvkq2b0vNm*Y=lN=b}gA zLR;A_Z8$(mgH9{rO=%Xc5f&9y z6pm-ZB%qyj%fo<8NJehxAK2v?%NFN_h z2!|a>Q#!Uonl?k+wL*F+aKdl6DtQ@1ity+O!S`81b^9Awo4LM}5*CYNN!_uhTpI2e zBWgRf*BUQDfs)-8&)iJv-(;3`{CQ*1QF~TM$vhUSc^P~pdH^GUfTT17B=sZwYT%+% z6ShrSIdtv>)Da5^Y^%wD9x64d+0MNljMo5KRQ0K>d0Kr!7 z?Ra{-%opye0qgvbKNZvI$13*;J;UN`eNVTvQ!V4R4~ z;NM3l;l>)q*6l(bVsc$<3Lf6);Fkf3WC0JX(cC&)4h&3pzhv%CfTET^c)Sznytisely-ep zn|WwCK7GLi;=KBTj<)%!Q_~JZg6_7^Em9Rjl}w zNF_4Z)d0t5khjBMuU*6v?7k`$`cV>2j>K^;TWbt2*^7!}a+XCSxSeM|M4n@r#8>SW z4HhM|3F=2s7>-qMezLstPxsPA)4izmOyT5%zs?A3MDJFLi%?Wx9p`5V>CLw5qF+Z( zO$2W&&8}7f@M!?8h?ENCBr|OD>V1J^#3kP7M*|VU{yv91{+LUmuR>Y|q*<%n=K}X~ zw$JTEx+1viYjTGyMB4$97c2pMr`t0!Ykq^tf8R_AKjMyuUcG7^()R0N#wJXMuPFqD z9#w8vP%gMt{>?)kP@9-)dC+>1#eUn4QRVA3(6}GzETc9)<`wgr+_2CgWzLRs#?E=C zYM49*s`(sz+n!Y<^Veyq^n>dw6?{gsjNIIYp?XbLAe^z~DhfRx3FfSWw&shYFt7_lgO?qf z9cxRyUV`_XnO}^qiS9SAp)oGNpZx7g1Es5}p&EJC=l4!;NK$fO{*MZz*_IX_9zszV z#$p|Fy7V9KBb3jdbqOz>@c92v_L3WlU}5$>iBs`3g_q{G#|Duu(~BUv$$NlSfzbXcx|1v@VI&svh-w;qZvQ+AdmDT=cIf;&Gl3R@YfZtihu({ulJOHe zi=V}jwv0E05&e>$H=(tYYZp6yS9}Y-T4ssJHaw}T`fYo!SmR@6Yjf>ok>fWSrQEvx znp52ZX~8dCLgTr%b}mJY$hx{ZWL`|<%7p`B2A9*16)kJ;H@63 z1-Qu>&i{trQJ%w>D_FBDye>ICpvDX&`@lTWHHEd2M~ubcT4+{m{fgLg`Azrdsgrf; z+%_@XT+9amKUOm;)D^k~l=CjVk=PUh#7}0v)L1GiY9GWEAVq$(lg(?jhNjDSwXcoy z;dbGM;-U}-At^ciWY>Fo z%Ra(bYsKATD63S>q~{?)0uTrp6h@MR?!0D zg>6fde~tYUd1kn8YV3OC`-p-((LwY6FdAUV$U#x%v``aaR*M>nI){l;t#zkjT#K#=d~ne42^EXg6Ef^TkG=gAd7(2@$xRhCO#93z4X7XO^I(cfOwBW#@c5*Do}uuLmrb(RWZ zzXYWAZe%(jeb(A~)9%@`-_|Fya0LF;g3NGnG0#j+o|3UO056&T?#BN3kLeapsIkl^ zzAPQ+4Hz!CFXYZUGZe)wws82ZZoHpC))(6e z^!+&dBI%$a4?n%LjVUX##?S8IFTeDjwvA1h>XDhl3>*7r7EaFZT19_TQuX(K+;;YS4%m_&P??`|Bvgix2uoJNPgMmF5UTh;{8`pUgZbY7+cyO?*4u16$u=I$4SN?h!sNdMipFLLC$uV*_>}l6 zexleqO@TDbd81sJs-8P`?PP@#EmRs5W7KvJ8`V_y#u`_1w;Wa{l6!1+>BTocn8?y^ z5^{n~oQIFgQ56is7r~RQGhFXfK+_KgCoGV4w{N*u@2x%Z56*cW>ize8ZC9>`at~bN z;^fV~%TWG^d!o~>oJ;hP`7QDO!vw=hCt%PQ`o zVF(zr(58CF2B_i9P2{Zu^D5t4zV5k;p|8^rkb8>Ef=`lwUO0!I1yn3#Z6boGbTSB1 ziKT>JD)oB}(7yXvE&SMt!w%o+pr1cq5w4GD*A{stBzx%ds&&;j&~=4>x$7L*_pNj2 zD%$Zdd)|8TbAj~P^~X>GTGc;mJ(`Z74W!(>;ITF`^CPvhw1ab1T;dkuW~^+~cdL*p zU~3h=uP^!-CIk9n3Z94QeHI{BO0OOh=Ma6liRLI3hZWcPPDCTSkIhF zzwzF0Wfdh?>u0<{O}b8m1)NLg?~L6OG4L78K)e+6|Lmjs>e{E!Hnh^WHhh=t%=I^W zwEv=3AhY|$2hU8mMqF+IH-(_^it+n`$8k}z)e>bcguAnEq^9D0gyxMjYeMH+f)1Z` z8SP3a>euK8x>hD0*wAz8$~X!LaI{%hrG|fgWS7z61$D^!i^XW_zc$rTfU8$A%Y;)V z_EE^%PNj+0gH}Jm%}`_ESw19+e6= z%{KlIp0$(g-3_vti+A~bbun~;EGM8xX}`Buf%bNmy^?9KJ#q)~^qpzLOAk?&cc`<@ zPe@2LmQ`Z2%8_}xJ-%kD&4R12vk7W*w-78}jxP({O2KlBJnxwHakB=Q>Al#8?`kmW zr;GkM8;Yx=)N*9&b9^^BjZnGNtPsBl-@nNLPF+hv27SMrke?VP<#EFdQ$iS_frQ^& z{G_ZRBpgCCGFe@|D*0*WOomQh!`^Y|f(rHdXE+%QWjz8mCX}0}iy8G@kx?`iy=?wq zbAm~{DAbi|`XO#v%JLeHz{mA!H75I4%}?+oke4T!OUTf)`TqMAXw}yo()w{A5Q%z zAT$1@?uPqAd7=Varu?QgA@1yLB4~jX*=S`E7qf`_5ePmd&1KI499-LLefQXzA?xgImcRPP8n=_3izc#G z*m@KmFuGvz-^p*-9TE|`c+ilG?A(ZyZp@=D;?-bXzy1fVIqI{`q-)`Nk|`9h`0h_* ze$fU8=^ej6X@h)P>3)y?sW z&INn>=uw`2=jxu0sTVqAx1(Pg;LzxuKH!s(WCY+RIX-;9!=m(O{6opCud~YW%K3|* zKjHtoYcW+$ZfjwN&Ev$UT|IqwG<~LxJybcfWAD98Tp>J9)r3l~v<(=ER=p{erZ3rw zddQN75biAJ*mJu*<|D;`ND^Qq5Mtx zW-{=2>igI?r>=R)<-=gq2Jih4vp2PZVVxI7PryRlCSuip**;_h@p&f-0i`3-uunEE z9zAnYwA3wSJc!5!TGHP)NL02W)j_}8&3@AxcBOBwJ{RQBB`y^zf8dZL9jo;DDU5&iGdYfOLHpa7UgXKyhhSLV za9hxu?21o5f4xPjy1QVXHGZ2g1mb2yDPZ}PiZnTB)$QvTS!s+;svnLHpC?zY!M0-b zTMlm&)XTVZ;u6Zf3vi2*H)8X*O^MWNRLKzXD3hSJ2VLWZ;)k*a6|^Rsa^3K!U3HC| z@l}$@O;&|F-5Fz@D!QNSsG~#EE$zC0SGWtGH@9jz9+!8?kh4ThD8rGrG1Tx=P{EV+yG{@Fs6L{@j_6uzo1~dTH!tE zBdN^vcWy3!c^5*k&YeS_%93N zhW|YVoO|4CswHXO%f7X!dW4`8obe*`I>F!e{({SHY=N&!w%4Gl6aEIN4yVdvN$>Wj z);p4}w494;)a~^4j~yQx9IBE~7gMOpemWiiwt2QgEK%H6|*r^uYsd z?YF!C%!TpiJyJ=idwB?NoCzc%53C;xnWFqEjWdagmz+}j@BQ42_;~dtWwM20cW|Pl z#!F^^Sl!M?87cl{Qp^&T^FF0O-dntD9RJYYUbWSvCT?=I(ZlEQj?4py*o}N0uTUVN zT@B1(Ii@>>?$Mm&5-U6Ouva?x4p{A%4!ye6a4Fo2Q2X7H)Hw|XDGx>8uDpV}VI6z} z9&#mmS>{KWDzA13o}Ki5sIQH)U%cL&$*>gA%26ubC{Fc)8+1|- z50AgP5pt}e%=z(r}fiDW)1L^o(1f^w!-V-{ue{O{w@5G$y4^c4GF%)rj08#*(AlehCWF!?U z&bDY$o<@Fgl)>F2P29Jq!So@6gj+%4Bmpnn$L$8^LtR;`o+bY-$IwYfjbF&JCZTyH zn)b4WvEhC{xoPuHV|CCAj?DkO#bf^jzlo|rlJ^RzXN#0szs-ZY*hpnq(V{>i`ulwA z(M_5VvjB|$0ahVnkQ5Y{rkMu$5=cW-k|PWci^|kUIHdK{r9szlQsuB6FuBOw)}3i- zPiFs=zb;O=siEns-wAdqEp#)e;_4abpalyI-DiPD?(M#t?W()8mmya3!wz;F1zJ4? zatxTimWQh3`lr+<=K``OJ&s+I35DOCn+_p~xsE|6>wx)=_QgvdHgaFD zD0Qau|JXQ;ZzeUa@G_r9oJ($T`xurd2_yhN+nDPnq1!LCNPkTspNx>Ks=^F)VjWi9 zPMJIXzEf>KOgQIfGUmsPrzFJcQt5;%HjCxlQP#48RUDzeOek>$GpTqRU#gYl{da*7 zre{>GG!=ziN?fhq3pJk)sa-%{N$)s->S2 zIKxnYPwqY6m@#@gdTbpaR8=r{dH&pme4~w275J)j;DuRE;ZWi4o8=*vVXlx@nKaAG zV4kMJPLg=g4f!kC+OG%Wy^bx_G)ierQ+Ph_ynqV-{v7YNy4ZnS3xCW7WwcH55>HpO z0ZD{WUAQP@o%Qd9bAU>(V|#hxj2~k`*J&QhS)uy>TSw!)uml;Rl&eX4?u+$4RBKRmo%90#}lAb72eA598(Gfddh z(-YVl&0zS`wPG@M|KSEfN2tS(Ljv`X$J!_P3H#}3Hq7eMxdw`@AOM6U0aTZ_wJ=e7 z_7iz;IElnd$yVa)b&Ng8(yV1}TW*U>#CrNk#`eNqhnWBrW~ypSB9G%fIKZ_AI1 zS$Slz`F^rRO**)I*X~>oM16?I6%}86S*>{VGj!r?C2;TNpgfO}}u|Ew$B)rt0tE*Sl>ETtNDy@ZtBkn!6$eG|j@4EFrIdln!{ zxtYEry3p=`D=hZDpy&{RZi1oa+4v}2D@r%oP8fjcKf_fn%-5W_1k1l_#0hR%_iU>uGM2NM(g& zmeoc}=a%3{##S#i6g$(8H-oda@QMQF#Jlghrw|Jd9y_j1X@dS@ZHnES*ejXtw=uA= zpc4u=rw2QxQBMK~>|`GrhmZE-LC;h-^X3)7XT4la!oi2H5#G(B1rdPYubHhm5mqV3 zIV{4!qu)*w($aFM3*4r>GjDq>@j^4NUppW-%I&ilaPf>wZJ4g#8uabMmD}a4<%uHm z$d>h#i-3%?8lU8-Mb&p49z#C!uWp8Qp4)kg((e^9Q=)?u3)r3Ou**Ufn{e(Y(Or~R zq0il$_9t!G`%US$<1aG?3a0YQhG>nGdz~PqSrRMEWOdS%?!pC?C}QXuV#$gU~Q_BVF73*9sI5 zPwxl>?Q!70aj2Zk@2yypKjap;40Rp+QJOtL)K(vykt~?0$9qq3lPZPE6~XHbdH3a}twt+u^DYD93eoP&a_$ zy3h}QgkB3pt_FzUm(jT-+Yd7AZhwM1TZIgETDayBon6W5)wx_X6A>>ID}Z7NP7aRg z{QWUIw(6dMq|_DX6m*Ozge*#xxWWqtHkN%v=q-0 zISFNRzIIkg)=Z(N4`#?}Oj8nbfM2yyNMLUc_x^Y(WHa7`d;XN^NBDFR)0 z$e9hw*f#d(2A$DHbd$X4bqmCEKbK#xoHZD5tqFW1e&V>K0U-<9BD7S)+w!~j!i6vK zfJwETR!tcp__g|cWH3aJ8e~cy9!u6A3RZ9${d_MoR;4=&;h@uP{(ae}SvBWJWIzXw z5M@zrx}B~X!D0Sza7i^+5QFoXKQ+q%?_w@!>}XC+iM@hif2i&)qO37;Q7V42#%lFB z>t;oZrp=e-+25)hPrK!taG(ELtF!do_3^7%4~NnVShK5T`@c3%;XsC%>+cQNaW5=T z^mhP2Pga`{MyFttls9TWYsofJX)co%f*X!jO)Xd48)g3+PAKeaJ)J4VS=^()l=NF= zT5glbHxgW4@!NUhE*D#3iqDSVe6B`#O1+VEcZ}b!1p(ll=nSE6x>m&d#tlReRP-tq zRUaxt|3;C=H1zN-j2KnQyb?e?#|3Tb0tY80lHNvduK*m6O*2Vc=Jnh+E<-<0jnnh` zI6tGeGFEeU2mrr=`*}*I>~Wpv6c^#BJ@R`wURTUl9Kxtg^QPU2a?7C##pUdvYMuYm2yBT7@dJ zF3NS#VO?O<`SgX9U0yH*@&L|Ylc&^KC8J>%yHOC})C_`(!IV4hH=s7Y!xZVVIFhbb za;fb<-Qn%*)S^!yeEZBU>x-RXJG;BcK;t&(aoi`)=>_cr)Gxr{7hD4w?x#sCj&^#) zMZPvpb|~vyMdvo9ET_U=!AUIE&pzMs-)Vjn?9F=6A`c9?o&NfjGmA5?`)foZVjhBNo{3Tp_zX~5T=fRQh$7{Rv`oQ zEFmTH&=4u{L>mfWNOM$WDcSpL@W=)saPnw5U75qE*;j@&`i(XV(&r=3bKeZdQSJ7( z#pahXuO5D*ST0Wp3XiI#fHreBohRcNPsQk=cm1WG7C*dHd`HB%-G{uCY2QyD9<5K` zRs-e*&S{htuenG!z(_dWuPPBEXE!ect+c)xC|1vN`S|1I+VlpG?`s=A<1}ZmGPpE- zz*+}=Ijv3FPO5Q_I0-&z87W9utS?gA{6R7f3$Z`y5xr@P;~=;BQ&L<6^7S@eRYSHA zlf$AB!hI2;fzQ>BQiLAOrRJ-+o5+UAue9;UyuAlatG3M-q{a zb}G{Wi}7}kJTa$OhM~Aw<}DnI-V-X5%ZDH1n*te{2cWV~wuinF3m9qmW&m`(qmhDv zBaf|%t%KsOKxin9;Pt-&1h$*3bz|ZjbFN$-!DDIe-1Xkn4AOn-zf1()_%-0y5-pbr z@p3~-goIRBB!TH{_5>o+IQN@j(oNzE5BY|S?x}i8mu@$xpaM=16k8Xog#oO~g3(!d zjVD(S`e;elelrwXOaI-zyN@8H-J>*H>gXiej>wXY`^YaZ~B*1N*sEZBOe(>Bp+ zu6{)7g)VB@clA^r!U*R&FJ3b>9NRwCWa$t6N%)o~;NkEq%j~aK3;xgQ&oz3dtey?= zt4KM{);md#u6!bY>4;P&x*;0Xa~C2l0Adbm-crW;O{n-O0DAvY$UbvFMieg7g?9X<#y`0SKYG>s9{!$KjsD(`L=&d=!GZ-U7ez~ zKIHDVJ#V8au$y}HW>}4;b^+1UE^CR@_d6E3@vm@>DuS22SSy(74Rj3U!n*tMQ5<@A z-!+BA#Cq9;gyw2~QyaxhL#9MizxH%Bo>@m89XQBmPlxSf@TfH_y6PN*S-ed zyA1#jw^-T(B#HD2x+Cx@>kJ|Tl8a=U|k&%Lud z!zX;3<&p_pEo11ee3gecCxa)|6#_sR8B*KxxfURAClKWoF_rbaK5Kpj{Rj1&z6G)i z{6++5Do!bpyJSqBKZZzpI3lC4G2JR<_2x!4nCWyodE-i;5wFLklW&ys>&roYbeXp= z3pO9l6oisH03%zbFY}R|Vlo*Oo&OIMLF>L5A5F$4WPR|huTw_=4%meaTy@6lhS%vc zJll8tz;7GkTJ7N z@4x#t_MT9f4UlI&;MZ^T4G$o4p3>)I9r&O2Cjju5dOV&T_kRao^r9D? zUjB0Zb>9__pZJNNxMIbtm%HkhjDN59dau();zd$Nu3e&g7K~=Zp?w-bqWIS zV2VVmg3?aUEUpxz?G5k)R6M{_hl#_dBz=Ijq*1o*n;$Ifh`RAO;~{QdL9LH9{p&hA6Q3UFWA8D(>_&QrUgRXVeUqKIdmx5qB|5Cr3$o`2$5a@I za|;W6)n=Jq&!#!y)?rC?6Pq${HGKpphhU(S15$=*I^f67^^0}Ddbxe0lnE9gCzU~d zee^FLx{fb>Uv;~DBKd%s7=lNv6Ht;yVzGPN3g#J;ICIaH#;EK>jpLhUpQ0SY%;#d+5N$nD-h1nXvn~H z{W3DAelW(t1MXm^I3|9bK(xW+ylX8x*N>I#kG}Fdwy`~b=1u{bC}8qOJOzw^@f5iQ zg_?6AANf0|0=yq!6bnE8BNk3$<{xwvu*+#<1xp$5^dPHCnz$VkJHt#IEWgl84InzK z)P?7qy|`*0=h$3R>Hj7Z(TD4IG)1boa$J4)hk|=Fxm;HG;JG%@%3ix(lGbe7d>zBr z!}+nhwKfZf<2z=)4*bV<%Vy?5%)Xh|+Rnx-?o{3dc`c9}>l|A!vF?ppe2qYKX|s1> zjZwnzrwZ~M)~;v-x)0;}{`=ro7t_+62;wT3{B zm7W}SnQxkco()Yd)@SuP@$6M0$BJ?1hwR$mPu0^6x z=-&hwp0V|B9=4tdr(fV<%fzRT{8EotY`J8@&7*N3B-8LU<9Te(t=9d1nq29Du`W{HnagKw z+j-}jAc2N6O&pBBH^3)$v97OeOK%NK&J;JI<0mJkj~JYjSyO6UxMyz@8~@O?%9zr! zi1c-VoHywl!1!A4@tVNz8axLR54}#UQ>F5>@?&DsgX7mOC~^HTvzj%Q%&>*63?BKx zmE+n%x34vWvjD~g-?`8kOt*cUkFm3!4$t|A-(t%lW$H`4`S$~GYHu7&uOI5py4;9c zX9{2&C^(;!$tGr-(5!`l?LiKGJkDE435&n|!%l7S@gxAfwwAshEVgTkP_VU+^Fl8J zJ>dt`nI--_QX{ced*oCBUzB3Sk1s03((9v+6ldRPvq!^C!;?79TtCq+$6#D8T*l&8 zCw#Ywo`ybkWSy9lsKYuW51*Lh%`tO1u5~oAS9&SftwS{&(}EQEvL+XKd6NyjHo${< zn*df;FdwBe!U%**k5X@X#46>xd)^n;*|kj_Dj-}4NREzdpNDvf*g~|HH{co*P20%d z5iIyVW=96#Ti6kusRB2gQ{%44+U+TtyQu?F^2p&BGn5HlyT*M(a$x(z!T6pajvovk zz87Jh_4tz?ZSp2b5UCa0d5JlHYh}%&y#=xL z?09B$;P?LC-+SeSe&6?f-<4}#wP3zMU7hOLH@2&jeMTtV$;)BC-~}&uM(pioMLwN- zzUpiDW_!Hf{FkpRbJcx#PyQOd-_G@AJb6mL&il49H@SG)^Y?l9@V$E9jRMSIuH7+XnAv^VqU8UqDP zH9O-waJ`f9wf?0qKfde@-R#?Od68U0vG7F#XH5$TGIN~PF>eWg4?i>=(Qpp(?>gWm zKU-S@cmWaC2p_ASqZMVMdpL)d%*RLh%=j6dv)HS%{y9iVs^9yD7cA@A16%ty%JIRo zC#}6#>qvunr%gp*j3rDkkK`vy>M(WjySs3XeAkD>Y`n3^?&P+T%I&u~Ytl?fnYCVV zO7g%%{`9H~*4bkV7!ZI4r~GuY*N;}j{W*Qp!hJ~g=})$XTt>01Ag6$RjZGbn_Uugo z<4X?M{mA}NLGHoMu)KDHcqF<^%qQ!^D_C9 zD)BQ&ko)v0IAm*Q;Z*EVq3+K*Y9DH%V|rw~v+8mkyo|w0Sw!$Mwtq zjhdbclQ=0-)nUL(ah$85k`3;C>oDak(bMRLBuI=_6a1H9wpo_1lb{9`W+L52&6 zDR7J?|(-XiMtAh1hS`4LPSobd3>)U$DHFYqDU-V>5|L}u%-szjx?%%{x(OG)e*Czv58x223-UZ-e zbXHMgGEpxx{UZ<`c5>M*JMr`U0Zl^+gy+UNx_CX0@isR76W4LMlb;&dKMn^Sw;gJZ zVCE$G{0-iFg2&zte6%~_9=@EZFS(Mq`xq7kkJ&G_T+WY4*rM_!WMf>3%U^9wC`bNE zQP3gP76>nVdK6HuAH1aCoTh)wE^UrSNtD9h2&>am<2&<9mtM0I@|6B%>(#&~wwA7A zHr4afdPSd9QxSCMq$f2I!XLfepY3ZdVnChOPV#3>AlE^7>nMM&pF@0n#*==8nbXN( zk7mxFBE*|#HV|z&VG=wW1|QCU)`;YZK6ye=@=hJ_tsNm0d8L5IbpOd)4qlF4TlOFF zA1k3pjB{VUC%AtTJKMV%;p`j-#Oyz?Dl?D0rd~h0Kd7L|zW4RBDwFFEXU z4xd1m(esn5Vk#3Rxuhn(KkQ4XjZrr7>jtj#Cb_J|YkKn?8i{Bj>00G&ef9C=$p`iJ z01xWz0T{^-!OI*34uAS%+36ca)5m_a{>4vZSk$^hJW&ZY zkubL(L#%r>j{5S;dIkK8de79s5Ekt|9GlS4Q|^W!PF3>?thG5b~lLFAbIh80Eg#E%LyA9y)3p5|8oV8fTc zq)B1V9`Dx^0lvh?WOy+)-QbF3vUZ|yP&tf z{q3jU{LSCIUHEmlU;p)Azs`3zj;r3^lhtx3FX!KXl%7oYevaMGd*+or-W|u~lSZz3 zpYM3bJ5FzW;~U={Tlb9L(^Y>zd)wRIc30o8|I2^*FIU>rJKf)-y!1c!l(#wF?>T)r z|J-2qrqwsF++6Brv^TrgeUHw)>v^W;?!50sdpEo5Tl|1>(@a`QF< zi|x+w$(cQHWWD&vC(eB22U8z7s#hLyEdg(&oYOX1ku+{F_*}una3jLx!{P{sjoZP@ zcIiMYxf@R{n?wEz48}T;CCWo~E2pZHvi07zJ71T4{$ zsxk&3)k5*S+HRLs$k}^RwLi#CSi` zcRsGanqRs*g&A$Yq)+=PB(lt`sFT?;#nQQaItDUnhELEV3fsogHL>DZ``i;TJ#qe% z#4q`;zre!1Fsz&#mAQW9a{RzY*@7))RB+Qai+^qNG+IkRySl9TI-m<6nJe*H`b*++oEkfK$0#VEL4RTum%LIE3_bT1q#VU!`(xy(z*USiF+TlRBxRUV>>o_S5Bh!7 zbFHKzsYrvkYq6bTy#_>%WN!HbCZr(oNs#)>Ps~30!>1l+`?5l>A8N6flN!g;3CO{N z15UJ^-S)nIq-7w8Vk}}Vu~|(n(KX7+>Ub>r=t~87Qg2H0T8DKmacEdUb-VnoTf6rg zPQXG>FArI)>A3mrQ}VOVM{dhDktY7HRdnuf`RP1oCgNNW$Qn% zd1Va!%8rjPVxt$I^5`vd5+i3m?2x^$A28VrPde~_+$)}ep9frq<_VQ=wjj(415`dR zVJGN#K-n8O);$5N8S=G1U8he9sen-Ob-}t=Y9nT>G|9~)Ct&tqkP|Gw`SlNel_bMC zCtiIxaUJuMgCao99uS)Ko*guX(8?8Y!(2Ckp-(8BP4|9hm*zEkPUR zI7RZXp7`h|7~jej!RX9i|AVt`c~+wQ^rj^fe*D^Fr$?{-?z|1v#a|&0f8j$LQjk{IQ4viI%O{ zJtn#;GtX=Zppkg&F7Pk??yuUdedfj2I@izUI?wRICGXT;e)U;TFWMi^jZ>U3?ThI; zq&M+9zhpKBO+NJ@9s7xQcTR~e#RbbY_bUXoKNc~hc^BnKmuIXL_JPrZx?Q`ewoLXb4k%K-QGk6xy~ z<@)lMiMJ%&2HAS=e7IYOVL0%ugNy^;H@gtmK9~`#;nbnJEI%7OdIzr=Zrj^4q<0@0)m};&1+nC-;uk zznVh&!!Uo=lWCOWtZ!$`zU!w%G|om(z;YHHEZ0Q`Hhd7NeP;TC58%)}B_SXM!lj2^ z7e{QRXs05y>HN?*^^hNqKRJgHqJr91i96cZi@$5M#sw}*9mn5tTZ{KUF_+Q&0>qp> z7-QDbViWCuYoum(52!f&M|k!|4=9^{BNpynC*Ndqf10RuSU|k`oqyKZ0&Ma#4!Fs9 z=_NP)I2#d?>lla=>=6%QUq4atIUA~3qvvS^rp4yEe+27fJ|>B*k1L-r@cQU=0;o3F z+Rj~lw8wVt!`l8E;6(7Ji*S;$;F>>cxK5_^^7EDedNlxjINupR{aY^R(xCQ>(>Jm{ zV}}&Sb*~%>z`sYg6c3SLg3G#PH$T51RW5I$dUzmJqZm!|3Wv`!Iar@`&#!dfR;#{Zo zPaR5m)?+jr8eC!L`&3Y$$O1P;v-_v{Aw3D8W1T->)=VTeBm(hStNC&AY2e1SuZtsr z_PF~GhrO4d+FDC;Ptr7C72y3>TtGf3ac@+%so|&mu~j=CRStWkqv8ern+^9s!6LG^ z>(P!o-^Nl)>PKL*c(YVBBb(161i*Ua+Jo=92j`v**@{!x+5>p7!nFTsJSpT~`4Abh zL;acua?W2ADjACVy6D^QjTJ-lj%nn#Hu=VXkdP~V;r*9MWV-k70-Za2dSi&^h*fka zT>Dquc#pr(e?V^oAcb_mMWhn%t9T_zMPxu>kK*uznIr4gZ59iSV%SZbK2E6dgYShZhGWBoS((ilIwxcAdbzptNzp!e0<5D>#=?Ab+Ym}tJIh7T)*rP z&=Dxi!i|5Gpcq@{!Qj=gR{pq1k{)VJtXiE5<|JpeQPVa~ZfFUTqq^}eha?pjL{jCH^{mz_qt>J~k@=)Lz2 z%q4|S>$5{UWjnhIn$zMiTw@0|62|#ZIt$rO&td#8lh;yXRman0vGH9MM0kU0yV@Zh$s*!p}tT90#QM|Y9MIX5*mR7V)x+k zBv8S4U;`>3qVkYd!IGxhtgJV_G3H!r{U=XWHgz(q3Ui(F?={z)V~jc1-20r|C;$Ka zXVivWL@2hcFfhq4pMrM64FkSy6;LD^KmnwsEOL9*e8V%DU)yg`Q&Sy|JD z>;4V$8pJlbW+d~`TFKAXKR`YFiCuMJxj=M!^aj9S_d4-tHMUkrI!B}DwTwn{nEN`I zKT)*SS(+*6+;9J%rDh*sn$Q01&)!bwx0z2=0`CIw(?9*wCxV?;{K_k@+@Ad8CvSiA zH-EETam5wecYf!0ZZCiN%TGy*e>84)yW5=-=S1MseM0G~tFGEU@PQAUNdA=Kx4-@E zPYHhx{K?Y+uI)SA;SQfX8>*e`eZv1td<|cpCw7k*sOpp6uL9l&;t=ayLLvLuy9 zXL?|}3K;vR5PgmU7CT+6{s9vfAD&@*Bh|mEvv1U^YEQ|Bc#pEp$Cug@t@Eb^sAe(O z_U((E`kLJs>+CcYPb+0F#?*nDlQj;nbzhm;6Eio={&f{yGZU z{*e;87HfIgdumI1?DQXU(zQ5q?ChT;!DF?Z{LRgO%<`L7yyYstt2wS^Gm<;1u`M|= zE5ZiiESp^T(*M+53X)*$CVwg@d1aN3X+Ozi!-rD5SZc>1`y-qwJ z_uQJ)BA;x}l3x3dzeHvN(ievU+V*UzdA7R__qPia25iU7Yt5l+hwGBnoyK$>?1IXe zP4UcXP-6R-L!!l5{CLLSxF0NczEHEDIYThGX1ONwky;YX?sL7ioj#@lAKi=E!D=gG z&Q}*m?)aRkHqrfqYFlt-KHOJvY||yu@PM1-naelRN8I@Y^=P`W^S|rh_|nkq^QX9L z5vk8>^D_g$N{(-Il$1xzCKA9Y!`AOv>qhO+3=IdZhFR`OZ zaMm9TlvIiZf{$az{@&oKjKOnh)=J)0f96kKE3`my+-z5cqpIl{?7(Z6vU#}f!q6-G zG~1RIb6N(UeIgTEM)FiD=d>^Nr$GdxE3|ER*iE;aN(9A65^U!i`GfK?LXNwj4i$%G zpLgq6H#raK$xi1G1`iYu8NFxL{fl6&6H+Di6q|o1QZUE-#=rhHMrtFXC+vtcde?4F zdd!h}GN-ck3_&AuUV0xZl04SX#$zYiScR*W7>R~c(m=|w%m`!?4tuEs{dJFll5_a5 z<0D6|ne-dKg8{4p@waHli$BuKABpr~?4j}t?pgp*Q`d!Gp5(~F%b09LRwe24?%9;& zT_M{cGJ` z$;Y14E1QZAtLBg~+n=)17u5HVkI&!wAk_|sUa#B0C|Vfbj}@LOl*4_JPE z@FG?2Rhhw8C6Oy2B{5oewW*>x%&S7%Jx5_zB|QlfU22G?Sc~nP^sngNJvRNPf_$2T z&%=dR{{Rd=`J!bgTwExTQz6#V&JJ8FG1#Q&hq>`5XsH60T^uMLGEA3{bCrAK)Oy$g zfJv`{cm6Jbpb{UtR_{s^px5x7g}M07zu4Vt0gYj&?k&sWGuxk}0XjFNbp+QQR*dLS zNh@dX#E=XsGq!7l2SB6etagv-$@Gy6KAdSsA?GjZK9XDy*Xcc)R7Hui?B5xTx1|GI zpgO>r!m+` z5UZM23vj)uxTxP1;8xzOs(+CE+1F3@465&gdjF+XdE9`qktlInu~SEMd;i^u>=hiN z`YbDd6vNK5dtkGpac4L6xop>?16-Vsdeoz~U;gD^z8)(3Q(yez7jO5z_r14AKl;)8 z15U%sZ~lMp_kQp8#y7rkuzBIhv!DI!?SmiupkE9y0w*x2ZPhse{Dk3Gz3NrlSAX?a zpAfef@P~i+hX?+(!`{w~Pwoy}*Z14|+~+>qpZ@8e9!LXje)F4eU;gD^ejr*W61lDy zk?r>cFn_}24R3hEiDXYY{`}A_4UhxV)9{9iqZr}A?-?csH zK@VCX=j`jz0nYV7zPRF*uYBe9wO{+Sr(6-&$aQ_~owA?^r~0ROuDMdT(^s8Nrg?MO zH>SS%tUF9@F!_y~aeFFwZcdde)Ff?t-kHYVYgR*K*S5R(&S&A0SCG&cT6n!na{s%2 z0DWUj&iocpr$->soHN=fw-I!NhObplLpER@}HO~5h z!hIx%KDwvLXB0>T3U6WaK{Gh++IWM*V(hNs8|tcK*rhh{SQ(?QTGFRp?{8N{Mfcuh zTetS&U+Tg`e&b?$uTH6|?AJn^-s5P6YK@)hyJz?y_O6&6V{X4Fj)OHlxi}@wr>;)# z`~&rasG9S4%qkveYcOPP_0+MJNc$b`->YJGLmFdXm_*b*|J0YRy3#bOZ3!^@IZ*K3i{( z9nPpANnDeF425X7rOURvY~BIj=+V@I9~L$7?*|;KNMKwYK6i>ZXmk;9L5zUQ1tuL| zeex3@HhV0s53 z?c|-HQB&j4W|JD;vux)tzionr!5p@H<2n)RSX=B!k2%+mRpL_~?>kBBdyy8-4@9~_ zh?H9Kn5+{S82(VeP->NLT+XH0idCIav(x#t9%)<)4vp0wY31Zo>s&MG8P3j|obn5Y z&oQQ|J^m8U7p-H#Mwe*v_cd|t_OUx1-rjxRn{OYz3*UES`?R-SwjI_xp!wfIzfb@%7$`8>D#|qEha?QkXJUhf-+&74fYOcG3OU+wt;&vNc2RO@cPS)}tV;dTO zC|p~O>po@=j=N1dtVzi?Ppb3y-!Hjy{fMdfpg>I9v98JY(_O%FExC{quCpCi zVesW^tNY{(Rm*B86UT7o+Iu4hTI^%74U3qSdHZCE|r&#{mp0W$Kr*Jd+z8;_-7XxUoinz8db>`+aYW^GM*8Px-X zU5i{UGSMA7n^pU&H=2ynnu`3}|K3e{<|>^pS{&!~TU;tYZ_hARKL3Fc-B@Tu==}gek$@PW|qvN&GkU{9#ViuHN*c zRCS3w%8qi5Icc_C7x^?+n>BTN&Z6w>#Z8sR`=Gwn*22|>p8cDxgRseiV?R4urC`>H zuODTjR__bds?luHB<5PR3@rUD3Z$kFyy=T{%Q3^t*#G+3ZGa@X-t>t-*AI)>TvG{g zPJ?TG(&YMSI(y?q3^2lyvDo2LAkhqW#O7r5^^=VRajcE!273X(bvZ^rRP(=nDW||N7Va392vpqAxl@<{9SQ3=aC85_m_4i!QooCOKz)Qg)zUVYc7q?tlOL zAJ_{3xJG%R^kENs*nX)F)W>gE_dot8BYeO6-S0qO0Kkh0Uj6Ddi&CDg||lw5MjB_nn^2EPG+kmK^pPw~Cu4>I{_YSGJsd;!4gUiZ4~&;IPs zwlDtTFFxst_*!_u3tn*2_>%$NZDJuO44t+G76kP^4>BXVsVGEbiN{@v`e&`GiK-Wml9lP)nbdEFy zg#>yh*6jS~J1;*N^p2YWa*o=C9qv(u!Y>XdqW0N+0=8o-&)BoDt37%Xk~8>8+wNKU zo1>zWukvO}rPz#aN7vl7FjIAFxonr8{-+y4%oAX|+u5SluYL=MV(T=&`({51Bgd|- z5YeiKnALFEpN(LXBQ^2^=CJ!bIwnvx01WQ}aFhb1MP1EthSHkKC{D)Z~7-AiKSPQ((zIY^|}|x7s+pHzd4&^~q^hf92mtps$V4 z*{6mQ9OExv!ilG-sh!=a42whu{3zV@)y8Z)IyYDS5g`FKip{b&z1jm8SoUAGCU0g) z@taHfvjAKhx*s_2TK)rC`_PBa6KSe{$-4NFs{PZUVW-h`{+mA&?|1!BBmZ&AZ%;Xo z);WI^P&Ff=;kq<;jlN#0UTkm8oT}JbFcp(Oe4|Fqw6W{=ivx^H>h51{OStyKk?mX* z<`kaCb)py*dC$gH|A0D2T{9r6m#)t>6ANE(tM~}cj_Q#MkYg!^cQkVI^gJ<)sz{F3 zU2BQY@)hR^B!3-|$0>CXnIi=xzfF=vfQ!3rW2;Z_5z!d^1*d_(_dNDxEb$pDI<5@o z!IWdxVFWoj`rIcc=nu+BtG_-O3}p;Qjd>m!CE|)}@M`VqH<9*5>ef0+$Snpqj@^6mgvOC`@M7?35QwgdM{EN|h1eIEn z(3FD~2u+h2TQ zyWldCvlHeFTS^3<;hGg^jm_Wc<*Fk?$5glznuA$nqhu3iYpFkWI01J5oW%So&^=>b z?VQI{VyzVGWT{IIY87wlr63MPRL8?2$T90mUH^^ z=Ye%KoYrtxSP$n^iP>pHY(= zKWHanT{ScFLA_;<-fGP!ROhXpg+2G2??1KQktTYgWGsF=N-Mdh7UjX|{-pph20wDU z81UiEpRkh98Gp~Tbfl%%l4@LVY`BJ89S%NC{MANz7{y$NNZrpL6SUJ_- zKs=Ql{lriFgnw)Qz3+YRsn7oguk8XS&9>lox(n}9Q z#u{hhT7T|ypLTm9!scmV}3EZDh8+6%sp^@SH+cpcGG z4;}ACRHv?V_87dV<)8=W`c%%zul&ldZ0~#D`wp~>Q~h`7n#*+yc=hR(FmCkwhPLOr zG3^_E-@d~PtC$0nR|V!A0&6Riw`+V%ICDp+_;8A-^=&9H8uASBXGNZ z^GeJ&_58%3k+}M2etvl2hk?dbZyN0r(Bfmy+#`Y09v;~Xb<;s_N zpX&!a$;i!N@XN3(acbS~`eDz9uI0DAwO3=12_O6rEnn8e*8y%~tz!?GjLgXq1-nO- zNN2*zh_@C?%C&!OyMGN8mbEpp<~QOTadwtH9tpYOP8&?0NlkE>$m$ zK|-|xfR3C^&9`#lzZxe7Cu^~kdW0HYAwYHwGXs8@|#-mfP$@}iwFZw3zZ%BtW}%0 zZeh80=tr)fo^edR^ULAV1CHIrmJgx64iUf(*K)42uhqs=7mdGOR_BO0m}!`sCobLu)?0a==xkM>Ku+w1y_g9 z1!?YmTT2Ix?iF@=4XgUzb8X1^DS>K`)d!!$b}p^K8>fl6)=T;hC$wOJ8ZI9%;^~?o zWdAK)dtP!?vZ_f0%23i=2eG@aR&lQEbzo)eUN_CBNFL~TN}kyOA_=IbiC4C+k(nMd?2B@1b*~amuTV(d znyVk?gzkc@>hqUctS_fEolA?(FJ9+_92sRQ2s?1j;t!gD(TkMpY__m&0+<9i4j<0e z#EtE|I(T-jZR59{2NpU!eK6xskF0=-bYkQ8lmDoJ^pIuG)>M8kt{zTuRiPxN@;_FQr2DchU11E8G4ueFAIRKD(Yv{Fla z5x^b-vh8)V%O=jce0%5copzMLIcR_9YTr7;8n|K;?~U7beF8c^bGGc5`8qI!^Oh%l zVig{A#n~_Gj5Mm#qyZHwtXGSja~gqUjRv|5&Tdsxb6*kk6yBVhW8ydj!?JUseE2-B z#`HEiijTsD(5EwrK6u2nHXacMb2k9nejPkl$TqpMcK@(}mk-EDFB?8_OP3vR`^vcp zq<)m3XYOmnK4Dq6FLlIcMimfd<*8y*2N4>eN9FBnvh~f?!LxAwI8WaMWE+bD_MRDj zk8vJoKo4^ESWN2-e_q(ip9eUidtC0V^FpBjT$9Yuxo$M*NqJIrqk0AvJ3VDh{pG8k zvL1C?mqYJ0xg4*axPRm=zQOdg(|T5%ed8ymv87pYLOGuWi;$15wCLVrWGv}C0LsVg zG-k$)Ino1luIWpxuOH%w^}sK?1Z+DlXBL{tgD9M(f7F5ts6HCw{o@fIU&mN8jAI^U z;O9Y(nzf2AGf?+N^Pnx(WRWuiAHy@!S*`-@*_~TJ-Zpbiqp;Jz+Qi(eIQX;=*DE{u zyZ?$2AHtQIeV10}%Jl-UuPNrzUn+Jc@y#nNN!@SL(MG0fN=0(?nUJ3%!I;m{aOdmN zi~(j`!3$@C{8PtLI%LkZfhznd5I^}iZwMql_9S0Q>;929{FaGo_HeD@{!w*{n(FfZ-4vS zPb$?v{KG$NKmOxCzCHNC58i(M=YM|uO^p+gU-O#RY)^dR6SosR(a3LpUU0z$Cz3m* z_}kw0Hvh)&iE<;#pItcU-~LDUOTY9>na+(*@(%Ei=<(hKfNT3!x4PAVb>N@>`JcD% z{_gMI_!AtbJ9vVeKi~0?hdg9^%Uj-Zx-vUF_Q{_pILN^ZmA>^`zjgc9fBn}J%JSs@ zlb`(L?M-ib({*C`zCi!@6Cr=}M}KtO^L9Lu+uiPV#|xd7pFa=bo3PVj-!LTpoWen$ z>%aTEzwGrIe51IBZl7)@L82liK%VvWB)+WHTOIOV$?BvU@_{Krpv-tD5i;AoH85J z{DE8RUhP3|WbJ6d^nR$_(N1D+`9wz{dAna#XHEz~SGb36U$PgEJ_?%>lwHAISGE?e z3Ou>*F0kdjxD^S@NyoG^ixTu)68!s1|(U^HsK)m4AG1v3@DgFvv?UlaR&Bv8~u2trT*M?h8 zX~@*Po}GPO=B~G|m!tYke4dcM`skH<@Sm1EQGbm}fW%{74=qFDNUt8e z^sS!k=kKISj|WfsA5{*$2Z1F=U!XXL4cP8k_qlPscI|sp!gnz`RNop;pxe6Asx3}! zza03w?Y(v599YZje5&I4;wHobE+E_04m+9aE+ccx(fJIZ_3qBnOJ zM?L9T_Bs34YbSI1R;cv7bm8e=7nZi53~^8GT6PUwtKDDEiuw9Qdr%8K@^zNXmEQeJ zrkn!&{jgZ^b8TheG>~L;9V23L>S*1{IOP`J=$8euFLz*&^K})CIvSe-I)9(2*}LwR zIOH?6MRT5!nS6^D4t!%xuf)er?xWqie7k0FQHw^ZpZUXH&MUB4!dwIh(L$qtT8*#& zh3M-72&>NnLAuNo4l9rg8;Sor+bKN&d4)&tcm^yB&;Kk35l7k>WE+uuL<)_Ou; zT+u-BAJ~Vn^%zh3E8uncv3*xm>m#>0yuI~*zi9ivUwF6ey0C&0AjqU54;OYY-hbQK-jaDHgQS%zs*H749QEL&*NuZ=p3`;tnD&#`Q{ z%?kJaU8nifurT-FJ7SFS0_)Q-4g?0j1I=PCL2%740(+ny*EBQ=FN|}d(7fgP8|Ty@ zkh39<4BI*~s!kc}m7(P81T@m)cjRNpyG``pCObi{W>_2bSF9x_q-&4%3 z4X^oT_EIlQwEKEWETOPRH%g4UyWgWO#j+n)HQY8*P^C98Zjv}AU-KI)MA|}Kd*rlE z%M+N_uW+~;FU@@i@y=HOpw#bN=GXbIcxq6lh1ch=>l|e9Q-Z(V%C ztQ$5Tg;osCs)ZZ>eimk;OPoogq>RFD&5n?vA1&1!_{WU3P6fLk;CAdLrcsVL|H@Y^ zoLLohIsb}_xQ>NSTeR%;*g;)C)M8Rq5ges-jq~~ukk8KN7W-?;DB#{1v@em`mWyyrb{JLnhBoPYlLr}l)> z_1^6{fg7>|$Gd)b^8euvfB1ox#&58H{nvl}_U?DT`;>I~y8oTu`JL?%k9frPidVd1 z``E`mwmsnqPuTeF`0G1ved}AFk?Z|0|MD;WWc|xu{_=g_4dBR;BinEP_HX+|O{em< z^t`C)d%ov;wy*rkuiRess#op%{b9eJ9P|qSctOIi|N5`*m&!h#81I{?{#wC`$kqbn(Mu0+uVq@-5cmNGmmkzIK zW4mT1Z=%=1HUqvPz-(p4>vGG-w6k`di*Mu*uIEv5zc9U*-Z#ZJ*g*E9gSxF^*b@YA}mzzRZS?c$FR5 z;08t@czHx{oEtAGDEc~LBwxf}4`1xmZ#!~T57$rl#Q5Mp$TPHZ@vK2PVTv-K*7Aoj z`_~E-<-VFdaY%8l$>&j1eDVypjI!bMV4LemovG0Ng*Nhwgp}oEyZSykHFuBG_+%K` z?rn?5eb+I+8Ob4o4^ zs8~;KN~m@TyHhVt^Q!~;O)1_|JP*A?fL;`vxsuNS06+jqL_t(=^sz4BNdagQ>Gr00uMOX zm<5KwqC<`-b&}Gd|_C0w_ZT4hpEThu}d0wLphYE zduCU$4*9ntL3GBb%{A$&esP9hFp#Xx5GHnAd!`iHdYB0m2~56!yPE8?e3bk-x0tovP6EFOk+Wv^ zmc4qP!W0~jZDzo^e&Tb5tw(Vl2qy=O)MOQ}+&{Y$MUyCOJUoKwIKFAmEYpV^qiaUf zYaesyJ$4>@RcEiwkbv_mX!R0YZSSq>VVfR}^W4`@>gn2Z{iJ_g3tTG5T4E%UM)!DX zD}Xln+*=~)8Ef;Qn-2sai};8;rnP%(xx_7p356ls{DdPTyKA;|;~;fjQYX#16)xYPEgufFYe?ag?HBR$by4`6->*FOG38(+T| zz<$>^-wmL#S6p=d_U7-o%l5b5a>wmjy^4U3ZpP>t-0Fw>r?otK`{Duxu&xo z(-6Ru;XY#;tf~88v8mnR}^K$KQE@ys{ z&syj8=af#PJmh0A$?oOcbMz>pV+D2nqbH&F(&by$^4kBxPqJ(gOs`#UDbO)fiyu^K z;Tq**p5u-p1p&4a8byqeHFJ6roG~L2`$su{4g<@ziJE$<7jip4T42nNukFzQ9HeG6 zuIBDBC6C?~e79eG3T2>*KVIlGh9ndA4ylsZh4kj5li(xYi08% z0(d6?{rN53AM>XI$eoUt-pEtx^va`jy^e3)f3hSgdc>@&x%Y33sqqO^($a2Sr|EUO z>-?bvr8P7I&-p?sdiavRT;Q~?MB^Je78q3P`2g5u$S}V#vxd&m`LiAEx_P2Bo%LIj z@Bgp~2}M9f>5x{Ddebc+B@H4-m(=L)fe1(oh%`eH5$W#HC7q*34;Z7yfWg?F`FW1- zU$7tU9rt})*Xw+pXO^q{xT)OnkA=5UQdH=4%)t$F4R z$8+>x$xBuilHOjJD0>w`FmhP9T8~m-(q!BZvWFEbt5mR^N6FWziF6G9sl3dMX;N|+ z{6oD^p;<3R8}6dvwpM2QYiP%`o?cFWG;sa#J|^3|4zjIv>|_E`c$Tq-EacPMc}-PF z7U|S>Dy3y3B=A;5GA*sC?>9r~IQ014^|fJJ*C`pC?{bc;7xAKW#9c z%E@x5LJ!fKi&m{(r&LLKic<}S5FNN~%V%y`%bd)X$oqv%rx*BE{}|N2xdh@a5&!rK zuODPv*b?A%34*Efl&OiX^QwRO-_>K7N)ShK0I%d;ce-jjMK`~@7X>aTI%E}YxlE>T z)s6V~!TQ$(0?O?9DyKlPod`D%nR!?u9t}C6zOQR~bSbeJv>a66setFC2Q$sRksyQZZo!@8>k{Ex5{)-&mtaWQ>+rGy-Wlp({Miw- zP;h(b=<#o|*VqQVJ;Ji~&@{F)^|Y;_DrbUi3?SsVf5oCk(Cs1!B@=UU=X|3VW7&({ zDzqYaMZ1=?^Dk5MKlbI{k*^7%%y#_+*Z24McI_D5erj8RuNh6Ob`~-XjU)_?_qFW0 z-Lm1X20fbEclewB5iar&Hawz&;dpZG{fkua)iPcN(iyr^WeLKcTGN@{fE~}1BrmRH z%;A)L0S#Q+*spDxM`AVE3@sk{*ua3Tv3+_GgW$wmhxzgESq`>#FU9?Qh~4EI?_AM` zMB0a^KIZ+VbocLthwxY+auBLtLgh93g2};K^?6QhK3lVk^Y9IbZstR9bz$zr`;9JkR3M6S^@=u za-X{k-3$=iKQl;G#=V%bV%%L0-<_u8AV-=yc~#RX3M zSCrjBb5~VgpSKM$%sX_AGVLJsnwY)hlto4+OD_Ll~>k{}LJnsj-hw`&ud(w6h~G4b;FFuAe(ioX%F z%nf9P8Jz~MY#8SFk%C6`U&=Oic}Qi{I;d7Y0J>!<^0X(t`ET=-mu_U2z~9Xwnkn+d ztS!%1Z?xG|sEac1`__n{@SS61hCz?}^UwtrKuA&>Aq8pt){>#Kh~rNni6^tyK{kXM z!ySp(H>`C#)lOnrid@dz6+Tse@8DFgX9|n z3&46VW%Er1#N*b{Uf5P(e$kmO;rTQ2jSP?M!{{&QQ?ESqmdL8Ehl_>xnjye3T?iGI zC9}SA1iF(YH>%4Y=FXW@&1na%0&cMERC z^6xCRwnZHrs`8DnrJp+aT(zp4y#a>X3r&c%`zXkz@>m5SB&1^DkOuVvx72A#<0)4h zYk_%w|A)67ZEWb)wXbHtH(Y_FBWri zajuf}0hg2yp_b}SB}ZYFHvwAUOY_j~3z>=5E&u-L*p#p`;CG~@8fshNUfMn{c3HIn zcmonGzvYO`se#_&Lzos`5M&cs`$^O?I#XZsfN+_w6HWkAXJeN8osaxcTr&A+b)xaB94Ac=ONCX#|1yBo1E}KC5tPUuCb6ZbQpBOl#j$M-_o6kGGis=l8Y+Wuc{vmh z+yvvd<5szMnpMr-V#S{i7k5L8x4gobyFR7Av6E4LIHEhD^-91Wn1q6!s^W7AQ%&khzWI z1KJpbS9bOJge{WV#R)`29~yP}!%5`E-THc`Iu-U`xilH@+OX&Q0sU;_X21AvCw-v6 zGCG62#enCkSw+FAFM6w82v)`+%;w6_gfJ>2qR_^qyoQ4;1Ib#5-?ml=F4(JljZ+ia z+xK-S=sMZ=cL@22@7toN_)87oi*anbT7}Qc|Uu&s#tJUETXq?KFgG@*P_5 zH*5l`4k7G*Dzi@lfJyus0GJRm)5m>kUqgpvEx}b(guGfowNm#-X^GxAL!YFSG9i#I zS|g?${V;~kiOcb-!J>emO_v8_LMd%3^0J~cR-WfRXj zoXpyF1oj|H;Gd=(ss1dslv{*HAI?N(3m>?sp%2c#efzFb+f&c4rx9w!;tGLXXCz5! zl$M=r_k1J0LSY?O;pL47CvVAjWRLZ(4E}ugOMBmmm>+)U;~QSnMQ_aEh$10y#ja2g zTyL+QJBIV&^zpV$Y)#uA;C=@|!08IyWODWCfj4kSr9zzmMU&X*Z@}SHGs?wtt7fEQ8&x zRs(yO>>9jw3&d<}gRfLO4q3wV_@E1|4^ut@+{Z8vIPalkQvO(7`5V_RJo!2yaqh(- zbdYB{Tf6d;q6hf;Ad4-O**)aqrPzm=!8(oI+V;f;#h*WEjWf+V-dFifl5^6#`p>-> zT;NjjNt{cbk@|2=mOuqLWQ!+NxE(`9THG8pj2 z3i$39PovT4AF)@oMvDD3$-rL*xNSy6_Tv#x^}JVzHld;A!?&cgZiA{IB-c|As`pow zd^q{z#w~sptNJg}z6kcUz_3{t_7A#ds)S0fyIZ=&4O;1a&Z7`aF1Qb z2>I2co2QdGW8{YKu(C>hy%jdbUcV$yDJ@#>xW$tnXvMaG#?ts5{u(PtB{lezmKObB z{$uz0b@y(nq$R0owp`>(-AU$@j&NGgBdIXwBuj~jGaAKk7kDZjcMn6FFMikFqLPty zJ*Ffiab%8-naJpWRIf{BPI3eo_^q#nmvl})am)<4T7c^iI>o3lp8H^J4Fkt@{U`k= zekG3G$u)2Dzo|WS>P885hE@v75ije`KkENwuq@UaYe~uKbyJf2;leFJxd4-raeL|a z74V^onl#0nPcBz?jGj>-nslVv4OY#VT0mPiQG8dr*;w!8bchaVH5d#?4h>z{y}FYb zmM8e?ax_pluZ%W_w8J94X~G02<7pyaAQTO~p_?>uNgf0K7|DT=5iS|}AloAU{ev7z zcnOV#ugc&Fw7J=kD(}p1A-gjMw}wVrAxe+FAGO8;yB{z?gc3gdRPtE0G~gKCqtCEK zR%_?iG86&Nq%4WL4?cgl!8{Ns>HR?VO?tV(cqYg%+$H9}vs^)2)M(rws_4)u&B_a; zV6-iI6)dq=8H)K%Z+PxxM11JueqJ)0++oe%vTmNRb-)%*V|NMkXG1~jjQUVwF@H)u z9{(OOVx7Ys-B?uL?&AD-aq|lN3pai8o&CChu#`A4cLk%zRgOXnd{uUA;awF?5(==H zrU~@MrF(2uVJFcGKxG;dGe|y~nK`tV?Xoj08%kb;xM;En|21IEWa3lVx_^%5j8x?r ze@-!9Bgdox^wvcY2lfw=rF-Cz&r$sZlIH zC*u|)EP8tU#HS{~eMp#$_%z;{>LwmxzHtBSfViRo_C)MXNI0(h=$Yl=)7|?O!ZrH| zm%Iv#y9q04kT*n$vTm9K_ZcS}tCW4qDs>u07e@@7#hr8x9yEoP^G~>bGLQn&4(+zT zBhn=qXnZ9}E*YR$K`=Yq#lh2eVgo@LNqf#?NCvbCY8J$z`XN5nG-|r=q{|{R*|IL0 z@0WNNGDMb}q_Vs5eMsj9HOR&%Is>`nNMgHLIf6Q=H2W#{^H?Y}Ww@<4!hRG^_N)2& zTx`pzGPl9;h~%|$Tj$0u%<2p>H(=S3TEG_@8fcP)R0FqS%^MHhGaR@2Cx6UV=<`?o z=FXo^)-e+S>vz(9TdTj*x~eO4i~ z(D_}#kOs-_!%nFuDZxUV=|W?S@?}kQw{M(r^<^AEmkecDJ@|Wu^C=kbQfa4)>YEzH z%t*v-leUlCf|w4ci_Xspt1tUjbxKtQIhI}|17dYcf2VHQGK}6pkH6(BK`?Xd{h5Xv zq&d?Y@rK4*@0P6usmQw;ph;}jJ1^VdCA2R7u?w30MP*MPe+m^`yGaIRb%sk*-#`Wv zUmRt$x5oYjrLj|S{Oq`p1?HEXrMqs_Y!>X6C*7_IT$XbyWbP&UuK%-ZW9-)$9(G2) z4l+pNHN6rc4k6RclSeq~F2lhZl|dngWU}jo62nUqPr|NQ)^9vdmhb10{DKcB8zl&(UgUd-Xbc?Hap`@<%(^B)^0|KLDC4B`xx~g%k;yP;Z)-d_OJ#c>9o&&>%w>S`T0lA8v?ngl~b>W}1G zSYcYgg{WMexpBeQgM0(qc@5dW)_ZxJ2TQ*LygAoJp?X~#uf(l16SFM|0HkEh%m()_ zY~Q2v=-8eHO$p7f^AK_sq*@L&<`Qt#*}bdX)&QlcHP2@}w7OcW!`a30ett8fp{-u~ z)9MX7v5D%%SD*JeXFC2{+s|iK=G;9Ar)j!#4`jWz-mL@j>C30qA!t#H5_>Fz(JQ;odNs75y|MNzeuZ_hZ>)KOMcS-Zl4O1*kT#5iG zJu(mR3rWXWG2NK2hWUmqhpjrif5fZJ@vp0(v19vD0d=3{d=cz+NLvw8;|cpo6p>BB9p;~UfOuO?v$HeO=GZY!YzPA?%8KK=N$Y=deV0}tUu&@m6Nryi7dnRP7@#QY_@`iqI>j1av+C_zb-j}bXSF)w{ zHQ&t$weiC0GY(XwNT;Vh)6F@n%fvf9!Zig{oH5I*$AczIUj#$ZA98D*#BzhyCnpIs z3k+DiZek&mc2pMkBIkYuTzsevKOgE$~wYb_%uvp)_lo?vreC`kQUtn>B#bfWs&Y-6UNd7by?rnFY6-w+H0jSdi4%Nr$i z;!c|$2D_?)(dmYkbgQZR2QQa{+atJpPU0TmQrei;EGway&Wq{-#`HQi46q&a38G~g zULp+#G%aIq#FkZXp{NUIk2c$z^ColfDw@UEy$Oe_Tyn?W?O3*PKHTX=5zEQRW1$}4 z4#Y6%fMjk@yFFSRIvnt};jXwEzifrLb<)~_kpIvk;7iR7^UihlskzxhU)&pLD~A+y zY~#aCeUeYaI$38)*Y_Y&!Irq&&%SAAb!uI;P>B_u)b#{ImB9iGdUpd3C*nx-X==V=~Y9v1E|$> zuf#fOSuZLYFXvGJ{TgB8B;?ySgj%OVDT}A_B`3ytbVI#6lNYRnms2&go`h)>yshW) z0ImNvC*Wkx!JF}}y$;2n`QdHk=BF)j4@K^gruGTvB=K3Oq$?Qpdy1peAp&gWiYutE zomZ6VZX!lLSwV@-@5b$bdQ#JOtK%keXpDyb(NgAuKqdGApz>>&cDTrD0}7RXTio-KD?}!DjNa%b)WGQ(s>(^tBXvn!daNf9F2l|muj%TQ!P1-pkS1eTLFMDsu zb7n^I`~)~}D_rXlpdljtWA7A+bpo^Pnek}YG%oChQPGMGV3n=_zPR)QuseFyo=3f9 z-1l*PJ4JYW8>DmJ!6>_#cKp4%p1ue0gBx$ehw>ofwkpJh@a3BS&n3Yz>(ckVylqu% zWL`vni4$X_2D~jF^DU!4P-~w(5Lsn-^D6zr-IwD1rezMX3C1+9bFGVy&;Roh@6aTI zcwf=y<+i_7SGx*d{PHnb^SiHwRi3oJIZ=E_(zn$X_sN6qHm%nWKqO?bMz*UZaT`kj zS)Vie&MDEL!|cEkv3I^!oo8lcnrAB%k@ns=pZS4*pdz3`9uOzce$s0PbA@TSR~gjZNp^>29tu!gZGQW z9})<%O0J$3lF2zOAG65o7$3VL<&h!^J|TO`Y{B`?3OGDlFTF*^f*Dei-&7#+oNR>{ zAE#*wEXp4v<&Urbt`vrXtw4Vh-d!PpINThnyw&3wzoEo8@NPJ{*RKT(r)x5XgfB2{U$bQ6jQB~X9CUBjmB_2 zj7Zkt_~^#3_I^B9Hpy<6j9p&3(^$jYw)?9A-{#k`z3ki@yI7=PYB_JERH+CbTP(J( zaZW++B2hu%L`(_!!1BL0A`o4YhTW*Cn@ig-cl)+D_3}RpBuR;l;@duO7sTkp1KEr3 zj;V6!DemvoGuFd?lmFsAMOD-vOH-uR9rCaGxbH~PACFj*hw=!4*YYH84wteQ`G#7m zhWS50ysp~AeVSaHU}7>bZh_<}d#WXdm#|=0vDUMwuY9hW^!?xGmTE4F!;W;xwBoUA z$m3wf!8In@$Zs>UL^EV2&0b;E0+B~n26O@csWBvp^qf1@Lxb9W7g%VbIs`xA@$+Z; zHxJzl(q~)uioQH7<5&&HubVg$>>CROs&ARtI0S#$C|46!m5QSqe@dmulqq_leeAhJ z52-VL`zYyRkP}4m<56M&$2W<>Ai6Cq8Mv<&s$aC}UgxzDP&R{Qe?ZBi)>(5m9jsoE zkcI@Q^i<6GsTF!9-&ljclryq4a|z9#%5->Jp|v(mykY zZ}Lv7-~gd0Es&;Hq|!FV$Rl|}?YFqAlI+l9poUdYe0`VMFIXk-qowCDtU-=h96Tl= zSvP)Gp#@PsmlyLX@6ayZ$=f@aHg-Geq6kvG-=Fil{mh<0_+f%OBwLJkOec`6joZGg zFY8&;YzFI^TQ53ftN6&<*}^PPt>Vx6Fu@7B_xO*bH1MFt{Ss2LDR7bm!8S;iY!oI-UqVU^n(B9k@(+8sU#20p?lmp^0#$s zHf}ZRzwIrBLBPpj+oMyje*Pvz6Ub)}akhNmR=Z;XD)eZ(ZMs^RLL7Ot+TP?DTQ;u3 zfEM7@TU>`X-bq%ua&*>M*4TzcJy~{aKdnX7h2x5rPfMr+)$z9Dp z7>|d0P9L=h7@0W=(^a$bbxsT$cph8R@p_2$N5{oYl` z6tsls5|SLy=#BiY%i<+q6B_KZ8z=ky2kI5b-;rm9X3VT-zF{}dyXZeUHlwL1#O9YZ z{7MBSB{fhM8ik+esN`D;&~NPqiB(apN(ic)wo<6{nC_%_qF)q-x=Gc{42o2-UDW}j ztQR(oAIeA)n%P}#`0Crm?6EZKjU0Sg94zHa7UQFX8V4sS!5F}kv7NPv{DBtqJbzCN z$Q+h;j*UX|7VqzVwSo|fNzang!cj%V;6dg&3IdF6M3J!z*i`I-f=KHEthd>Flg1qX zuBo2tjVsMPRSUHIk;?U-I73Bpu6I4r#NoR3JUXV?P|eyqvdF`diB*OXIu1 z&LadLUdsIJ8D=@=TmXBMMYI08Na2h{ZsIse0{yee>0IiE)P4=)bUq_G;GPhZBEu@Q zpqCl5^BVE>`205P=fQ(Q;f(H?@{ptNaMD+Kep^{n8^RNSdCu-;0j)cqBWN2MD^T$? zEe~SI^0sowz5og<^GrnAz`Nh)gULxLS^&SVdD*{ht^px@9>rcO&=Hj1ZVG{By61l8 zdnH<5F)Cdxh)45^&t#S56wooF${}{sV^--i;N<-Uiso@cHE$V%@oL(tg^23sYQq$} z=zxgk`4wDVhF3dOT8?jcf?KMH<*G*zqlB|K5XspleFQ|6S#=zH@Z!Bm6HtNHy&p`! z|G+`tny6vNUqMVbF_|t3f_Y%yyg)l%-?|V;fo4KprQoip@x!9)_9O*C^XpmNIXn#%#_WAQ6+Xd@YrbbUZF{GcSmRQBsr zxaH@uPVITKDVAVrTew3A#?!#`OM)PmHGE+h`<|2ILF%sE7LAf&{i!dDS1gTu!E_BP zoHb)`P;r>Y5DOS@92x~KVFh&Q=Rd%v5{yeKEa&H>aQb9}e$_N~+MY~kpW6zYRQ zUMIFuO9*=rA311oP-#j=e_J^IrTW**+QN{S?Kj zhOE;zsw$!$^RR7CcJFsseEeq(PWB>u@n`d5Op`b#zW-DAO!o#b zHjRFwp<6^g4tuv2`hxNMnPG1K0HHi6L~Sc;G1!Hit?gE?BlgiAJ;4a=14`XNTl?oZZ};I<-cy?WyA6+WIZ6agM9pPMzW#z-H0f%zbq(m3pVBj400suFZFM^a z92V$&N~(4|n)eZW)|y=WA-vj;lFpSyv3oWmZxqK*f(Jk*aN)~_P0L`C7m&xpN!lMb zE`!)JZjsl3+fm!rpQE$M?oKTQagMst>`u(n_jYIMZoj99d1-#stS#RW?+_F9(f*RK z(eZbD)Ni)&W3(oAiI{*}saNX#azWjx&eKGPd93w()NGgqqs#&MyAh}P6?!_@dSbv! zqv2z7!qiy8m_UV-q_g)s?ehNbPl%uZ)>(7Q;pQVof>2!1-RC~9Zg2Jg<43Go*D!|^1Av7HRGx_!CC#bRK1 zQChqhS4>tsw$_0g&j63XdF4oZV_S|A{&0czjj|!NnG7@6uZB2d!^C*y!j)RyeI{dk zDP9z|Fx3^`sq>0?{5g#_Rlj45qt)1_ADW3BJmXO50IDn2_^gSg?NLdKr@EnY9!q@K zPHf7u8yk3;1e@Yq5CEIfoetr@K&w@*$|J{&-KjCXBaJd0@F9PZwOTeK8xIFjfL!2+ z1==0Wrq*JJ7=X+pDHdYr(P4AlKFl6aHJva zmeJv(_4Ak(vK68WwD(l}rL+&gLHGPwNL|E%kYdnw0PYPPQ`p$vNf&F%#oT=e=7Zds zp!_sC=Ua-+YF5;7JJo@nAHCAX{mk96K|R|~Kg>P=+&XJao#uS2Uj9~|kRmEc@c1i53KQz{dbyY4~geRX2+kD7jGY$n^q~? zm!wurGf;f;YX}>43O*h;WJZsQ*-YX~VfSj73%Gj%RU})4 z7+oE4c1#cMJ@Q}lNFj%QH!q3EnPW#QB+34LVPQ7@g#QZ%*<5d<)hx{wt>RijcS-i5x2c2C*d z`mmiv`SN#s^l)mH-u$4u>rIkV$zrsZ#RLDSBJpF+PZz1N8}0GEzFG~i>r$~N-Hy0I z>DWsrgTU8u8v(ABril_5@Uu8mQNt9?KMckoAZ9z;r}`p$ zLN4Z2r3H;V<)%1G?~%DG(QvhR#?xsQ|m;NFPTalpWn8KIyMvQh8-9-d0fSKNcO%T zuf*IQ196Cc!SGZ6ZW6SO^%&L}-_BkZ#PkTd{)?O%UuyS+_s|qnhs{WY&1nCa_faWm zp<+JPtvz|Y|1Wfh5N~Q3%hn7h_=_1p(}1q}5c$WUFz3=${Fd)x_$eLGt8IrL1t62a zi@~~ptB|nOyL@2$nW}CTFY1tEKYB_y7}7nfxGTxR54OTh3*JuqCz!2l`tC_Qiv?g# zQ-Bx^i0Ag!NAIS<2Sx6IVNHiO`YfR^bBT~!|iEkknNhTy2@Y!JDb0dhU7PG7X@nE zo26>lji{_GIYVQk`Qbs?%S~GNBrGvM5p$&`;9F{#QxWyO_;ONyxACEe*?>@LDZY;K zTs_p)?vxl&5jEi?cP|Uf{;>?BYHCG>&bceT3jhDvp?5_{M~&iZ{-*o@LZ`W5UBWUp z+7{7+S21}dSDq=BR_a&H zD8!kC0abr#9FfJ3MM)V;ksBz3_H159Je4}=>tVZGf+U*aVYj6%g=iJqP@l+gs1=dS zz~d8iI%$hC0=uIy(Ml(0R_7b@_oZm+0nnqXd76#e`q`_5zHZxBxpk!++e4S(w9!#}ZR z4R6f}Swt3bPFb};w-1OWjd7DCCF?rG}nxv<^e;_i*S~XFY^pv2(PVT>; zu!cH^WBq&9Z|Y#EYvNVxTEdgQ2~^SO^B zR|2)MT={B!!A3}5H*0tF4^Gfr?8RW5g04RmiOp>;HZMZwh33SF<7^v2HP?ii{H?>X z8EZHI_f1~6uV}aF*lO1-472Bd3J`!EosE|@AWZ%LQ z-LPDOi^j@!Sy_Qu{sa(rLCqbGUx6<}(=A_Cwm>hS+!QNyg_YThu{TeMp+lL{Hbqb}ilt72w(*3}KYkpm|vz@4e5!46jW3O;jY!4Em^rfd(b zlwY;wT?8LRV@D~)>L*$fBB08O#twRD=}AqYs?|5BZ#7tyR0q$oeFKRBe zbiwbIoUDl`J;f6sbos+E)V#BZ0REHyzy+t2kuY`7ay}?NMXt|uf=x0!YAv^ch$9+~ zTFb`B-JuNj8oJXRW#ZRW_pKL1UH}ev&7pZ~YcY{k@$}u?qKLGLe+s5V{VkuMr{o_6 zFVC@GbR;J|1afD$&X!j8OAKp2sMLd_>VT_d`?1gYx2hZ1^n(_R8CfpT#J_}}h0wYS zi*=2$-^?uu)8wv-aL6@>+ouo-MU9|{bpUO?1i4!Drn~)*&-v|+6i{k>p)~hON|mMU#%!zRMYC4ZbRlFMP3ijO!VLf`JwA?8S@sR7ORoehnrzTKq@ z85uWJ?xD3j8v%r4EPoPu4?0qoblaT>Kzk@UA)_$?EHCHDpjBr|5tTEua%6wm*A_+0 z7BKpTbK>=QSH*?h;^ZFz*&XQ1DMQ16+J11BZ8OSrvhHQLud2M9HgqKjgR&6_Kze~3wJMa`S<-oyVBR*okktmaXhqxmfOHm=W60?bhTV7 znL@Me0$3`d{6kqT#f&PX zQC$+>j&U#Y$_Ki=y7SxrSJT9PX-_Y@!FsoQ{;({l z9C2v!NmBK-8pU2n8#YlXSYKWlwx%u%#-&D4d)EpUuDs2Dq00~;p#fo5XL7UM6L{C`Z z>Bt3HG!P0gZ(Kc?#-Jm{V?@(-ofOBenp>q22W_`9s1hRV=70Mzg)WGBK62}_dFLV( zhxj&coni;d(43hZa2T|!_Ox|ic%r57+sLJtt{0NHe&v>+#s$R%vz?p?O)e=#=6{T$ zb_l&KsvrZ;XIbHfTPlfFm=a3wpIt@z9F57(GmhJF`h{3brWcwO?e!j=`#&{MZhH=? ztb&i3)7#WYo+-X87_AG|D-ZUMm;SU|b9D1ZIcREHY*Q`AEG-qjuYqZ&_O>(*zS^`}Gg~?zQC=QB`bA*H(TBF)ci*aDH~^_>-=V0}!A)m8b2O!~)~Gfbh5ONp?DbtU-Z`1$-jH zM#p&z@r$&=e)euAXa}g4m;k0y8@t;!A4jvWKYVYfj%v^NdQ@*aYMjFMAh`$Z`a*c* zF{JT?P#E5A8U^U3a%SLAaaa8@iXARg5VN&EQduzkD=45J|3cqZWBRl&En(=lsej#& zl?tVJV)bVf@*t3umT>FC{c9lu)u)ay5&{V7wc(tX`!&}d0dVFYiMDouABvpubTEbc ze1k?{zv`mD(j0C5+ef-MFHyMt)XYS@&U)EAc#*DvPUpSd-bnhs>m!!eg2%Go;)rXl zzLDWQd&?=9p_D_qR(-TQW`o)Tdd3f}?SNYxOINfCv}~s#7AL|loV_N*<9MSKwnXH& ze$L2mvr{hy@}}2Gxt9Y;BUoiOAEqo6phq1G#{BdAD?`?h1vl>srC-!5=}t&l!)m4Q21d@C;I~{Z$dswJmXSY8I?FT;U>$fy5qD= z@{`-2f3B876tcnWEmV~vP~&g&m#PUb=*BvRA>hF>eDFs8-^Ab}tIgT(TF&h^Pamjv z733_-BUuFUs*jj7uhrL*Gpoc@vGFnzSzg!n)fZ99F%@TRZ(AV$EgLT{Xp*_HORg&1 zF}0(e?2%Iz5)0iAtjbxWs6Awd3?(iCPFbXXM5|EMvOYUR>!M%lJB$+LY39D9)mlE3 z8S1OfMZEgtO4ZU22@|QpG<108aqsx!uCIj)@0hD1WNzQ5eQiefNVx^aj zIB#&8{OiHf?8R7cc-I}ZpH-cOkCvryci$#=Ky*>{zBv%20rsE}k@p?Y8UlZ%wqU5(#U-(kXT10^0Pm}t-|J9cec+^Su@y!8;;@hD0M<$ zb5p1}-Kx%uURGspf0Swr!E$UMd6XcL4xh3DpR1szvko5JP1Mvryn|h!^P(#$C9T=6 z!ixTyfSN|wjg96pBjF%Mgdu*lgIdK4ck;e1Z?N13q2SNaVB%9Bexs-1_ygh<>O+o@ z`&)M?2ou%lF}ta&?muN+3_z^j=x%iwBl(VgX|?+B(D9(pC(V5!4i;_t4zpB5e&Owt z=>VmHeUXUX0`_F&h+Om4`FH2p$oy;11N~m`^<22CM|aIZd(9Fx_}&i$;8lNzu15z=GpnLWHdFKmAFoS#T{A0tSiRU9n!|p($K8VR+H~b-V zT4LifbLt<_utNUUs+mwdRHhw4R&HY~IODaOhZH(Y1vKBqlb^t1JF@=fPt# zw>x!bYVoA}rN3S|Yeuo4O<&}$+z*W-iIQonDq!sYj;4v!&GmlSkDvFeW{)eT?D&H| zoa#tSE+)W#Yjd+&jc^&cP3Jsh-7mKGf~)y>jzC)Ge#w>rOyS_b@eweWEnb`yIlol?1o}zF#vMc?o>-PlHF>!F4wznavZp{m*$Vs9} zU)O)$*pDeG@{&TE4=?{CyBk3=7yu8?`~(QJAy?tkYs*3Lvh-l-(eM3g{EU2Aj9zh% zH|Ud0u72td2$ODgo#^K2@d{W!Wfe;ge!A2`0pf!&$cpvkLa1}jrgG9C7ZTCP}Dr4%lNmZXZ*) zM%oCo^ILGiyZxo}4wC?}yvY5`Up)q#ZNgmd=Bx;mXD&~aNtf-0frq-bl+uOSKgK%<)+2I)Xue3{Fvwf8 zZ;m$-y3~KfFuTZqY1Q=LvreDz<)*OZi>yJ}Uzrkr(a8brML7FzzmB5rq}mf7mHa8H zyuA?Q7XHJN1iu-O7w9;jMzG*(O3sWm@`TClA2<9F2sL$sdFjG1N&Jef@w2jD|h`xA;8WbvH6H- zi(2y&R3R}?xr5NtIyB;?4AE|Y%RO?o(A7`5G5+2)l+EiWLR}a1Xg*rt)xuAIcZVc{ zlSJ*jpelZ2n<(d%6G5?cVmUxu?AC!#!DcbO2GUuBZ)&7>nCYlBN2M47uKz6F){RZa z?+}ymD6E?hS!zg?xUq12CQ1<7Qb%K1(^6vQ`KO9r?(+p&OX2WD+xzvU45mkUUxBZXU1TVw}a&m;y;f8NFL{}l)bax=h=qDwfEm4 zuj7gy?9#4AeuYjwdPYK+xG%Lj5&u#OP^)D;fqLk1of2YguP>1`u;CrLVaC!eK=Osn zdvWl4r}!()Zt1=fAR_vSq-1A_I;}@u@A&i1DmI#7_P`qxa#$X-tU(lVWCtEk^jG|^ ziGO7`J5l!?bpxVZ*mcsX^q4kl|4TbRlhUBm;rjXJaj!2$IWvALgiRtQ65mFY`{eiV zQ{$f`@5Kh24@Gw+k5slh^IE|N;|mmj@)zq4lp|vy7MTeI`JY4J9j_G$DX(eDyoUL> zyC;3D6#q_{xB|b*K533m;~6Mni~4!rDE>BjU+9B0uPk-x5YHOcOW=*X^dith#M*$& zcW-j+2T$s-?r6xzp%P@E@wd-PKEGA+-fZ61X%Tu=<B1xheA?YR&I~m zb-8uI5um*B30DFYPPa~gGY&Vg);4IGTd)%bpkhsNOk`-IUuLGvV1KKpBxOSW`Dx70 zM_*n$-+5geO_UMA6Rn_U#^Loq?~1HJ&(tfCrugv&hM4^+Ik^%|&Nq%J&zLWgJrPoi z12GJ;TOPZ)mYwj{Dp=V3HMj6t3WFB=hV24G^E%=1d=x%n7u_eyd8z^@3Ryx zcRA4hE*KWjiaOEkEWuQH%A%^BP=yJ* z#OMU5KR0UC=(L8<8+Vw zfjBSB_Wl}UPoG&WdGc*k8Mt}``j&Hc>KCkxwu5uC&^3wR~B7Zz?sr3m%(>4%E~ud`e&xe~V2t_XGC4x%-g?Sb(zkN?1hl z8e;{aV5>xWJUrJR&$)R{o~)b9;i)A%YWFLSLG#{cu-sGCGnelMLkd%FJJ#+G5>0#( z1uVLFCA>d}UJXemY_7lA_!g>ed6v)kt#f`+VT0uG{z|i6$m$AQ!T*v=J4Ti;8vvqN z0Mq|a4(8lVonoWMpm&+iBqP1f-h4dG92btJRBe|Wuux5>Cn8a@xY`&CV+%9%qpwKn zX9`$7w12r4R0~zWG!W(0iArL)O=GLvU;EkLPt8-%JV#0V&BE|sVEPIE+g`ThX}pXE z{^2Mm9bN6D36f+?zv+sI9lM(-@KUIl_pj$D+U@?xjOf~$j27tE7vuT~PqOAZ;C^O! zse%$_E#x>XrY;Dxp|E2pzjIEF+fa~Q4SjypJ-l1esAH=At7 zF@8anrV{>lW3`PKtaqRrHTVq0*LlXL3%#y@1_y6YSY6S7c6`T4Y(@8fE`VFs<5Sk~ zsd2;GOHRDU!piTuwd$sIrtVZYf$r^TA1a-J4V}t{*10w2{wM9z#aBZVZtV@iO7Mm} z{7h;e-id|lUat5|$nfuOQJ(+7yWGz?70x(yuTHOV-i$ZWLM*bj+O*yOe;OWEII7Au&w838t$V=aANGI*27m~J)=As_`v+^*y#6UZQ` zUYPtX=Q1gaz33OmddhUEPEvTgYOZ0tG!E~0TkyBaMl=!*)cgbl=SQ-5bLyD(MtW=} ze%y~SA=BIx<1n95Xd}r)g4)X&0(9?63U9VCS}>m)f9CY~BejAq7H&yTxBE-!8=STB zBKO0U_Q!UNhNT24bH?3)V1}3FzPXy4gE1ae*u1Vq6+pz8WtyRkB z)jVnr71L>Ylpx-`?v(MHhb-_H2!%V83L;BKnb-and(uFIxBks%GM10JAe6t8TFzp8 zK6+_n{T%`RSO(hPKwqc0pi2shy|3^tSTp9}S9yYAMhMn&)S;o7B1;jsilOc9Nw?+r zA@nIVB2pd0&vfw5<4a|RDj;!ctJOis1BDi}A7LuoP;O@v0h)d{dmHO zDirbFY{3s6&$pQtos*XKApyG%uF2hEE7F8T0b(4dH*+wJo>~80H{YA}>wJC#WTqI@ zv4!=`vsPg8y(ITQ_AX^X1v-p_kyHvU}a zw(lp|&lEDh;>Xyz$yBm6$zUSSPJ*1X_BUCxAhgH!tu)y-fjQZ=+T8q#JA(ngcwOi;+_`p1o=4$7k~3f+IQY*ySxe+BK6 zH~0pXU5Osw_nzBMCR8AWqP&wSdBeq|Er)M%S(r-`&i-0*S9b?htn^A9QVc9$R|S(# zw|W+oS8hp4-sJv8@Tq#Ua1d56dW9lg(*}`jos~e3e@VT?-1fm2s<^)FT5+Bsx5Y?S;n2cDTz0i8u72^dTw+ z971t5tBLJ`0`Oyi7MHN?AJYT$maP~0@Qc&MW&GlQ`%Wap4}ba|)_nHDv_2kQeyc$Q z6YxWlBiyI2j7v2ktzij-U7HNPGtcP9my1|#?2i(<6V-E^Q`2g46$J)!n^$+zXC$mE zZ$&Aw4fdrNY+<*r1KG~0s(C;a=}IbW%c!?QJEO|km+p%Relmr9Vxdmj)jhovKwp(d z0>(cE27b_WfqVNZmZtK5DcpA|7=ARrNv6c&su`sn? z5KI|H35%wjdM)sLWClCzL^rxD-K#60M#dZk3Q1Qh#Y7`&%Pu+|N383E_x8 zjvsh51P#;lT=24i)T4qF8t%)_I=%M+l(v-Y>Lx&R7dM4RvR%hJscYjv+J(y*jkX2r zOVjfPSU)0kbq;>XsqaBEaja&rF(;9-sGpL8SLEQLZ1%CVijcrxhYZ&|%u857EnL>eDlqS3UTv&Humg~*G$sep!yo*_##SG6w9~!T%ruYxH|qpv(||YyP~XQ#37V9x}o}ZjcR|V`?(EhojpplM?{ ze;CszjEBl!f*`-K`Xa05lyPoS2(om|*MX6U)~+@67@s`X>%8y*@(~c@j2P(V;HKey z=-W*oyIsxI_B(!2^eyyCDXgWd=CT6ues*WZn!~ZuJ1ekfS-ryswN)y8g$|a@fvNEKEY?oOkGjrOg3;l7OPQwUvuIf{; z{$pLbCcQGKRK3*ls{)8?Bblf}cKx>cE;RL}e(^PT67dn6c`cijt_uxcW(R&Pj!<6o z5%+=8>Z|a|4Hd#j_=I3-7(okXb!3dYTE6i(h^RM0PewI5-YExVDdHIQYH!ROcBDlX z-RIf15u{MM7Y-u44sX{sws!90zRX8t3Nq%^Vz7>B_o}a)uR~0Qg+4{@o^s&=q8y!a%vl= zLXZC(!ou%C;|2d~r)|`m=EXX3mBa>>kpE3%G+2~o>u5%1sR!e1Z>zT^Jv3lueJm^L z+#B3xQ1`5I#oB&61d?<6)p`8STxSpH2WNSQUmjmp>m0#}HJZ4MRO}7z>Iurh)FLS) z$-Z~~9B^Tc3S@df^UU%EZy&*?gqB`3W5kiqK+|8kpyn&HbWAs1uC)2PpYz=$o}g2( zL9Vi|5`CW$Y?qb~Mq9RX0B8}jaL?rwE%7hoSw4C3ZcwnM$YVw>7)f{D+-V0B_{2tU z6Sl!W6k0_F6IwB5-BFj~9;K(p#*k|~mEy(IQ&^ljML~suU$}@xp8yjh^h^@&wY0g9^>>-Fn~`ngDF{o0A7HEz4uNl=IACjTFn(o&6QJIlG>@% z>#EjEjl}tp3NyRihj2o7aT06t*u)n;w6mrYcL4ZeR#MKGgxWbbd!{MIRMdw1FRMMV zjOBu?>tEQb;4gN`q{u9QRLe%QI4-(F#4?I!*=LQ!j@?E57tAY#;8KXF-TxQ~Ua#-{ zHzMSBS#)$!H1Qu$sHmt9l8gH9ff3|WzZ;n$V{GAR?xAkY$UqZ@jR=vH!X_RYyejqOl}ptac`UpbOfJhJqE6Ly$6x`tyF z>>eZHpws=JK0zMrQ!AB~>JXdWB(JV|HP{rT7>}QF7I%x%2T-3TVTZFQH+3koVVhAS z@KR|%??U*7@Up7(-U!Pl9yyLRzCdzDM-2@x$>hcQ1EE6>7OG*Zlkp6#8)pv`{WEDJ zAIt(VBSqGjglj63{QU$D$?sBFr`@z%E=cO2o-SaDh4)ZIvu5S@?HSu1&?@phF+Emv zA<=+?T}itKVd`G#qbooA1s(s+ft%|Ea*DF=aFObfUCSRxWfECkxUQwy%!0+>diGaQ zLfT}~#kJ}@vT~ap4sl4Ie%qd4PY80QyEiv3f+=yEVlHO4Fn z#0JB!I{Gn!fiqOw1E9VWj+cHH?8CGJE4b{PyIvC?x<`4hJR)C^Ze*vUbGm(F8pV@iajub2kQYy*o^rGI zFMs|_6zMNXNLvqIF&n(E$-A=W$-%}T_ZR}O1oQ_SQqQ?)@)j(N{EEGLSh_NB^iXmR zW&W7XK;+!DWgx_cEDJ517@iCRn0?CFje|(eZ;LQm+`Fha77WvnRrZ_~o-C*>7H4;_ z(^5IHBuVI^u2~aiQ!)kIFEOWX-L+{j!A)$s>%HCD2$E< z`o~{*-RkoI{Q^%siuqN1(hxL0tiqW7uiLD4goJ@S3VAVIFxTlVMzYo`=-5d?Hnni^ zF0-@O5{*o8=I`&0n{ZKz-(mBc3dgavbSMCFW%vDh8R2;p-t@4_8&}pMCsHq+`?W{n zJo-4N>vruK77yzt-6Lyp`31ln(Z}^|n*@@e2DKO>Yk#jOX4~r!=a@HNn4(T9VjwXx z_;ijbw~q?J`#n2HdxPK&IGXSMe(zLkZ+v?10 z9+S)Ic9UBu{z>%B{w%riEM&oPuEz}68zp{22ekPsz{PbqDI~TbGn$*CW-@4^;llAT zPm_&$c(j(BeO70rnomIY0h--X@s)huuNV%Ndz5mLE4`8YtfEzWYRDl#)MgMr>-I4~ z6v;#}V;KBHa&xkuFuT6q^fTQMr+Z`e0jaOi{`z1?RXX|uQPR&2bWZp&dWc$ht_HE&Irlt#~$wM(hQ;Lj1hxNwWt+Ncrs{=foOAa4b zZ#h^ejB#81)YwpQn^eVQuy!JcU~A?}S<&vMiOemG>JJ(rs4iUbr8D`Gk8Q3f@j@t4 z594(W7e!Ijw%tv=5`6EYYP)-@Wa11{T#*o+LPrt&rT@E*wo2o#+@jlm`yTZ#=g8U} z(w?40rc|-?p0HG4bgzc7$e}^yQ6*{G%I+ofKNqw|$Z0_bV|mrR((t~o|3nJWz}s~8{pskUVVsE?7jID}1O>|&C! z9zX0*!#v>^ zle!sgaMkoWsa#Qk`#52Y>muIWDrnif zdl4P9&<+z>Qi;Ago+0sPi&}{!r{U>IHXN5l^G$@nbB%asWtV%V+*S?0VNBSV;8@G@ zK?mbQVCNx(i_<V$+A{F~!De|l$9 zRKM%_wd5u2#cL1R*~m^9eCj#;@j~y((+pB%j={UzlW<&)y%y~QR&$!}KIy9PxPScd z*2;>6N=W+gbqCMrDi_=;ccx64IqtJJZuhAZZ^&$r_v>`|w@cpJ=5$b>VS35oM{Y$Y zdTi=?r#wj`jm=vYGIYz=(vTB`spM8!l}>1BfK|2f<^ZB3hb}#eul-L z`l*;-%E|+U*qB@`Yz*f!>#AdV6?O#R7DHh6eP3LB*ak%ocx?mw+!D@U)xea~16Pqn zh_GUqMVkE;`xLg)5>h49qbyO`cf!+=DpA=%LW||VNx4B$h8mF6Ti@jKkRd(E6DyU+ z>MXvVzogc5%0sfBvvi`!Gg( z53_^Xy3?>QYhd}@cjgeFBgX>d5E6N>B9#?-ZR>bsNfVszH=m$c9i--b$Y6zz~Wv+_cDffvt@!toC(0R$H+e|M^yh%VwLp`wWmB zEz&IW%PltBK&STgBB5Jep|joM)6=XSNrn zQ7A8Yum^AX**(+*2zi|)X?--mzr@IH$CYk00h>X${e@ulGBABiG?Al3(c5yHeNOS+ z4PJI}1OE}XBzSm$w4qUkmD8uGI^^|nhRq(B=$N^uLRX&!&;HTl5igX(qXQ9$s9KcZ9pGt3$m+t-UlLYy=W=x|zRY*+WZf-t#y&fcHh z1uJDE`{b4A+c|PDmvFkK9|NA(E8<05Ot65FfQD_+F#RVEA9Rz;)&Lp}&cuJ-OMbyF zN+valmV$nrx^-AT&5qj!r<8Jv7b{lFgW?elTF`$H5{U(>$du~J>1i_ui)zc>`~Cxv zf7y|LA0!9%Cd;WlIEE#v`yCmBLv8dA1w{uvqme5HgV+W=pVYjot6=NL|NLZW<#Q1)LwU+?qy zhBXb4LOIfB_TS^>=yDQ#dq-67SO&ISiW)i;{5TE0P_kPHFG~{5;&}UDUX{<7+br1E z&g$Z+&5Put9cVMs{8p$Ox1)IRmSAdE{<)M!!hK8%u=!*)!J_=RNLf?j7k0m-CQR}O zT_Q8)qjL8_|Ui&bbfy zUQ^UQmO)}^wLMY#UV@#};9+W;n)mf6y(AY;n%%axy{{59`3eNg{p$uB?c7UMy~-YL z_>43i4c$!jjXq$>*5IB*t1tP?_j1yw=|SWD=qcVxs%4#3$woniAd%A;D7kJ_zQZbh zazo1Yvq^m|K7`f-wJmzwr6nx|_`)oJ=RKc-pDaxS=GIf17HzW4n>V_S_MxvaCRAmG zO}6)-94&%jmigd?3_WA1im7c)uWa} zJh3MXh!V`P2nY@VJn$g_!LzR>m`SoGLa(vV$=DjHM+EmBSa019Yb}L+-2lx2FN=Yp z8gYv!TIMlFwLB}`R_dr(z`LXG&(64wZ6YuvTkmcuY4Q~eag8``r(I4%X4LvE3ve_uk^nH;2B(Ng_<0A?gtFAQC5H6Q5U^EVWRmTgWZLEOT#B%xI<_OX_Z}=K2 z5AnvX4fCJSqpmsT>ab}97)`jeCn8HzE^<;r7S0XX`W- zU7vQ&!E|poSiKrFo8U)d{m4a@5Aq(lTzOn4dOUep;O`9%HCTSgC+x1amx|sZ=x^s} zvISOY9J(^V53mmc1~a}yH!dfCx1j3b;g@&w4R-p;FjsuIZr)_-4gUOf@FKH=%)hY; z5qD6ZW*$y>JU2$SuezU!uR8I^oi2xykpkX4U)x=af(?0To?H(+8sNFCQ9A00i)C-p z`-?hy!#Di-#5XhQMD3p1(O8qlvo|eP!k_Vjgj|m?ZAGdqDY{S9z$?Bhue|ku1(3F6 zV0Jc>=leDOZ@xS?Ju=$%oztRiYqFr>?1{Q?kkm%x6SexcB8tU1!>mOMU?aCev^DPZ z8#`UHz z_5_Wn{sZ-N_Wu;%EyCLGyX&G9_xk4NpA)^um4G&e+Vg;!gN2Z|S6eGkzHk9cOd zFoiXfap<}8YOV{}jK?p8 zY%OKXdpL6mCrplSDyA?A?VP(o<-JvwC6fGKQWi8r6?ZK}--WpVJB%utA#or5kOaDA zn}Q1IWU4}stX0%SnlCoPWZFy^JoNhNeTyO^hp&YG-9m2xBYjWCNUv7U*#HqMo>P~zBA>;4+ZYw)P*<~ z;h3^h|Hgq8zL)IjWo35s%;}^M?p0x+6+iHk=s)~dHFsdrCemhIr3(Te$h zNw$~ex8^S%eibEt6Cw7fYn<-v4%fx6sPsQ#wfh$uwxQV)yc@K%)nyZ%aGUHC*SB1m z)oU*U!jgt$r8)cvU9PiBfxaBt4jf;$>_YN+eD_(G7LH}j%AU6VFro|1_N>Y)URM)M zGkp6mZbe$?Ub{w?`T(O^gduzUrb=~+K#k|_Hy(*I+b!-?aX)84|HngrKi^mUgYpBj z(f~Jv#~4&=FKZt5Y!Osi{eR{M_qd~v1Fnh}0HluV?X93Z#e&xxtR@$-e;m-SM`;`Q zLp&=+RapFF1f$<~Fwi8a8%;0Av?YjduC|u}64jfB0P2AwWCV%PF{_dz1G^{rn&BRQS@%=nbu15|dYc?Ou@tc(nOxLX9^Cuf31&B!lC7~-(IuM5-uOAtCH%n6d(V#ew zU;hX)*5#%7pDo_lV7dc|^&iftn)OR-X+EJkUqT-8HI<;4g|2GEf~DqL!jl$5n?Nx% zj3Id@w8QKnJCCYy$2@AVYmuBDrXW{|LT9<;BKDrl@aer@Y8QZ4o)l6TyJ}rM{W5aVJ%Iq9 z5d$xym%*F6P&fgijGqOx{wom4c1Ma**za&nv{d)R8}g|o?NcOvPcx?IRng9{N;MnV zIQc`08SX6-|6IOVD5C_QY8pp)U;THLn*b8Gi3`R8gt-d*+|Y`#K0;3&LZUbP^a5a> z129J6L2j%NRD%7!=vlDu(O*((FjVG$GTnzo$AhJJj*WIku!$qesMj>7r*CWmR{8?p zCD7RY!RRdS4kJp?QJkKTGdIZAl?*X7D&-wye*V+|ZORV*1C*LvJ?l4bJ?WwkF8YD$ zU~4@-oh4z!Tk-#u3wIF_`v@GJfH9^I&3yTZSrtD8zcdfOs${;Z46+I-*oL3Y5c0g# z`|x=)&0D86z^j^4l5b-r52fA&TvOtghH1x2#Y6n$a3Bm@;F3Ol`lyl`;dK zqmrV*{wAeA@;?D!AFk+tP;4#&fnWZKKwd$#j|fEg)*{hHZt0}`nF9OfY4$3E+bcm)_v?e1;1nSShmsEwcc7)XkwCx+z@We0&(A9 zllD}~waJbaGQ+PwlBA6kd=uXjFi=qwU>beXL|L8YJzD)A=L|vCjmQAw*^+LkdNZWd zmHiu|mTWr#Na$0h`~0eipYs~sK&fXTXsAl{DrxoMwycak%unq2+4^*3{_B!e{U6&O zFW7r5{RBI!?02+qY)^y`0G1Usi+t;0KtorZ`+1{&`3pYh&z-mO(CoH{L>VRMaLid} z-L0LH{eVUrIHULLe`&#Y(l6t3cO zGf64yPxB^~-RTl&=l(?aO9pPNJ%Uc(6qX1XpOdw$ZB**16j}IWh7~Lp4glz+X-F?l zvI;a;Drfm|H*8k5W3EpS0uJukv=#lWZxll9LO@@scbF|!Gsjc#{t{OPN{q)1+iuAu zGn=JOJxj2R;#1a$LJ@~}h=XD6wYBKmWt~qRYUL-bRu47}VwBbx55suV{%bh&>9O7DHlWipiWL-9X%pu?`S;bsW@II< zw@6%wL^Me6r1|F4#SQ&Xi zanIwfq#~RjZI>kr)}sJl-S65*{;ev1Tc`wOP3aj|(8PR6d8v0j=PzF1sDOYM_V1bd zNGUW`!woS+8N*pP9lji1osSmHr@QE@95L#o?x4P#ttCpcK)g`1syEhYHCp3AcIjDd zyz9%0^}NuYV$c9tn#_WpI_@LBUZHfj8$yzjMwo3gyI!k;dlo%o#a&;xV! za=qf<9PR@VuamHo6p_v+oaOawYW3}tTa6|g^|Z_txjh>7yY^xVO}tw-c=e!yfEP5w znFxK@ts_`@rDQ8&={CU^$2N+wb2VHMveXr&GIMLb9yT@eO z;ks(G9^BaNN)K%1XYWwZXJsAc=tn3nrnAg2mwP%g?9I>Sc)Tjy)~$MP)DxIu%n_YY z9P-WI*o_!zS!l6=vJI&}#8R&Mg<=2j!d$N{sGlOfKdo#R`|$CD-C~)~Ims@bDvz;T zcf)K!S|OFPd&atTg@++y`Nl9j9NfK2eT3(d@sp>0=9t!`c|+C~*m8QCxOW;$ydt%M zh!HDrb^O2)_KRSv_I}g&*S^`;-Z=yn`f`I3KBu?rQh%4OWIbpNuWL*%2^pjsJ8E6L zfZ;-}uU6PB>#7~oLXK%mNxFEL3ckk+*R!ic0*!}Gde6jT4YKbJS5M7EL9Msb>gBJo4K+dV}~E=4h0`k*44qr^eI703c2yx<(C_A>`2 zXWW@m8FVXfb{X5FR1|S^9x-yh+|s&KvD?{lzJ$CwLBojPnSPLo7dXA6=Jm6Y{}32h zQ}STL%m2p90@kT{n~&oVR-U-4SW+2uv$bXIc7-yE;=SnASK@Dil7z9IaY%ECD4bL& zg>(*HM38j%mAs`PiCd_~lzHQsbxZ|5$V;OIt`>t2MHqS-F*;V4B)G z^7yWzvRLTmD`~6Zw{{}fzc;3G3t!53g$W(yJV0n2t>z#&ndS$npDAq&2lme?2)|mR z8 z6vvU;tDk5`=(IMes;V2NvbvaKVx>fXp;p|kGV~e#;7(6tJB300WM*ob)Hsk^MovWi z%Q?+;^pTAPy~ZKDeA1$f>$6H7#?@Lz(Y84nftka&N1Pj)Jg;E831LLTl)V=Iegim#2&~O?q+WCRT^OW!pJ^VdswzQ3WEi zAN6>}+jvht7mqSI-q}n#KZ=bq(=Rpq^EylL-<_|g z`%rwqdEn0%{zES0znl+m#Bnyd@z7dV2?9_l=mffO=+y+~5JDy*CZ^c59-USWcDC5+ zFJxTYe^6V}P2<6}eW~UdmJDR!Xq$ugZd9myCQjkGiaN{xzKn-ywukbi7FS4GJUfhd zI46oi_1aOcS2^)X_v;Q@5wKl)UdfsmLZUT0U> z7BjkZ;+!}lrPi{$IbthCwsH}xNk?o4p0Dic5($o_bT8k=AoFrp739PQ^N4CgtRHwg zk+y<7uTM6B>nT9gMX5Wny|DbNOfUI`?(#WpDI2aUe^Ew^@96kyD(1`a zm?O6wsrMOdbo~Ky$(imL=X>>S*bdgeNHk2iI%9B+n>O>JXE6}% z<*JkT^@9EIJ-cfG<^6qGyX#a`d%M`&9PF@&7_Gp?0S+f!q5&{5&$M~?ya9cqQ(}sM z<}yDY=g=wnw7n3Rjc)U+=YTxsrKlxHUPB4x5dW!rydq!{0oV@8->^X7_#nxa3f; z_j(Al#=WSdsBeAOa3?`}Xh)*y><&(nOQY|_a)`^f;SZ<#xV~6FEy+LdlfBmgD&&so zOu@sj7gsdWc0>uonOlLY&?5#gyJ@RRwUM37-Zdk2x*y%WwKF^1TebwZz=aaXx)m{o z`QnP$ZLbmDGebBpZ7Mo15hQ9<*&3~^=ZM^U#tzwL1ENl&AxB)sGk`6|=0)>DpLNdY zvg9$%3@)i0?<(j;iOI13IQ7ag7OAtppcD}Cr5_52!1`n8$c+EEn`83>R))MHYG58A zE0MHD=gSace6Hx1VA&+m&Jc5Hv<4|xE_W`z_>#6<^_WVvO)UeqpHXkjH+VlLPWQ9>kcc~cv!Q8&%vWVZEyafkbS(qfy2y&s(?MZT?EkgBD&@Ny_a`RPx z+na2}Ppd^ak4sPD@ZJkZkzW(xcHh4tos<$U_nu0ByI!}>sdAO=zgwh^_w7bv)cWL8 z7*oNK{WboXw&p&@6efjTa$j7eqKmaNV%sG7k=`uN7nu%KS24C+%D$fjmJwyJb}Dwv zel9wR=zO0*bIVF(hB+IP`yf+%X%mPJEbm$&!P9xCh%Fi*U?rttyWOdG@E`cFr#LWN zWaKqnxuA7dySx(l_J93o|8c%Y5SoP{Dm6N zvzR!D68?Xfd$c1Ycyj&#w-i+}uRHCQjXYxKrCITO%_%0xA)3J14 zYX%OJxae8X$ap*p9J`rqk+=w{aO-=&s|8ErcT0p|6qzNq;*YxPVY8se;69_!EtHDW z+fWY%-?4uaZ@BoZFX(grj8GO#!LK(R_?OzPuv#~B_Syy?vCO zVA&kxxenbJy);MW!UaKPJIJe7w~pQmxpH^wX7~q7fVM~n z$jG}PbSB^!;L}+8@FxBwUG}7*HE`(8K#w|J&_4091U~IP7QRyC6*%LX!?fgZW0o=M z)McjgM?goZ6069eHl_9{ZI3)#p#SU4t$uM$3C`jQpu21@fg=cgsFAdIC?3Zx3PDR+ z4qpb6-}ES=$Xb$dF~&T5`j+3osEMb%PdtX3=T%k{m@l=&IqL5HJyrjI>{GV=ipe|; z*gcI3GU&8V9P~rZDeZH6w<`o*=t285#xq4Bm$$-x&yo@N8-=s8fuN4LLoO{`EBLDPJM-bH#+- z`eU(1%ee?4PBpsl-crKA#4o}j@w+GyK-!>lR<`H3%-vqU{@hH!Vu-7|SFIaOM$AC0 z`ucgJwpO6$%0_?@5@P$Tw9RH~Np2%TmQnVtL+d7y;$4y-W`lS^*J!12!E`+A;Ay`8 zlhT|g_)@J66a0^VNn7MWYj?g^w^?0j9@>gUN>R}Mk{S;CEM6v+deHfj zZ@IX}pn}QLVK6qhoc*tVB1rM44XRfmaI<|RpiZo?e+MNx$eE5dnEot8)VD|dNWo5t zT~WT_fIMa#1MI1P^%H*n(7VSn;xyjtI+6TF`5p^#EgOpBH#*3cZ7;}55Qc-kX6?#V znaS!5$LUG`@cahpxweEcUFK}!{sww-Ds@L;1bhe#_c!Xzu)o-(L_ANsrTKt$p#bVR z^@bQMoSnA%q_|_i-a#RKV%i?9NR!a_4z~gDJJq|p`^`6WTT+{f*d=i3@b*@V;N(cp zeL{?=_nN^<*cmKn88=pcwkc397Lu@R6PNa>U8h{q%zw;V{cOa?^`~|xoT6SEFo3@X zNO6aEB6vNYNtpiiX)?UfRc`tF7%wT5I_b~v2GG}6y?i3|elk|Et;BQ`jb|O-htYlN z3){4~M}~h%<#gXNL0-ObP0ZsIYdP)jx2POBf40nM;UFokVzFe?`|GfG5iqQj6hDv~ z7M7K_W(-*~t|F~ZuV{m%6fH21IG-n-|5W(L&UU43qvEFTS!f_wXE!q`8);S8$qD>^;Hj3V~{ z@H_T6KyDBv>Spnxcsw~l{zGDM>=>PuuC;^VGx0IdqNTWB<|a?bD}t{ zV2ZY^;iGn8;f=XG8TWw=IxWHN@hDWX_Mu5bI=@Vj4Trl(&yJIR(aVp}B7Wo+0+Fj7 zut8yc>7J04@eMC3iT_A+c3XOJ`)aJzf$0hEeS~3h6jNl??#KqYp#^&K#})1NF=aW! zYL|{U*|)CYh>S&}9r@naOQA~yTRz!)6ODIkX``tQoUGb}XPfbp5 zve)hB9Rb0`xrC&*7-P*PUHxaR9f9i~IN`T{@+**hHp9oe`LS1tUMk=8?CxjWN3ADV z54+Qiu4n#8#tQKaQBuGD9?iG}ui-984oGX`CGLM!qlr{_FXuA>H{hx4hVbX>a)0g5 zh;}n39QoW$AmkWA`^)s+Bbzrsu^VV19cOM3qT*y0T+ijR4|pcKr*;LMYK1Ta4P`NW z48JZteFY`!>&FN1kHu=r>P2nh^bQe!wfiVR)(WM7XQ51@)t)_}3Q)Susa|Z#KpK#2 zcZOhX;aeT#q(2;ztnDY;p-FA94iFgJaptbPdIR-VVB7yih);nv=`Hko|J_=2+qZZS z9iPY^B1^uKW|NL?w>olg;(-plre>G$`EJ^&cfzG|VE|O!vpr-1b^?G4ZC0a zjd|vSFb!^iV#FU#0-H7E*MT}_`&#R&5IPx?m>A*syyuAqlR0~ z+v^tWkIg0=hTC(blWheG4o4@UVpUO{XZ$c61ZIZ`+Ug??tdx^$QYQ-D;>Z{tdYe*Y zhpmQ$U5;QX$Xd@6;8*_m_OL>Oajz8H+0+AF#uiicGec8$=-1AN_@h>z46Y&ZCh6YGF0^Z?>N7I&_)RlA&uz}O#zWg<_)cPvlbF8h+jTkp)~zu z77Y3tT>T@bF#@+!lT@)jS_L3btw+U|zdQsbs`kBVzuu7P8OuP9Rbw82iw}b(eJ#&V3D5AkV62A7fOYW$?$pi3d!7 zchrymn*9r%9lk6%OI42@cG_fJGtI+lcZCJ$)=WcIc+vvrF1*Rb_D$_0q%&vOS}8DV z9yGEmoU4}X|CL>Zqmt$WQ|_m~754JK6O-27p0jvk)+>Z{^nxiYKB~CB;GK*z+&@ue zew|@{k}*XnidPYA8KrqpxSkITU>VdZlPm651UPoy9WB3p5{e$V=rD+Jd3|rLEeQZxXb0O&TD&VrX=} zc8GIUSd7f0cw}sQ=_Ca9b^mQq`kC)h`N%N03aSn-IR0^>>!$v9^|ZDw#NjcN=qn?n zthLVazLCxlSs1_melD|vTeCiPK+ie)t36e^!UFBAZ_zjQh0iGm%9}p}j|Y=k`MDFK za%gBMtNf;ITDH1A1LBMOq62nR!pfMgLUDdJ`M$3xSAJVH+P=@I+RNBi-jSBRo_@^* zQy9rdYxdTy49kPOPkFHr*to9P0ts|_XMign<{#DJS(BOREw?<`d1H`nZJ5xhF4M~y zcY>Gpd6P>WSlW`&dIvOkPs>&^Fg7h6UwGQn$R#D?3% zXITE+z#qI=UW6DV6kcvJYkzpCGhG=GgQ~OhHPj;_hxTn42FX3v+-ynlrKU)!u9B$G z>_t=mXeba29WL>a^~{DkV18~C4dgY?Uqe&^uAp+Gcvc%ovV;-KyC)Vi40T*eayH4d zBP%&Aqc&sGGAoL*Xh~Km<|IwpfW9Oqe~g2y+I4&TLZTV-o^A%6b@~tJu-k3)q=;4P zGNhk-8-<8ZRSqC>D>}&=S*TQys>$KSnri@f14{3;W*%%l`g~EwLvqt5tI!c1;>n+; z=TJMx~@9<@p8rrcj`M&MC-13D8p*ydqYvAF)8O6lj?S);fg8`Am z0HMA%dy9$v>I~N2_wk^D@fH#@Aa$>n!K$3$SZ)i5uJ%xrNV=``D?r_mdG-T*H zy)G)qImcQBTZrZ&>`Of%Sn^jg^$PRi%?Xa5%Ho-IPv}$pSV}U_K;#;&P2dMB>WSi! zEv5;SPZ`p39}y4)j(MR`%~g>EPpn6?(Ic~C{`~6LnuL_c>pTQ$-JY#K8_VGd$>hmw zOoh9#)@3Z|TsDE0wOG$UOKwB~`L^=;a+TDVZuw@$ckoReBhN{-g6j5bC8~0XDSxwm zJS7d5o_=JYb!%*2g~Xi*WOlj{&v2i+6idB2+qqx`@cvH9nd%gyjDSJTzNx6-((L4J zLK@Ga;ymTBLbdmyIQt`&?y)cH&uDYrWk($SG7aQ?H32W6UvnrduyoJT zmZc9-B6&_EO*^I&Wm>TbzwS(5J|m{cDJ z>;!+Q^R2Rw_P{=Sr_Xep$5%fdY}6`KH(bqnE!A`Kwh2!!GzKMgHQZKcv2I6fT?)}y7v0R>>S^Fx`?5T>>^84%3h-g^S-aZq&|{cr#%mgHdDE&R;Ib*&&;N`<$rzUeQ*b z@t;h}fAACH>3`m`uK0sA5uXeeF_(_>BaFAriBL+5NA5|w&NfM{yc#*E9lKegyd|jK zOLi_8Y0gp0{6D3Rk{Hie${+WBJY3w(A$hO(=JuLYzWB{)>VIyCdg4>+&feEZ3HgwN zZ%klo-tfW#J4U;WcOQ<|GyMRj!w|3&FEL=P4de6Sp5-`1|5EeJ_%z2{_1nWzibns6 zeS16b`w6GiuDg)!X|g5Ix`N)Hz6fc)U6@8(ae&t$vbJYYdFy(*-<|a^J}tnxftl_G z>b>X$j(qOn1r^yC+3k%gNKa5ggAVh?KTC8He}Fe^VQ_q72h;S^LWn4Xu-%-&a4~+1`Fw zC)_Dy=j^Td`6cu@;0*BP0(8o=p*`GK6@d)f&G>NGpMgHU5a9w@aqvX!9P8$!iJr#ivXKYh zPecM>?ov|-CVIH1_s$kZ@KW$1A5BNbL{?FNvd5^IMICN`)TxGu@c#}g4_YXaDx4h; zDl0#ruWwHN)hS@nYsCWj{cer<_jLybduKo~mt5?7g(<}si!x?POP#Qn-jlY6xkL8C zk{=f>qDRSVl9Z7Nk_r!?Tz+Tbpb7F$y$Qi7~5Leo0uMD4~) zy(Kgp^C$DZS&KTHv@<5Ra}zq_-#$7Llt{2vO*=j$?qwTOyVCaSaK`6{7-ra+X-xMN zoVo$;ZaaM%Q9h$aW-Z}e3z@dBM4O<+Xg0BC*B~;UM%z2>CDQ-2IBPa1ab=32cuqvx z#uI?!D`Mc2hq59M?^p+O?N=gxL^HT0JI*(}5BbAS-DUUPTh3A##o+}~Bpb#$nJ?3Zf|l%?2+Wf#(|GUpH3=#d#ujq* z$?ceeY~-a-_&iwo(2ovigR2bmjqX|`qsz3<-&g{UtQQ~5G^dZgIE4ifh`>@~{7HqH z#`)6!0h>T%zwKlH;ir})5_!U}sWueI`u5oUHq3o5<3#{pbb8L+5BgJ*z!E>{r`8a} zg1!SvhTguZV-^m>YHZ9F6*FOTU4`E*8CUNfy(MkDBDw0oRR^v*@QihU7XY07fPBU> zxe9#MfvXN&cHn`3d;RpLfANSe=D3{WVvb)@a#8Mi)8Shi*M`2Jn+j!ccxA?-a$a&*ude?sv1;cB})wiZtgEF7vD={aR{yX}tt7kSIev?f9C~*2k>3jcj zDz^SpKfc8g1OLvp>0n)Om>kdX$5#`&x_K6Exl6X6V9dz_rvV|3zjac3Mrkm9R#I7N z(wZ;E-eYT*E&T%(EE%y%uPRGn9myS06sLN79~R;zj?*@-ItXgR{Z4;GH~+iVWb5Ea z7dni^F;jYSh~C+c9#`+BVXSS{Fa$ooB`)Zqrw%lHYY)nwy~8c;N8i1t;2#W09=hb^ zLU47gU|r1QWjjR-|H37hNDwsauNgmveVAvR^n@E*G0cq77jF0JCP*p3^xXOU$a#fd z2_=E>O%4vCSW?EXGt6NxA9MFg&L1mK*;9*S60W}cKXo7buly~vc`=iF*hww>xq4>^ zMzJ|C=iJi+7Na-dSXa-yavBWWi-UMdfE*Z(FF7;!zsfQWF22f)*goKo)2uCPF|+Z= zE&xtfm07YavRiMy#*9vm;hNce$b&^}0kx3|ykL+SUTaQ#&Bz!uoT}!onZYMSwNjw- zExNFm8QY=foZha-6$S{_<^(f&CEr-g>wrSdY`*G-#Zj!2RWrG}|3qi4SkbG0)+IIu zA~_~0=!o9Y8_?Lmy+;Wht|lyU9hi-A;7Cj;!B&MK>*mGmz2o{DD?Lh0st63xh2hJ- z(z#aR*hF@cy_USqi0&^C;z(iL%&44$-N|Qn4;CFGHVA`p(?@SPCK*uz;#-IDXC`)X z&y1-tQ|suZbe{No2x))TCh>fm-tByw{#P%*M)_eczvd z!0)*CllOAtr9*!CkmTF-#Qj^|e;!Yuw7gaD#p5ee?nV z&HC>ddFQ_%eIdeKzwyB7wufZAuDsJ2&ptQMYPf%rGt-BWF$(DD__{APMsJc}*U51I zCl>bJ@GXaC_D=Rs^xn6l2iIJZ!t7s%CJ(ewJ89=-1^Uq$LgEa=#3|7!L}h=kWdORl zdsTNW>}Q0DeTWmrNhlEr#&`%l{|G@BlHsoYKDeLcE&$_3gv(Fy{N`M^fQw|pBlbmc>8$^7%lQx1y_8R9$9I6>?CaW1VAA*>>&9nx51OEJvc`qT!zrD`qDJ%^cFLRdvFdKf zCzKj#uys8Ip_PPU%Hf`j7Taoz;qk2AD;&0AzUn-efs(+|_v{}>A07L`HeyTXFKnul zueAm@dUTf2;XXD~nkOnaR;=ZoJWK^_D4e5d#h!H2YZzut*rrk0@e@Wk2*6MOHa&5y z_k74=bPo1y?h`QkXG;Kmh(Jarf#GgnnBBdt{`Ru_heXjizUIV7E8dRrN6W}D1#GCX z#gij8m=m*pnb8|@LExq925@d%xk;alfdsSGuu6y4Hs!wJ8!IIK(kK4JaE*x>&hWU; zQ-ArG+rP>{9ETWuYYtv|Vr^?Dw{(h0N+>D9xMN0ze>hn{u1Kf`i_EAFuuK|0*vGj< ziR17PbudQj-Tr;tkb2o19?t9)^sUvOGNSbjPyRPnk|LQV7OoF}I z+mq#D&wnMu$W@_csNR<_||NL=$riO>~8go{R6r zuU`fjWSL(Kv>tr3gWK`fFAn_j!@xI^XNw27C3H^Cm;832O}H&@35MtpRQruynTomh6Qgkso1I~)rqs^JR1LUC7B#6U(V%SCwHCX=4}Gn zuKFxPzin8yn3HIGL>@VB#|+xA!Da!HaS-_b z5N^PnbLt=1C9$yGQr^G7iaD6wzg;g=23V78sTkQmqgy-}bX!;wBq44W!#L?M0poz~ zOkW-Li*ZSL5vr7Z{E4@;rcBVdc&Evny>x_^-dIqVqrvMtB^Y*av#hsw)SQ5L=W&mp zBW5AieA#RC`G2?ZXq%nma8;Lc76!-cp*ZEztP%3~D|5lIR8rVZ%Z;7t?2xxO3oA=qA!?Rdi=pu(K#gE?ENY}^Q zg&Y{`av3`Srz4q67v<6NN2`7;Xb5pxq8zA^1TF1DQo8-sNmGz4-+ z)mdGe?A04QddoT3TQ#^&RQ0DWak~~;Wu5|fVwR6d4n_%V04a;505fYwZJZA{SZ7Eo zFb%FYXyy1?9V}$~jz>5ST-W>D|6QANlE<*AR}#=*jF94AWk) zT-l4*kNp$<+P|{*vD|yaj-$iIS|j^s6%*x6j){YVZYy`?MH3*ao^={CF>*iX`7reg zKJmxBJmXHFgWHZA#+e+5$;~6!{>-kHneO3tRE;(~=}mfxhCYW9zLIyYju{Tda1XX> z=5A%zBYSnuLyPR{;nsS6{QqQNdb}XOSvMxeaSCGVdY>O%2~3tyi6I=_KaiQxQ?iV% z<+n!!wNCi5*hbJPW6Mw^RkBau9Gv6Doc)77b=YOxHkkKv*N)CYKFMt&nP1KhCOczv zLuu9Z(<7dJIKv9Q1E*6}C4RHWjLoS`M~?jyLu^H96}RM-1Pr{q{~I{Tq(^9U&Pt&f z*6wW*hq|ZS)IB)74)uizFbvc8tkH+Ht;EUkg|?0vR}CY_pS9y7Ft){lNay<}^RU=v zEC)vCta9W$?oY zk>)X1`Zc(pWnHgjlHlAtlix*nDXLpOPF$2>#Vi zxH(SNmRdqcIOc_e1{nh4YhOG?3WmD0Cy~y8TY;9-<>{JF9P^KzU1$puD$hc^SL*LcpiTF#8n92|3k9& z#>8+6?gI|N@Z!r`_5uJJef5N38vE{a?>DnW)fr6skN?Us zAje5hO_N-k8`KQ@c?$Wg$JEwLT(Z$P!cS=^$V12Ff9S%#8Mpn1gY&lkQETFFHiC+q zATW2h|JGb!3mDs3($bZq{-&0;>$-!Cjqr-$FRW#V{?6N;b9(sE`9HTcW5a@gf@x1oBcHs?*cBb`k*=dH%A5?OLiNo4KAl>h-5HwGqrtnn{T zXS?Z;{nHrH9=i{Y#Dy&SiM0YKTWqdva`YO-WM&(f1M5iO5Hur{$FXdvt;Vi_!xe(= zk(Fx+HHS0)H|`(ug%h53T?%v^vbFC957usAT+{T3<>;6g%?Oj1%y zMULf=f$Iot+P8$W^uZW?fwdM-Mj5)shkj&TIWzCI!s{o?Yq?m10sa?a_a2Y7w8ZN*}nEFf^W%!viL!;kIopZMbfPi^=ox6CC? zo-sN;PEOAe9RIQR4}Qd$J!Tpy><`glgJ|DB{2KuNe`$IlM-yeTyf|`hj8L+TWp3c; z>Nds3HOJIc4cPr$!*cV12fU2cH_0njb3sS_0B2Ypr{>Lxn6nmCNm)(akf%q98I$}P zYnx31USI7=Vqsak=ZyO(WZysdC*HpQ;9#6{AF*uI!ROC`g=LLlZ^lxNe%8+01>-mU zla00%^jlxo^~HF<|M!8@ zpYQ?zLHopi3_gdx0d$P&P^W>mI)+2{jb8ueG8w|>~&$EOX9 zZ$Etip1c0_pSB$>@!$~mjr*qo()Z&Wr^k*DgwdXA&bcB&tmA9l+ z-i&Uv9oTqI=4M2baj?LUz8x`bZ7ay5b+-m#%SBr>CuLDwgkLw7KgsWVK|Kl-Mx z)(U0!!m8VDLe*Wf@w0zc{WvGQvupp4Ssd6k%B}FTkLR4(SRM0Hn3|QxmWwf6*Dk+s zlk21<-Gm?8)V*N`Ia^|SM6dAN_TM6h-F?Umzt4_z?P+UtYLh_gN4NTyVguWXIBMNJmtAIQX9{@^Zj^7A>wSL28u>>kTG8`F5xYjfD$aGr!Fm)joY6NQ3}wVYb* zWk}|_!owww%rqrupA|CaO}6A@;cz!sdc5k9^%bA|vo}8Z?-+;wUatw=Sd!3i|240E zZhi)UsW9_~^(O&*`xluGKA75P;M zo^S_Vr+5D|xSs3amn8q9G#8LOHuGf^I*Gn0=8BKOY|)pCOXmw@OvVLk_rcn&_L$>4 zln!tE(1RhwJ|lCR;XFro{L&!Brb}&7DFLe|zb$)=#|1vP02O}{ScPE2sIds5BmUxt zLtpE{+P3)B-#rbJjpDT*2O=)NPHdPl>f1Rq=OH@8qwL`BF5YjA7Fl&wCnP3bx_Xv8-M2t#S~ud&|=82 z#6dTwia2ZL>ZXiK_c)GE>d&GaM*=1847ubP-YW{i?EcGa-4x(HBzo-f+uXI99-9wm z-OhB=2y0$;3(F7n+*{gdPZmCv*4ILLTIh>Ew}8cgdeQ)pPrg9qaaJDVx!Y>g_5xMZw$`c7|tJFa*?pyqO#5IGEDiwOy9Ovg=Z0zH2uTL{d1t` zycU7u?)Ju>oU(tE8~H)YZ3;+kc20s*0T2&4*k5|ba}n+7%H8a3N!9@gAe7;|fdFh8D0dBr;_o#k^r)G)VYLqD=T86( z=H&d(y5R9==^@hg%Jmu-PHG9w)YU}boPkgM{cfsayvaniCtzDWGbaX*HKeVhFxGk9 zJO(@dd2ES}Ln#YBHOq|5oA_+ZeH zx5Vrpt0q5`2MIat{?6Iv>AbNaz5Vt(#c}zkVlOY|gx+h*X}>v_D21_HEFgdJ&%H{vHB-$&o6G>e@+ns`ZDu!Mv$&p+c%xp+&4D= zNy!vZU!K3jYH!ND94t)Z9BXow44)60K{%EK$EjU&xe>t}`zKiR3$%qwfLP5fkv-AJ z5ATmL9Q!92)Y(7a_fh`?0a8iXBYD)uJYz)1KYRQ^Lr=v5jlOzbI`8@Nck-#OQ)85S9*LeSH-scb}75wd+}P z%{j)HbIoVf-cRkSddqz?c6uwj{oQ=|z)t_XT0KmX#4MV^oHl186(m=(PJLRqY|p_a zGCCppis!t23sL8Ry_l}k-EjTZzxUA_k-Bfs<6By+$px2p56$(VVE^>5kintZdyU;5 zMiUwBA3lGqLvN^R2EN&=y@TE9;R`!_%<}#J4|;{2p&Q3fvl~At93zF^>?iG!9$jj5 zy~IeM(QhyWn_W?VV!dXWR~3-DUiSZIZ$JK%`pN$q z{2D92nen+W=T2()9nI@J@b&(f4L;alid+8CXPwc#be(zEH+hDaUZ#HMXa7^@bjdxT z_EfJc+{H&&$MOl6^V0&9qjAmHEyg$(9IPuK4;Wm`joUxI?%%kK@PDrBT>2^@P<+%0x|`-3I#ykpGXEi(b8bq||UPM?**6td4x zC_X0yrv~p?oDV-gK0Vojiw0~qB$AF+&nkNxjAoaoOY+d=$rV;=K72CG-*w7Cj%f~j z@_Kg28N80A@ExW-EQj(2wQm`&yOmvczGiNH(;bzkFaN*sX7)GL8LPUfi+8VEyNjTZ zM9yBeHs;y(!X>YiL`BbiMO%(yvHdpkRNyLD50BaJi!?2+Kft9)na)YvBQ-#;zh}*B zFve#8-R2aokb=Y~f9j_f=p|+!ME*F>u`erR{|K40lAwW>3ot)C-u6kh zbrP>X`GY~hJyqi5*WXj*7@kv{Ic2++5R=V5G9wZ`lvH9VbMWzgZiSkh12zGQFgNpx zlu@GCEFKl(p^b$^jwkn@Z3yg=|T{0r~i-uoi2G9o?2&$<7RZC_F*KG-+e1V1e| zslWM8zk7TCN8XMOxrF2WO?35jMqUp3-M{>ct3L{{A@wc-%vd=y@$X(58m#iRCO3X~ zwcT7a^=|&y$%oGtiLAHJ;LaIJ??wE%2dUM%-hbB4jchj1R67@biK6TDaP`M|5(-Dx z))(azn|cfZF(O?H=|5pqfO^xZlvRvt2pF z=u~JAH-m5 z2ott!@@Sp&10=Thj1*Y3#&3BpD7XL%?6@rS6C5p9Iex{g2@V0hJ3njdk_k8Bv29=v zx9ehFzM7Z+C%%F)Qt7s_;)_04)-cT-jrPahsij;q4xibredfj2+P&Nvl449liT|^>vAH(B-KzXxk^qB`+x}NobaqO@d!IcE=#eRT&z=9Hz$W;RF<(h zv7*~+e5*3^%%%(pY|dWbU;5o&l1*KT&mIztp>b)MmaOWvuy{OYrwUa&upF4ty{{&6>MzMV+od|MHFVxM37vR?L|FaH1F*LOh_ z(DxQao^v#JeGhOgQ~+g*-a4A0WY-o`Jd z{gbE9O-B`<-hBE=(NEvA&jRD=3%s9&yY&65k-z+(zCq;s*Z=Qz=Dg%q|2g?yXM56r z>cCS6KB@!x>HmB@`oUY^KDhF*$nd8sKzN@A%{;i<;fG42h*@g zvVRagH=d_1Gl%Xe2`9(&PFUwGj{Gadu3I3x1Lu>*)J{##DH`b3L2b3IGWr(5UVMt5 z&7x788dy8D4Cif$t)U#|=1iTCXAc%aRPPaG1FQe75k9r^XW@2w$D$an_t`3qi#Yi! zkos2A<#+x`lqkyS^L+u2uw6^?kZVSP)>Q>c{`}e74uU=Ll<51XIW-19)a+{XJdHrH zK9Bea*2#P(apqiBK4HpT=Vx&1{#i1~eXYLp#ShoH8e^_~;9OuR$x?gqSMuzIrTLHe zaV>uOw_Hv?_m9mMhaXVx*mAoE@+Fp26{Js~8C<%hI4bOJS`p4lB`^`j_HO$;uh{M( zZ2#dBrBo2Vg95Z&S!eIQf8;Vv8JS(c?5lnXO36(zdUAp>j#)-G0H?$5)Y}~HpNeX3 zpgBKN{b+g`JNK2v?A`Zy1AG2lgM>?K(I|uQR>bxGQ-J;D-}}q=b_P!^;26#``Rs9B z4y7k!5^GIB&Ncp4Y>fwWyl3RhAJy!w7=F4ozb0_yWdE*!PL!``{#t-8yR0GRe}pA+^@o&YU7cBc6Gsj4Z)1?2pUxPZJ-;@+rihey}Tv6Y0kVVheU zf5+NG9mh#XKTs+$&(!6voEx^ zA8S~eqq_F*b$Yn_1b$YdgNF+6lAlZ0Eb;plhgfK^=Ix*P%fEVi>l-iE7vuc}dByvU z0D3^V{rn&Lf!o)AMBfgeT>WCc)3Oh1#ee$9!T<8}tpoa1!?&;h!7tpt^`-sm2FT-g zH1v-B&R_lN?ajZ(Pu@w1Z>EtS(;ruu6hQMd=35eM%c~*(hn}Axrs+oC+o-PdW-0Dd z&ZF7N-TPmEgr+VQh~&mb%Qt#ZZr<4T(|v}n`s4hpY76s#9zy(MPdY1IF6_aocm?*K z{M}Z!D;S-i_xbVp6EIbt*V!h5QC`Rg=wuPaFsn9yBxA;e^Gj*H;u79PC)e>1+B+yv-vrK;3t%aV1 zlg!QKI?ZWCEXrz@=_lPgYDII6fm%iG>=$RaYb_TT>wvR{ovS{(ke*x|0Qdmn3LjT$ zB@e^dZ5fW69OgUhn9-%+xwDbA_V}?~zt+ycylTVVBC)NoFv%~UgBBSZ;Uhmf!i1f3 zL4V3$yA!5%>T&^=ub+w}<|~*a^3wi|O94iv_;8F0D>YOtbD{U;H^cp$8rWWI?cYCx zte>Ut7w2`??|rfsZq*8|i3r)w)i=Hw2{RKbrt=*H&KH09 zZ{2?4&&?|VAgMRQPwde*IF>%r@b{-%rVDfLEzdf?slknT`bp8>R105Q^3xZ0U)x*r z+7$M5MqZm+@jWTz>F@UMNn4*ppE~fVI`ECZ^YZp9|Jw_m?L5{e1X}swm^Ao=HUh<9uRVFeg=j|aTi4W_tnqk7|FoPAO#f5W*+1u`f73(j0Ao#m znzjc(v-#*B{TsUbhaGzP;kdWBtTnS!k#NQcd1`KjoN8dTts~4(EKr+$7&qMJ1eCf* zlN=_oUu+QWAclsV{E?V7wOIBf$eBrT+s;|Df+Z@>96NQ?50WuDw%6Sw>*R-xojL4q zPJ3jmGExt0eqUT(K6+X(2-MgIdb~5(Ds8gQy@-#s_dIx40&s)P-va4h;!%g6zD29+ z-lycBk5lEgpM38B_>(1hu_?rH7RrN7O`4Vy8`vv2a;lnqvOppA?*xHAtg( zr<9Yrn;uN|9(>Ycr~ed~GMb1v_U=#cXeCR}Z@E!f=U4n~!$|I^#*PcmRKNxX=gmxn zXzo{#R+9w#fMJ>}@Bi?Th5D_^Vq%z1vjlKxG`(i;8$3RZo|i24y1DVY=hmba5oLQG zev*2@#qpJ3_}-NFa`0`ogV4MKDQtaeU-_%md1}!z8(MsOauG%nZVR(1o>`?-8`w28 zCz`o-!dan{0qbO{`l%zC(b#9^4SiM3ziZN7nBgN=yS+l+X`Bq4R;LX|xh5Se+xW=Y z8rwhCwo%f;bwSo2+Zd$boy19=d3-y)gUKhTN9mfI8$Y&d)J$II!&a=lDnBy!q@bgR4al`%hAfLkrs$8&G#r~27#-^-CzxvCf#M;f zduEM&&LK@=Pp~ogowEKix-2-;)7qmm*{!+lU|GY2&$j_EqV(+c)>l8c{l35Q5AEgu zv-{p(3E=lG+I?>v zDHqWEql3`sTf+GhGhcDfqwC0FvrcswbdcU=gpYgIKcO|fyvUcj!wONOSaF z<0FgjAq$P#ox>^HO7e9VWpa&fn zO5~J}^|qZM_m3E=@cM3U{0UlWfMX8_iiZr-CFES=UOBa1wg6yqeu8)Y7C_LOFlma* zUYunT9@cmmt9kW z?wL%u+m4d4X$Z}LCxz2&~fW6`6r!CZTCConN%mM6vo+{EwwxbJ=0 z9<9-McKhP*nqLR-&bM&nrTsMng9^-h)9f-^w$={H>E37i?i>E!^fv%J{gfyj{`?KT zu-m@~K7YG=+R=Bb15e)o@ZIX<>#4&x0IUa#*R#Z@s-8OVx$nTw{iSdFX^)3lKj^Io zJQ?|u9{2%|$3hK1RALJ-uJsT*eAa!gWros^_u4=$C4*;zN?Dm8?;YlAQIbKUS*(2Q z!$VVTQ`nv3;n-FnHBl>zNe0fvTck+=+s?zjL8#gnJf9R~u(mx8P;39LC7(bHeDZar z+4)&V0DcR+w?TBThIw6U&*5pUeJp#dDf7b2p2BbKtnTgRx8?}Bp49_6opZ7-JAUug z`&E4S_}T(yTHn0PvGa*0acUiPy6ZJst1soF4-mo8bxtSQ>7Ad=YTQwr+jRIA69$ln zowJs`{1gy`IoO7da|=X8>-3OiJ~r3>$*KY(9ig5-lVRNHB}=c&;l)FSRj6ZoJ$?bZ zSE#2=&V^qxGL|j#6)(0M2fgc<+u(@Z!|~KTun=(3?rf8bogBV@^=WqRCNcKvB|gP- zev*N!`=`89j@xC<)IvS*R#B&oleI@@EhfJ?<`0Bv;lUm2gWg<(FE;DJ6^>l{jgRi_ z^s$4rTK0?12<7}NHS?Pkt*cF@WU+)*${mlAhX=K`FiF2^O?sS)St2^AJ>YvAMDAZ` zx<)V5=!iP0Y@D|96bqT5b$Y-|$y*@jCopXHT9;^MZvP@{foMRpme2&f85v1pmzA{+ zcVKkS*wm7|`FjC;_MZwGtBz+b!}q#c4U%7D6`SR^&w{QJZ&u_o}Fa5yntN-E`ZZChEzFBEv%;ae<@YwJCr+@$U=CA0Rt=q^n z&~-l3?<)3wT(m4F;-X=kcFk59GESR#?{@&Y!m&s^&Iw7rdpppcaq#o^A2QzYp^>m_ zI6}#_>Vr5;%FvQf_Z|C6p@us;nT~Pn8DzmVNTRXob>2Af<;=7eR@)A11guh>!{>&F zm3^Fc@$?M={vOnu?Px$xR?TC(R%A46$HLV%o#b4YgclTAAmHSU$&FB0puDRoMO(dOC#Y2RV^6A$v14z z{dlm3;*9dM%9@{G^_T`Myo}n++`Hzwx8WCCE9-hSAI&-I=sp&2DDA0hlRCIoP}?0E z-RzgXl_6tn=D^aSZO=UeI{OcM)(4->uexmy63Ox--vTP-+1!aQ+ja4=LcZ3Bk+p@* z2BF~aT3g0mr~1!89}vD@qPcNFi>gOu0)on`V)N^d~6OTs69?NpC0 zoamPw54@r$zmdmfZ~jupwI-`It;G~#{-z@^Inx7ge|iv`4WdbW{=F(+^Zx1oI*SFZFInTJ78js}ZPt@lYwiiJ zD$qAWyAlNnzW5D}`qSZDS%2xvKYRP}pVSxszwkALGu)>xG*d`65ohglKJA0LOyazw zePZu(L13T7umjm&{NevczYajJ1fXvMu!Q#%x#sxj^MkIm7?V@K>S$$2;8R}Td+$Bf zHlm-B`viY|JMh+9Z#})d`|EpqUaQL9fB*fbR{?pg?#OqynCH)*-(J^W2lDjq&v*A; zf4|h;dFP$)SL)Y3?>GPM%iI6?6W_SK{6H_`qz5;ix7LF!k6wN#&O>GV@)g6g*%9Z# zuY7@kdH8`6s2>dD-?@UZRMH@`xDn8G)uNxa`9RNwJZv7m+AF`q0Yq;;K|t!P-w*Cr zUuq*We2o_5`n8^7twRG`@AU1WZ8jOCH2J5l?mzPBTbe0A^M!s~mFTD``K=KBi5@6( zyY3vuQlk8-uDyY2pB~ukg+0w)&vzx=mX3uxzfjFEB=s=g8X`;fADLA zb=3J|CjmK|h$Wy*sQPLsM{>4RqHIBY6|Ht^!ThJOwmYH?)dN$zBr>w*}T)!6RP&}b( zf~mc5ff2fl#&O=+yQJ$m0T}4%Z%P+3>0?t|?k7p`F`A5-5p2#+e6`zu)&m>8=!V@K z(ckAsTHT1q%OsfKuULw0UV~RpX9EOs$J(;2LzgMIYlfB5^p z<^Df@epCk)=ugkIbEBbJr)0-iulxeprWhHuhjQ?cX?~PX1uch9B=*GZk4;v3#z+M~ zQ}^kwFVSG@>ueEUnmD?x>pquxQ@<7O%1i&-m)uiIEf0G&N5=Ep+v(-3P604CW~WZKT3@U+j+iT^@!K({R4_k)2%PtA3ylnBl#bRm+$T&%IIF18N(|!uHCo$ z{&l_bPc6yM{&y|aX6D~*XVfJry%RRznw+0<^bc?1#qn?VbNxHYzpeCOCUh{-9ZfA2 zm)Dw!*=HBd4EJoM&t6lXoYu;(0SHb%5&u#z`~T&izWw2U=g(YU_8+@VKl|F)jRMCG1Y#dZ|9EA?U2jznI` z$)%{#k7QqEe5Aoo|G#)KpJ03>@+tUP>Hr7o?YHy$KtD@$Kh^sE>A=(91K*#%|5jyv zo&P>~`UZgCs#Ea2&GYmP03Y7pzxgM>dHbdR>4hKZ{O~Hvk8OUi%O@#*K<|U3pX~g| zCsECQO1$d#`Eq-U-_O2{^$BsFKld{$6vjMw8aFa8^aVs}ZQOHHXwCzE1X|0U^Y9*W zuugjLy(ji&-y;RMSScv(Tz3Vek2t4)!k>@A?Pq7xKkBlY<94{L!lw%<)fulC;@w&~ zA3vA%5ZN=*NbbXYLLg^amYyYVK3yozy=6ZdZ@-~$%<+w3)hg4gK;-LIhZ z1!Fk^E@k?^X+$!>GLG0;Qq$LG={xK_-!&t6;CfuAAWw;(#ac(00OvL5 zY|fL2Wu>oo8(2~N8yWR0wtPzMD1&wEiW~n^pXFJfB#iJw`2XFRgd|aq&MVT zS73bS$NxS*30`7y_2ZJ~kjCtrGYY@4+%J(FnNdsx_|e zuKEGXOE=qH6 zgagf&x%VTS+#eFOf1b_1^SMs3DrbSog-!a76H|NUOKHOUTxdRSX?(6}Z^bxrJStEy zLO|x@&-nUM;yyq1QyAj_Up6VNbo zF{h@cQ+_+cBDTh)x9^ek>nIG)5cmfct;6L#$CE5Q+gS}U3tc13%k}arg5b4hKzd$t zes-*193UPXSHBRgJo+X8?U#stiEQTM8v?$jm+SxQf9iMN-v6S$NFdPp#eQs8JS_=U z002M$NklS*}J^yRJc6;|f`unokO8;9KUbC1dz&}LpS5r`i4&T{&iZ{?Ak`#E*E z*HF(fnCEZw|H-SJHXgUHZQW-?I=$sc)@BzT-OjnjZVJyXAc*2;?ipG1xq&$&?2ViO z*WTx6k~q+uV6jc~>>PK#Zq&+mSVMK05I=?-ExE?#KRxzXNUhwk zBX;!9_+XPCa{9LVH*NEJ?$PS W4CdJkkIpKBuDCB45%z?qKHz&zLI5B`3-!Q*3C z_mXP@3D14Tr`nHi3~=J|U8ErkpR)ph41DqbXZ6MZKmGU@{{>t9ZDIJZSKp8Ii2-*G zmp{DX(5QW4u^-D(OtyXd^`;)RF5B`Iv z=7<07pRA{XIX_{w9CwO^+}-~GcLNnKo)T==VV)Q#KPgfV_=7N^5zz`q0DCs5 z{SY~SNS!**YJ_Ef?RPN%vv00Pu?BFduXgcTvl)%eO9AnMJI7wPf9@L{Ju{jkf& zMG5?OcYZ$~9`?A0<%}Uu#5)_88v@Ov_$=bAo_WGEFO6eeU;Bbadt(jq51v@}?*@?S z(um2L60%YA4;-~Kis>A0uJr+}-MRFxHMd@xSa;=ETW0D^`h6Zwe56kgDp5#|#C#s@ zXRUYrS$%=xm(KItgbN} zh-uec%u|f~&Da0TBIY>Q@`YMBxn1`EA^Bp`QLl6MyrkAKlO9IiKqk67Zr<#T5v(snR#aD5Ig?7W?efrF^6Z=rq{o z#~GL%tA>G3PObFExP!O)HG%HGxnRuEShYt4_1%Z~NTGWnt^8du6!O{3)jV+WB|lOw zU~thHcBQ+#%x9ehn!%tQy!r=s=1=y$AM0GjEV+sq?bSa;*T?^nt$(i_t|<-i$tTnK zQxHv2Y?7z2S&pwf#a931yPlt7Nf(i}qiJxL-{()Ko%H>fL%~CSE15Sgi8_;f#LzR{ zPG5#pwVtQMR{tuz3YaZRm1lxcN>cLZjY#X4=`qV3=bEE2xU0btFTkE<+>D~X&>^Ni}E*}htL;>%ZF z^DDm3&*-61;Z)~dr%vil(77<#qbB@>8Yfh`ZI(w-yQW5W*0X}`4VjqpCEMgs|JR%J zOiEo<-!sAE{7oSB5YxN)3B;@;d9vU5oJEfA=dAtG0Ac*ot0PrB82aM=H4PP#gmL)1 zWZitS4dc=q00>g~G@bV&mGA$@jSw;_A?s9%r0l&;y%ox;6xl+^I&o~yIV6NoWFJll z*?aGud1UWnAN!bRIP2^4!}pi_`Umd&y07c`dOjadEAUMwrPRQ-hvOW?QQV(kAGy{E zW*81M&8&l=;|TKlgaI!>WcfvDWxN;b`-QDqjGwx$7}GlF$fBfvPIif#jrf|}o8$zS z&K{;pK0M7!>sY>>6mU)V{@!HFRr+aYgv)0nRPu?oWOc(&wOg^miq`|W*M z7u$VA6Q*X>CR&j?a2AE{=wsqiN6Wwt6raRQ{L*6rZTJc?J;uhl5(IRg@F&s1IXt?m zk*)V`{#X$#a@P6Meu-f|N}-wl`(1WZ*myfFt~PkU^^|XWP_Y*&F!`_mljY%84;C zh&EMX4;BCU1h~gg(oo@&*9Mh^3Lx zXZd;`se$@;t7DuetTkt<1^avYY@^kh*h?0+SRPL$1ffXzAnbV%3YEXuk|~HMQ2zsV z$hT2SIToSaQ?h~_pLT&kBrin{iW+UeaOQC&UlO5bMG3E#yg94D5&d*O-Sj1JFmp^T z{oJ2>AQ*SDGht&X>J43MdCJKr?~B}Lgy1M5 z;NvWQzy&aGS7xrsR|>bC$W+^qRYksf2kHF|!tcjom;$g(DPa|Agh<1Y>uCH|No#N! zcW{qlTDaq~V?C|(w0BV0FOLGAU!hmQ1QDhU_2Idfb~y@yzFyYXSos6J*lbF^#{ ztz5c*xTk%c>{AK5cKF{Hr?og{$qF`F`aYNltkAh>m~-gwD18#-_n+WRTGQah<<6xn z_znD#W_XhC7g3SEKguQ}QL86rR}XYBGhHMRLS6B z?^J=oB0skX8umW&xF^Q%ZZfaDl&2f=nuK_faI|2ce&cW-Rm7S!ZGP;SmxtfP+&4OO zN|BV~|0*iNa$PrS8~EZ*cua=Cwi|h`i3~9H2#Wjr#CGY`QBWQtE%I8rOu6M9IkqW( z(Q?A(cSthF91P1{Rjc}C!r{pvVQi_=1Y<-;-mG2*&ncXqt7 zCA9$jCh}dR;!m1-$}*dv1a_oy4S!SD^QCBZpsUdJH;&U&i8S!@2TmDLn9YFnsnmC# zr=;JR2lJ4`V?qV9F9Pu4-jC`j0{Z{P(}np770<(8 zQaV+h_A!`lNrB&+@^bz@=X;q8`dI|J^>Q{*o=IF%LHea#W)IZ@pfcBmwNLI< zrG}1Z`3gL=)|uw__v0Bu1>t+E=9}8ikFiARI&u-(hYXsezFL%=!bOvJ`RTU0nu+{$ z_PA)`)_bBQEAqM`dR`I)JOof%E(W1zl0w!CCJg7BUmOcVeo&B0>ruWVpfu*cnAx_E zN6&6S&RQOshm>y5cGOL+_aK{ISUC!x*}J9R(i~F;_Wy9mtNQ|`c09ubKwrD#e?3CK z)*9ZJ18I+Nd~ocx(M6~6)wf-NHNW?}c}x1C!~7}THzpxA(GW}f?E6}-=Z>c~|9O$d zB<;Ak9-iq*u6siLGbTxRz1tge7I^r0?_2~n#Tzp8hM}d^9yrCq%M@;5VRxzel7QDf zx1a~+6}A<&^-P#J?Y>Qe_>S&^eFei&(rqNcV#BYKlu|tCDaLJh9I5`t_aYLbu>& z&Hnzj)%Fdv`tKEM!KX8UyMz_im2^$EFS8siV5&W}6_B1xrglzeGex{FN#O~!$TX9y z@_+GZPPCSRm&vNb^NvrpDDZAfRg#~VAlogOHoPizYCn$T54qm1isDlX{K*W(YgpQ$ zNu2gC^)e$|gXRXudA?}4^=a_q^AVdA*MTz;v%A~;t*uS!kk^4b z?b_bUJ!LJ8kd3x!-R<3i*ob$)y@Aa~!W^}xI~5>xvY6FnzxkCucg`1US?F!)onP%I zBeK5{!ls5k<^TBmSb|d-{8-x&0g^$V0_wPHuW)?rQpYQq82mD8mnjK(nX_6iFtAU$ z>isRVQDNNwP3_n*tuy=*!M@AjKiProO5L;AwIUS3L4S0^&Iyiv^CP(Is62xB1UvOt zFZN|&ywVaDHo=(pR`9e;%m6`5Ba51ZZX>$xs2I0SJXxvQI|Yc!2L`h#?+&cS_IYT2 z(I;!aY<&jYU%9rcO57ov3w$#89ld&0^DB`3Z`h4_LPeDT3+uTRJK8C3u`ClYjQAaj zBxpvwim}It)=wJ0Y0r@LN$C;{nL3!sL2Kh}h51vD2ybcpm@WM0smwPW51!fhd^+!C zr`ji&-!OnT;O;-$Q-b!jE8e$mIB4IJbG@apG^>jF9-T80-I5|5^?{KU(b1TL{j!%- z=AI8I#>Fk(%G=*1FsuFAlk^Dye`gzF?$C35t@A1}6YY5Cvxmv>50}{~Wl5Gsoy&{% zlcKv1Lm22Hc;9?zmz*b}vLfj#QwbUj6}^E}#*r^RNE&d!`qz*BaX`ZDH?i5Bf*iJ` zT&;|{hxmKn&p)g={&ggG)xsp~=Ll%hgCsaZ3@?L^fV>2x2M+kQtCw5Ewa_i6f|_qq z3@_1DjaT-Dx6Z+TI0hMU0vmLJ8M?D?kd+^lsa)?%cf&X*URWemY=4;l{wV5EC~lpx zi=qW5dHju6aDQ#XRk`{bFvQZ?_Fp>SM)+FivhQBIYVHXQZ@H<1);qe=f22K++V6 zQ^6tjt(H@jE`1e$>$cWI1+|Q_zgpH!TLhnxp9Bc7m>{uR0WY}G$vOi(Itp<4=0Bk~ zvwq8Kc`V`Ukp$&Xc&cYfv%U0~#A-7dNIr7hP+j#pXlcFmUD*UB&D?ynR5Xtvb5Kz8 zagF-*!IhIJG9{wr=;NQ~x(WwFf3*D?=0aeeibkaiDF!^W$3@xDN%iH1i9^b&HLo#RmgGB`(41!#+BLj?aRG=P7H;8wpK9X++QcAKyny z5EM6M84*UCS($kEc$r1km%Q}FwzJlIf39);0CxW~dB4;)-7UW^%xykBceMPK14cMw z6C>0-j^?%VdM7_ZStvXDIKcZN89iiJlN4tymKKtjm4z^A@_sH~`u^ScQSpC@rDs|Y zuW6w%;G4xZT?RCv-wI+#)AW1AOq^_3Ia&)&Zpj&5Rdj4DpjqZI!&!No}- zoW(xBiiW)jTtQQ+^rJF1$Lz2V0|)ff_jxX#d`A*!&7vRQVC1500$-@noP1MVk99!~ zz^`ivN{9-J(*C2M%kL5|y?8>d^?}1Jy%nDFOhNKX2S*xdf(*Om<Q}BPlWY4ByK=Xn-MVTSb9LtqD!G;P zKbvGfFd>=T*Wq+~@hY7C9g+e(KoscXi6Lw7)JxdSuR#TmZ7-%kNJo*dyRgFM76 zXz~tvY4b_`J=HKe%3WrfCT?WjxB=}{{QfUf4%g$rBHdf$BFUqi{LVAX_YA=7zAtlY zeQ-;+nSb+W=AXCj*5F9d*4h4FwPga+pEvUb*3SsPKCae{4fO}i{Q$5>uYBk|+QZhu z`f}gJ_SAjan<&uo-qV$A8vG61(bVmt9J-(>_orG7X7EX#xk}Z8hLvN2d%0#AN0RgW zqnTp~`}srrF7Ss>Jq-+0e?XwdbRo{Z;Ss|+i$s#E9@mqDsvwN!dla=eJCb}PJlm6^ zRk~-^hDO~ZuS_;2J^E#D>udh|V7Q@baZq`;CIi4gFxSQFED@qqz59E%Xy5S@E(2P8 z$#kfbM+(W#-n|gVK!6el%$&YiLAGmtx)bVAdEw#qkxK7rWQm(sF6uUWJff$j4#c%O z?Nd6Jc(ZR#?xiWWzPT5RIom{ho6Ar%H?G^Du+sj?k)8tBs+K5moTKfHGS?1PDZ>@HKn6JYzH=%YY^mN z)K56v<8;KFKc&~)*Z&x2>wJ@VKq>mKB6J4Z0y-Dn(?$S#&T2>U>=zwRpL<|==0{Q+ zZ?CO)xlty2``*2d7>YQ*_04@GPKPP3TpJ>b8~RP^8!?Oom~hp*Zc<3c4|@&ue#B=> zkh^5lUl1ah8r-H3UU2nCj%I5g+#IybEBCG{kr_1t3ixoxTZq5P!a1;iL3<>f<}g`V zA$8z22?<5Fl~rS8c$)?#E+#1cB(%7%gCFUtRTSxu^YuA)!5#aGZvao9cNlP1l%Yk3 z6cOsvJnbjc&+5SC1jJL*k~rOe<&u*6=~w#XsnYtbq&j)$x_PGa_o0sDI9G#%iy7M> zx^BLVga@^e2indJFPw}|CWRkb|HbK^4<6`}i0O0=mfs+qpZ#|+L2K9p*cpdAh%{W5 z^IZ{V1N%WuwN|!!_R20x9H-b)qgjK-0LpCZww-*IcLQdRw++b$O;Qc8dOOYe__M_o zPx|bdj`SIo`~AwYqL6FVKjX4ZHf2n%=jR?Dh3#AL92&$m<#uamNNoHyz0+BLC&MW+ z;ptESOAt2CX7@q4gmTAr7ukLE(7k!H-EExtRfru26(B4|Cz>@Q7Ve=4&J7$-f z08|Q=Zh{!c%^LNuH3ox|_ytVwmN2nFjG+--sK-HzDR%U!JXk0PX#O$@%q648?ceYsvce)tadD z!-)@wD}-$=i^QJ;7q`n{+8@NVuM!>QJNMJQ_qL|3dq>PRMbn8Me%VDaW!O|v%EcS? zc0lC@X99vUD>zRuod;wFK1f0SRwAUB4E;QHopnmnfMjUBSzBSGa}uM7k)DGPd-r!x z&Mk$ptx?NkA~8{8g5vG3)p+V>2;uaPPy;1&z_7H%DJ>oxvj zB6N-Pqo6wmG1Cwv)GXwZ0HU+g=hc5s3PI>a#5Zl5v#J1&P0hiYMf&6C*YEe%oEMcz zZ?YHFbtoA&{Yph@y!6#37rQ7<_lWM-SdVXODJfsEO?4`}lc0IwCKwXsiZ=9;i2&{E^TKNmArS*JNKrpVHxRYghw~UjJ0u__2)7!2vn~~|4zY| zQnYr_N`9Ky5UDD54!v*}5`WIBHJ%Ir#+S;l zrNGVlt5@rz0Ij+E8V@egB?iFVOlF7Pd#wiuP1YteA>5_Z-xZ3>xq)vMGOQL|u#Cds zl^ZsMI3-|bLo!pWP#z~%g=m!F$K>W>9R+mE=3>er6n$%(5wwQD^*#}glwXU+l=o(B zXbjZk3dTvi3*$Jzt**~dALbeG!o<=5u~V`1)J z&Ljd2Lb#i@E^nV+D@Uk=Lk!TSj5r&CAlq9G=B&;LxcjgTpB~u~g5Ps{c;=FHz>3w- zH7{yiUK-V<0)68OCK@Fk-i){1JNSJxXhGfv@ZWBFQ8imGXJ);5+VTFC28CocrC(Bu z-qFp0I=7vs#mn)DQZ+=G^QdS1C4-!%X4dGp?O*`2*i8Mmpi_3SM7_r0IEA+(I<#ir zWiPA*Pm?tuhdcD@(cAnozAu-0t8l{hvV|A@osDiCfpgD(AXQizIoJfCATDYS-9AQ{ ze#BsYdNe_}si8Oe1R`**0jwJ5)?Lt~6l||+n+AJZ(}#|kcMfeOjVS+!(GT5G-xQ0+ zk09zdc6oxw!p53}t#Xq%RDqqex#cUTc8lu`@YcE|KSu-8&qNX&?OVm4Ukp((|9E^n z9!NpLI7#-mtuG()12+^UPsE?Et>YBw4r6GMh{aY461sw|0pd05K%|fhZ#l^gL`bI< zBHF?r7}6qWX^FB+MeS#_9r4#GQab_(DWg0*X+giv^2Z*J6#D8XlM-wo7D=xcYfKnon_IOdyqJqA6(M5*k_AV<@{yiuu%t3c zEXlRMWckXWe?Qfm+TTG){agYtkn^lfit=OtENw(ntHN|c&L9gzdAzeU;Y)qf>)khd zGE<(GP9L`e^8&L=3g8BTs~|<#^>zR?x(?SycIRbpdKKZ``r~RaGECw(_08ILv;?Bi z5^+-sNI;6ysQvGNEGoEM7N2jzNH9>r&8{@N!?e}N=BKmDs(`oKwd*K0RVA@F@lv9-5X3)f#iatZV}wru&bKw(O& zn9gFyP&v<`xTQ4y=&&fBgXCb(ER8YSh{R#Ya zn|vj;4U)^VCa*cvk(%oJf+p^O{hvW_F2IOJ@HhG@o~i5SRBT;hngXdim$Y zg{|b&+5I2=Q7*?(kND2Y_Wttv+WdN>L1!9a{OaXAVzP0Q^k-}ZH-$xAHOdfX2u^<; z--yFy(eUeJ+P=%6GlT9C)En|#s7*RtxN;x9RX)u0Ee^ooFW;h(mc=I_M2$qdz8x*& z7Aqu&)w}c5499>CNoGUG^%ygC4y0kj&^MW?fKlK!VWB`90D*eOije<$g5Pq8-H&Fp z`Q0638rxpb{c?0voE{QXA(HpZD5c%GykGVAJ(hU}x7EwV6t-Hl4{}2$0dW$V<%=0i zR@zhjy!iL?&W%*}^InqXvW>Yg4pQh{dWQ@9E^^n;%l*bBLxvgjmVW`vj)*h-mv0Mk zWq@lD^IfM;G@%|52fUwJRFeZM2nYH^hv5~L)mNzd7TbiGrBiz`M(6>+v56p@uKzbv zMe^jaTFqf<3loC{x0kZW?)n4e&XRqncA9P(X(dExj!rXZN0f@15QqKt$l9Ph3Df(7 zD*-pR7S^A(DIX_L7v(IhXoL0f8!nE+nb-P@OinkTM~uk=7;*v#rGei^f&f8BCG$+w z`qt;$mgKbfvQ}8&$+Y#t(gcZ=Z0(m3led|C9v+%pwlvMNU!WK0mn%tjLA}`mu^hHm z)&J`l2*6RPsl{+g6Oy2MRsDby}Dz;N3Q$tVBjYTxWhL?oXSd3c9CWfGhRN#u zHa986mp5%EmNmsZOX`RY+ zeo-Y}uWD7}AseNNe(Kqh!x1|3Hl#36yDj{zMob z-$osRDdy?6UBK=AAE2vq!z*eQSif(;I_&G$Hywv60iv9vqlA$A=;Rl;tBi5vU3%qiE&k&9QC7EcD znziF};K9^Gb>)r0GQQyF#srgdo5R%qXqv4zfn`eTr0@_wZ*o6OeAReQO*9`8_kJI$ ze^pfB*-z>EmTK=+{s)-mxEhRfu_4JWVEmUgH4FtN7Ql#-i&hJ;>yPEto8DJ=fqziC z*S7P6fF4B};Kx==#BJXO*rxlu%Uh|kE1lwB)MAjJ3(%Me?f=Yu$Uf!3iv|m-+KxS1pll<^N#2JZ$PAN%l%qtqW#`MYDyAu#-8nJnf_UWWCZWG2D zuvkmQlp@=q9RCgbZk2r6rBGn6z2%M}w{E`haOcC`0a(5Z*=7We`?I%7Az1{beVebt zW-pX9%rpCx>iZ~N^cb*tw>Z$5)$_<)z`B3x0CfwKw?52;gcnBpqOmMvR*ZVv zbi8HX)&VE^ym@$GQg8_Aqp`Tp}h4$X1HeVLxR z?ecl#(}*oA+%#p8;M#ICGe6%h zbRK>8u5%o)W!uUVn&Ijx{{gb>sAq5|I_}R-0Y~~pK9C_e`JAy7YyrM^4I3HYr0qd$ z(r|S1%K&`uKFolaH5`y0^Grn-mz1fG>pEk$0*39u4@M&9U1N{*3meo~bz*a3H!C^S z-@1OxiX7Q)8%x-^il7Il&igjzy{jA%5*5o`aT^{=pzQd$WbN!>?S&?!5% zS7y;J^V9hCFU|ODttNsS%8&NWKkI&;8rf4@TM7@jtDM< zo3K6(Pa{_(zKPWqdI+QquUJfI9~76D2NGNj?xN{e-dHk85QtEK2p2YJ^jFX;O0 z`v+p)-4D#hif6qW|C@8`GSDu6aZRSgvzoI0Mkt?d{uN>>Ipt@KkEBRGI0n?-53(ZI z52b#!A{$v(;I?mU4pKooCQqw3*G)vwLwZXSa`#V1p3af%8?P;LeP2;jUlkLR$DCAE z;2iIvLzljHGCWkqP*xGnn|VspGnap&(oz9uu*(+^CDsDUn?&-5qt8^Jk{15iUe#F& zs&(mG?(MSeC9gD@iYn0du7*)APOl_AZ*Dxg&x-@KP~%ON*w%h>SbGQe?LWzT|FyBd z0sz}S--r&12+}aJ^**p_&LmFB(l`1zt3InpgkWW25)COHeDCK+wMXIS_qIFz0*Ql456%}l?zXZdF`_9vA7ASap9pvBsd`NE%j5zQo%(=$X#YX#tn?mo%6tbO;Wq`hrWrZ;T0 zlCTOa8%LOMuAwGADNM0oHCIu-OH%|NKB$1G1)*7>hgz)lB&V4}%+CH3{Y zXHyPKVdVizjna4aP2xeW(it(9$r1Ika>NuiH`kKr&C{J$hlQzs;8GvN}S3R2cElqKJ~eARn_BHA*&08-J zVRenK#^gi}1p4Pc%%uB=67S(aN%sng7RN&qC`p{B@l9D_VQ5w^?j->1*6lL*PDDm_ zCg(lNwfs}}D(J7lzRsKgu5yU(rD=Rjb*sd2BD2Ecu14hguop|pKay#b-_7O1MuOP# zspg&JmDcuCGC!bV5*B4iX@Xa&y|7SsE-5;Ht!nbql&<&c^&bev^(MUNIw7RIJn^_C zS!;xYcHfsp3F-4?bB-?K%e6O8AVW2V)DgcQ$DQ@gF0F^Vh$s`IUZfYsJe{>ycc9T` z?JprUh0`XW&)4+yQl%ts-z{ZK`GAB(n0Jk%Y1QSxk+Q}07gD|o?_B29(?aleWo%CK zr9sI_gP$DY4K+QDyJzu3dsLYh6Y!QORvp;i{pO5k3#8DmHpw$|`zQ3New%pO#kfby zL{T=+h&jp`@bza)_1S0pGVBQ1njdR*omWj-{b6lY0Nd2M9*l+}-F>iGT7 z0_DA0XP#UG#|pI%6Mn4tIgsXWj|UF1SMKM)7EP}QWVTU@=>g1^UzJNgo;$)kioPy0 zHjZgZm&lHZxrjaNT7Sjqw00{8c(Te-%OG)k0LRFcs`y8nY^PsnOQxVh(oKS2??FgwU`(7xc?)#!+Ip-PBsESwdpjj)$c3873&Xxe4=v?z zwSRL!pO8XI+X5>-pjaVQUw)V0fQps@sN*w?^b9cp&}1C3%gZeRST;iekh z-76?zcI;&dE=z(e?cG{-M1Ps zgs8uLZqAU+Rh#H<3URjE1pXmJKFNlU;X5~|Vkdx^D(s#DO6HB>4R95LZN1?^H2YzA#yZ9N+;$6Z`#x%hm zZwS!3d~&+((l)FA+xMI51W2;IA?4_LOg>sPBxa1Sd!lNye~j$K&TSCz^W?flYSbX1 z0|NvzgDhLFS{k1Zw`BrIBlUyVBe{n^um0s9yZAA5qldz>J+qGNQkN))_|o9c z73RfPW+%4dqrC6p3RGME7}X#7YE+!wCtQWIUx97_fJf^hZkG(sYp=kX1?SCwDkaub5SI19G}MAMU@>;r`93oBIT$w4d4fYb~$~(eIfx7 zfJBx<|D1K9)W(iq{x#y~_*NUo^aS{{(m)B>u6D}ylWFI*;{o{IJKHq6Bui`fCAmWc zW^;uXNN08oe^+u=zWv=t&clu!I?bpQ8Cux&qDhH4*!xb;@iGE#V|qO-QN=*xVM{7U z@BQ0~sA%se1$JK5@I7{}AH^JY={GVG_(Sf$VY1%s%7a;!37kF#m0DpxJ4asNZ2dhTHU;?slgMvX_a5MO)Q-E=IrMmfNfL9oAY_RU%Mox9R*y&?5tQ=W=d6aoC^DiLw5fK&XC=gT>N1p1YQmnmY1M`M3s? zbgH7U{2b(he}YTX>28MQgG03cdnp*180WOND`35=L^zT^kd<%w6D#WtdyRUuDU{2O z(o8M2ZXF^DWVGmfaswXEYDLOwrxSk=OXcU_%vX}GX*GeJ>A6s5hP0`bR11AZxNkL+ zi}fWq(y!+)>h{!nUUqjUh!PVvorz!_|DZ!jlHb~(i$ne zlIu;WqP;5h;3#FLHP=k0*ahm^rxh_{#;@cDzm_H=b^V>%weCQ4{Jz zSsRth3m{?=|J@<}3Zh?{cwKYcDrmLp#a+@=hGdG!rpkq(ZMYXflpc(O$4hf2->K3- zCy$qWr;_j?|CDN7_(Klp+Y}C3X0ZAd@?_4}9=IY%y7ELfr*;(~L45AO1?(4#x?yVW z0-}N9YLO1dMz%pAB0QdM;U`KS>s-%^d9Uxsz@|zA%QbK_QMtZp1y_?H?~W=)KD|*g z7T)1yZz;Q@EZH%q7%+?+;u%JUl!26i2DaAD!+h*YS_e;}yG-=XllfvUm23rFh1NIA z0r`%08Z@mZn35%D(9yVJepp`e3A(vz^DWKZG@N>X6*;@^5oAt-`ukNO?bYM-okMB# z4cf0CM{)j!ZKJPi&ciREcIkyfy5)T9GC5){{wFJlT^+H_Zln1vRYf^;d%^A2=@g%C zrbU;5$lbNA5Bzo9MiJBNY5xM7v64WIgNw1oA>J|+ZL^xCU3~LN`!|S)LGuHfG~9%T z_)uQHaA@Z5j>NUO*J+TF*?USQpM6Or^%qv#cN*{$NoO~~lrQnterP}|L!oTLYk)!S zA>sKoj0fH(!0OLMBSj|LJ4cqs=l5?ZRDkJw^AbXELLWC&Ug}USDERi$0KK6ef}?&( zT+E){j}Hr{59|Q-`^$#h-<$KbY)iPQy$(I{OYc;fcRPkCbp}{;Cd*nQkKmitLooE( zDaA5m>W9Ha(~=JQ5UjN+5b~|7&TeSC;Iq)mb#Sw?gG65g-0<$OI3x-CwoCfa7JqB; zbMAk5fsCaAB!Es=AU)UN*YU|_SkU&`Ls3RV-QX-^5nboAeE)|#Gk%fXKLbkS?#=YO zTd1{%-kb8Z-2jdFD2N~J;{S|)135Q@qxAb?$-!=qG4)&}@8rm2}6|wz$ybDzh3L_eD68}IM=PJtjlM#UR zItDt*Jk)&q=ZWwY`5m@udHdAZ>9h$xk-sS72BL+$f*{G(`9cqO?FW8Ift((wxp6K% z{nab)4xBycZDAFlU;6M3fVx=)4e=F75{LOO1#?d}tre5%=6PWGt<1|v3V$6MbNu2# z2k~v9{aD#vBIpW*>wG>fZZVg2Pg9uMWp-uU%IRT#w03Nd;f8AdVb(te39?~AJNJ8XJ zwNQtz_+7LJ2L z{OK!=6ZtyeT@Tc9MO~zFX7%vuJN!Qmk>;JtKRZ*A9iE;uZVNW^wir7dT+o6OmrF~B z&z*3@KV^MW2~1-7iHVHkgKbSOi#z&`v}NhPneP{9yu=5}bnaZ_l7T7b?Z3Lx{t@n@ ztPXxe5U&^S*7lQK>RC*|_Z%8GXQ7q)1jkZMA%~|!JOiX6B>B$W?3zcMd?usap3wG7 z=yumzHKqcG<(<#y5rjL+fRv;DwG?l*u(B2X9t%Q^9;M^1+Hh*v$)E<|VHG4<-<>Pi zFEb_SiyHfR@vbu1dDt)McVfE(OSpoY+Fzs)7gUahsXVU{jaO1aYH-ESpIwGkgxS=M#}yFG7i z@q~qA$k9Jl#^xu1X)1R6*6%QFJ=jZd1|?$$ho1@2j~+BgVa4>su2{8%{UBAZ-+xTm zZG31Xk*sUattU>MFag-hB-Wi=-+nm}IB`CM2sBei&LwU-KdcQJ0aolm516G}QjOfB zXX!Tcy)T`)4~uEn+>>;fxH;bTxGQ2?KAFw5j)RXvyp6y;fbDeO3Oye90$S{qS5y~) zCvYg(sbF4v>@0RL@GhJhdSDDvnvWPxw^4oqJT5+Mgu&~1VEG-d;Z%Z`X@WWnl7~d- zR8J-LK<|KFCoB=NgR)P0Am5Lb#ZQ|5d))ReJ*Cyn!!PK`YK&s$cH*~V7Mh=1nN_z5 zCov2%xhce6O2?MJqqB`e3Xd=uL^^y%44`x}+CSg5zyQ>3s2xfQ%ISd&kFpb^*@jcH zRC!vSc^;d3S4Tis6ekBfYWVd{Ctv_f& zX!`OxaBXdO_EhcY^pjj~^7)Nd*%MB*(W(jzUeqQ!)?%_K5$Lh1X^d zxEAH%)z_?MJ0+3FcOiLRdEpuReA8&LS?S3eX>nDsdL z82+@q_$1V6X&)S`Eb#P;J}W!J`*@dC`#Qg0qWa^!0`N*E0na7Q>|Tic()2w~Sdz#q~B^2&fr5*Ze?v zKhLhzlKriyJccOW+}HEKbd&4$#vk$*(k zrLiuD?3UDN!1ymPR=8YxLzqdB^&G`K?bMr~8VXC$SOLCo%O(52z;3G?j;LaSR65aI zWJStw849{a%|uNOB-})L1q^DYm9Cj1!)Zvjc#G$cZ>OC7t`p)V>(wJ3alk&Po6CKK zM>9Q-BwQ~@%rxYzPPvAHon=}LNOGVjX8`&7-J%lNFD1KI<~3MpMmVL+a{!aE?b}Rq zS8D%F&JbEo!_ojJpfAOi>+6PLHWL2TSYx51P`4}d>6wkqRs*K$KJtjnT8CkA7+EBb zf7ruTKnOY}I-venG+c)LTorWe!5kjX?DVkXlhBFew{qpS9R9GpcV-64jWw1=Cm-F< zb$GoO_)2Cu4~QWWnicT$OaPBBn&Z=?-dRy;RGj9hx8$!9ebj7GX(sAtYGroVv2jbC zBIAd+YZAqb0EA_WgoLPKP}MH5AVJu>aI+}boZL}_J8Qw8b2Rv(Mr?Ai+@*mcxEyq!S-3glMZku7M?E@$zCPvU(U9^-3a9a-mtQRF>PhF1Ms<%zWr zh3V6FTFYn+=>%SE_E_+=MVh26`H?2zryo2fXIJxcC0q9PMA2IXk#`d3%LyHE6FK(Fi={ymXc2svfUwIai1_y9kzZ{&NWR zsSb;GQBl;Hxl0*jiGicVG3F_El|DDr&BweCRY{q_ z2PllQ)LK~-ro~mAU1NH0GvhWel-@>p>1m0Y$Ufsikkep(-F;G(4ardiqC!UQr!Yy(IWFpd*P2PJ<1^&kURO(vsKbl z;9&O&+5C?H%cV|%{kuD9WukcBLgf_I*W_ClP6gk$=JlI}Q@N0V$$%8qnRN2zCk!b`hf%#&ru-Fwi5|<6`QiO5Pg!#)dRc%~8xqS6-xPMj$@whwY?*2!Hd9*&u z!46OieGi{sGSvuvXP!*?!9J$SQ7~n|W&@i*ChsjBh(%FlbvzPeDSMnEZp$R6UxRaW z%0}JqMDlZPk<+P^P3pxnb||-JNn`JK9IkgS@6V;tL8WKaDLn0io;5A945+a$vJA>@ z(L_d9>Czethh9ejWfDUU1W@{@Bn$*k0Fdt%hOSvyv~^y^D_WvpYbWU{CxaLmj6k)f z1mZR4XsLgi5e0xTK?22P1r-YU?}$9uCf@41Y*I>3JqJJuD>y2sH8rnh~MLYrw_^GJQ% z;@+$;+1?=Ys&v7>^AQz-&4)j_+xbZa5Qp>695bWp_io=}=**3<;?Z_Bf;V1O@oH7l z+n-op$PRHAeDiYtK@RBZ-UfoNz}sA3#>H8qH)-B19-vo0JnPos?QA_%31_COxd55B zHYpN>gI>)f-{?BiNa(0BRG2n3#;()d^<_?gO+|JZAOK2%mi@yD$q)^#ao$-SxD80{ z4bBjJ;a!f&GtEJNyc89-OSxKXBs(aHpNG~~r&JKWh)oj)Z@6PnA5?v%C!}h@)-FU; zd*m{1s^Y^i)Q4@l|4a3OlsmAr=QnKkvqbTHU#=1<*t2hHU+8c0yQZE8`JG&rjk(3* zL!?JKbkVmMO0|9C#JM#>XU$+AiNnfk*^h;Al9`krFXRzGvE zlEcl-uBPzC1dd{J`{Qh17br{^A}gl6^uQq?L@3%%W-(7^d zx{)BSP#*X$ zF3fIyG@DzS6t`6slVx6P?(#^riiziosPa|{g&M=F49->yT#fhci&O(_TvC0jn1!*w7{dpRsynJ(Aw2Dp$81U!4x1rtZ`Mm%23Lr#OZ*y^6mNv z)QA>axzsa~Pwq%S6E zR}@IIRHv|a`@cH226R4Q11v?FxvcrQtmC2H%*r@IoBAy$>icUG*Y#Z{&btztCL2Z=Gf8l32 z)YMcK4hbb9|Am){s4Z3?T7;IgiL({dmr8ypL+AoKUZ;5RXxhOMf;kCc;4tYU)Sfu#=RacMH zbL)05b*|<8VsI1qsmUOSR=M_mPe_~URvrv||H4Io|E%RLaIC)g-;dYfM=UzWuD0uc zBP2Xzl;E*N-)NI=^Gn~;GP`N3`0nKc6e|!zCD5?CC%*T>Z#M$hj#C4RH9^E+R%Tr4 zhiRdy<8N%;N*Rj5$!ZSR0i|^bWooyEN48nQ*)ya9ZyzsoT(are-cj!fia&PXnaLK} zjwAV5p98uK1yEila^AZ69#*-EXPg7=1r zs=EshQ67c-{TQ)D{J}M`rgo0!qdx%Y1>hOV*8(ZL*gC&Sw=| z1)IEjIv|8!v-SC(7cm<_#_+8yNBq0ol`*krj~WY~B`aikcKl?8^rYg&Y3e9J1Y|Jg+A=5W;ea^#qU3l4!q$oUDaFvg>g`OX|0y7BVJ6vUMt{_|k zsb15$_zU|JsRkb6>ls^kkkt+d0XzI-TgLHnyg1>v+Sg$buv(7yCv|S z?e@fgs;OkG(c#gzWgz|Ym>rsi5j7y&l#5G4ThU%7Pxuben`AbxB|RJ`O+Vv-N>lq9 zr{E&#^Vd&Pr``c$*z#Nx*x(+Lco0Y#pDKS{qd;X@K4z%-wL4+4Dgt3Q@AI!+8G&R~<^pJqH$2&Czc!ej>QIf|d}66KSz znq`SX*D^L7WxV~4vV%Bk4x6DKmZ2$UH1!py#=l|WE9)R`L1Y46ywu4`{j1qr;%In| z_uiEG)Wlp^!h;j0Z%KGt(jtPg3_VAY3GBAyUGy`+D?$kMy=9K9f+yG+PLse9&1G5rGal^QokV9>NgEDwHtq2IJ49Y>(Xe(=9V#(V1z< zu#DQ+35Tc~6fonZLe$ zjJ)bAZKHL`p0;jJD?ZYzC+YyY{{b=n)JS@*A1=f9-1P$>La@4W;A<+KZG}iMntk$~ z%N1jmb(@G%C)&_At?zzXUB%JfdoiPcPvC3X;Xv!-CYz=8%>TyzcrxEuNpJ7P`|I7h zjhO4f+;?Nh@@O!SDuosdKY)*myU2Iz8HHnbOv1g4?tSxY;Bs>l0 zV0zg{IO|34?BC+^6N$S0Z^U+g1h+2t2!>>Y*~JtwQ-w5b17l5$2AeuJ zG~ZEUO-Yn?}p5u(r4zf$?~&qW;fSFS588?yUdkrSBCZCE-v+jRp+6?%&~nN326sKH{eGU{qWUSw1;Z3<$k3fQ`k!MxC*`l5gknQk!pzJg7iOnng#zN zkPOxpaqa#144LHzo*o~;TY~LOwRu`1=+{O)SsiC-k{qKydr;x}m(PBmI{;a;=;PevxV+vIzud>p&aN&pnd^O*X@3`^|~_j$x198jp%ImGg`T zN9(8%3VodW__EY0ch9B+P?00#uH4feSFC0I-h-QOAZwP|g&JAvN43_xm}pQLho}cj z7VE=i+y4*N9dPsig>~CfvF;GchheU*oox zGOlr^%ZGecFrB&_g!-_tc6mqC^61bwVcEEUj0P)Qcg^(kQS^w8xT|6dY3qR}{(Dxw z!sD`a4;Qte>#^7h8R)}!v&*S-d{-|;x%A&gK>Q*Z%WSUe8n50$SRbV$&_v200${lF zI@IdYlY5D?IMAH#mU(wr19P#%6f;lU$wa{3F#Ex8FQ*pCRh}KsLSE0U370d&U;o_# zW!$6HVYj)w1jHYlJfi{Psk34rYGrwjM`2Ch42G*{Ww5m%UJ@h%?m~S9!hn{*2Fv4C z-V<_>eH$*djfH$Ac!`21TqJ}6(^fMCjOoH`(!#Fgx*6sY-gWJ#ter2P;EVA(3n-2- z`OwM9f8odi<`jw4m~4wYQ4xeV1|Ux!2G)(X1B_o_ST5fZX5?$=>G*;SbBN%9JMJz_ z@X?RsF_(k=o8I>uYdybSu8Y0T*?`cVC$^tX?haLxj{4<9L&V}XTwhsxcpClF<+&QH zw&%QBUTE%X3R|@>Qvtm)DI2IpFS`z~Ey3m#h-*KdEEsOzNpwnlYXlkIW5|9=?_eq1 zBjYbS0_1z9WL-7AoPrytOAmkOPj1*nN51y8nmV);4RCnjKnY*fYzkEFQIhyR{qQ=o za{4e#Uv!>3TIjsd)~-}V4%4gl^mu4eyeP^8Zn28M78$QjJ%(8vc&!?ocE2)QWZlm_ znt?oO&z6)Yo}{FWt*>|K#Y1bY244*olKPCdxVIgUy=e}fdxhzfDkK)@b348PSBkWG z#Ih!O|CCY$)CxpN&MBUJDV{ zejq>Wimo-xfY6IcrFAq=Rv(KKpUyH>d?A`MF-wdQPj%{8MLsfros|dMxU`ZUv7|pW zweVk>h;XOvumd`V9c1U9tNfQ-_1KEyCI+NCG=GxjF~Y8NI6QLeMq5bGv(2XYmj{oV zoNi%Cq&_L0|I~cZ47Kx5l6O^9MjMEzqgyap=jHzi`s6S3oW}MK)?iQ!-Qu5a17&6J zVYZO(0w6hjA5Exl;LOpM+vwfYE&*i`RnpkGL~*0M-=4KN2G*-Dj5H;zC+GNg=iDLJ058C3FIJ?Xc2AHd7 z`Q&e2=QGghrfngkn^i}R*8-6)KW|dig4)-aIk}O0SbQ`r^P%48**6&i?A$AVODTM#bI3PWvR&ExeRI{l<`EK$c;$S@>|YhzYi+O9 z@wzE}H9^|ByXElAsk^z?N)Zp7TwY zO#SVfRm=g?F}GFS+j#wRm%%Pu*L4LWhRXQIMG@|_Q>DvAZL_bLT*r5z;o5S&90JWZ zh;w(h;k95(b7DV_x;nr0@|ACqyf_M)OCcn4Rq&GPU#$?JUr}4{c}Nc6>xv4cg1Aw{ zSq>_VAk_L@p&}y2aFakOqIUaLSHFj34Vs1uAn_D|XCLt)R~NDQF0KxpAB3{p7H34* z-BGT_o3S<5?i)5Oqch>3hO|e_hc_)3M`&B@gy2aMYRbS4+Lv76JCoGyZri|7IQ_XX zka#XbQhXZ}S$>tOZs5|6$qf?l*k}nQAh}A*{C_$dWWoFGMb~V8kieiOp(Vfyq7QiE zm@Gk~l~8?JLX@B(Z^FT(Wy%FRWvR=IS}QJq|GBJcJZSN*g`+idum0&XZJaWPFCS_A z4gS6!ca|XMucM5TsxQ!b06*4IzfUbH@lzKmCYGqA{T8Y2HkB)tN&c2*jla64-0&

dnqx&H`)SODDJOdb;cTL-K>OBP(i=35*9tFmcQZEC} zcM`8ZE~tG2ENh{zcT#S>SN~#jnf1GG1&f0C#r+dP$ePg5hhhr`;-)0q(}Vx+cJ;~K z{t)$O`lC+YL~nrb@V3hG+o!EE5e;bTtI4e^N+uH_8t8Ps^SC5>FjCnimOT3`EHa<5 z;UE&zZo3f~2j^Pd< z)VHjX4PsWLFGlZA%6jO5L8IfX=UEKhJ8J6$#E}br9MPvm%=%x~nn^DBn`uzQtzUT= zTMgo;)U_E-3vEKXQ}dUH`erl#JSiI89+0UdZO~$38zZ|+8@ic7I89&M_fB7H{K9CE z(#3U2di%PV2eextmqBt~O^8!M?P`()$}AX{)KrT2nBfNuL45qXqopfMh+EKlg#Y;H zApd5m8q9IoOxOc)Ldx`Ojv1i9o*f2hsSJ>9Y7;6y9D zlvL=TSZ$t>WLgwD<)j5#=yCSaM?mb=Zm8?+idDeQddQD9rk9sW`7YufW=F(q4TZd9 z`AT*7dK>Cc>~)Xg=g)Ia$ZhPsAuKbV0=yC0iE zwq~fLUf*m>=@>3T9`}~SO?%vN+W8k6dneISb-ZNsM1o}8(qj=A?3qq5`dBRu7d^b% z0+8ymIqpq}g}v`sci(r2MX*P*UGU&2R^x%!eMj6PxFtOfU}~Xh_dk`sHWQso7%H7}1Fx-stR>#axMLv4rG6 z00vpji$?V9d*z4FVMn%rx-i!$!J ztjo8)Pvw4aj$iqYcMUyDIe6+6cX(t-+~TOM?vqLOH)=P!j^b`g+Ru8lV!Y0HPRQn{ z8ye_u9)Aa~CnkbHLZ@m-EKBdr19;Ofal~XGPw28F}G^ws6~Jm z{V-v#g*+te5#8^_uwrPSYwG=X)#ut&Z6^;y7hhPWy?x z&j575@8GM{&vB$BmL}-MxbuAdf1Mz06K`~6OE12~avh?HDHQ9}lt~Z*wu0$INOBwh zQZndNP!Jsgf@f4#s1Ig)G4xUv3Mjh2*Ql9m`((sEBoNv!9zL+#`p!Lr!i>Z<%PjNM zX)`4~E{3X&RvJvr+e1L28gX;!CXdu+fRQc^ST|5lqh zG{=fS2d$gYh)1iy%XO(lUzuh5 z2t}h+-D#sK(i~!M^Us4@s}u4QV@}cjbOD#=@c=&AuF2Pr7H)3CxbgzlyvXwyPD6&Z z?47zs93o5;loOM#$`ek7i?kN(`hMV4qUAcg|Eyb8Etfo+A6ed$vtH4>Lfu22zkY55 z^Mc|C6E`AuT-B^Tej6tJ%`Xv%&JWm6lQl2Pfqb+?qO`KzMHVjgsmAqP5VfKc-|T02 zb$91}Px?w)-8sN@*H^#EuRI3LHvVxYzYtcWR}waE@E6_427 zpbES5XmNithx%3n)l<6}DxFvQ)>+RU(#HD}4VE36Xb0M=$nuL>^;tmjBjc0<2gKCL zvrw3|R|98BoKgqll&z(G+EKCX?Yz*Sm4j6>X^?GXLV8Pe&xZV8OIL@&vRm&}ajlQ< z@Jr5qCUnzh=t^0>Z(5|nl^booj1HM_GFaYBWDRApJogIx*Ryfm*N z2Ld_KM2h-X?cWog(J=tGi}>5jcAZB0CxY5RPj+91t}VRb;%dr>00fKsetvqn9LV05 z9?H^nvmg>Caib7JRNFe^uV{)7%_AC4rp*?%9O@yYMABRPg@pO~2$y{=GlYS>Khhs{ zVyPC;_r>(0VcMi+Z@y(uJ(*x;x!MT7Lr8I(#x$-U^-PBK1z@_1^fz6x4$Iw%$=QPsn8uWuVglC6Rc~IfoHMe04I5AN?ON;UNuqm!y zbSA)7(jAOGxjEvOEn!h>Orq94*=b|f=udR@;G=|Bd=n=r+Z5z-mgyuX8$29S_C2c9 z3G>_*AU?O#SdgUmhJ2g$BJ<3WyK~5AK;Hes*w6r@tiiWlV!78R3(=z<2N*`G=N0wf zvSvQ79i#Xd&%noP&408|!jiZo;$jb);O>}5jZn$8Zb_y)bBe8 zN(d00KDftEIqulHf4ElMe6aN4w`W43q7KN5c9pJVL6=4|s_j>$m0vVi4c+YeI&)uV zYP~r#BT={-+}H-4&J!_jSp6mb#_~N9V~lUh6u71EeN3qPLQNA~WESpZf#Z3l(E%CQ zb+kU`B=_(jW-wv&LiK&7JA(0*%(TTVJ@--RYU?|&jh5(PQXqb~kLrzxG>^B!`UG(Y-wK(nx9cnJKVqGGvnRp=?z_HMHEXB5Po_(K z(5jri;Fd!mT3HO$`-9bLKoZus)ExA@qEU_D{i7sLSrb)-I0XVa^m@}fb<`bpfp_HS zY}Sd*B|(L%?D)r$4x}RynWM*PCQP!FDgKJB_Vr3&;tvkU$eJw{MO4)NYNKQ~65c<+ ziuE{o@NL?jFdOl_j0GW!v+lER`XAQPljL-?Dx&u?Z==Lp0d{qTw}TCyrb!Nuqpwtd zL7eOrbSN{*%DvE6L)n};4T|Fh)3+}N1)Kc%&5l9RH749wcbFtG8*4+dnLwj@p|(Ra zw^pGnju}bC;yGH{(y$*IP`!{|qzo7!oz#6MAGct)Q4;!gP*R;S?KHdjZd-nv9MF-% zj^F3narsZnZSz{dj8lY_98=HJeQ+bPvm0u@u+;VFT4l84`#Z>h#yM$T>qmG!NxNC3 zE)gMSy#VMYlj1R@3UMTs0EzJIG<~%BpL>4f@-bd9X(`{bdDH|nd2{Y|{D`wu zmzqtzQWL=%Nc{beXjhf2IC$D`gtFla?bX~=KH}{xduE7aZ_(c?`$F2L%pWo9G|#;` zoQwO|g){XgWmxlCVYHzheIVLvJsHoDKlVRWtg?}}RHLtE>NY?y<1YWAE+=TFc-H|; zt&pI%zi7wN`~1;P=288A)aPMb#%}PbbXdtrj^#A|=UPLjx&nB2eFfYw@9mb& z#eLAIpdR8CCC1kPH>yAwN%pBn7iw`fs@agkB5D=aG=Uevv(&#ezu{-4px0GAUwpL6 zn~^Jv{t)eWD$Rv~Q`_XxM*&xZ0O7)9b(2fx*o3fA+2Wli0NIHDdU1T6Kw6a{UU4f8 z_VmL`MBiXk)NsW>$(G5AxMv1Uq52S+Q}?4t)qwz6?9il~SH|I+p4Am5YJPM?rqVAy zuYayrx=DIh;9&W~I#cXb&uCbfVoI8c9L(mf0OFZKUZ4j=UU@tt^H({6wRNg0MY?G_ zUS#RQ<;;PAu!QV*Nq)+IJ<5lm9Fdx$st{L5l6|L6Lv-_;hgAECj4H=y2v`wjIJ{tmH z=vD+|>;6)Pbjwj}ig(i*NBLzyQ=(L>nR8}Wq@4apofITwM9bzxsp$6UQQMkm2;C2b zPsdbk0gjkpT3E50E%LRdDyE_;RSi=6i8Gocd+o&xoPI4NS}7MZlUUkX!|`|o{3o}j z?}HsNq_>cns#W#=(|?whb^QMnipm;m?&iL_MGid^gRg$wy8rQdd!i%SiF~bsIY}zI zo%2QF7;KR6$F(VgT`kX+ym3I0yP{)%b-Tz!`DQ4R6R#H5(XX-lui zLle$gu_7_DOBPw+pCNd2{a2^*W~yq3S?r0z&$raS*xjG!hQ&@X{=-bvnoXQgn-$qk5FtHJK6Bk92Cf!JeDIOhQ> zB>*zk^Z9B*Fl;%95)G z?p-TJ4;be364cymFfMC8+)mnV*!6ISHa44*iM1DzSSFczPUw;Ij#eK&la<`SzWdRN z6;XUu|3}E}I1T6*@`5mf2h^?=kBD_{m$^G!xxK|t{KYcAT-#f~^VO8?`mUm?a*jIO zXxalWzS#~VLz{xyRn$`bhyU~{?!s|8 zC6&gBqfPzKj5vAXccKZyTKD3=-k6LINipxrY<_+pz1E6BX*$kt!*MNd+L$XmV6NF6 z{%6j+u3V2txFK3(ZgWoCl|cz(5K7B6RlZ6qGmpD@acfzYMbyW#N;ZLJOUfLBL)wgM!508=?XPBU6HGmZ<8@cZQH3_VSwQO7xkUwq zDHhA>l=t2pya)`-EgleGtk+S0G*T$V;~`c`Wb5MzlTs|bCU0Sf$|4cs6=7}!vN(

*MUj5gOboA3pbNB3XS}i+1o$pRt`$ldLEDCPF-b-Ei2`Z$qcct%b z;5-mag_}ExcOzz)Sxw`IEVCH89$H5*CtiQP-zmIo@><5ESc6^9%le0FxAo1W467GY z2=jg3KQ6vrBy({uqiXV`%D-tj`I zy)WA_o=Ju1`)~_=v~*1u=XFy9)U%H47()P5F+V}G62FS+8FTe4Z4QIx8Yw*ex67&jFqMhvg}}o(<2RTI@ma@-Zk!B8>1uO zc;r`->C%G9U8w%xWTBad^3^R6NKXbskm8#80IXr%%!W-e1swo+ zAL~VzRO52lc~f=q3`*aXlIIzG7Vzg3w`;e@_8u=dsIu)T&GCsC-NRwRbRbtfHN6%y zEmyHc(w=vb{AdcfFwPBWkm&WZgw+Y!`ioLOF2wz$Y{XLsHp20RX>Jl(YjjIA)R}H`k7&v09!8_QSW<awM>xHO}FQt309GEdJA{ri*lK`lat z%KY-K1d0$&#qv3w*<)XTOd>z9nVJ4rnYFUE9V_&F+&mNdUNE)HVE3@xf%qN#KQ6f$ zacL9X_tO@~yfKhFFI05&XO$2wEvd2NUSgQ4=o7;6DqZgnxWk6A+d7BC+&NR!%~BMyt*K^e*rbT;y+m4KkAmLA4^hdo?W<-+Q6`@`=JYZ2 z-0>c67iP@LgCRL!_!m`558zzL^#cQK9Ncao^%nT?!#T#^kH`!)qXJ7_R)5 zO7QII{PHPh>IG1qD5H@Rr3id%=HgH|wk3yE`z3_YF?N?5m{`>u=1Uz)k!vW{s+@m_ ztt5BH_oi~{V-pr@Eg#M%YIxY1C=xrO^&O}01+8<6t#O5hB)q}U11}z}-1W10%HbaO z8zeK#XN)O+hLIai4Pd-+rc(<|G|&>yQpKT*AMO3`d`~GEUx2}vw@J~td7#j>OWauw=ir{j@gKJE)0hm$ZhyYs;*X6i39&lkhmGI1RT_{!ZyM+Su+P&!0SYraoT49_Ct>xDn;k;hmhii0g32vli`X^;5s%D6b} z&I;c-$w;r4oZiRv;a&-`yH~h__qiK39O0(1&=P=QM6T8e%v3_1~=YTcI^DixiK zjyIWv6Mbse&`Jpk*^7FxXqcx9shjz1-ssute7QPliBq26%&@p({mNgjO&DyhR2u!W z30CO7;{w}VhT%U%s9fDDz&IuJ?nJN-~_CpTdCJ^d;uxjID1<>0(1TxQ{$xxT9T@`s)Vf+5`Kz#Ydy?uVosk{{N!O- z1oW~WUK*Vx9FAt;Zr-rR%BR&?-S^)SB4DQ@?nnJ8M(oAA7>3OW*)o`8osh*WU|qvkO#yPbnW6p5rQq_dRK z%d47dM}PtsL5MM2U*ULb2q)bZc6mHlbXxP$nF zIA6MHiy$z03aBM1C#L)Veh87ci>STz4O9?5sx-wv%ljEn4PgO)Mstjs&WLhWHIz8-#EPpQ1Wa5ECx zmOrF}Vg@%D2;Pv~ALu&By;YD3@cXvTZKU6qO<(6-^OG0@e}H(fn6t)gDkm!_zSD3T z*0k-YHHNAz?oiIodgSgggwB;BT6P894EFmbT;if!IT{Rp zq+Z)rWcsXGwQP9PeGd9l=^_&Kn&jF~k*#8%)b|bOgFAnX1GBu`u>&v2(Jbece8pum zIpzlE=6O$i$jc+0(#6?P)_E~Yq+)DU@V&hG-;k%wH<<9~k&TI^wKmb~WloMyGckkp zJ@QVap5+l%{jq?Tw4T?(_Jz(7dscfXw730;Y7mRbZ2ZGYY0E9;#47&w4Iy&hyhp1uYGl5XOev*zC5$& zK*nCo@3SlPr0PbR9OZu4w=E>MeiS3SJA4*FCP7*%mPTFdLLRxT`);kv9~xz=Qt@?M zF;7<9=W>WS9(ZhnPwkz}247Bob+%0Ea8nQr9FIYgf8KA2jElLJPT!U+IdvbZ;zmo; zl`g0E%VtGauTPe&C{#IXUUP741(Dm!Ts<@MACECTa9OSbg{TPkDU-!3$utuV%Qe5P zUSsd*+`rTB%B|A1jc-*qN9U+@z*je6ZAuk?avQwGvnNTWo><^`dzoBsye@@KKz7v4pjIa*>=k~~z+mCbtc0wLZl@a><6&^^$nqeQS{KY10074z(y7m`t_DVfT*xSpb=?z=vxc zDdz*rRfi{Ul!>04o2LgpoOCYFd%gI6EAM`}Lr;7`hC;1JpM1-_tbatcwvjwRXO4sWZfH;eB)RNMm{^HY(L{UhOp-IJXYY1GQ+JgqelD^HXkgPX zYquD({g81F@;pSPt_iT#=uH;Q38|Z$D6!PX>(+fa-G7&xg1*kHInwA_pfH~=k496? z^6O7I1Emg+hz+-GGLTFJF$y-<8%gHYIyRe(&jT41(Eg`P#IqCB&3JcnJ^KV(WHUD(;LH#s^L<$$n|64;B$s++-!C z{O}PpQt6KuEWz#J4a*zo+5FCXS&|(5l21sLQ1t@uD+UHieEc;ut=ueL^)7gVAFQrs z{uBUZI&b8A!)8}E51#j{#>?znJ-<0{@&2GBdFa4e;nbrV*!g^$?QH(B8TS)noA{E} z$HRUX5|xK}8-x5-Ic$53<3x%S;4(vLxmn6l-3kj?#^g7;>Z6g17Yz);cKh4w2YBxI z=8LFk>;1qr+tH+Lxa`nq+KioKisarnEF3v@rMgl)ZGM`J{T^5l*pung*J4FYgw%OQPUv}#r2u?7hW`klSw zB3zoo3>yzF(^QCiFf_LM6uf%bTBq_a^D-2$VuWu?eRT@)!LT9(5ce;BV$yJOl7-S< z8n9KP6J3btmYosCZ4xMUI`KN*lIC+JIq6_f$0V!j(h|{Oeam~&1Lr1pdDjbu>GB2t ziwZr+1)I>rDfz~WF0(7-S*(qV|NQ(jvl4{=Wp^-Lz}BnARQa7UQnPkia4Qg39#QEl zHDJX8f0Hk$sAst|%EF9vZ!$VjxJlnQG7+tXRL86LO&L5MJsEq`=JSTKMeJ4qY)ZLS z@vV`o{2(!eur zn?->Z3r$wFGv(;++^>U{wx|teaR?>sNR;E!<&dQBV>fFaz|Fx6_Xq*TbLMr3J;yxJUDS(aYt zz0vcLgYB~i-}}Pv38T`w1ID!dwdX}BTXH~()+Vd>?6|-t)1ph5KUO4I7EM6s?*nUF z4w+Jui{%>DRPt9UJqo|GMjQA=GP zg!I?}M`5rHTq$b2mhB{AJbFC0 z=kJ-@TrXc>#(lH@d7?-^9vb#3_-8Jqt@9+~#OZ?i@_(Nxu$W_i96oMECGNfcO)BZv zcz(d{IqogY z&LdX&sX*GG4l(TYq4O~5Nap3f^qbrnUC4^TwLXg$y}*sI>yZdkEM$R^s3KLuz6TD9 z&w*X^Ywm^&H#}FN0mPgZoev`vB=fCo%KzRMvm8!wEEdK3G7ROTX8GhP+HQ)u-vByK zpL4nl$;oIXL8bl)KmK*i-O@7}n9lGFW&}Gqhr3U7G+?ZO1%D-!qr-lTf{Rn#xZdOM z&XAtf75w}_jHOr0I`k$S`ZDJ;%dHtDfx|fz(4<_Pm1QQcB6&=k3m!GO76&HANjXmc z8F6pPcwCg8>M<1Fb|lup#Kt);{akU?r8d=`f??&Hr!rJ~?_W2g*5aOb9q%^8s4J>E zn~@_s1cexnG=@ZZD>&tpy;A3Qu-t<;9!R$NzDPJ|AsuX^BxMAk-COFH$RxExo^v$) z`2W>)(Y-2{|BJ56|6g={{_Q!#4Z7a)xMtRFF{bK2==zh!>V@|`BLFc8shypyN{2|4LH7XYQ3VQqeEz-B7+;0)u_~A2c z>N7-lMM3~6o}>+k5ROFkKwHZd4-s?l7-rS7@aZxR*NzoH`R5cQHNdYchSJ z<<_0)>rnNVWk{!MYPNYKziAKfg)o)!eW$Wk7&mv8{4*>4MH0L ze(R7|Q!MG5E6csy!kZ{PtEwO2Rn1vhqOy#-5v`TwL1?;|`ffE2g=X?P+Ca z84?+P+_5)@ZR4ghGtbz0-m<|*AmeC%7&kDLm`3buu^U;gzl1(=(PLMAAm6ZA=zeTw zaR{xxz~0Ku??a}Ix@OIo8=w>We*CPPrSUXs^Undb6{?=nP-V{aC7`D0{4e~n_Yp}E za^Py@sZJF*NfFbjW)dy}Kj6F`3h&@odww(R^_NdvJy3?a~lfq zdG~!&CUcc&%WF~kwb&KBg+!1<u|%lc=Vt z`{4v!P0MXov!g|0mvL>^lB2B4u#kzSaDJpFd@-ppz|N^C0-}^pL{Vi5 zf(VGfoj018?KP*)k|NlLm^Qa=)5TS;nV*qsfuD9Tb5Hrrk4nw?-xU8E>G}v3k-u;i z*A?F0(-OJO1--RT+}pG zTVhPkvKPVmGqMY$pJRB z&Y$MqJGWb*X$>d+&Ep`I2)oM?^TIe3PO*;aq!d1TC$jDZsqQ5b-nH@XSo2ILT4iav zrlX6rw=4L)0~vCrAf53cz$baYowb4EpSNjvBi|i-AgL#;^hk>_pVs;sBTt8^-Sk+P?by)R<^BFB<_GnEX#^d>#Sosn z9_fdrE@Xk*n;mQ>PD-&V2-gkdg^qpXHvM`u)odu_OLjI#b=+h zkE0^K+0g#5k51)P%TKGI%Ufw3yM8ClKc+Wq&dcPB8|*u z>62k~swOq%`>{KBhPB(}5!fkdsF$J&dg}Td{3~X$ zq{m4NnWlq(Yf7%@OwdeIp(_%q0a>Ga6?-(jI)EY6NnIu<8)CB<%hRnK!_xZ1a zFw3U8+P`{x(7MQEWVY>nxKaW~eA$Okw|4ltAWZ;Uh!o%J`6UQuT>$9&((KE%KJ-jq z1diJUnSEK5Z)>D&`bMj8ltBRdZmPkMn-)+&?2&>L-QqoCq%F@rTFT_`#1V~_pVD{+ zmo+ITN;M4pt8~K2bz-FYrMSzkG<}te@Gs0xI>~7337bv*}}7VTw|N*Rj11(SL;Hw1L#GuruD6eY1l7d zx+pz<{zrf}!<78M3FuShp*K$dfbR#*W4>kK*Np#1fSzki8pc_4zu0$sLg0}b7KPZQG8|iY67)ePz$yazXH+kY0kjYJQ|BQN zwSnE(U=X>-Qw9>lAHJ{daL9iV`9~M4Og9KAp8l}&yoofe+ zNNFI82!hMG(4GR1B5iwWo?jy8)ESElJM`Q~Pg=NfY@n9=6Jv&{0Rjil6aqA}w`8ms zZP>B?w+a7igm&H;pP*&TjE&>)`9E~s_amEc{5E{6MHNNukrt(`)}A$@)f%;0YL6&t z6ty=AwW>C?SJ6_n_ZE8;vBloR9*L1iB#+Piz3*rI@cau&uAJv}p2z!j)RV1HwlWGC z8zJwkVx7PjvwmGgO1z3x3d+1`tq_?%@|U!2YE@Je#}95NF3vDBwO^Yk?tj-Do;ZL1 zuRe(|Pu}_s*3f>n#J!KGp7~3jiR#Tf)h$599pdUr3Ouh;%*)vLi?RIC$#X#T+6!hs zzkV;PC)U)KsP%2sgqvWKo;s~lix)?fGyr-5vTH*04kuSI&d8!61gp~yK-2MzcI3yk(^6oftLsOcjS_{>A z-Y0fn7^LO9Wi4eipVKV2)Sq)G8+m-GI?j`sVKRC#{#7RT08+V{q`Mf|l4?;Z$$Zj! zZ`~p1Z?%ZxseZg&w$wKj>S{{7gX%UyYvM|#0 z+|r|Op1bZ?9@u+}JxkzQ7Gvb;9;TS>US(3m)<@eY3zUt*wJ0CQ{kEBji?iPf0`uxtGh+-|rCg6*t%I*uNZHA36_8U^1@GcmI>%V{Rn)(f^kO|JLj>2e3}DmuzWmC43@g)bRy8@c#kH(0!u|5h|NQOtO1GL{)&aC^LPKTCD$1s@fj2%^-j~!w;u{aSyg}B1-<*#G0vx<;QH)^H zTw6@Tiglk-x5>)Y3}O(E`ryLz>Czt>jqSZXJvpCytQ3QP9S2hV zE&e6Xyn4KJY%`3=>fmB{O;;m+k)SUWx~>465FR}rgo?jU4{pKqbKY2h{Kvx~CK-tx zg234wJ}8x4p}a2PU%LO=6jBW3R(u1+i*b+1(oD`?rDt-t$1G-d^%Ih?jo>}P^fHym zvVKWlJF*J#?dji_+^hm2RAil0$43QBlarKBj_~OmbUQaO37gU7K82@$=C~6leEF|E zN3){dik4$}0hr&rPI>}w(kmU_kIl~U8_M{gX0`-pP*XQ?wh9{>K+HZ$?2748SnxYX z#D<(CojH0|@z}&Rtg!ID`<4{LYvoZ-cy?yne@=WhFm@_2t0oZ9P!@=8DABl~;`a|K zSOh#rX~^gNE-(oy(pUR#n=bcT%i;8svn++bg&${Jn#QRLnazU1e?WP}O)e)rK!IljF zF!syE+Qf+0d$rkr=*Wq`$+cG{iDBn3A>Lq*54=!Dp8KBKY<+K^x{H@E-f41tRH5h5 zX$!Wr^ZGEk@4xFs+xBDMH!{*u0sEa=*!z9>Yd0`Wu6!4)%E-&P6tw0@K5%+2VdTs@gM#-x*{8gg<}3mUDW@&@Xo#g<87SF+z)jVS0{I> z)T~4d9W9Wtv_Agn-#i4OGd2=5mJ?E;l_kbMzTB#0r6Apw@R}SF`%jGbBo^&hr}z0n z=xVlMjz`tG8AG0m&Mqpk4w{v2wW=Tm4gu9e1{APmSZGzsFa}P4pX-C%r zuSq=A*UwCNGlP8*^?f17l*eficFdbPuZrDBJgk<9yZ!7+$J7ILukMX*)$mytp_ z2V&4+32tnV7Skd9-gB#huLg6zMkHm3m`V(G*rJDF);iZRUmo=-EfC`q93d_WwF|8a zvjVlG-ZuyDciLQqDjmU8id?*}0&XJs?!E-<3V}pV0f-jDbqNK4dt_(K$jw7(0ye#K zn{ku<$W@pa+>dE8iPbA-`mDI4I{5>w)5S)??GfL2c6LBFugx&A*vlE&^5Mu+%7{Q0 z2}3Duz!?J~Dc?>sq&5U|FKFd;(V@2K>jVC~u!2{L6+rURsEf6h>WJeQc1h+BEaNrB z8GFC=fB8=LFM6CO_dBi}40%a9ecOoP^aozo%{9139^<->jZ$U~llH5)II1eM8{AKp z5j|-$f%+3VCm)kaU13D^0_lbml|*->IR>^Ff|Oh%Qmjb(`G$XfaSVXT)=!V5esWPG z`e@^`lIFz_WbHMqmLj*Si=;3xV?7Ont`E_=)DC*y50VPGYxYUIDYf89{G|P|v~RfO ziaoO&(IxE{UEbY2R`osevHO(Q*dn_w)-Kr;-F0et-6&sqKq^dfnA|I(eejIgdG&ut?3{)^3$X5!=4=zTB0! zo6b2zkuqtCmdn*R60ebtv~_{Xs?(XZBuQCa%KoNY4>|0}r+!KAux}|shbLguJOgQ{ z2iqV0gwS&YPeH!1*Dy8%YqPAr6cX@h*WM8HV>kPZUs1SavH76l4BwMySxg+ofy7dU zpT?hmf*qq1s(8it*w|`n>6Xw2li}oJ=f2AUV`%E6LJ@Q+1ck`WXPxq83gTQlvBHi5 zF;Py@GG5ab}IsH6D#v1Zu}%!F6`%t;bJakN%9ddP+07ypt;_ zoLYxmANLE8tD8 zyEJc3RDQ?bPtI)^cU$z&Y}e^r%>ui8sM18IbnVyvZ(&}FX2~VXf39G%k7JjSvi~+; z*J<8IhSbD_(RM4z5IG0ygg^^YzCSV~8*hg(B<3d=`D==00P3`IH030fWd+RGa5 z7Ud)LZDpP1?e1sSFx6xQ_#SohV-@!K1~}1DOmq~!V>K| z=i-P{0vZ{Rl)z3sV60UVYhr&=D0$-*Oa_0jfvB zEGGFzmmmF4m-kq~^?vrkuMY~b7wxl{=;jig-W=DLl6ph&goiD8v~yl)_0ywh1#78u z;sqH9RmUi9cvOz)e7)u7xSoJSE?>4^_A}3z6?5kAe_)xRNPlw>uXM(M^3P$$J*J>IMn%V9L1)6Tw zJa2+GEO z{q(WSf&B1p>=pj`;?z&iBZoO2D^p=Bzt8g7uFXP41s6Zq^A{d;e&{z9!vY|k>a(#Y zJ1g;WaW~mH#{k0|V`W#^FLjB%)P7(3OU5^CZjjF2Os@JkXTwpndc0?Ypsu(>pSeNpJJt zL*$S~lJlJ(2HEdjvu#|F0xb`sG#JKe8(6_upRf=et;v}ib^d&ru6ZwaQWI7}b2eIh z@NL_`YUxJD|MKVs|9gQ+Q?Tc)KZPUr+`-ie+q+yH{(p!CsM$^nuR2!?v}37nw}2m; z!7m(1Qqb-C1d7KK8EEdw5-#65X!<8c(blXaJ72fivo>U7$=4%MK-6sXt4;DYH4RyEpzBzRrX)i9qesC0)A_>Z;Q{T<1 z{8GU@ogA;yylNwkl94jbl1Oz( zh3pDIyiDwNf0a5vO0GB^-fi0$8D|&%wKNn+dP3|TEw>+oECl!S(C?m=jIYyg%p1Ub z)8~|sw~_>KM{zO|8ibj7GU9S`3B8S+CV}Ul&E}b!gItgb_abuhE3@kgp&MU05lQ94^0h%72l(9m;V-WjJHWH16b?TEf&Whz-h*=$Pp z-Xb@>plC7bSW$Y*Hz$-q`RDZ@NAQgE`NgkW6xF*`cLt9x@fB36$xo`U4>`8i0aAN^ z1Jr_yFlH9j(N`HW>EU9xQfxB8sKlXh3|F1oN8``&0 zTFlHDcpn45juY4lVH7reKCI&HmVZq6Oho#Lx~sjX3Oq!VxAvQ_w}eLyh=JThiN*_v zzGo|Z^u3fm+%5$FbUYY>jlNrmDp6M?xW9o#CGIw$x#H-$SfN9G$=8e9vXHtPLKWNgGoL`m=ela^m-*(h>; zrJ{NM%S-=ISK)nT-RIKWXZ4!Y|NQrs%}lR^BuVCmMA(nHcto$=^9sr|Zz8aa0zhBo z3HmcuavV&&mp4Fb?VitF3ze%kVrEruQk@*_5<;UMKM3EpAlg{vMr@9npDyPB-q8_n zG^BHW1nINOSJ+foC5V?Ca?Cy3jVr2Rw@5vp}^Qb(v?#(t%xLLv0C6;R4-R5Y=QYp+CGBX1J zd|8M6OlJ`sjf#bcbC&R`QYVR-(5{3Eb4slUB!SM;@SRG8o%e2!vQ#!h-{FSQ*!1NZ;$);`7?2ckoF6QCrBb+uV^;#ZKSBaux@dBVSBdHRPvs>DoE_K; zcf?RBe^_?!q>T)oB=I+wpblTW7#U7~yn+cED!pR9-L~45E$_pFewYAaUhtP(rVJe) zo_8Mhd#^wGyDDWc{ct`5nHsliD(O)L-t(eJr563<^IQxgVI@_#+SGS@)JyVCOQUcB zOuJ>b!C)s-A1NT?zS2}QbHG(s&u4xSo5HZVVra_+eQ#Bi|GrZD{fOhzb!tAmU_WP` zoZ+1f;uqP|pWk|=#`mwx5EdOGtJ;2}gW5r9J6+lC4jMTQU|=@09ez5YT7KY~n|pR&!{34Wsp5hM z+H9yESTiXb@n9HsY)z$HKGx*SpKWa5%aFw5;a<7+>tU&QQ1obamrZni;ExiiS0i)g z3qnN>4YTnhDvO)L_C!Q$Nz%<~+ooNcWaqfm5fh|47^!>{n6BGyV->wi)9^kZ(-gv1 zi5scxH*_{TsC+#6PawQJpyuK$GP_WViOtw1H+{)Jlv3?Mn{~O3pGF5JJL{i@3o4Kh z0sV42;A1w`c>7)^>z5m~23B(OqWyye^IU1hp?uC5b4Mrna`weR`gIjCoa{BRWoV*+ z!psGGNtizRMWW@v?yJ{#gD9}kavach*RGRt0rP5Y>vb1#Rl1sus+D8oQMVfx>d-X z^8N~{20lKA7)2vlm9Wzx{Zm6Zao~*;X~G>5z_}_r@?E@^P&z`ea_k2JU>6$1m=_kNk$(ehVSXLu39MOL8Yd)7EMiZpU112MBocs$i<`M!Q<=YV>A3!1>x$^sDJ7S$ctP7eZh}9 z=tZS)HC~k>ZYIRT<05@&)C+1)P;=7qYpcEMHXStwwxh=yw!WtwJO zt=x%G8O`^Bk*m_p60KAPn4 zqRM`e`px+ZUHvZ8Y3a1nvf10r!Z|i$I`T+)xHNyWiBo-@Hc}D9aHQ^eLXn6P>!owR$q|)6;Tfg4Q(8^0o$oQF#a{z>ydiL<0Eq~v`mTgi=t1XVFTB&xDFiKMg_GITuQtNJJAi~&v3Xr;^gdor`! z6@6*gS6-NY!{)I|49xS9J zQsW(?fU|DfqrgEwibQPDv|TyQAn-Y`apCM&R&Dw%u{K5i%&0&H3xaMTRfm%ZS>@VY zuMxCps|w{95K8GcbDR+r8|ps7Eh1$>`puI^H?6oaJ2Bs8p!4aakb-b===JfIC6eo{`uPxZG*@HkcE^%{i_UcS%Bc^5-kNV zGwaEYFkHhAxzAaIcnxpz$VZotte4k4FORQN-*+Sy?A|(h)Fy{KRS5h8gt?T;umwk! zUhZfnt`!Bn=9YJ565A1RK78VSfI&G|ev+Pc+21dIJOA_^^^3+oug?7h56C|R4wvB8 z7#umk;qu(tZ!E%ReIGjGx-|>~)Pu&O3^DBl9!uEHeU$+gvhaOhm;D>fp0vnzQ2u=* zIObxPTofCV3A8#5i>>fz347kwH}*1|%q8Zf_O%nF3QHsS^+9X!j>+NF3NF29xn!}j zAV{|9AKRAEj0ua~%}uE6hrP5b-MI@DzzEF~&nGntN3DMHk^7@^TFCuRxq`z21Ur;_ zb=)a6(UXqJ%HB6Y@2<$LQFLF*hRrr{b4i&pOc{>=az( zZx>Xw%as$jI|vdg0!nNy^p=NfBm318$M`yfC*(l!bHCjaTSw#1D|X^XSgCZTu=6UH zsG{JbM2W`NQnU0g;{Nc%Xft}w)&uVhV2JNSZ7YpKY|vI3BtGlY=bOw;ln>oFb0t!k zZAt%g?KkBAbM5u?ZB=(-Co-5#g8MrBG?x0Q*}UVI;E}&o2IE#eeqx>RGvzXvxMA^J zW){>70V=SbQEj)+9t(v;+CIG`WCf}lW(o$`I!ngO&A1r%h8$k!(JK_KHmseVCgeT- z!;?7EYzcA4UiPbzSaR*JThU-h_^m2~_)REB0c;dvYr z%1x}`Ki<=@OJAGa6Y9edb1Dj*BR)5HNC8bb8?n=SwD9YIG;eoreZY20%jHE?T;KsR z6N<@PIHfoKFSBmm<>+0E|LwiH3u!e~z(Mdex!1_q-w~Fqh?3D{aJcU9XgpY0_tK}l zyWYKd&d}D%(C&W8T&_#B5bb{F$-5lfFy^&4u*Ww07tifR+KT5|?Jo36lf}1({ALHo zsfQIf$V(Emv&%6wrRtVON6M>C)}vKltTGvs#lDPA>2L-dQc7O$Uo8qq&i9ntJeBnu zCtZD!<*;7Ab?*4E+V?QvAup8s?#~|Ni_c;)FWmb4Nb9xyV+KxNOqc}BD5`3=FN2>e zc~V!ogI@v+g&LfHh&D-)_VMNFtsQ&%Wws-tzbU;`W_Sa{e&VBmH+l)Us}HJQ|A=klCRE3T3(yE;u|a$_^?P~{6#c${KAfcWw=-MVb=q`Js` zB*xPVS%TcCgVnpOf*fikQeqD-UTTrd*tqwR$z^7bp&tW7%xU!k4(2kt2LaXf) zD(VAwokggu+W4|^khCqJLWuA%voYp_l&}9A(Rv$7-msGB#`1pHCw_f}s#!Q{;zKQ> zPe=bjMh0i5rhb28Xw0&FKKy;2z6M-~$9<37Dl02oR=TCqYJJv#WITM+-e{+9JCJEV%-t>_^4H$T6^Y*U1@25H`2EN>y4vf-z>hSKAG6Ve{0t$|(A z(uNm#5<=C@J&_9{RRY636_x7AKa->Pv~j>f$iSDfl7{Xak6t-IykMa zy1xDRuS3J)RJhM}XZgSFu7qj-f!WnEwANj@kTyv`O;t=Sd~`GIIx^2nNa5^jS_+4! ziR`~YEj8UtnO$hFLjNOHQnx4DqiiNHkC;S##9fy_B{%DXBhq{LbBED2?XEK=Ro6tT zt3HLlVj{1{9PyipE*q<5BOFlb{vwJwS$P=^@A9z?D*2`p(DZ(fTAr$9Zf9>58d#Nb{EX{M+HnV`2 zjMN>Ks<6l3>41wRh-%!nmgsk^c_x|tqrZKTXKu5rH?wlKSTp=)%#%SopssV-`R7K} zUAK3E%C`DwR0hsG!pH4zJjI==a)j_=fk5^_h3%xL&$>H0 zFi&>t!2%98?!6F5AR}dsuyK?L8k%*Yg7juuee8A>47fWY5SVhI*Dd09PhiGWFbjZ= zWn&OET&D^Dqt_vMpAxX502JQV1TVXRJ6=J};Rt2Bs?pKS+lnzcp01ixZ*!`vrDVxX zyhOIVoeregsR(%Z8Mn;Kj#KkK7^e6^i&nsSpQm%|Ww7&AjuCHo)r19Cv{P)j)uPyX zSFH0THP~e>iDazr1@nIA!w(c+L+O?HA0bQ7=R80BcBu$g;ogB%iX@8EUu#V-)-G1P zg`FQ6QYdF6$g($zLoz^&0@&l@1vhSdLNkH8-xX9a+^)+5h~ zmVhOA;L_GU6u%GOXK!C)Kkz?v0AXM0wAszJtmvQS*C9VWKXZUyIHZmSY>Qp_pW{q+ zem}t+IzzBqDv&c3ArK}Rgqh$CpsWtKsL5@^4d&tox190Y&Vn}tZa;kgKXG3Oh~xnx z=|7w-K54&y-e!u&VNZ_be0{IP{8(mCMzQ`}+mj+(+i~PlGT72VF%#embSFbMtm!%6 z1?|qG6ARcC4*gfilY&Zn&=90&ksC6j{`O=eDoAa4G?_>y7{(v)>}(xMVwF4N_6%Ft z9zgG^KW6H9ubt18PnL>=>)_OMqcj4;@ktMnmFu@XI0V5RfK2iDVrWaiRWTGAuvZ)h z!msT@Q?Db3igNM44zzbCi~9vZ_*nef9%hg5ZJsjr43@qF`kp&bSH@0LX-t>0^WfmG!yA%RVZhLmCmKx`Pr>W zadqM9r(rm_!{WJbJRN_fip z|JeL8_ub>fg?w4hs}lBJwG{bxN0^3X17FN_I8MZ*?`69n)%_7_1d1XW{tKHngXgld z^Qy+;S;`XH^CdExB6eFRw++>lT`zV)Yb9}3VC2=V?K!AgE+6vGWw^5GEGK+H^~gW4 zVE<|yiWJsW8I;>EY$nuKGimV4i6qOsB%luNY<@$*zXcMR1uv233ce8cw2S*b z4zP(!{`{T0F<@#b4hvfY+)1z}XjCY|0Deb3jb{7h7Sjo)nsH;UU_IgAB56Ce5lhXR zU{?aEcux#s`3|Rd^qTX3IDZCtAe+O+m!tu<8bg^`ocK?LnVP8K8ijfxnY>9}6v}o>cNcU%(^@T5 z;J?@A&~Z71al?CY!spC*t_uRZOCR;BIE{1N`h5Q7tBL=o!B=cYh+iU$KUdXn?dBPd z{%eZ3S~Y?1y60%c9IZ?j5jBWOaBDF!r`YekMfPM2DZISI44UhM$Sj=U^ffCFlb)RB zr)_LS-C{*%KWgeH)$RDMwBY!@=i|u!=UTM_wPF7Z@UZyh>34g8VNb<{i~`~>O*7mB zmErK4xn1Fl@^Q(=4(yv_W#e}-OBcB)olNJ?h?+YQKe_`-cJlps=>in9$;T6#@>=x2 z7V{Tth!ZEU!T<~NqKGfPUN`qN%tgFa7XR|^n){#OUf*o~+k)u|XkttwvfsE-?9bbh z+Qj^)^225wD6+6CWH!fV7MTv)yx3oV-$36tcWF#cosM$(3JpFzBBp{B$bDIhWme#o?lJMOO|akNwkrfIiUG znW(vb2vC@tl-fQ^-7|gIX-_Fqaj=h~$}FLYo?#p_U3=uS_2pWiEnllj$G;9~BLBva zT%ld#em>)MN1J$%M#Ue&#P8ZG1FC>@R`c(z=ty4XkHoL&q<_w=Nl+FN8Hr^$pf9$0 zI5c4667>Q$|F_I9{l8^?Ec)4Vf{Y1a?3Am*P0e#_#gojfdeR*o`93Cm_at7;X@5g) z--G`h!{G0=lCaRA*enc<*uSwbeEgqvHs1f9pVk)D`X(4LT2B32-DV3SGf8>Hqv*Hh zV<(vnD7yNbx=jz7=N#~8=#{3%Fj{S<5pl{mG?9@#&Zq5)KCfOzXEUtuia>mx*r{f) z2!M^Wzfvxm0scd7UY{$uvgcm%q1RWAaj;|4<WjOcjWcV%^oL&lC!}FJ$Q4|CQJE{a zth78<$?ca{@KRR9WX@YyN%SKPII`zSwFuF`TOTrYK!;>;i5-@nzMa0V6hgt)z5L@u-0 zCZrA-K=&Mk2pjt=pT}5z1=)qCaYdu81mrRBS|t@iCZvk)rr@A7(_1(C`K@Y>{n5YTpU1x|3z(FMK7ZW2DA7sM2&(;h^eGrQnYxuJ zu~w23w<0r6A0f5Rmxol360a!~J_!h}m6jW$ly)ATDp%a8q_Cz5gdK;{H$-cK9*B+2 zcz{1zZ}n(rhh*v;Jo1G#x1T*E@y+$!d_p+uT7S)2A7105wdLiPttyU2Q?D2;!9BK5 zk}^sDG1U_8DZP(6wqdccetvu$4#jJ$)XveK?{Pj$K0$W4;El8_meeWyF5i_Rx*Tfv zxu z!IKU=nxFlBR+`lY7o=fXqHY7lB@OwnlR$Jz-)LLk0{R1v@yr;MX)f;u%j}{2-2Q24 z{@X*jU+oT+s?^W9gYVHRGB$yvi*_!ODi1BIiOVkvgdu5fBCiFCv2;_(PIA_k#P%00 za=QR9Tvq|#8CpT(R~Ds={if->wk&&ua9Fl;IX2B0_~|ZGuz78{Y++jB&v#p-Ei1BZ z?eg7qz6Np$R#$_Pe+t zKx}G1wX{Pm(e9boIZn>FT;9H#+F8_Jm2Kc);7(F*Ykc+OlYW)}$MHn!Zvd~oOL>u& zW+Z?mRoJ03wlna%zG!IfJPiv8*KX$fr{9|0zV=nr?ccBe`%e3A(40cBm2>>2bc8#H zLZhF_r3QMDJz*+yz9gB&Lb>J=a*c_|&6+eo*X{RjJuCH`$2E7K+0~FxrM+kOryKzL! ze)m*2-scEk2apgD@wIkxDyv!9e*N(ZaS)aLVZzvPZ>PU7s|g|ar80?zv#rIm?6>gg z{P7&V>rS;36G?n#0{-TA&+)+!YMcYyzdwwjlzh?x#AHqGi5A%!H-lSj2@`5u)so~h z_vJmMNnAcxQTAc$S1Si&a_KiN-K8Ab5_6A^-#}{g^FcLl^-M7tFH_1himDRkTD8+6MkYvCMpp7HX^XAGLxI zd>%R+Bs9iws+$dI7N9YI>lj%CnUHwHf;R6Z9+!W+=Ss6&P0qjn`1K%TzT(ATaK48R z^B-w}xDIP#RphX{8RE6XO+>8{7ZO$eBOE#dD`8~Ud1kBi%cw}WZ0$K9-$-}ijy(e$ zQ6%37cu~6?aRtaAGA(1LNKU3`%e%p=+-4frN`%q_u3Hxb~QC1$!(x zXAj0NDk>9%t;jg{TK0Fu206SoP&mazLXI`6rjpl}U2YuF2-O76rPuK6JU}I#lgHP| zAl+ldH0YWA0GVu!>HpLcup!yK>7(R5VuWr3Tfa}mR{&f>Ggib;Rt-7aQxUgQw51RH z`%cnXMv|u6Unr1dC=e>Fod#w1Kg|T=^3FsB_R6!E>qrUcID(JwWy?ySFG6<3*Z05p z>l#%lXlJ#740onYs0FRyMpgnaodDcRX#18)`xYt@54%}$hg1}h30QCfQvc*asB8i4 zOt^4{yj&sbkWvje2?4Yw2X^iQaoxby0JwJ`oN7Dyf3>E8TsT1kQm<-bQ~kC}-P&0e z_l0_M-v^L(nJgnyhM4!+f1zKUMY;Cvj2|*z$VWYMerP9Mt5Hxf)M<)rEne^ayPe zn+(jrg{w}f-ZOw;O>V%eDuN?q6S*8mxY#<*!Hr$#YMWsZ<=YF;J;;D0d9(e#?v0dz z?;pi&ZJ7Zuy+Z_S@y$no9E=M*A`>F&1WE>=bMZ-_W9;T}Iwm=eV4F%n))C5%;Fsp@ z*CorpATP4|9U<$lY&|k#b6h8PJ}CS3iC)qYw$GA8*%U!-H|;g*TYTW^MU0<4^{N*JLEjy9=%wvD$U6F8=~v?SNYAq zzv)kkrV^@ueXdP&FMUB{YeUwW|9drt_)*Yz61w}Fg)H4~ng$<@Jd#S(+Q!I_8v7q# zV%v{Aie%NKE{=|`kL%!mGc|&Q>$YnM^wOqcCaM?$iZ+@#vL*L&X8aTK;kE`1=rn^W z(2}ny#i%Yz&f{0{;?urWL(3OSw^D&`-!5SLTk}NV)prnM2LA^H;Nvpt%Wn5*%$mF( z6!KB=rNba}rv^g*Wz|~4XRHx%;DtBZFMjUgM>pAY#X~_jTGb`)P}kOC{pjNIBtt0L zB1r%fDi!&|#al@SIx@)Rz!-$+IggIGP$brivii_X0@my8oZ4^H#j+ zQk$E$X7=}e@90ehBs-!dp;6st!~etRX1oHOtmMoA`^lhQHD+_t&xn&QNpav%J1zRV ztuessjK&sHEFr}$5=DGeeYh9a5X`dWOu~6LdO6V4r3DTw?!s^5H=*Wxj&cKfNbT-p&xOo}#5SbaZPkEb$w6DxI}O&P{XX&<|fDsG5X(#({vfH+)jr$E$vQ z_3>3CwzRVAe*;6FmF0a@23~6SlUl_O&jE(-8e*i*cfP~FrG(Mnx|zTYX>BCcXUTpy z68nI0_xbX@BG^po_@{eOp0o%P#ofeqQC*U3|6^)ZCC0AWZlM6ye&LRbeGvig-gU* zgo!6Nm{FgJ0e?q5jRlpkFdGkerlWE_PQGzjMw6Z@fzyoP+Tk{w&!i$mK(M!_K`}Bf znUN;NhlZ!*SgLl1^?{)>z24RPdo>>l8p=$};^FOmg#}51w}<|mwFLc@s@_x}%n8-; zWh04?wcgoI@_iGzsivc4jgGk9SbZjZKlm~(dCy4Zo={ULQO%=W`&54c#|^)7JFCy_ zdGV|79>2;yr?_`sEq=vI9?7E&DM&T+W-tUq>)HEZtJ&j$fz})GsjRQ^$EL+nbqMF6He_^s!(rKpMd8wO?`OY{_-aKDgR^IKe#F3tbWEKJK1A6 z8yZOF&T+E(kM{SuXV12u#envD#2g>ugG0zSZ4IA8^J)>v7los3AqlpFQ2=wL!N7F6VOf8cf^L9 zmGKWwT|{RSMtzsPIv-u(C%Li>E7E1FW`e6|-V6;nX3bo=mYb8B3H!^C-_GN7@On5P zp^y3|G)ANKvyU41Iw#SS!T=7yi>(&?81h7`#=rt{mWV zv;)wW?n5QzO=fxZLzg>C@vH{`r)B$rzyUP#J0`*pZiQqisp#mAxSI^bMfyJ@VNoRb0vx-Hg)5uXK50XO?e3cfal8E1zV5v$Q?nR1pY71GYs9HPb9T^ z8~Kt7D-Lgh+`YTb3fG7QMC{`FajnfEIiP)~8wxns@~aeD?A&TT$vTXQ0QDk&^=H!D zRP0sgO$OZiS$e)fPS))6=<@u^stp7T*oW?zT{@4DriO^_-sZ42@mTTM)eBwRwfAHC zdbFbQ1ygjm1@K+FxIMj0o6nTdqKT_*f4f>i13FyzjR3U=qC#?Z*+HDEYh?BrWaq~VvHam&N8}UZ4 zDne1z;U&6&ME5pL*IurSCQ<30iq6=!@s`JTA7N_bdJKe#=Ea!>1MqI7xyT5EKg!!Y z^4*S+qK~Xx$wQuB5T-o~gU`k@1&Ezm7SB75taV?|u|S*Na8C>jD+iQENQ z7LSddCRpq5I*-`xip`lP`FWqH3|!|Q`S!}UmKQu$;nLTdZ@Zc!x)OGHb)2CV`QR-d zmfRE(mp2*b+@v(j^Ag@24M#ArjG*&XU zLUH$bcUT8g2*F~qPDl3=GOc!@R-6&ha28vp)K!%B&IA#Q#`SwIiES>mjqb)--Hhm$ z+4tk=nj8N-#zq)5-23TS9?O$GDG2e_cC+f9Ml{?R6L;?eUgh-XP**ik0B?)bxx9T` zr|LJys*aANynAL>!2Ek{PzSjBelDes#eeq5U8Iin>xVHPI zu%?d}VyT@M;(t*6gJtiC_QhMkjT-FBzar=Z{Sub@auw%*rws=IiPDA)^FWyfV9BbM5~VI-?v=6bD%iI`+gqzaw&&$jAHG=U zq53J~Us&yJ&S;nVpoe_N4R2Fj=QGV}4Zg!Wq z?twDlKMq*CA9LU_uBW4NpY-$MK_o=!1bNxgJZSZi>;=;08sDKzgBdFGFY zNeTQ@1GWdOyWHL`zHY?70mlr*OCWfb{8sBGvp+7uY&{=vOPZF`S_xtPT|#Vcr;0lL zO5hPzI&O#Fd(gSZG2*($UBGi_DsQ0O^Vv*Q4Nz26C93c#r#s7?gUB2*R;TH=IhA`6 zFA{d0hAfOOqh7P^?;G)(%q1Tv{9gdiKrp|!fX} zxRO9*5}CPRvK|P-*qUsdI{a+6|E@mQKh!L}hM|sMx*>K z`e)hxQ=jt$4?pQObM_Cp$e@w<$lRPQ>SctfvMMgZ!->cAX=&|aqD3cMtcfIRf z+YkNF5BaMBe(I-wYP;;R%Z@ufpCWKPF95hRLO#O%^{;>Z_LQeQ<<6k{?C*d7`?q(# z^PT(jcSS)h^x)hB|Il}AMqWHH{Nica8q$+i%+b_A`IEeeI=B_62AjWXYh5yIi2>8aEFl>LFNN=za8a zAK3o!#&paxM!_v3bD|Y_i6xb>Q8M#2?fzk>D;Tj3rGdALTh`hoJ*0N#{RMY4ZVRHtg?COLERz>fZZKKoDW`wd`yd8mz;ZreEFOttKkbp@gCqDF^6wpi zopzhLWKe{(-iFBNVTmnWF{^-d%>yT7mP6LUF)~BYzdrn5GxyIT3zPjLEN%|e@yq5I zL={8Xjj$XpAWdMIOb225V7Led9T>CXjC&Dqm4mDh7ty^|{ zijv+k*u`ha(yeWe2xn{^Tb8;%NYBVyyqd^0?~b*~hvXDY<6M0CAe%YmM+S(prrcj; zG4_d;N0ae$GBxElq!&~(gRU|@&ISJ-6txV;WLY5 zrtZ0Ra;DDj8ToewaZqDaoz4lWu5YhA97Ksv%1Iv812~+EuuihFTxB~dhaxz5 z|5X1{mAQI!s4ge_XFfm+`U+Thok(Z=sdytoSFI{Ib6xy;mf}ms!hB5M>Yp#<|n-IrU0$SS5?q^FuZVu7ZU5K z|N4Xy^u#4!gR&gdYfizU(TiQ!OU}y#B~OajL}pBUavhB}+*^H0T0p9h>rz1S~xzD}FpZs6b`h!3CgN;uC;EC+x9Xw%w(M1;>FZ`IeyZZg= zr|RARB=?C=d}4d^o8NrQJdb8P6?r`EX-_*E{b{Rz@rz%4+T`}vfBo0nJKph*()CnRNg6(LcI%yW=)pF8jLdob7S$&CP4z5e8X=fwOC zmtD1;e-7VKsB`0_a{}GJDx&uceQVhcbuQxv0qvK+X8b*KV4x3m%k~%4q8W@9)t^?NcugF?vZ{m{p!2raEe=S1>F7f5b!Xp^h-zv@V zO>)SAi+9MySL@Cx+Qg~SDrQBif{h$s_46TFbyKLMYd0^+aCzB^OSAo zLX^%WGREe%f6fRDRV2)CVi8xlIUUou zVAlApCVR^zz&vQR;E!|c4_?g0pOiZn*I(z={*t@8-TjmO2XEq6?n1-GKXVbZOo>r! zt~D6y>46wr?)Q*m4sSz^b8d;B7;+x|4j-(caG*IEz&kuXIAj$k^}De z**~I>&L10NfEHPzyHJ?5f9Uad-6caq9P=W01ZO4}6O2ucS>%?{R{tV~rEG~G1MKtc zbxeo19#ox>v92>})80e1$m&%lX0K=baJ&8@a?QdzFY+z9b1=;Hr!VFm_3OUSFLJN@ zKk2bE5bLNni6UGd&!PhwjW?DB#YnKvg zEefD%|NgOZ^r=!y47B=jUPgqlxf5TEPRqaw)UplscU&zKKW7ksuakoJMSlM~X7H`+ z6nfphPLjx-n8n-=L@f`!z|FOhn*Nbl;)BpYue7>VrgFYTTXGc}7Yf%;7U0TTI^;e- ztBfwyC;s3=-wCwb9ooR!GOUa2IHi*s|K0=4oY&+SnOLA(3zg#!6xPX?m|@u0 zKl>6B0Sxkt4h=rBL`LVlsHJ4)_BWZ=kl}+(!!qYFOS_khuIOSfefyZh7|3GudF@WWWD9RsiM(a{9 z3f+WhPB4UWo(Z4$7&M$qL>;Lu_&$FzRn2f4(?PWC1Z;6~k(>aD@KgRuZpwmbBz|zc zwnr5pOATT=fr^P5Yv~3>);WJ*CJIYD%17%dg`n4K|KLcSmYlPRtj_NQmbGU)@kK_R z;jUgt=Um)yBohb&N;VScB+B2}mfR-yuNF+bj=x!5wBy&wMb7A442h~R>({yRF8@R4 z>anLDSFj&>aj`SzpjUNRCTEtSW==|Ni=NWZjQDm)SdRU57(+%7h8GODE-%}kPt3@0 z6bFor^&_A3CcpFl!ux) zM=hDoz5rlp#+fdjsqg+j)BApR=FhucpZe6No|1RbpNc#`{_&4*Klp<`xc%sl{^)l2 z@Zme9y!hgakNaKw<3FsUu)g-Suf0njgZ_$Fyy7T~cTN4OSDpA1Y9IaRM>n2)KH2f~ zr$7B8sr=5g`@fI8{ByaU^L5}I z+eL>i){6kX*_WKC`f{@8K9Pp^;wbZ5KK-ZLZAbWe0Up?jK~B5(nPI`!dgi}8{K}&+ z-Zk|#`WgVokb6Jen%BKNEKq#?3nn>z@^c^E-gCq9DImwwfV~*S;{^aPVqy-v1dVrp z_RZV#ulo<%jYsrg@@ZVp01 z;y7gDRQRN{_6m2P<(Hfa-+oe(k4FQ*6U=G|v@}l%R>eN|1~BXzHQ_V&PutUzLE7Y= z+c7jrKqQ56EUm%`hP^r0(>oHl>5Y^TZ7rtLPXD?U-D=S2Sep~sI{Ftb|DH;3O8Sbr z2rTa<82%yX-*enrp8F>{)~#D-Cs#>3J|tw|_-G_MJ|c4Fq_j7FF*sJ-@F{x7#~+$8 zOHAR*9NLPtt9JyavGlJAY>b|B#WE>dO5Db3p6An!LNg-UUw@3@iC&)M<&QD^afWvQ z#uk6}R`)#qbS(d}@5p0vj-t}QMC=Bc3zhu42a+3_xLCy^%Es7TYezvJ3M(vQK(Hf5 z{0pdQ&41)7a`P58`zKiUR7P|JZGXa`aLj-rJC?MiW5&n+uDPR{&UyA8Z7j^z!4J=v z5fgdLw&S7Um=VoYA|4GZ?+PA3BJ8?vdYAvX=N!^rnEN5sNPJ zrGM?0{`p)}BMh!Ddn)|Wc28mG`Wvdbdlh$jCLQsF9dk9n@f{wn;2gMR$1-Wccbw|& z65jO?(Y+o~oHmP8P~$wyUg_J%SedO8a?WOtqx3EfCaXEL3~NXeY280) z9ChYtbYoD*p8dl44R>aN+kebXp!CH9On$sriQztK4Ri9g)>L>WLd}()SxYVgoI)`4 zQPHDLr+aOcf{ocA+?_=n%ibp-F=Yqq#+Qswt>a(rnPgIJ<_$mV)~z$}fvbeESCaN| ztpFV_PZ}q@vm0gvD!~_v!%HxBx|>GYnsKn#ym1JYCI0bk&h$1q*-b;twY>$kG8B z;fn%$`y;ngbh`w;rZWLdf+i99r$*~!XWcq@sLA^Tk4hj66+0kdAjKk~bj;H~T=vz$ zv+Vp!-wF!@etTvu$LKuVpw<$z$0C}i^p4q>nw|C@d)(Oz8q_}m!O$!{PloiAHTlQh z^|Ky%o0mh^npoWj$Ln4aziUI+VLdArw!$V>ah4rZ&Szj?_^N>OxW40hUoQwabnYP= z6F-!W)1}qyFiCr)F~UoqSTm*AX8z_cf1#av=kF37plTulr5Tq5hQCZzp3jYY4Oaf% zQ6jTnormt9ag}G%fH&Mp#;m0SQTx!CiitYWEtR+A#)c6iHlUtMW;*KV@B*~xn%o@e zc1}PL`CXyzvJ2b$C-J-g!s9=PD+{=bw_|0$08~x%lz!U1o#Q)t4W_V~jCUM!LzA3% z!3q2B&^Z_QMa6mNKg94QM!uddDRpYhjQ+H^&H}y9trW%-4>>UI&?jGHZzTTcpI%_# z{eeGmNk9bH{i%4!`0IuZ-J`Btp8SWrhXdDwCiR-RW#=UfYcMdc_U2+HX!|wJK5b-P z#^980U;G7!*w~IuEC*!nBvILrxqXrtz#2|8?wy}YYrW>88QiR$qh{v-RfBM@99q?w z=67D5Cm`LJTE%Qk>1~{Vvo8Qpe?DKvUHMq@&zIUiAM4=b{_pK~{U5EbzyJHczwu-= zPw?K^;A;R*#rW)JKfAr*4R1Ihs_U-1ZhOyr-g81ecLsj-tMdfdo#9sdsrdN+M?LCM z8@DrQ{Kjwm#&+aLeZid_TGy1yScUe3g^u43D9|%{e)Hki#%GqZD;-Az9(vK2ZV$ca5j%eE_SR4R z`S$bI{qT14k(+kxr^DjQ?)x>{7b|xUC!7aUobAy^^^=yO%l^r_` zUY$d8ED5YC=UsT>1ZKh{Cz9X?fzxq(!?4!=MOiR-vCO_q+aTyh;palYgrIYTWXQw= zyA0NNwEKu}J@4-4k8`{$hfjsz9ki9;!hzUTMm_hR*9y{JySVrzKAFt^rS8hsQ!^yO zB*d8hmBlSc|H6rWcuUnec%N6{jwhS(FP|T{h-6^=YxLIA#LD;_Wcl z?H})iSqP<$CGotH!nnn6^s5YAf0gGT`%ay)urK|yjwtAJbnx;|+CqJ9lg50XBL&>U3iGIC{;&muWCorZx`$j^oB)5>KVilUya* zr>yp9|31&{ZhS9>mxNBH2-_b>&Yvn6!TNqpM(LtXB>RcWvm8vjZU6`w^?Q}YawLds zJMm>^-8aykE^=dgpJQBgV5IQGT$0x0tUs9(607|hRygH?4R`#S#wa@l&v7kj#&7$K zx@Iu7A;ac)i8c~LpMT=BQ=i%9?-}E6|F9$Lm~oRa`|$M&cz>tp|U=YNkROk&aWy6wzq)~bozKC6W!;V@lsHV%CZ)1%{cj9w3f zIG}OyLm8oYZLCOZjwvr}BqC{9%7J!A&fQ9;gG&Sh8S)90QRBzsG6`fP9Z8pd`p6*`+U%Wi+7 z6nxm*-7dXB5&OOV@r+a}#GW$oK8RWo<8^Ih< z%SO~%`e@=0z7dv%kN3o(-~sVKmP2$E(vu8L21yOdTu1NopKE^<~IC`yY)1?{kvw?_NN$PwSUEEoiUYv>l}ah5BJnK@=kqCM;J!0 z(}3v45sdtcqU5ZcFF-Ft23JW|4@@y6R{0+oFt+prx!F2U^;LTQ@#H_B2ylMA6CBwd za)kqoxlGFegBNT7NHsW5%sP~9LNMUtAIsR#;)ARoD~$BQFdLQ-O%NyhK!AWd-qVzQ zLX7AEIu`LN0ox>Z$mF9{Cn8%grVcrH{E4_z0IJ%5vVi~xCU|FHx!3kDoF@AVU~wEO z#?TVKj5Z;ckJHw2R?LF)%ai`R3#^~?&-*00XHZP9td=NN%ysIDN9~O)(l%x1_|6kK zy-3o<;(UdofU3qKo@Gl()qi1F#~V2@(%aTk!R)nZ<&z%Uxk81@DUa}#GuhDGN&`80 zfsW02*ibg8@ge$5AGCjFiCJ46hva5LhxDQM2DQ3Q5fmJaW#+_70d3!tKys+0oFaY# z$6pL^3pE1JKmF^rIEpdxHZ&fH#_iSFpu@>~m=DFo=vFdov^8k{rv>Q)3`r z{foC@-aqbzqPou1Z;V}$BsBNf0Mfab_&HnfaJhbYd2Nej;MhWiF%;xxs=^y%s}9nE z=LG?LJpeBVIR8A}sm+Uk4_W8hoCZK*#E(Vi&@noGa$rBfFDH-oM~Q+%bdBlSP!onj zZ0Re#GRFRRlY@_-V=JB4B4};{+F$b=_-AmwGOA}}0hCC7?UI&6IU zjy_|eKHfk3$0*0NyAOT-ViU1B=xb5~o^*QukSIg3`vn1UmM;FbQCHPw95&3x#vd{9 zWgu|b8-fkXc<28mpTTkPE@UflFnuHk*R0w35NDAa$4ubHR=&f>II>xWi>Yj9VGDpb zS^{C-o6GQ7cpV>#(sj!`JNpR$^yKqkoc;L!&x4a#CA{V}ui1X)XMX04DCnK~%YIe=XTRSP4e!1`+B?b*@;MbxydT7SA}>VXQxg6)e*8b567i`| zed?h04c)Q!%>YUG?(hEY?fbs(`&QLS$uE8BOSfBYx#grd&N|;c9XJ#3|8Du0+qX}= z{@DNPdESS@N4FG+v{R4zdvFba$f;Tr=P#P{?vZ_ zf9H73;j0xg4|vd7u8Yg{cN+PVpZk~XJ)eEs?)7aGoxuE!mwu}wbkC?1`L{mwpJq=^ zfbX7wUV8rJ`U;3E6-ph_1^zf+4xV-X>nvNJKG~@aJa&Bjf1~6)3^OGFGx>0kSpEuM z@gXf2>4y6%ml<2%+8@*K@uCjoZ39I7B#84b+4aYW6O?iR#~(1-M}3goqwU>4P!lk{ zuoDvvqdCw;&kk*FSq0qnj^FSt0({395736j*6s&$$8R^hTc7hkbAu)2cQ6QwVI?g& z{)Md+vOl6j_8uu)_*FsaZIe70#(o5;xD{u(0|bx0_Mah*vrF+EmwZf z9m{%1ZNxZ8aFTN9b6fE`&+Z3vAo!G3O6#?B{nM1}!4=kX_i@#=40+3;H+OnOn(O{a zH*)^aCq52?0y>gwjpa_D)Zo#JAo)vf0_n_8E+r%OAkvHKV+>+cKnvjK=9P)n36}16_oz*`@!CI{ou%2R`#8yyz6SJP)kip_w9 zbw?59>wls z2&^|b>mFdWZcWE&vm(bX46(TZ9v2{x#h$!LMSw13pTPdh;hf>`={A}fUP(z7uhwN9Xy!yFLHcf^jb^H zaT+=^b^~A-Jzio;EVuNp(qDDRsO=6OVn-}r0bB_N39;ws#a;r#^wbAf*-}$v>d25k zKiJ_{aQENqf=GwWVEPbPrG$kBGB^M{CwnOj!l}=MeQ}uf9EPF%T zzhO_Ev8~4jBpWQ9S9(*cZWHX?14k;}QG@U$kNPWw_l*60DuR={v#Eo9?VtW9mW^To z3_pbFB{e$Zg1CQ@QRn={&JkVsBX|1EZX^qCCWs6V*NA*7fIl5TF9P=0gy{+1d^(st z?MH6JAg{#le8cJZ1V}O!sQf*dz;^sYiXp@GA~_y)&HPh+FDl9dP@Va*=V`~3BfPmnlY@ATK#O4zl|Q<9DfKiN<* zc$d9@n9$3>4SB?@HF%!X4-pGAem}qEJM?k=CKiF;=Wjch)aF=OCB9=si*M=?K=H?wl)DhxEKIgxiTH={Ice{_I=!JDet(DalbUh@~=VlUe>X^E$j*u|oneuiAhC`0d7J^JzwjFU2ZF40 zr04Q+{ms?0&6BIK_61|R4&+pEM;%FN$v?FKWvqF{U4{hI>e3(Q^g<3|$8OM$jHc3!aj~{n&+L!NK&bqy?7WIKc|zuzS5^Wkk&z4anX`Fk zAKTyVcF4Jkb4YN{?rp!stdQfJWNmPn;%_b&ki1C6DK$#4b?o*@7AWQ8vcSTXr0nMN zAE~egSmxlqqSCFgp3!OS%D`esjs)!eYXYsYcOoXxp@y9D`>nO)co(M%KojrGcqONb zS$6B~jg&EdFIrJEF&I6&Pf=O7Wa_o!JI{cK@933pH#&SeO3!GF7o~$R`CIEle$Q$x z9KRdrIxb9!X~vS%=w& z`;L#EVgYY`@kmB@d-ImP{TI@tLqboU;x&Y$;O_0y{20!{s$ThUubUcvID*yP;xN8kREn-`sK zjm;dK9#*PFf#o$WIY`kYsj#?KV-3mtszqj`;w zzw7MSGHQ&yA~14vh0&t>4Vn9A0dD?bXa82;6{B^LVkar`n!jg6G19uk4aWBgm^Jp_ z|3p8I`E?If$-c{hT7&0a_&?I09OX}q;%fsg$dkT23Cu^lYtNBe-&f`S2k-1fr8&V}OY3yHVIC2h?Gae(A1%s~j zi@FJRRL;|NhHv-$P)l+)pK#q%5_MJds$}=8de(SnQv3vNe|&LFpS&pd=;)zyfnNUI z=l16be}7$=p71}!<3K&W@Z$=7f&@wX_umOR%xFmaJEH9TuD8r=7yKPJHqvj{wm$g} z*iZgTFa|sVcoP6Hrv*tfKKA+h$yW>nd5#!w-yZp-H*HUS&d+Wa^5j2Uoj~(;PkT-P z$F^vkq`kh4>v=8CT;$P12{Jl%%itR8*#;d7p9W+Jo&Bi+9HVh1wjQn#OUmXRI^n^h zH^qX9K}Lr3;26w1@loJxf^an!)rcjf<7-}ZtGi`8C5|~!!oxu}=DMAI0RTNY!^hbt z|IhFfSn2b<>yzz`H=!GwQ;r83V{o6;)`y0OD8#X@1{dmUw59wg^@jm%} zcfI?ctUma`4{m(=!SRe!k;l`Y{`BJsb=qKF|N7S-_lqxlVRDSjAOHBrZx4U?!#6%j z;yb_dJCA`pG1IU7%CDT5!&&s*+JQ6n{!bTEFZuue@9lM;eA&3h>gz^d(#if6_j~+y z>7fUmlK%N?0K}9BB$~ya-yt5T5Q2;PyYJoqMEKa}KD52}#&;oBY>SJW2TkO1&Ee(a z{{!1SI_F*0-qkl;_Ef7@C=aN9>%;$PFZ8ro^Wg8BAN0)hL?>jNCvS?Jx9k%hoGWdv z%@H*7e;~3ST$hc_)%TUV`tql8eBfWW26xPuJiLEO*Sy9O)&ArGG&y-Dmm2tcke6kg z2(8)vUf6~XOyb0DFnR}tt7X}D$r(i6dF zz;G=JYQPN$=gzVgnPY=saT$cB#n5qSdK18DTlJ=75^zjmnOE8IOYdu`_E89Pks|~Q z3GMH-u!QGetmndMavTHcZ>Kry8vMm;F5~OqVk5inh~#Cq$mt%jw1!9jNQrs4qiFr& zZ=b5Ja{*VG+9z`OS|8>_Nqp*yUut&1(h*yuk})oUZTClp@`pdaAV41($~!>#W02k< zGzb0dl^7&<1bXI7q|974VWto9L*U~i5V#4#?>O(@2P1dm&0Z;v*>( zB5Nn-5(4+H^_mkW`^7TBH98e^?jbt!KpQ{rU!&_#cH+8j)b^kDDzD>f3RW|@Aosk=Q3^+-^2g1NnFM_ZcJNM7*+1x)B2SSTG2}t8WiBa|-Cl?;*nB6OIHLO=romET0x3SI>AnpA!HLrD!XdzA zs+!>{{!H-U!y%*0Qo$>CyW~D+m7!* zN|*tIq86T3x&0g5HTN1{jnRveJ8t&Rw2wZD$3DgHgydv;4lP5(t>VU~`dPZf*RgON zqv!tp2REO%&6AU0`W7C=?%JB49FfTh5a|pRXD9l=W~c1}ywYc$o5&ZYc_k67iK$2k!OuEKdC**Xp_?;&t)wuOL?<7PN-xU8mERjd4a|3HO5YkN3Y zr;udKU;2??90e37!Qf_U9HO=1Uu9s9HsYem2p6;m z4usX%CbD?m&eiIW6jb;)y87h?3&wvdHx8ayMO!J+{RuQ|&Ej?pm3Z!A2rvE;ULjy?>>$>I3rvqK;qMCPoy+z(xF!39{)jd513zUFI=$-?=3+uQi~>${!@zR!H-Gq*G8 zzWUdG?blAK=C!H3`@hGtp7pHlmw)+}dwEhZ_=JeJyyY$16Q1yd!FMvkp+j8Q-}Uo+ zGO<@*e%B7#E2n#YXX^dmk(+gKt!wT7@`0b(zU<6}sHw$}QJ~%!l*`RG!3s z)yICLENJiAxJK`&{~vDupT`pzY`JmmDSFl=s-Hm^}{gXcB;I947HB0}# zvTpX)Q9bXuKi zuRT{C4P#j<&sv&Wx(e?#GWwpuCI`*{A#t!^1ESYVepeKj${!y6%Y(@H8B_k*FYPXz z{`DB~ttfrRt$>bWyR#sYR^jPvF;CtQw9R^{;w@YYX4#()T-__=^lx=4IcWefxwCIa z&7jb(QP!XU06+jqL_t)g{>8sD=@Vdo*|qLH(le&+Utr2NCyJ$q<4S715I>xxvL!x?Rz-$5 z@uwxuTCXP=91xH0iql&3texnB3#RosqfpcFBo{W;48`#u1NBE|-X$c=csJg;`cFd* z3Rm#mKSvRr`{zV;P>e(<{Z6I^*=?u`-20|yXEllIyp=!oE(G0YQ|;ToFlmevFL`yx zrZ~;)Ue#jmpLCFQ@0*_Ep1urS$69!a@BQoWdB-xWVa^|8M~;wcxO~l>Tc_<=%C=W@ z<7OphaK1>4#G-sq&06;()E_L6*d6Eg{#5Zy38^7Blps=!wpu6U|2uA)| zqi0Q?#Os+X8W)|xQrdtygS?z*krzQ$b=LP_eE!;<`1)7g-WMIWLsXG-DTy#WS|+tc z?Nl4Mt52b=qqiC97d-I`&bEO`U)m!!A4mUM=Q;%B-E4R058e2f+l|(uIoHNpCzOF; z8iyhb-R`*WJ%0;E9=P=HKlsEiDxi!>-61k#1H)~>m_xdq^bKJjkx%*Hq_yL=&d%tC zadJ4u=zU-?w(OF?bhID(w%~26k>1CWG6!X_4sA=&g{b_SJXydQ%tVS|xsS14utXPn z2+~PzyW^u^G)AIN_o^s4zlV*_c{QQ^sUqC#@5ksZn4S7r=JyH<=cUK$pM=Snc)Ytf zQFbup=yR(W!`7TBD9Nn}jres|ssLU{cAn&8x_7#TBgAL``Lw-q%OsHFk5yn`eNtMV zMLLS9_f5~>rbA^PXCK?vNw8M`iYLHj|Bl3yh-=}JCfV7qX}iba=;OWuQh$Ya`z7~` zmowzxI9U&tq-zfAdM$#)ZvxE#xGiIxe{@Z{Llp21PQX4jLvLOkI&shPb@I%$e+9{Z z(ZNptba1RmXW4(PcTEd->yzc4^2kZ?Yf9-IzZ{Yth{jbOV;zfe$|qdGV<7-(_Go$C zKk=D3*HsSAUw}|(-_`Yt`z2-K3fwj0XD|m@yRVZ0MBq+F7zBbIf%_xY!SSSjy%}71ZEF1_gpPc=f%5aGADFLrMBwgAxBu}^ zFk^2x4hf6SahW4f0wP>g*ZR&))(S|v0qdwy`?oxUH^XoRhxeQlBi=Ez4PB4XS1DR< z9x$$Ju{8$UJg*fu$zm9OU596!`aFif`69wV#tiqUxx5aaUjQk+pWt6T;ndIUXR}p5 zMVMT{b#-h16+|Y&`}}K8o$)81j0k-m(OZKr!~3t46zwg}>`vc}L;hnamYeT(Mnr(M5M>h`Yr7=YRg^+h6>}U)&|% z)5Yo5TW{Td{^x&w`^8`U#RF6Nj_>%6<9-3afdr-e*vCHRCvJIX_|XO*CH~&`zV~S6 zQ=;bu20#AeKYmQEQ}OQqumAe5-@fn*zwnrGPAB7a*Il>0?scy_B`IBU$tByIDENk;cDz*E9M4@5qgLkaXJ}w{0)|@GovZdd2^d z^XZGSh+J#uoO!e(FA_M}@#Xh@+;-{tU*L<@`G;~vI}Tk z&u#6s{=}`1?z{XxU$k9x-hHtSFrrSTe-EiAywi}Lodb|1d8_KCqF1`%b zlLyUzd-=Z`7v}u{u^(*l7ziT|rTNKYqIv#o6()?r`GOrS8jbQF7yMw02f=>Q^<&OE zbBD71gDo->#pc-lOK~a5K_b!m4-38j;6ukh#>gL64_PW_lNcA?fn9W?CP%CC%U;>+ zSXFzf!U&9sZFJnX=`sGJsm zSfw7G{7+quZ%_^+{-SewDa+dS>0UYU!ed+a$FcVh;QC#1zv4^n$MgG79QUbeNeaCu zOzqYrzg6GoEdK7L8su}{=Z}WzhqQVxcyrLU(zCXhRyut5Z@}8tbXpT)_Ox@UEFlyt z*^EFf60IFQ7t*po<~D&0adQ8y4{z7Fvws{*_8oulH7cg_7AV<;lxT3GMe6#Kd;Djt z1!R{1JSd=ZcAA z&UDr9@J%L=aaIbdMF%R;eG_Q#D#>`~967Z$aVc=6fVo$uf4mLQAx!Af-sYb6&UDU_ z^h5s~$1KrVQNXUbLUbrE$GId7!|vUm>TN8p!FxpsX8(XMSxLA}RsTWvf9}C@vROMt zbUj)JwQkv4lKJTLTJuic&I7lWdqy|=J?-c{Lgd_A4Ef@RLBp9Tzvgp|=q037)vtdA zAG(9~k37ss)$W#-Eq4bxP9g`t#zNmd?w%p-9li=v;o2s&uDAl&hHa!w=G zxsH9s(y1DK{;EIZ-nAsY(sCY|Nzyq92NWARI>bz)OOkDIl%A!L34)^upy-_8_E@m+ zIA(&C>`;jjn)tyaikV8lotqz7xAXoMT_ zm;XPUpZuZO{B>bk@Twy5_+HKYVpk7%VH0t%={WN6+8n7RF+l_a+I3b@@wQoj#H!Wg z9WmNMHQ_{JIAPd=2NfU{;i%E&vm3O=f!`AF6c`2BCtUWl^inZYrUy|zc=L6&I%ryvE$^M<$E&)Z{GjjJo^tuKT+6vU z7}tp#HQ6n`AJ@5i|4o0dy5F-Hb{Iw74ZO#f@BGoPD z3fVULR{H$0Lzspl$lvzXG526|wH{vcv@tUgQ7_?#!R`rRJ8R>ONUt562MnciJPrU0 zY@}3vg}HRe#DZ(YwXkBR<&Zu=NNo^(C*Fz+{e{e#`1W-P__KM<}c3={swF z8Vf+fK=H`cy+c*Ho|DzYwh!(rf&b{8z_B=fxb4$~W0rTNoc%-W3O<>~{xRu#0PEgL zDW2?~(hVLAx(#giu>u#LSHjtiMb{x+_HWauf7Z=JfX097EVZFRHKl7Vodd}LCvsde zvqp<)=#6EycQj%9#wV!B&APqai8=xCW=|=mbY>w|{j*o;{o;~TJobunEUs>S-xt8) zm^yGDbgp^$xcbya6u%h2{=Bm>as3A&5wLEX zf>;DN;)TcOruF!ZF$wG~Ki8aQ1SOqwlm9xKvv>vz{_0QqMlE^b-|M78fNID{!gaVu zQZ-k@K{*{}?B$M}(MVgZ>b~_nk-@f}Ro`W%N5p6UBoBhYn$AYK`WRJvW+VxNbvNNnmQ zPG&EBaE-!sZ_UGjx|D!x89eBk2U{?XlLQij@Zb#gnQ`c}+yszV7rxokWF7*?7cAkc zr*=H{AsiFa>vi`38E}(;3US1mSv&ovSnRDDv;DPdUyF(4-ojjg^ZUgzwU|Tx?uh(H zr4k*#a?1*0dw5PS$)BYUi#c35e?@DnBZbFenwdnfX-ffF)JPYql0{s z8)EeAS#vf6FcjX)TJ)e7#H<8t(V_2imjVO>h$cPlOweWjw7w`Y)POhM#ZiGgB>^L| zP6QP8D{S`9)Rnrt!@HDkz8u2p8mZSm(e*xQaIeQKLorjNWSq+vC&}28+tl}-_g<|N zksigTUyO(cdfR+1Ml@OWkHnE4SmnWDpPrZ%x3hBgQfG~S@f$kt7p$M|0Xosbdn#w= zEQRnH((}{znXT4Le2nY9=_FjgEJ1*cTx7-4K^(wbf-N>N*Dq_UnL8D?L-y7=4=u&C>Gry#aouQQKjJp_RX7Hg;}DxG5ULcAy8wjP#_#>mgAG%9gg5)cEIwdOWx?t=_8iP( zID`)E3lm^sSKqTnA6C|Bjbc`htdo~r;~iTmnDF*k78N4#M*(1o-{-Pfdu}3T&a?DO z0`7&=*TH)1Ky`2uy4qze8*%hO0h0AM33M8X%}2QNf~RHXBj4>GTsR9~szCy%8jh3v+L_|K>Ke?Ysy+*tC-rEF)H@))0+;Eu3{H6t%c+%mo z5ShW$Ac9Mcdt|2SXpSy4tK=_U{MF`1Jf}yw|`^Xgd@L)AYzNYTKl`&kyW2ng;K2`m@b=^r?T>`|;$&3lWYsKKQ{8Zh!MPe{(eRap})L z|NQN$tFAgO?CAjFlRSRscYf!TrSiSs`@Q?Pcu~NG7hbqee^(S-gq_M4EZmhG{EJx1b7?FzoCa7gr_RZtG>>LX_K7YJdQr_ay3~>x z{`SWfpSD4mKBPtmuuFn11z0;7?B|3)7LPDU40P??{R?{|3>sJq92RqW6ic;g_7A9( zZkv2O+dm7_6oK<70{5!=m0p@?1W7OD0S$X37RSQYx4D0+e_-KV;}BmXM+t3*wDADY zgT)B`+2^l`6l14n7S`Y?jDF0+rTt$YX)rsDBBI^a&JyK4WS`)Evchq?{%dQ>2m zXp@O6sF=Z2C8eX+`3D}U_f7nxix14=t_DO`vARC|2ZVD|Sx89qu8}$UgE0;&IiGv3 zziHB6slvx_pMS1CdU(_KiR#ApPh#~uRrp9z=MyeOf@J?BaQ02?#7J%k(T#N_kO?9~ zLWr_&a`1lZK7>GF>s$y&{2pYH96-c2{rRJ(YVl3qo2pvR(?^bb4tB6&F%!ZVIeS^Qyv~u?OY&aoC#wGuEY<{8 zjP|kKcKC&JkC6)sQg;5a|BzE_uLor?Rd@C(B-lAf?$SaKh3(VkQ>rDyX_Xz>w&K}Y z8(4VPpBzI{M8glEbd^WfMvmFPvdiYG#XahGZ$jigRIC(7{0ag;+#b?dUw&>xVc`>| zz06r&F1BpWL$do{_K|brk1@mFqgqv2BzDJj9{R=jff0{k6tH@(fQ5tL$$#89f^cHtU^y9k^;0&Nk}d<`^h7 zmUYfWbl&&ag|(Xwt`U`WXrp7D5i)WcL2N^zn+=8Oz*PvbJAURtYU;MPjhWGF^IH>L ziJF?Ha=(3&xvpE+Z5#WbW8=2eHu8ZBX9h8tkR>o5 zhdXEwuw!&TQ7i_|QB)I*uJg@Y80nEXHYOT+T|L&EOgr;6up=4UnC|<^LwfP1$3<5S z0M|awEvZ@8IXeZ19Yi9LVqhgAqgr&%PV3d?_!t;vbNuo*xOs?aOc^z0|FFh{Q9la6 zt@jIgXC0eCrAq_Sk8%c-K($9hE?qSXYwOI-LbiA%Hga+^a^{nzkFK-UU=JEI*0h?t z{ieF&Q-wQ0`%7|VUI!kAa92}p=xEG^aW7V$>Mi}#Kj%H%5;=9TU&Y=2oDbIUhB~r) zOmMKw;kO$-E$(n;9h;DFLg^8IY_@ldn%l=QiW7N+7l+k43=V1hsUz4L+aTo|U1~}i zID-YGo5_(`vbG=#I`U0Vj9^*+Kw;+H>bw}1>*90uh~WJ5F4zunt?aKS;juxkqq(L& zPv1{}uCRPU7Ge5W(G%Ym;#4YIag2 zx;ON#bbef*CG)veFOQLUEJ07yA@!&F;>S(;%2xjQ1p%;d&e&fTE${r^Ngq3c(7id- z2w3a}&Zg@c8S+8(>h^npr;{;fxHHG4f+!$GkAyyyZFe37piVC-cG9XGnyD z7mtYIc7J6Kym>K6e2?p`v+{> zS6*7|z*zYrE;Dn@&k`k9_1KH$F9D z@3`On?&q%s_}$qqqD`rEfhTwI^Dq6{-+j>!rO0uitU~qEFAg{!o}*zNbH68S_dRs!-Zpxj8fk8iZuUVsFs<)7 zetgV759azooUhewnmRx9Y=hl%-tT+p0o#=i`cB{8cjMn}f1q>wx1afo?Z0^-FLaB4 z+;}jEV{$Z~<>WBqEIV}S9JNUBP?E)_Y~Gp>_D17d{DVc>KG5 zNtV$W;{+f#iUW|5m)AbP$sWO|p=s`))G}-`Q(Kj0I1W=2WbBP%?!Y}uH^U`9YwO?; zW4Y~k%g&nH&H$VfIMg|R36k>yBi{=-MN2TPOBC`4iE$N&vgpgF~UL%eflv_4t{5aqvu5 zUdnm+$I|&_n^ zgIlq}TP~ZK<>0UIlCFD5e!Rfh@eRU8{NxgqbX`+D{%Ly0w@wW7MI#}dUBQY|v0@AN z=ri$bOJ9WcIz4I%gS;@aiPDpZ&CRI^cJ&8CUm3|Ei`Fss--8C$MmcK0@dq$aa|t)F*!RS5PN+LJu;YqfxKTfjH3lE?rGwjZ1sOT5M&ug9 z&blzpiM2RvpQe#-ndkbBvo8RkCp~E8Kj}$+p5W(Q{nzTrexCII7;pFQ{@2N3$=!+1 zuV$`K->7#3zCm9R`z$?Q_a82cU8b|+YzL0o0iGzovv;!})%h5P$35>cZ84qsZW3J%L5vJi@p=!O^2`Eu6&@rx`XQlMqM{N?4n0)Uwq-i zw|_q7$JfW@&W>-o{!jF^0*}e{+;UO)m)9TtQ%UZO^F;0cbn`!MAG-N{+k-EB*y5^g z=;sZm;8O^maM@L(h23M%s`mkh9<+V*mVc_aXuH`-n7RPe1v4+h=aOe*0#9 z4Zy=MdGvPK`Im>QdYV(GBWs2(`eM>rGR3lfm_9+^f4buN+YPsVdb{|%`%2dj`jQuG zkNjmgm+t2B!?&?VSUGLra`gka@(F<~xde`@zefBg`l)!Wf$sFY{N#m$4j*mXtqRgkqvSF|=W*ij zK!@tQF;lw&4rK$*fo|xjvqSi;VWSSUh4!ycjEtOulEoELR%GmDF)x2rTGvJx#W8b9 zR0^~E)KdE3nvk4!0M-{1`10T1sZ>vg)E3wb)Nz3fK87`}mf1g4FD{ zyso0D&DWOsvwyDLdq7t~Mv1YS*AIat4Qvz;H?hH&X>{kLgULz6HgzD$P>s2M;u&=i z(g*m1<1k<6)m;0fN(N}}#jBKT1#*|qYw_mwqnP6Dr_Kzk$*lbiul)M#o*^9m;s>Bl zYtb(-=5uZdD2&4<@mkb=(&O+=-G zWL+?YgE5Sl!6EsKJHNb13LyDo=}32p1=VA3{ui%=G9^D!_&6#x>H$bGI8^JS;95^d~_tU_DZMt?aT6Jj=OASRY zSGqoMvRUK$k*=lb>bw?QmJY*LeE(nY2Ce!=uiuQe)R{U*WCl{d+5;;*pnJ`fBy6K3+7GyW_^V&Qvmv zi_c05q)+J=^}wY*_cCWty509GP`G*hm_#F@1;<4}5`h7O&Q^&xgTlo&ZFbnH#v$JAiIbLLz|C|GQ70cHd=cOuOeaL~HwyBAuq zTjvMPy7>OKg+g3>{4PzHcv}M=DZpR_#R3a7?;z0r@dUp-?RDy*s{kWuJhz#^!DH8K zTGiS$=iG(^&W}qI%@GJDl3DMB#7qt9hoRkL{GpS) z&q43Sw||K4alrOl@VjW@PL4=&uv8XZ@d}z>c^13#m;(WM;eXom!h=&Cyl~DiT{Xg}*&HXc<`OF>NJMx0_!8{6xsN5tjYF^rbJ|cvpx!;y9W5?##D; z{PjQgA^fv{nK?Iax$6JZUxn)h001<6XZ&tL>dyC5^ezCu_Mx9k;1rI3eD!O$zxTi& z&HYyHdq|517H|B-@1BC{iBsQv)$eWJd5K;;HK#(L%q6?E9bd(CzZi{8@RHST}v#)2@@?b>o=vXZ@$2eEs&PpZo)BU3k`gwoA@= z$acSTzGVC2a~`za|Llis_ty&?E;;uh+c{_CUyt~Kqiceahh8SjKJTmxd>^tO=q3;4 z^UyC3%1F!4s=h9;^I%OiQC64cC8*kd`CT=3ubC0$!3v-H8mGfC>65?wV6l7cCv%WP z7$?I5nzhD5eSG8-ejZG+Uh4qseJQ{^+kd z+pOA79Xg`h+M0((8tk0Ty5Rf^6>kQvKV2FSYdKHLI#Z>gFVjDIEqs~*pHJcZ5x>ur z{C;d5IpcHrTE*z3=SY~d%Mrb*!L!4oj;!FcuuIS?3dD16q7v_#gZ#-9OEJqyPX!u} zv{993Y(!o+Ejf%CYZAkgg79`*PpI~znNqSJvUsh-dabzWt%qg}={UdPEcmoQ_FNZg zUo+l~IVsIy;3Vx6tEJ1+zaxmBb&bur`1k+>7dW27ePCTb=6XDdfA_G@-u3yarC8SY2>5t6Td9JH{U z_@hK)Wr3b(;|s@pWw92`74HCu%{ya$|+7Omkp#jjR{7$2Ydx5h7nlTw*G`j!v zr(8Qd!?#kf*S;pEqZ?fcwo%uxK>I77;qqyo`LhP^J+RM~)odyDj8nwEuDnbTG1uX2 z*uC~_Q1OA47BLMtw&bT>?yO>s>)GJt(Dg4aYk3{%tVe?6S(buwt~s9^HK@(rt}Fh? zm1vMgWt+m7Tzi{p5kXcT)XRtWgVi;XQyX_C=@{47js2-|Ay|hs5}g|bK6&AW|G1k) z5VC?LCwS&~T%2J>H%0D2FB=YW&Ig~h9PGyzzNYMR;_{?^=j83w=@q?zZ-EMmLv9WZ zS`7K&55D?m40yt|JG9Z|L-FKc7N~AlOmL!LvhE{F43Z`>$`+_v<4x4Z4vS%~4q#TC z)62IG_e_rNL9bo2{HX&YmNis^b?M(8m)jjwE~h0i8%*p8U72 z>dr-xnsiM4YTAxnlHP8jKuQ@OnO|04b#jdf2M}C2JZ~`@M@Z{*cJv(M%P~LwNYu?cXhM%Fi z_r!9=H3WYGv!3QS*AhPrhi{Zu^^A>?zvRI%TJsqBd7;l;a`0FFKls6I`|tF8)o)*| zxAxa_u=)em?MyZ5EOmsZfzFc6e5PJ(!@DOE!}cs29~k3^fn}}v-|5{mUc-xMPLI?tBBluK0D`SZ4gptG#VkfBwqt zFFy0u?cZPdJKJx5=;ybez2e2&Kl+R3ZU5DuKXLoPw?BLPr+@hmwpV`ef7ZJ^yk`5v z^&d_DRbS3S9(Z-RoOf)#9CvyiJS@-GK#X(L;I*dm4cyHVC?h$<74eTD`*>V3kHm55lH_c1|a;t2AKOR z{V^mxcL9^%{cCQCg+Lp8f>})XQ8jKV^0CC86DK@eS^0)eC@y@!pYz3&TYCD#%K;-{VjoT zDMF)*VXipt=ExeheX7Cv0BJ-^vp!m%+Oa#<{_rgjGWlvBRn71#!q(gd!?3Hq-a6ow z2ZzDjwjH%9x?HeU=Im##5cumggB@S$3V*e;k7V`H$-+|Ml`nDkZ=@%;s?mX*U1Rr; zwQcfi;krziHID5d?-Y<`%9-B5HD^@#si zqg&Dl=2V}&ZNne+7Y1LNZ7W$^D=ZD$%S^IP$PQ%l<+=;&{^8TwHod@>jPpxkwXFvi zCj*-txNMhC4(AKV7^*b1xxzF(d;rk_0(OkHnFqh@ia9?n;`$o-ZOf;@c^q^Zy=P*R zUkDda;+|l40g(9wTRm;t1tb@`jPPQGWBT9|nSL~*i+{DdCq$buDpKCqi8dCb%P%9* zs2)fIrU3{HqD+=Lu)W%1`Zs)>b7Iw%5Rw9&TJH(O-=Yzq3g;S$KEe3>!6_S% z^GnayZz9QI8{lGKhi)DbUkCE9*ALIMWmoyDP21InqKg;Zo~x`l3pB3-67k77OECJC zU*X!Z`9a{xwH9U{iNdCUjzg=Ym}RFYohiAZ*>-DI|12?UTqUi-W;;!9yk{EFF)CoG zFTxFBUVXzZJbdp89e*Gp`@*riyVKDT>hm*)}Sz z??7(=obyH>O!7N0Y?mjOhcJ93OY`SEb2j1NoL!V$g#pXpiknVtbkA7u}I{FXouIxdvRFCQ-g@V~jz z_bD?^WV(NfnGLVM%#A<6Xztj+g@@u%Hk#xviIJam*TM{DU~QvP1rS8RQwOsbV=4iB z=QkvF_ZqcGr2k%8H~pi>-hTt0pX|sF6HN^ zS*pakar2Y^{N?|>>dAk!*J3D^FGl6fLdW)3c=!+CDzfj#z3oF2nhj$Q-t-fJf8{LSr|0HfEPzt_xdx3~%M+tqQoye?e3kF|fx>}gV? zU7fdQz!Q6yd;!28=^FoGJ^BAv`m6tbLjMe&*jHqd1cM%ak>M??!e7GQGRUJu_I4<(v!AJ^~CXs4BoPv|ABs#gD2rX{_&3=D*3R7 zJ#2f-V;*y8>_nYBDY}l^^6mdS@7v%0_Khcy*Krgt0N|Yx?ks~BUi`_Q{K=7(dpu9> zf7f??m;OK0(ftTJ$`>#kStBI$<3Il6+YkNF4{iMGjyvKwmHO_iw}1ZYfBmfQ`)2ET zk=swgUwyr9|5ymbopgg`^Ox%nKkrd1<)rO5UCop45_KVW)7$PJd@<5ViytTPz1O~L z``C4P=MT2arr)S1$4_-U`J!)G?y5%F+q5w60Pv7XF}>@Z+r#Y@3!QcQn8}k|({BIW zwktpP(e0g|e)IPKe(aUo|Ng%JetY3Np0)kRJHKW7=U4n=y=dT1{n)_g8Wo-M*!ksw zA4ljg)$75gx zsam`t^t+IL&XY5`2$Yjk~yNEq1m#5VxUi4N$dscuXdyY`s!NxiAl~C40 z&3qRoiS#MF*kl4*30zKdlau7Z0&82CqI9iEk5e&AL?^XZPEXSYLA~|_E~<>OJu4Un z`FCx{8>_GfbegE)^F#q9kn6`GpHug`^Ggg^_pcPh)t<8n+pJTU(VfIDD@(6SVs^)h zpZvLv>z-!+DUf*A?&4Ew^6uGT$jK&{d}KNE;{rFzuXSUI7ah|h>xt+(2_9z8Y+VPQ z=4)2+!P~Q`dSIIZci7Oq1J^d~+%5o1zl1TT`e$1QW`$<{UEA?P8ZcbqkMw1GT{bwr z>`SWZ=h&5l9XF8eh%-nQz=aU8>IvHVaQ8}}?NB0=>qk6|&=J?D32*v_Q;6EY=m}!- z2cG`L&K}V8bs08l#^Ps;>orToM&k0!sX2Js-bb@uHObxBw#})Y48HeKx!Ts8y+>i+ zcBcn6T<2bWUUJ(*wmMOkgw@|`v-Q}1EQ_J*x{3eEXn0rYv(VYbCy8ciAQw5f6X0= zh6S5_thOs9?HJCUlI(NOE84chk#Ub4E{><>YaZubpnaRI*Y=0ubvv1rG<92G$A;YJ zyGo2s^DE~~{6AIsoFB2Wfx(}3)$N~nvyV&N?AiR0&06F95|^H25%A0tG(3^Wx$`mU z2Zb7-F^ZnWI4=7K(cm_mj9kMQHojalsb${|t9X?!I*ZTEcV*S5)$Y9X4FPW3^kF+1 z(8=p)+0GHys8vP{8EtEJ`i0*pp9Y|fZ8q!nF$)-tgEqLyFOq#_3y^Cjn)`P43P$l7 zxgNd4@{k{ZG+m2qC+!B1t88$JIlB%W>FX0zYhe@j^{bg-Uv0=5aTli+?d#<}zVZ@I z{+zwT?8ZbY8P}r~mge+6!1q3qg?+S&_TLLt0In-&+Z`(1VCmcBx6K?FomuTVXNu2U z#V2=Zc^0+5f61SJ?|_)TnjiTR$ka#gv*N=R51TZkON|&=?-!6bINgF&UV~FWrz#iS zkrv`QxOYWzCl}jD6_EZm-NevK*>#UBqkwqoT!lqSXLk%A=vBYj%#4Yy{Bh4?Z(g3Y zj@1U-=aHP#?&}9c_?^ES+1TE&*R?11l00D@u-U7zy_?G2&8P;Lw_|Hjg_u9-2<+|C zg;)L9`hspw{k&?vW|tGRj~u#%{s~n42tf#}F}>~?4mqLa`mv&IoYcRbUwGrm|9k4M zmV3;?;vwNkDp%Xl6Otulm*4ev%(w+XE|~`NX8@cLXTSD?g`y zEl__YcqeGh=@M^;4!rZ7?>y41JSloI<2%3eJN?7qWVpxT?EiKCiaV2Tu9z|L=9Ldu>m9+S86V{q2r>#VcNMWHnrJ$tBxUpZe5W)VtsP z?zcVt=}*5!-0=eb_>cd1d&fKKFSn1EbSvW?{pd$;-~HX+eJf`NeQ%iPYVYIHzw{AYW0`xjZ-0H$ z_P6?X2XDCY-)ukem*2nrW4%+rA6)r=Z`a*$-SYD^5B$dcZ>8(&!4EdI?gwRlFw&`( z2S$w_$il$isa}3)_{`Bv-nLUc^_0~`S;W8ubcAE|;&&$I#L#9XK=JYCT-AeJ=@3eO zA&nzNHsJlUtPyUC!wy_p!!EsAJGZ$(CV#||bJw1=#=quIpUSVveXM#{n@yzp?0;^5 z?iru+_l6e%=Un?=82si4JM5IRtF>rbOY15#MLSn*zR&GuNYj z#59sW#jSg8yV8R+e)3hPf{kk}e7m+B;N&D^eq8ZaUyNyx1&Yv|iZveyw(~1CYavVO z8nqe+AsmdLnji6XFA@%+k3OO7xw)20{}e;7`J*oRdaN<~D45|qF;^SB5uJ~6G}ipA zaaU;2Qwvdzhz!i=Nd(w#DXHYI+9gh%(WqWlDEqBmd9T&a-Zy%}1~>bc zaI_j~oNLSedr!>ar#RbP8hy3RIa9pW-hW}NTMZnxpbW!X%lnj5>+WAdef^jcl0hYq z0(2C*PSV;x{M5`>+g1Wj0r1Mv>&`zy#+A5j2-UxsfmST}6F_~Qz0R4eIj2aahF*Iw z&<`1F#j8!uUeEjzz^}Th`s`Ug*G0W$cMVP{Un(RVewtf*PPyr+v4v9>l;I3LneMA| zm2H0M0wpPj!h|0uQsGB3=ZIMRNpFSVWSXydypin&kivst+cMpeTEjONEnp&5X~}_C zpQ!}|gZ-4{qUb~XBM_3YMBqD<y6gS_&vRj-26o+GcuhDE> zVhqK|dtm=2Hv|mSIJ=J{zh$ZuK->Vhg{*b@M^E#FKW>-5OPO>eq|tJn-);^a7mo+tbr&Xt7 z_~G~oF&$Ui{Ub*2%`M%+rH7>@pX+m9{j=kP002M$NklD&h9`Y|PkXFq{wKJD3)$*|8-@>$s*pZ0GHn@X)3qHIOq#v-9J(6GLMUyPqEH z$WO2UtqHyBJ}kde(4)c?edHb5B|YL0HP9Rwi^T7|GJ9@p*B4Y_JAXNmv1V)I&=~b+ ziPT;01pq(yQGEmHd$#}be|@6ApVaRs`Frla`tNn)Jgb-cYrhace&+vlZ8iJ!bh-n3 z9pHz@l~?L*B93r8_`wf8DK-AO`2P35|4DI=MY_4Y@oxa~1L|1p+Ro-pVM7!y|`~3br)-OZJ+%7CvwM- zJ8^wSj{9o5Blg6Lo~`>|hp~1fZgKI~*S&Z9;Aj8JINr9NzfiwD#+$ExZKb_QZ;fC7 z65tdHdBTOy*zSJDe8&sgH-_)X-n2dN+=p$CyWpFKJI!X<&Bmt3&F+35<^$W~Fn;^i z8GLJod&RZ?Y5N!N|FP{K{>9(j-hb_1_*`>eoClh@uRmu~i$1Rfz%47IOGTvY=p>(8 z5i>{VKo=|leDE{#z!(QUfXsEU8v(7ETF5R02!#)1)NOt^JkSiLRv_%}nod{Z!w}XYJyIiHdZ+0X(valghr#cCpszJhcPkCSAQQVV^&w zp!IA44jP3^18QAZ$7LJhdFfvh9gLrI#WE$^O5Vn5p6AmdhtCCR z?tNQ}8VIFV*y%Ma`Gg&FZOHkZ9$R!cVH#<;wNt(Mv@4wdFKZ~dauxK|g@ygaUGP@s$fQ)i$b&t?=E@7={{q(l? zW=`mqajj?@Tl!jB)439Je(^ddUHfJJEyv$Bo z>&gX8yn%FSS*LE|a@y}|jdi9XS+#6$cBBapg-$@-ZFjGumFqLU2w*Q@?=Bk;Ho1g# zGlbon!za0h6EkUVwXx3CzIBE&a8$?vQPAi3?v}wt<%q$Ve|6K9x5gyGijCU=c|DC_&HM z*NA<>vTk4Mh|i2FAk4}gP}M|EL8O#eMy-avj3*A-;LCCqG)yW*II3kNDVD z)r`%6&oS$cPF#@jH+E%& zO{iGMhnNhK4u9cB;|T5zupK{;{}@;}{vzI*T_mpZHLhzO*yf=ld*p8}{)z#0H;G}= zBkYc|V35CRXjfxepLJs*Qkw8Jpc}JlFPt`+$5%O>+5(9IXiT|zZu>4X-lZqwuh3U- z+I_9v`yA37Mm48x|2&d!=Ufq7o5@mZsEoEh%g?#f<8%iO>A%;u)X=sZ$2jGcmq87{=yf&@JOG8KHl7od+S@@>K7ld zucLS}{HWd`q3gRf=U2Y+mD}e(|M??J@!t2ocl(K-_=)4vJIcHy|<}u6sM$ps`cGjZ~tz%CT&~qCLDIx;WMBAr0*k)JLIB)<39g= z&%R{)%JUz$z3bDb{%zUc-?dGX7A};C)<&66`Mvpt?(`gr zZN8nup;by6Ah!dM(^dbRr*c~$G|N=KQcIs#<~foM4_1$?*=4-+HvEASgr3eZRl^g$ z3T|$%(@QZ|I#qeCL-D{T1?Nw!lr?CBF2BA#%x7wxXWU3Spalcl`E1x6qC_YKP6>gU z*H3Yf80Olk;z=NUVD!#{uspJrA&?q~7?yK8_`uj>Z>ZB&wtM{~dF=~~zZn8PP?wWsL+)2#Ns%h>Wd9ZOe(i~)zZ)h$wRii{J+QUk zm#X@7cdzyN(8#Qwujxj?xC7QzQ);;Zse3J?|GV@}Q&P9*@4_ zuzSu)BB9t7{Dzy(Vbk5gTb_xDF6q``~jlop&^w@88EMs%mxGqpGc{8m-zR zT1AV}mfFOqJz~@zF{-py)mDTmYQ`wBWA9C^Aa)S3LLv#tJRhqvW1WWd@-IfcvfO_vSRPha}~05KxeAKtTR5T^7)yWk@m}JS364Zo3ISy;ya5bEyaIqihuCjO7Tk9E?YyshUCWg zCt+o>mPQ>2j|;}>vS#!~1Wl7ik?^~6QtNzLbm_4ZIfU)@UEs`^*P1F@@QQ+hTz285 z5y8MK&uXq7Fz63wu36C=M|6#BWz1hK7A9F7;J%KthrTzwUyzi3TVD@V8~*}J3@aFy zpWS_q{#IXI_Y=vnti-auAG#T@_V0sSV@=`ZjR*6DEp2t-TMt_2(*$Pc*q?kV*Z;H+ zCraGAc%12ivI#m-cf@F%ORyRVJ4D8NSL>-C@Jr`Amj>bbU}oSibn-*e3xb-(M3RZX zhY^jyO}w}n@wuCmliBE@9MvnTfBBBbL+cZw%B2UzYCtp|Tn7?v|J`e!wV9$sxX6p1 zXg;K#x%v9-p>&9^t$x@8g@x?3k&~p>F~iHX%%;wPcOpXd$qNz`euiood~!>bb;b_?CLh70yd2y8+xEPBGZcE7<8e^s z0Xxa~+pQkcKF^cJ30#tbwhYMgIW54BC)Nap3*{TO{)^KgcQjc@5O?NRn4&JF3d~y4 zJXlvD|N0pv8nJN3)FJb6AYmb%zir1M@S4@F-@%bqbDzv&Q^cAejJgMmXQ%d%ejqwQ z`h#AOC{s~pWzgg`^b&97Z4NV)0xL*r7TUuUOSgoWL?|4x1RW&>gl}Ex^+#p!@HjEiCtC?4Sd7B1p@z>BEdf*Xi}WF}oyt<2%~&x^@GtT^$P__4L0Hg4sm zZ;0sv`LO2vi!(MNXYI%axiM`{g_v3RgYey>aesSgg48RY{NG=JD%V?B(5WR&~CeR0e^k2M93H5^# zKssSP=a1a4d3xfRdd0UaH>a(f{Lez_09xf8H*8evHeUfhoX4P+@T@RA_;3S(-J^6` zGYY)|xZ@*QLsZ6!n>Aj?=|8WrsDsFQu0~p~gsr5RElNKP_fW3>89~DmQ(|t%c%XHK z^^R>5YA#f+SZIFz$|9?(pqyvk`n}BSANw=K#e=%`c&cyN=(kwlp)_6BA;9DBwWO=^ ztPxUzr7M0&hW$@RMLw!QvZsvS^wr1UcRH>)E@wgJOD3FfvPHFSAzO?<7EPCyoEFMz z9kgLD+IlRm(4S-7U$yP03s-lfLRL@JU|tfvN)n#N4?c9n{kFQluXkxY^7?pN zD%6w@u`^yrV-{-u=$=*sTL72NYB$K^DE3`_hc7jT&MxlJQ{#30oO5(kdb7L}?((l2 z+fJe8+cn_C&$3zJIJrD(kJoSNOn-NFU662`@?Qlz>YMh=kEH1P%*^Gr8mNab_%J>B zWFDFI`xjr(!4FBgb(0^=xwJgj{~T5n)A~Rmds@REzm?S=2zcwvT_4(wX4zPqKh9mM z=IwZGZW5}}`n{@FcDeNK1DZrTo6h1FgMgXeT1@1Fm_4je0#>i+6IT)fa+JXu_OjqU zY57EwgfjX^+gh?$8RDkXQFRNjc^SpT7U7(Vb=WcLG{~jO>2o7N;ZW5bqYBn%BS++`!GRVnFQ4z;_DEC z8=PuRW=sbmF$u!JzWiSB>gFEYU3pfm z0MU9nZ?s1J$gL^YB{#P~cxW|gGLXmdkuI_~9(h&8`D5HcJ>~Ij;PuZ;A5+M4AYX~Z zuW1N|tMi9)j5%Gz=6ZMi;NfdnAMdR5YCQsoKxW-3fkM@s>VC7h3aLR18ssS1lNrrE zm@!7k`CI!(J$F7DlRmYzbL0xE$Sll!J0U0WhdKNl;k(C!iMEzWo$Jq~OMdb24#a{R z$bz_V%1eIz^cN|W0(E(6#GM>8d#e4n{YAtX`VP1u{Rh2@L0Qp1X)hwf4|3S+p1m5y zsp)TZ)M@iZG+NVDuy6wL-B4quxz@?=eE`C~@zb0sdVWtT_~j=Yh=NNfS(XuNvRWii z58dj~nk4YL%d)r=cR<%6>?p`t#0=~2b=7{<=nRL{+UshEehatI?bvg5DKP@-BR)OQ&z1}V)YVZcLdy;VKHve3?gbF$5 zRLh(BPg`Wpu0*d9jcpL-fsd3(1GuGuFRLrwCrlb>YuFc=G_tqoC8Eu-E{AW4(>=}S zII9}uQDXSU$f$TnhkZiV#~B&1?UnSAOL{Cp$y@1tJ*FI?#?xK6rKEqdsKXO_w(bjy zT$+1r?=_UZ!$oR931GYQ@FQCd+k>H}J~0NCE_ZysF|-GoueJ!u7C)?4mIsSYo5-`+ zAJZ4HiMY+Wy)sg*iFU(G&>xXIWQ2|K9exag!C6bgMqj5qUO@Y|i$cE{0#;Hs24J!EwV6 zxi1m|801oq!t9&g3yQ{SKN@sC4O$#gOfpSTAfI9`e#P8`jG1PGshKUt+8DXr_B|f$ zZ+e(cg2I4>?YXJvc!Q1NTc1?p&WD85+1e63yGBgb$20<*jCvx7t#ngtSYBttS9 zvoi`lOD$>mu-1HSWmx0jE-hK9Bg5BpKeOa3)86tPGvA+JbT{$>9mSWRPitoL%?5~Q zMFpx@$#cmljk_#v%2doO8wRFPC_(GC2!!%UlrklGjXo`6!o-uuZiiY6VAp?Avz$Cp zHNhqA%shRr<{wP4q(^1R*9WmhA8m)88dYWUD-8as>=VBhzLv)5wI0Zmz?Vxr>*u2q zD!<>n)#mo9dTmtWOum|bZMA*RN_Sz}g|ae};3;K*9dm^AbshRrL_QjO`O<1youu%R z2h>d!%4EF)o;~98IExS4uM8UYjx3n8qG?|fZxx8sEAA?@50r4F@=`p0XF5sqNXNA) zczUXXi#g9?m&JgG{#bwF1+^`>YVv1fY^rf&t@~-*i=+hqbN!bRK_kL5mF4w(w~oIE z>`trupu}HWhP4&{$-+6mKA*k)H1x#Xa=*xEEgJgqk4ce6#-!ly7RladRVBakXRw#% z+U%ALRO4wXJ3<0Pt|i^0zu7ABFFnuK8~5fLE%LJ@O(L{LOwxgMSR3{zO>WpcMlxA7 zZUl+WQ83-y1)tQmSO{hnt?NtwlXNj20ji~=0|aRQ`A3CUnQ_bMcGaj=+0KeD9z&GU z>OHDs_A_pAFhBp}vXAtkzny7?5WD`BE1od|KFIGvh*k)LN#8xJx)n-ve7lpjD1n`O zv)V&lCYyv8r#G8nZ6x&II_RRQi|_wH5ElWxKWQp3@*vS=|G1)%NqV7NgDtsqPG`#d zya=0e=DCVEPJm1Kzz89R%a65tLdJ6YCi&N_J$Ro#DBZ6kg$D6kz$NAM8k(_f{k=rN z$=Hh`zm!fCXe`1}z3AC3>wY#V=b#{A9fmKbp{mYv(>0hjsw&SAf%mN!!R$ghDw2yS zuK+le(Ocr=9CmX(GsC)cG2rkvBwWhJV_4Vas8H(K{L5XQ8g53D2KSSu=J$z@(32j|Ty7=Y5A3PY|3uvLiwlf#7(q)A|MUSxDhf6nd- z^vT!zdaT~O>+|+>O0%}CL2U_2SU>P> zy#G{^#mcZ8ialh+d-mg~JVme7MdIDTIN=YqISS}$3dPd{ScgPvoV)Ge^-J)Xi}Jvb z$T1>bL!)#$f<=_#D!EY&hp zb2L$OEiMbJcYe+f4$r!=dd14L5|=`Eh;x>vwv02W;qIx|Y57*M;k_IP2T{rx)Rj^D zmv~f?ufJgrg)g3pd`z~s_*KB#$;E5c)5tBPR5N`P&_s+}ir?htcO6%>2Nq zf2I-@?4kIt^(E@qK_3dPtw%UM3$w^Qcgohv^D#>m?Gp)kn}09|JdeqKs5G3}l2ZP{ zPNU?(@~ys6?iM=06%atpUgO|aHSh{p$T4m-gl^Vk+F?iv=XZo;WI54N$Jz>Nhn(dN zCbn!eO_#2Vvs99oe9Yxzg(!qU%HGLiZKk9r*W;m~ z8wmm`Ws|0=^&@~TTG?1PU>_P}+>|Unn?XKUSAu(@`bi-_T7#P(w&@;2z1F0Bd2-}L zSd@axL)?Mh3F5OpIZLy`KFi^ZVzO$H=0tmCY=&OIjkEuhwH3?46>g5;|G5T1r(Zy_ z-H-Dq|1m2Px3a$VnJyirV*bZYSL;}~_|$^{ws8o}%}F6u{6pm;Y!g`>SK;7vJ1g3{_nfJP*! ze8K6s-j^v&JSeu#a5%WB%1V2r)osnh>mNvg3w|61t~2*tvkxZsW*-T_*Jo&G_KJG+ zdQ%N^`Fl?fRSSUpTCx_bv<3h<%$~mU*zZT`9(+`jGeOpeZ8xbKK4bg}#DS-YZ$1|G zT_%S4ji?1xW(|57j6@nITJNuC@8+tDuD%u0g>3l3O7uOj=RdRhJYk02O?vLdbzkai$B~M!zn(2i zrVJ0I<*$o3p~9c|FYi~)p9YwI9o^d156UVkQ6U_?`{$qHu=8>-F#ZqP>+b6~rrpuZ zas|?C(Bzvx7PbF-$BWa!T$(SFSmbD%j+-nw(gF~shAHT{Z zMr%TQems`0A;k;^5x(wWzam&4$4t>FD;;`EF@6UNJhywer<}s;)b*U89rt)Fr z8$vvgH`pB7y1eT6m!zMY0k+OUdZ$8Nho}FjYv^haI4df5anIAw6D)|gxU-+|HV@?4+lJ|<8Rq}Md)dm@zy@BzUwGO4peR3&! zaAO6U&BoR~_0qh?@YMP5!@*Srlc=oQi7WX92`drR2MT<}_oIw&+zHbdeO&qV$$RHt z{ZI4PnV*uL<>6eMrbOO6TczJ-!kBFugR`)t*p|Z&=c*+xqtQ;gv$C6XW0xjT9bV_} zu5+#=Se?%?p5^^Pw}yQFFq<`SGsJ@_J`?gca`Zdp}Dwe6NB-e)sm#I z+twQlZ_lfZI(2s(MvS|zbC<8wNZ~IKB7>JRp#Qk(7+GSOZF=#>wi%fXZo`G6w`lWS zsm%@h5qrlSoTHglL&4$eTR1haJ%rZP?X(5@rt*!kZ@p59sNY|tFu z>)K|hZl8bkJQYY_i=Hn*Gaq|5Z9PLu^#bR7cREnm8ykyjnNi2Q<<;um$#L?UAKLl00H@`B; zJu>Cmo@tnCc2Qtne-%7j5VE_X_xNP(xQO5?a)slcLozR9foqsPvV$1R77+AM7JBs+ zS-;jMss0;pi%x(N0gC>$`$U`|65R5=tKe_UG^rFh7v6Y4r&8&<>3?3uE<_iOIWLNp zNF@v0T{MHM#E1wX6@cU^8Q0N}aa}jm(K?v@^DA_!4=P&uusT*mQ92)0=4mElKg@PV zn?}kY$9n_hGPBYZ*(=TBhCLMMaWKok0G+89<`oDl-}$rYY!0VW;8GdGAbuA2NN*ic z&U$sRl`MWfp38NGg$QY3@)eGZvu|PB;u?P|-42(pp~fo0M8F$>69BySAbZUnh)EUN zUd+nw>C(_;$>Oiuv}04hsh@yz9xnvGYk!fe0fD))XA${N@6T+nv76CfpvePy2|0c@ zAh7R%j0-D=VHOi6J!{QBJb~hU0ga`QdZ%QU+KQCB5p!8*^}E%BbpQ$$fK)zPVTJs? zLh0Sp4?GQ}SF|L}L(k`vDpu<5kyrT1D?WscG-RqUsKyNH*DX?aQH^PU8Mk)cQ2H-8 zFcchhnC%qoTZe%EbQ_Bp8|4F&Mio?H`;Gi#tkFUAtzeP+oP6IEjVYIx%OOFXhcSFK z{=>|Tdf=;T4D1$-EvQTw$S`CtU#Pr8BoW}bNUswL^i3X$4n{TstCd#IpmXC!q#0Hm z)n9(nZc}#CIgItZ7_)*88p4TFh~PQ5`t8fth^tHU^3HO5?Yx^H{`$HZ&OmTkYn?AP zWSz+BLQ&tRJ@6GHfV6QmR>+m9_g?mGxZt-O{ zf6^^REuy9(7cNz{B6wMel%HNFswZT5WXHet(v|gx%g*0WS8aS|!&*wOT2GH|htL`hAEV-{ z#Xd}5{-YM+?CGFzyO3?S>#3f4_l7SykH;k_*AxRJmOH zD@K&A0WtCz)UD9t;xj;R`6HOQ`V;k)zF3`&&T%Ub&*9%+>M}5#hwB3Tj@PJGf+ON4 zLtHeNuYiUjvRnsxR}cAIi&85>M>6J#*_I*4QsVYqsuoR*~1>&%jwqxq~E{4`f+rf!~gcKvaDf&?#R?q z9V4g5(O^yLcz?fsNIj89uH@``Q9MgL1+uHTCS-Oshe(_&2ap8Dtl>LDC8!9jEJ{kNbUho4Dec&?~)k$St zGcntrx52&ahx=Hu`k6xxnuRKh?o!5`Odj5%N~G0e3^apWvPn>+O}j2FR|J<2x&oE? zYiV0(Xf2A{f*i>Kyz5zoeUn4=2XvA14^qAicDNmOC^+~M2O3A8;H&@uBI(-K4O)Z` zpG*Z2ApQMKZJqt8RLA6tFIxE_b9qJ3i-N)`$)?v{^ypWq_}ALP;@dAet?U3RhRN|U zV8{hfg;Z@%L0~%QTR;l<4iQ+*C_JDEk)c@eC(LrcHn=yFwUcj?6uw@n>n1H^%Xu8! zJo%Ga>sn3l@V@(Y)-!%yM2Ys95y0%GjL!yC+GA&CW~A1$`D{YIO~VK1HQZ#+ zA3ls%+u6^qD8u=)0Vv<@UfFjVkJYRRtbO=*?%GMhev^l(Ah<@J26lA~hgTsVzmlshKUmu1H9mZOM88|R*ZIi| zi2uL(Kee~D6}f|w+VelpQkK_9!y?i%oBi$rg^Wk~t>SS!XD47}SfdhJHfI4C4L(Pb zHj$dmhjE~VRx&z`qPEnIaA>`N4$Xr2y)MR1b8Z(q^@|61MrXg+v?sX9lD3~d6ATR* zJ3NiaY0W+-*TB#h@Sd)&1dd_G>wAH?`xhp{Stw7{(Qy9ygapN z;ZSkHA&{WHjIV^MY!gsnh?8A@xJcUO<}# zx81_gGTQ~2FzFMwft(R5*VMnxlk)gFJ$1{DqV>C1BO=9-@EA+OaChe?lPD8>tRI+S zvj&`r_ZoA6V|P^OBmq|xyvdJ1(w8T1w?`?YSE!jwkGORw!3P$L?c45EzY+vld=;Nb zIJ@^rG0O%BFy}m&ty@T#auKkec44aO=LpoA&%336yW_?6!M>vtr#XjB=*f*Y3Efx+ zWy_%UdT?G3D*aQKI5US*gpl@ZyPAmcmqlTB_Il{g9EOdvg3v73?5>N$>s*i282ywUgVjQ)u-_*Cjof_K&Zw168J8;!th`9L+z z%LOTN(@SI2VCnf;!n!6gQpc~|xGc$G1>H3w|A|beBY-7d*9o$8;14-Zm%!e|V58pc zy*DDzll~cNvo`p-2oMHct$5v~%k8Z%PVt$0ZF2Z7?73fGP_pwCS?El8nckr3~bA2M^QXVA$ za}h+Oz0Cghdr$YsuUNJ1SOf;B-yvBZG(A17VMB3i5vB0Dzl_yQo6c^z-oi<6k|3bjoo*fx}NV!|RGOK11Cppq+6?l|D1|d}8EB_D~zHoUR=LnOY3!mDt z*~`r@`!g}p31~Rj7ZMOPehzdR#Wg6 zukKvPK7`DQu!lBUE|9wpWHMXNPeUs99Un~RT;EUh6-aLkj2L761;-=ly{gb(%Z)hx58npMJv~oR?=KmIX1@~5N9AAQ ztDSFbLLyPGk7Vc~t#{kn8^Fv{yI$iV z!@+Kiqwc>_&jmS{`&ybdP`X!^WD}_0i!pTCXJ5}B6$}Y%lm>EdB#Tp=sPea-dY#iI zfejNm@Qh`skKghgEyza~8VJgti*#)m9%g`ZoJ0do^^ zpCzTG&a>qev3WriM0aqSPoV*&9Yp$_?m)>q82{10rSjHVal(x~;RTN#L4HCX=6}M6 zvO7zSXL6(dBMj)4oe$6nR}J8ykTxK>ZOP3s3rr>;By$d9G5??;C!)_mwWk-GaF}_( zc0ma0GlE1%g*@a%dX!?Y4 z*yB$A`J>sguE$fdqN!-;ppYqG>m&kqqq~xDYOr^ND? zi%FYhGd@5VTAQICh$+RJJ|F_WIlcoc{v0-&9-7 z8~iMuU%e?PVYssEd2FGW)GR@6iNBc0WADyAnALn@x6klIg=_s~a&Q8NSlmhDq12?& zVds^e+57KiV)yngFQgnpoqo3H*m53&(F7gkIP`SeF%M)#4s+Et!WJlLiMU|)IXN6W_5JkjF=A$x4F*a=M= zO7Z9WkZ;%COtrGzwJdfqHd1Z$|NIRSTdeBlEafwu7>XTyMt`l=?lveU(N%8daok_s zJHb9=^5p|O^n4tnv`O@?Ucb}a+50Zvv(YW=z4^;`DmTTa`}Vz0B@K`08m3GfpVCDv z*0bOPvgL%f@DhQpmDVp=vHPd7mu6AV0_Vmn%*e_=DiUuTl9Rjq`{J~PYQfgNqsSpC z9|R%atv&@~4;8E0T$dj*w5?B#4_sOO^oJNE#vCoKxG{d2hsH>*_=&x|63C^CD=ibp zwTx*1z2|6Ly1APrm{!MTVOu@tZ~i8vk-k(~Z~oP3+Q~3fHs#H|`~5a9XAf&Zbhw=M zijY(@ab?a~Ceapn31Jh;fACLh#oQD_sYC$qZKy|b#(JHZHfC_)?k8Bb$Iif-lu}HN znmLg-*!kL6rMdS#fKIR@4Nb3!4(=s*ew6rblvIwX0#i^h$x-4xTB=+hjenPA(ys=# z%&)E?_=^bJegAuH69dCUR@m+`;qo=9r^B8m8%K4@g(HlCxNU1}eugx_oN2QM(%nkop zxscLJ4I6B0r}{pK6syy>&+_&!)!h9t#bemAIXe^cy)5ko+9#pKTbn?X&deBZahaOR z3bL-~VU9-1`(*=LMy(m%7Ncu%ef z(f3%11H(XG2Of^Id;`%1`ez(lx5n%J-mFTu&3;q(JL?eG*M^ZF+&=S^F0>~xBA@qu z#$=ZFn}oeXUweBCz~KDMP6%$@)7BKzLen-kkM-Jvxl(p6(&{_!3*AiT-=DkMkE$Rp z_xri9R!N4HcqvwyIG&(9!A{joK7k_roN+~p z8^XPd<>-ngH&OLFQZ}ljyFXasu~or@erXrqk6J*ng4L z-kNT~Ud4+E4YGBov~{P?8^qjx0nh|CN`2gan+XlZIG>C2>YRWVk$KYI^dg%ho+RJ3 zlYooaxvXE-nzAn(>64iAb~M{-(R^RQrd9X5!sTE{0z3e&1f*(Xyfz|-0*n$v(t@ktd^!dbSyKBxS`$N|sJ zFmh>%;QykqZeT(N%yqwY(-je@d=Z|-0|N;@n7HP<^0NoT`hB#vQbgz8iM$QoA$yy2 zaAJ57ZTe|J)pkJFHguO2Upc+S*HX8?oa>Y~^y?9oZJG+xG>JmX@zg2J_xNsN%5-&mt^PxOwmw*zua zpz^dfsl-V`^U9jG%{b|r48c_0h4g^e;dIizl!is;^?pMTE`a+r*Hx*fc9bv3*_X_m zQEV=58(u+9H7<1u?}YB`5^cW)83-5#{~qCl@+LSx5RKP_DWjfV9hr+7=&vsAIe$1evg+6Y z;b@oP3C>3c)9rQ#Df~R%$4yjB4(&YC)VFOImp$i^KW_i*>%Y+QER0!<8aF(87w|c= z!kDmYQ2wW|#$y!}|IS?oxUSSDD?>Jo3bxVC}EbR1#%yPSwcT_q#>Po zJ8P3$+}sfX`0=5QPX9%i**ntiUitw>ruOW9=SOLOrsRCWuGah#BcVJgGvK-FQa)OQ zs!e(>luentJ`VdlB&u1X#NnzJqb%G&uRB|Mb(3X0J=y|V1GdXGfAiqWD97+RPf99W zPH*m#Fs#AzWb{WCr?9~)u1K(84{LwJnnM{i0<4YG)TD1|O=b#{nas5;&w~FDg%}j~ zZgay<-T$csj$OjMrTe3OC)g&kFdyLERxW;qK5-m=|88)HNPVFPq5o(|9ltdOYbd|k z2#wxzG+a$Ton(~;c5!U2q6Hlf15Cz@HH5D`x%v}b^mkpvw<a1SJtz6L;5Hictu6kc^N{zX-x@QCACDJJexd6J6p9V z>i_|tZ1D4zEy%RBQ*s014P>$PXu{AfEvOq&hYVO5b%VeSK-A^j;jO%}v@)~}-tOPc z6e19uNk`bcQ+F?tphmZn7h;7;x<2J-bYf)Np#Y14fIL2T)8Bt)*%{Ttqt-K{^rX%W zh_4)Wot_d%0nH7|ez%CnF|*8w{5R9)cJu9K*TzSm`~F`B-cX>BgqSg~#I zBFWaG8&aZPAtN8*)K*Xcz)a&qcTWR_CQV#&0A++hpmfPuy`D~&Am0uWqcXx?J*L9R z%+}zbLX?Q#;>C%i`*{TbLWUf+v1eMiF2uAUPKYuJyab9!Tiq0FsV#9>C2=@c zhS4z=_Aa>lKb{>Qio5vYXWenxsZ4@AELzl=kj@zxZh%b#1#WVtRq6>5~fF*^KVnKG;~i%iJy~X({Eb zia2;C`S0fm`my(N*}o#8!>#pKRJFtZ^j65hw&*xUG@@-z*)&&!L6sQ+0BG~Up_-P#tiZ$)x9@(rRuPt!) z2muKF7?}(G%|25>&il9^*2UWvTke`~VM^9caM#Nk?g*3ympYA!H8_xQGLU%!#{= zf)5fv$PhTiGw{FW9N&f8I@RmB^3+UNg7_E7-oN`2E|FR&RY)*!>;9W!z6!Yl!#}Wh zp}&N$OmP%&w+2tO-N~=V|IrV^~+SU;`&Tt&6I|X<`BvE^6}|Ys|hQ z0(33@-viSkl^m5(zHxND24yU1l=MAOPMPfs!nlbuD4OW>!m3ORK>X_Xp4uFWHCVXj zc`H?}mdn!Pg^$4_q3$`L1N|+at90QhuO6SB8a~d7&wy{`aziAl!fgR2 z*p1Xaj=90D(>5k@IByAUx&9yRMO_0|sFw>-3}*rx|JFz@$tBM47$Qlk&(AFESojrZ z_)X@Vp#@_TmQKh919SHy_Aj^YUsFYI8V0D|iiNLQj=AlQ%#XwufIoc6y5HrZ{N)SX zQ~c5oK=3mI793i9uC*?^l(;-B|NOPV4FhND&3o!%Uq%^PdZyD#+1$oT62C@mkX5JK z*7)rGYkEI2brqxoop%S&@{d3lgyGtOm3hrvycJLD<`ct?gU|YkaztW36U-($P`4n- z>@r8bs;6H(^0u+5^Ob7*0MA+5R>!LW(tk&V7=xd9zpcX}Ugx%E(G*>7HEG&Aiu3xF z?kMk<(1z*c2D+xCw7y4NQ){}ZXK3TJ7x%phYcGAhTBBE?XK2g&6Q)|6t#^8R;jrOW z#`wG8S^3a9yU9@JPdo?#9xkb2HS8wC--}$S#8K*sS7iKW&!zWTZj>ETpJM&xVygS? z(+fe=i z&OvJ`&P^??yc43TZV9V0uV6gw>umQllvZrSX3AUZEvTO`)rDoocJ%}^rJf5s=5KIi z0x$3lAZZ}pvhn-OL2>=Ae-9absy#_4S(32b=$ziKB)wcYI`>!`r>u*Aw)Srw+Q;=u zq2wlqB-qW5vQ9OahDUha?}eH_5~lPv+xko(0~0BZe}v%?1o!dsY9_lwAogH65GI&j+`@F5uGA z@$aY__B_R@EYV1)Zy31Jf@xC-^N$D60Nu}*9B>0*IZsbEgzz(*Wvli+SyFYIBuI@b zDUK=GJMXvi)d#{0UAg2`A|X+`4>+XwI=JNU4VLWKMt4VbQR zd*VwoOR0gJ?^-MsN{TD`?dU<|Jwpaz>!N?6)})^iBd@@$29h*S&~P#uAvLo#a%^sS z@FGe#ct_7SEPF}Wv{`b2?7_eD#aXuukO1G>Zk_DO_C|h9yUeOy&z(wtf1zqrmK5uC z+(jx7N?nc~Yd%I6lKGYr(YkDP18hl$UJoLW)PxKTa= z8X+EZ!tY8s8;2sv<7wv|xE5Bwaa?8KLB->&@{u_&$aBND>2=(lnb&utpiOrPYq59V z276@Bl}Xvwjn+&HTAcZPdRDhH9`4QC?oEKsB`d!wXj74xHrZgBI-{1B1|5*Uu zE}(7wy1egEMLKUAO7_+Dd8@N+PF?P$NxzQ#>NP}uo;#eG_-c3M;~bsTwX`4wL~6px z=dO-kKF(cmmsVTi4NdUn4xX38QKqsldrk(I9gZw}(rs2E7)B;)sSEGgS2U+ADq}Z%TknKR_D!d-j zFJH25WEn~s{h{O}UE|rXd;bAeLf#Ex!~HIL`(9J+NA}wl4E!gOC_(Q}y6-hgyuhE2 zI3}J>tUr=4a-Prv0uBjh`b#(O1W&ot z7K0Fl+Xt`nWD-BUV`Jh^j|y58!55t_!Cxg7FJ+2TWlHssBTvZOlPHj=Wk29_BoT6b zFH0im(_FEj!;Fw5Os2dN&ZqD*wA$xxt>q3+Ia1ldoZhE54YQ^e>aL?+cKjE|y)+NG zl<|WcahT={M7>l-lJoRDCNNAA%CF6Vm2#jL1JORKdA=>eb3xCOE-N>GJe+><4Y230 z?{X9qqsu?m$g+D(je4<96wzVk41Ju;iD;*OXm+COq1<+mc;*!^vv9wq7Iktf8JimL z4U?s$m8V_kf3EUEkYx9vsZE=(QIpT=_B7PzWzEcDl5)b$$jv>1#xLi)dH8Rktqb5? z@6h6;XCu0V3)!xJi<|uW(`hVnR=Ky_m4%j7-opNQMZe+LuSFTFV`H&VHKbVZb^?f9 zX=_xI#cX?};T?PoQ&o@nSBxS)qkN*IGHx87NVZC`1VOJEo7mn#2Er!rNICrJ7;XUq z&ZCqxg6Q9yxoI67-g^{*;Irv*y$XB7@@Kt~cWv6EoI$XjLcgoRrt%38O89rzxFU#vS-(-~BoJ{o3gz zdkTewU24WJ3caWR1PA|pf6#NZZxk#r!f|%md%~FYWciYlD>f5qB-~$q7O55|)oB~Z zBAu9G`+e`=6FQMU+DF|ivX(HVfPV-4y>@clIOu30=9 za+Qh7HY%b~(j^MQt-0l{TO~sZ(_2%J>G3Dw-W&3HX9w|Vz?G5FC0EAL-Cr)rak`x( zYupRpj!$oD-ZY=YmY0@6JMRfA+7BTC&FA87Zc~Y?K!##Agnlu6fsc+b4(x~En@$w% z0`BTvx|pqNq=JZrAd`@-s1Sz+>`2n73;O26<%_MT+&1zzm@o(oximmx&BJ54C30|o zi$v3a6$uOtX}z^G7ENZ}|32V7r;~JjXUu(r-<=zrmBW@An@`F?N(6NbhtO0Qsq&VVTqRl1k-jqqr}Yle8=_D(v-JO23eJHhN<>I^1q&p z-Po!!XURtAAd8|)*02S#Ohx;BCE z@#`_?nGU%j3<+E?YF?i)lx>7ngt`y)w#N-iXyaTGo)~4U8J5&C@97qlSUia+K~yG8m&4H22=qw2=1k_?v^J2tnYE9)8=GLIn1tDqdfu31FW6_v>B z+88@PFu6x3ogDR3(Jqe5$UE5Cyf5{#*=4z`-r{V-Ii<_|Mg$(!{At?glT6p+61gz9 z3fxhx(~Rk2BCcu#a_0x|Ym*rJbAb<>=pEac9y0`A{dxi5Wl`1zw&`5ZIiC>U!`NhQIgj)Rqu-*6y~BH#ec!e?#bkXG-wlGwNr|fVv;NOIL}9 za-@AjkZ2>Mwbil1JDTqvYQJ?SlziBzZd?8+g_H@vB?<|i6k02u&M{)!uDS0m@9xjH zAl*Y7piBAeK6z70aWE2XmiYrWE%Z8TkN5Y8rI_9G8nK+1Pg#GyxS+0HkMjC`@8w^a z`mXG`$IJq5E3Im^T$foZBVeR$1tJ)`Sn~U z)+_%S?e`0ATzjM^o49_EV|49dKx7%k7Kq3HN;r5Q6%BQ@MT&zQR z7+9Y6(HZxJXm8f)k@8?~|ENlL#q&cHAU8_?q?%JA54srzBpBb_x|J!IQy<1w)r2L&4u@qPe`@DYt`p6# zg>ArvmmSu<$^P1M#gnyPwOnU$d5j~#RpXymfAPxVn@=fGgN*PvcFIW=C3rWTw8_lT z=+92vQMjscUCIPDqeR20$RHirfVmzurL*hb2U_3(1x`rW4gzrFUsjo^k%Ysz;AgpZ z4;-r7m_i@{87kZJc%XfKcUsp zPdMQxsg+fEnsSkNT=XOpP$baBVX6|$|C_ptfscg1)eD}3qNE%s9fWd*5@!dN!D~Ej zto3k%jv4nM7ad>SaBt!m2H6Nem(`p((!!5K;GV=)p*(jm;goVQ*5MtDQa;X0nw>l6 zC&s`}V+OgG4lYx^Mw2LRdw~k|P#|S*f}2XmPLc5A=kb#x_6-l3serM6x^Iu_lPISX zssZHIG(Jg1@+$hgg9KP0_zETM{H>BXh3%meH$xI(J9JGu#T z7OC7jYm~3V*Et=Egu_e?b0RLO<=JQ*sYvP%>k^KAkOVqU=t279c?b7{&(hL-gU$@o zG=QfY^P||~Lo%>I@jx;7SWhXuhOM_-`0UxB8PEAW7e&WplmJTUy+<2XxiU~`^uE*s zYtATErM9O!3giAE>7h)m-ZrJm-aMv|ZgxZzJkU9w znt;ie;yVA8zYeUw_pini?ynk}Cx^&9>=?ixm$1aHG(wWH=(1K8(*QHh|IQ zbCw)9e7Gt_H1?uKWqzsW$}0AHrp%Jc@ba!;eY_lU`B8I@ZYgu!`AGJIiur*j&*Tf| zK3u>@`j87LFmk>?BLnxEBD3##GM{qg zw@L}}{;3>dDcja*m!yz>2$_-U)0*)OCT-3b3ofCxs8hM`lbW@3qfdB%CSW}?ijac*UT_PB;gYf z^uQrL5Y@nq7VN8o-ux9=gZs_+8RinaJ#Ez?qy}Tq%v5SCDw4BcwNpT@Ra>k!W?gAf zqYaww3;gAd9vv?TKW<5mz2k<%pKirwb7e%8^~FToT;CVon=LJ-c*7MFKckTl_gA+? z_9>#-p;d)|8I&MTp2jdtv&RAB+<#zCx}K~YUVS?@me7D=@Po_|PqxlDE0 zPPp|l6EzCd*MMRH6N85bT07+-WD^?NFX8h;#bPVP@!GEP%Ux$$BNVo+CpPn~vgQ3kdqV-ZLXSJ^GP`PJ0{doULzx z=~q-uRJ1{-rA8P!Tuc?r8LL``TUApIGT-~!2=kEG7@w^T#l1Skl+6WweoP%vkY>E* zHB!>t8ojDu7@d2V{F-VqXoSS)!Q3g3`N_byNV#t-2SF16ygK&Ph+|@4TfIz7>NmZ; zRzx|QT(T_Xh9};#YDQR}m4TBlTw7WK4-mkJ!#-~tk&P(F4&mYTKpx5`q z$*DtkjH>|V$t2US+R)MSF*3v_;p}i@*)~--ik=J_ns6vO^AS@NM}}ZMM!}TQ`q_g_*Zj6~bWe%SKi;65BFE9)Z9= z0KGd8e%a=tQTcjPz-WK%zYl4i8ZeyXJ(2S3i~Di&q$M`aSM-gsQ5_~{+&aPQ@*x>Z2ujf%rl$dE|I+t{R$FDn<=>MUipur8i>z zO$GXVKl{t`oR!{O8K3ZL4#W83)#}UZ50b3ug0rJ6~{Fv%Pyb(l37v{YPuM@T%`sy z{>N%dGS;~Rn#jA|6Op%a4)C%G0wO`3mW--r|L#L06>S=W<$mbW z2VAw`j{J(l8O5Lv#onjv>ZuE)e#A4*TQh;G%$wE?)EHvtuhW!ukxc zbK_^}6B^uePxaM#5x!!ju4nqATkX7l%hONBDBZMecbHc_uZ1zxFizVm&Hm4A1}iZqca(+*<&O?O9U| zEvJ7{?9;j$E1r#2cQO37{`ztL@BSxQbM5hOXL^#JV>p#q;zF5R1%F1=z_3}Bl+K4u zM`H{gltyE$Z>L}0^t;?ya8dv?avU^C8v!q>nm$L^h|?2>?x*9VTPhB$Pa<=6Rz(da zM4h=cL_oQuoJI=uOjJqICQde-5Y=5q{39duoiQb^Q%L2r z1dp`uK8n8fqhkg&DOrtw-uvu6q3kkN7~;Mw4O32EG#cGv<>?r{Yt6-xa=zdGpZwt@ z?~_{D zIziViFMYkd2GqtNDVE{3uAGlV&9i6(OZscLZwmx&6;CK+hd5vTi$*O*RjWr9CY$x? zZ6j#MKEg=ELyYooWb5|k(X50rOPN+&;ZoAvZ4$>H;F4rY-Zi}$`u(9i>VST_7lJdb zJo9I`)S+7l2v{I5uuT-Qy{7`TKd;@b!bH~C(>bn*D6s(E#e0=81PvV@vcI7!lkrJ(M61MH{LOPUM$WI!T{lfwV7G^)mtWf{~@J({qpVDj@NuDcgCbA zhIzl7;V2LY>Jk@~F)<}@-Is?ku3-}W@x+Xeh)X(zS9oS3%~VJIwP8#KhX$LD$zul>xdJU0^Ud^`W`tkr=2K&M}0R?t*h^%$&gh z>zJl7={WopOs=aLNOBrKXo|ezyLr6clkEzLXljO1z(b0uRxr`?jf6W?O}^h=iQaWB zVJLIme9tfx^I_Fu{;k{3LOQ5KrF0)^c`&MOUQZkfNn5@Tb%Ug}-+x|Zo^J1AFnP8B zo|)DCJ`?5awfSoD^z^2(mBpS*aNX;E_Xl$Sge~KHRx|(_n;|y$HcuQl3r=MC#m?(e zi%OeqpUp7jynhe;x^HCV_|1Ek;1+5!vAJ#IH^F`>P%2Sd)T# z6LLbb)z*aCQ7d$ssGB9H{4=IdjDcbGce^yvckTW3{t7I-?cL`bZ#bGWI+~Q&+*$6E z!sk5cT)*gYA)PC5mPWTw2evhBpkWs1qpsQMz+kHC=%q=@Umkn_mBimtHBDB=EU?>zkj#j%i71|LBIy=#5 zW-ZUEF1L2f)+UW^K=6_OT0(K?c#`5-;3fzy@HRbUbi;R3H+0Wdl zYaCHO|b-_hZ-4l~1|MKoXQS>ne zFM6zR0F-lS0fuZSXB3}UEjYVqx)}-J_l@Yt6q~8>ML>46;-k zBHOyRU^)xAPxD7ZyAsv=<3eGBd%3#QbLzH@FhsYuR69G4dyn0ov~w3LesVCAg&!#be^GdVpO#k5+7weiHT9d)u!^E30CY~Zfn2(=(@19C-hIq z7Jeh3I0IPw^9{Mw_f>+z7k@#A(N|&9zmlOptp>{D5-eqCw2$GqJU?$i?}V~1zDdl% zQ2qKJkhOugH{D@N9Y1E;WVtWwZzl3GtX$?O{%8us+mO=>Ke9=Z&w72{v@GG|-Nx`L z4}0=`BR_f%H?_jvGf=QN%V8bUMpIQ-&(XLGmQz~@r81D7uxvUX2ehO*Le*6V>u=^J zC=+_OUHc3b@O3Nx@5HHG3X*02t+kv%_dV_j{dIr^(bHvmsPO9lg(`f#}DHEm)7oS_-z}=$bxOOTC^LKCyzF%Zm7$=(`gGO7xz^7dv zG&kkMMO}m75yt0hxpj+;{-K+n6atO1;VxyKELP5kCQx+N%Cp%ok}jBYMTZ|u9kT^x zTls*D#r66;XyRl6+WktF~Mp`2L^e3JK=zPkRCnaUI3 z;N`Qdmff7bt9+V9=Wy#}XXgagK6R+0&E%bO)~GKj=n@xgbko0Qtu}CAPptii0!}@l zw9H?lAkE*+9;#E#N23xyE@$ln>g>pSP4pppCf5$;VcWT*t9)-jO!g~-KcEjnJ1#vn z3uL}Aol^N}zGr{Op>^4Whd-wj_%{zEICu&jiwse@F4*3S4y%(YB4fj&*~*`=C#zWz{}}7FJ6-55Zcyv{(scafQu3;^TCc?)A~Llr@T#oK^JXD` z%#ASNLH_DC+*N$0a&5CcNrsO}gn*A_Z|R+X`}S-0VWRt#Bb4&g>@sA;pDX-zm0*%h zapnNs7X@u~1(S#QLXMUdY$T`~6}}m-;B%5a?NrCwzO$;#Aeuj8t<+eO@JB|Y{}hk@3cfkLv1;wZ)S|MCW^o!V6cF6{ z${}ak5;;(&?ODQj9Dl`3;&=x^8H7R!pLXM)pGB=~@XGWtOwUWqT;&|--aHZ@AN0=* z2?^??blUgL8v5VZT}%ESDXr<~0(l6FOoo9FoGSrCW&uO`giddZhbxOx|OVHwSd}=;%$| zfQv)Nm!k!uSZ&jBRNWO^*KbQed1_z4>%%SLHOG^_&6;Rp*qjn$w(wMGz5xg# zT)~DRx?m>FR$5vw^bgGmc!3pYD^|aw4p#!Yyco6$IoCa1CvrbK48GBAO~~brWBnmH&{g`ou*T%*0#}aQ zT?4uwA$7k)<3zyTw;i;|w%(_#QAfHaRrfFi>pM>{tn5TQO!hX=3Dy?;+09A?w7b|R zsFSU1n;@M<2Oc1C*|%;z1|F!77i)e%CEPJX4;tEf&XpYF_4*{)r5Ephh_ zb&2?X3AMckPQZCTs(AV>qL&(RCHh??-g@y|Lz0VM`PFd$No{3&D{^0PX-B;HvQb#E1A!Ws}qZqbVQV+)%)*dbG?hjqq|U zU2*>7ffdd^u)}_Dl88n>b;?$whqAl+80F;#7vS0MbnKSRe1u(hJkK(hq_ZDc37f&O zaq^}Nbhi|yAA*7slvJL!IUt1=(syOvrg|A=A0b`|;oi*i|46|Z8{W|Qh3Vm(a|>&j zNOy~?dH8^-{m%GAuA+gd*Xp#t6KR(E0M2gF}2?(<<-g& zf4_hcOEi2ddt0ATuSgT}qmA0%>*_$k()c|Ko41B`Lp+;&mYY<0qox5$K-1ignH?oI zKj>Q63z-lRvBeUKy?ph4mVfm{>dz}`nx4Z)m29g{`7(VbN!utr_&2fCJ^-azR`Uy3l%Q%b{Xq&;9eKN&Pp#g2<6+y|M}=1f z{BT@0R1NqgJl^lDXgA*Qe%DNw^7?%-};N<8B|KlNE(Q5XQGfrKp2V zJy;0L3*B+~JanH}nbDg1L%mC1q!=j@0#^R^_~tRa);+{>&4g)z!K6p8tQ+uTT4l_5 zbS!yA=VqelzF&|`iv$JTzuaY0%)m0oAw}>8_@rpkHq{+I4^U+84BXtETYEg#tOnP} z?%HpC8U*bi6_GL?n_UwuTodZ_wpr6QTd&_=dP{AI`8j-Yapl^P90Cc_F>2OxJK2RP zXv5pj<-C?24SSs*h~8;I@31Hw{bvcI12JN4d9kyPg+gpTtz29;1I$BxmDexd3$5`= zTc#8L3!m$M2eTkghOYrC+C*D=!p%;zm8%)s=!;QU9)CL%$ZPeZjK{EOgNQo_yP%ut zXRZhmT35dooq0->a9l6X0Zk#Wix61p#Kp!jRV*)loOekQ>Rkw=K5&M2v>ZEtY695~6uD%6t2>{N1Pvgtg z#%n&AoasuQD=2pj5Me#qPt=ef=KNrFRjUh(S5zguH{D>P&Z9|)l|Q@zV?9{|=10Ar zgEk4!h6KUtBU>Luq;`Rjms=r#sdI1aao!DH@C;BOa9t7e87#0?TOf!LZz29m=;Lci zbs4?n?)~SuKuNC*R8$g(;qJS!TtB!}e$TqzjZ%13*>w)0@K=?{A3I0Xk{}vEVQ|4K~ zrHkvxld{`vZE?TNyXK8{YP<;)spw+Qe52S}@a!JuC7D}-JhJtm_t+ck%{RLxz)^@b zlKYwsON8dZy?y(3r&Y2L2mwk~jH~wjx#GzxJOU85=>K)&rrp{1ebdwjz9yMuk`*)^ zVY$Dn5YX?MioTQ!fW74g=i-LP6IgOa-3uK9iG^Zg(xD^<$Iu+dAJRuFe{vv0`a?^n7qKtKEFCVa7rKEjzDY8NQn9k}oL8)-%w6M95f#clK zk3+{$8@C3lHu2AR_puX!g~m*HG>z$HYHgB0I!$^J~`oU1%THb53{X zz!3tm>q|ll5xoMh`&7AvjJIyT(V?y03>XOVQ@?X~a;^vx1tXrFz}k0Rlgi08QaB1U z{fLPlq5E9niK>`1l2_kN#U;FyZ5MuGJgth6(sh0mudQ!Pt6-0xXL{d2IIT#LFCF{i z7YYEAFlqoZUa~uxdUX7fjEGa*o$Khp4K##Q4wdc|$IGwk(t1XtE?{lD@CIEMXi=3p zs1aCu$70y7f(YDPNp?{%UN}0P#tCM^Lbqt~Z3gI>JPRd490Olkjf zisG>IsXQ-sM~xhO4;2r6e}m$kZ%PlC$9A-6IOb*~GU4Sr=lwCegfo;B;ebz$K$7yU zo&BU-eYAvwwHK>Rn;B6owk&(J?SN0Q#1X%@Ub>$(d#~44TJ@QlKU3~yzvR%bruY?% zrBkb^$V2o+^|@&8hYNQ!Q8-Cu&K3Lr{ZQNBS?3npES3myf1?E)P_>??YiD2ux=yeN zC7@sC$n`nH-%Jud0ooe+St*9z*avtfOj;m5r<3N;nVtKYvWP`rD)e0teZBLH)X3WPc|Qxv3}y?AVg7GI49s zK2&YuO_XU}qaWV0yl9?;T>eM)YCEAKQ6_*_P60EG$NijH@nY=(m}@$Yae<`FbpzBv zgfXC#e9Sx|^c@hLx6&FyK!>oL6B5uc00@)mj>+6CihnZC+okj#h{*y4242@e8`L(Y z%&+N_9W^0He<0H9KY~ndXOizC!y+64@;|okL>RVGS@~?j#l#xdr8l#|=@pFZC*sfJ zfcN-+bAP;1xS5#MacLPy-Z}Xsv=BH627pqzw`fFvZtq0%%qkwN@150LvWbG*G!I3T zzo&#&{0mfCNPJ@jX}jDRe&k>U888d1eL1Du7vNzRd+=;q(KA(SWf%;+Y8#Gm!-g4$ z1*zo2QHM>oiF-K#3yC{{N%cCmCNgg4(ofLkJSSFS4&3iy0>2v`(_(q^Qsrj)`Jbhu zCWn%GPr~X$_b|OphBpx2`Sx7EK&As<}}RnJrG+a;70QMTiWtX^SMN+G=Oi|!KkiJ3-?5Uq(JDMw`-!{ z2K6@tF3HWAiz8hrqs^#&ZY|XFs7y+?d?jNgm1}r`nv1Bb=0tbpVPuY{M?Cxj*dbjnyS@jM^xj-3pvnl%ck8% z9TNdb1=X7_=cP(5OdTABO z@@l4GD=YR=T$O}a5b~*2yHi-Q5;3jfkSUZZ`AT22Ps-rRGkY)%C;b1w`M#!i|ANu( zN}zYrKYJrK=|5Vu)-ZPKv==60Y&=%Co0%%ff{2gfL?C4A&34G*%<=qiGYqNpgQYqx zO@|uamCy=Eg9ZWF8=0xOnVcx41xe2G?ARV zFDm@2l>BAokwk;#ONIVsTXY~Wy$bCN5smv~N7MUZ=X7SoU8CqPnhj_F;=tzmHs}!} z)><*F|1DEs|NelCH9P%$_uApVq^hl{*)w;4!Xh;Y_@wcamDswBT3H1c!yj5G__UuO z_GFknX|YXOct@=Hm~f`yB}l9&Iz44ck62k-sNX4Ov=I$c{aBzkPCm%MSFS(sviC%Ib?(H;`Ls@1F_H@&15#qF*#)ZCgwWJ z?kR!2wL#B#aps9dHHfv6S_7!Tryl%PxRM#8j;m>`$%)qhxBq@H?|FSEh~mS=&%Ko| zKpc^o5#Ws}VZ&Axf!JkX(umfhUh-Zpn9z)6#?Cu4z?j`<#0S;y{`<{Nc?uG@Je9)QqyV zU@HRAQ5GyBzE~vuvN&|jeLYsDN^aCW#93U@-n`1;x>X$f5I9WMqS}mQND;c&f>$2Gw*!Dft4uv9p1auA(XaiAu}If#3kZ$#?ee1073U|>= z!GV}HEKHK{=EP070Y=^0FMh~6qorGBw~Ug`@9JNk2ZAF3+dm&yQ$76)mj1*p3a09n zIao^Hoh?$-4EjT%?7X|J#rOPKlX6v(UQ1RG_SV2<%Os;1+R~dzXy^Wn1uq zCgA>yKgR=6S+lgHgDvJQ?)V!MzKi(-liv1o2G ze%>BC_z1^g=jy*3wa4N?BYsZW4++x3JBEZKI;zzAyAb9Uh~6)j`H&knUkCU{;vT&| z<25+$>DNg*h2l4?f zZxsXMG-&lA?(48<7wJjQORw)qEUdEE ziSb~l9{sMNu<9DKP1@bBzuVpU$%@Xjqz}Fov^P^~>~)Gs3u@N6Ft}c1%?!<;)l57! zo$~>)W@e=JwBGLAN2&Gb7c#tqv*Dq=+>%NI&+0R|6a{ZiBygD^@{Y-=OVJ#;iq2R2 zg^Nou5Ye*@9CzPOQiJrmA7Nc3W^z_HrGLP{BOCYCkec>1ETqb|iFN!CtXA#18T^Hj z$h<1&j7vE!xrp?G8<1c3nRqXDUXu^M7Hbp0OjEnL9DFrV{ZbAPyUt=%PJu6-p+Q_W2+SyCv zV9U^9ue^}x$?^(i(Z2PD%44reN8Xah9BN66c3@3tnll6ZR;}lw?LBaoC6?pH^By>V zYm=j#?!u^}*34pYZi*8^vtOE)KV!p`{e4IVq%6T*1HF1@*(8~*0v7pC`>yMne-Dfb{eB&*ZZ0c>l2d&OT+=C`M?biE_-#kX^_WFo) zds)ny{_pN+Hy|DoV1gfDC*neBag)?q%DoXG1)7jU0idCAzzHUZ}~@+?e;8uIfqiH<6bglFDa zLB|(q*zqrghhE5w3Ta$X;@wEa#k0ld$A0c4-()5Ojwpvu;>t5Oxz12uIr`~{g(Wg% zM@1c0msOXKf)JgWyb@pbN3N&qVse?4kUG%hrPRX%>0N2Kc^$4-7uVaZHg^aQm>af) zTD=S2J>p!vR_mS~!-I=5B?;rW*1xNiVgX$ewJZLM?!gNStjg~|fPr$$vod`8g8tr} zs(|Q~!5W7nmV(w>5i(@^{W*J`p=($E8|a{J|7(Zh@fy;i4To043FGZAOo9~q`6_@E z{CVyniyLEUS&E+3Pv7>j(2s_M(yFuxx{cgzY}xp?IczHyI2bU zo*ukaJY6Sm239%R&~z_rACKGlYjzf~yRJ*DHp3h$6Kgixz*qR8uBnv2c2IT+I|6%W@HvE z#R!^tekito5z|8QaUM*(XYA|^p*k({9x1Ymv5GdJQRWpsK>xv*c{Uz^t6x5EKV_>H zI?V5rX1b0_a!$zVYq*OwJC?#un+YyIcRr{h(zz_BRmz}kARMamPg@`%isS7$+X5E+ zm+BqJMycd$z?+P!d?mR7EoKp9+Se{p+sU?5NHgm>4eM6X0yKjc868Y;|bQ-`~*3Wec1-nsY3 zcE8Hi_34Dg#{96#YdXF#4&fDt_Ztv2Ky*OMw+52B#dh#{}Uubv}svdrum?zt}A#DZ4o7_q4~TohXrR=lpt#%R(vA8ojg z7G>?v=WTYPzWLam=1(_*y>6~hK?9Yl1kDr(hA)lB+MHUDqL&bm8U5T@GPprR3x98LE zkrwJdn}-A5kE638AbV(sg9_w67gnhmQK@>*XgQhR#4~jF4}A)J>TbD;(1uv*X`NOzIkHGk~Z!(-ir&+u-F>(ryE< zn09`yDVvVWR{Gu*t;;*BpOw63IGO>|ni7n#psuertu9f2VTXq@I#i}(c8=2qT-M64 z=*Y39V(?kvX7man5;F^;t+n!|9S(vbat;KNn)H9uMXvNfWyhw0TN62+qnsFr5f_=z zVVO(Ovb((EG9CDVA*!v%T$;HGH^ZV){Ni;)Qj#?;fSV*hHYOQzX z<{od02-}V}NlVRMC(w8GzZCbiN90`dP;2|>#TAUO4?DoRdx3XkNLnxZ#LnX-E~e5P zl=e)9quC0ZlFtGTyuo__Ne^A$knafhpvk=R`l$bWv%~+%&O@gcHTRF!dgwsAHh_Tv z0O2?qKv~V{042BD-s9yZf^-oRFBy#q3*{iErlWs-)E}wh>o>dypn@vpq6gOY4mUx`QFP8MG5Vni~f({79l-e%g@{RPJU3+?qA<9R<#Ro z&77T8^vnScA}})@@37a*^5Q65VxPoo zlF`}YXlAR0k@vDl-I`KiXdkEAgCpNVb2|hbx%=)5CFRJERY)$V9Vz=Atpoimz9ec1 zQ@!?lfG|vHdLl3n{;(2@FN3{&#(oNU?3}I0#0taI(w9#3!|Rj+E&H$FKO!>V5lMQQR4~ zW_vImR||@><-_wMc{s#-u~odvA=IUs-W>iId)anu-ujV;pWgW`J1s3?ka;{ zE>h2A-EN2v9eDSznP`0_$nn`ntSf_l*c9&R`#4g~9eENm6u80-j810EeHpZC4W2mg z`2OVI(@{p!{hPP!$y%GL&1q_Sf0DISm+354<2jY>YVK|3@R1i;D5t|cFpz~_SUA&e zFU#Q?Q-5%muj3-&#U3P7YT%e(v*A+og{*@+n&lJ2pYQJVPKI+VU89_DEM}QQdp_6C zl^h*6Rm^DUb(Wa2O!<$2XJs$FfXIv`uF7O+IR96Ut`dRkEj$;INrnIALt=hS>i>Y} zp(4QyF4OZzdE6!kbydDgtS+js1ATLSf~}U+{>zrv+q`;CwIEe%;!BG)s1^~ zv@$!R~cMIpATv1tRNB!2NcE}WLXoP zrzxB}hjEZ&dY-z3IV!1{**5WDN&Eezj`Q-MX;ItdvnrkZB@BXL1WCm(mb^AB-P2Jj z)?wAURDwo!hPQq_r0Z`43QA;s9$Oox@Nf3DXeaSp^8OmPXR10Ea;(lb@yoI*p&A7O zP&2kOb-S7qSq@Pp+3nPYd!onE3g^vnLUJ+^9)=b%@Rkg>6;pkw-&IYR3w^@*Cmno| z#sFr=V2+l|u)0~#FT|N<<0D9mkaq$7J0z-n#nBQn?SK{9vb?^m87xmZl?Uxc2dr;; z&q~{T8e9Rh)IDd5nZKL`^+eegPZ&-)HEjCk2`lkRYw5Q5xbQ`3Pc}#fD zMs{q8m;Si3mkKE99H+TB) z{KR{U9>6TG!Qocugqnaoou+@wgURIPHU;{cRFE2@wN{xwtK!upSRw_9wDb~G{aCH@ z4Z=8bCy&q6xFH~sbP5vQ^A)rKdy0c{76(q5Nzi>Lt_db5DVX;*_uZ*&T^r8Yl*b3U z5&JuGrHOaL;!l&p_Bvi=J7;a4pwH81<@~v2D;aQu$+*E2a=;P!FeO|5P`r3a#ud-s zYZ4(kv!Mfz8h&|Ajt%ZD6j|LZud=)*$_^BWprVd1PLGMAJ_k+6C;MovL`l4A4E{HE z>AGKea%~g`0e*b$2ZE%COv^p8%uPT75(G@vQh)>fSLp)r3MX>-NKpRqhGtEgaDpSI)HeE@Qz;-%$(9LXsT&^3lXh(C{mr-}0qcj~9FNLn4UThWe^cU7= z<3IsVMRGABB5CveZ38qobHQ^fkm+z7D*QDqkjJ|fkFsr>ci@)&p&N4vAFg`>infdO z$o=ym*pn55+o)c@=S3KN+Ne(QHzmb#5Ska(nY*YoqLHb1YG`%YSr19LT<1Mrqc-L; zsd1fMnECzMl6{KFihGh|c;JQLN9lw-S9oUZp@N~LvZ|8>N^eINRIBZgIkk_9i3k&2 zvGupib*qU}FboyqEb@)ED|7{SY+itpq}04t*$ZfkF${t_K?ezETx42E2@jO>r61(# zr*mZ#ZS@nckUzg5XV$-eyhpwpA7|s)dS4ZNe-nH;XNl$<<)RdD4lN%Ys!0RmqqCH< zwoIS@D0|{+Zs?SN8{%bo8BttV6!pm8;hO{GRoKWKX8TQ*_{_u4^{rR`9|%yx_pOQY z_YLC@g`{k5XVm1QZ|~OZna48!bfl;8iKn2l89lJVN((UJ-|%SjSkN9T*Y*ny1;$_h zHXPmWnz+X^Ea%VyH3}@9&v*p#=J+A~Q>MegdUQd7*8R0V{%96(fMxX)-r=02QeScpU+>zEW_9rgFJVu4UhNkC*ExOukN>ZflgXD<@{Utx(|YSw zTOFRe()(;B@6{A9&z}W(7eb#x8M~FH7x%da#sHtv!#wLO$cl{$2EEHQV0-&Ba=X?O zEeFnrFhEQ4e7qk{|{U4 zN?zK0;pjk}o9_)CmqW_WDQU_wY8A4YT`8B$In~z^J-dFcmb}##Vd?HqXpe7Rk+aP zneouoY0~YDF>_}J!MjaTgKtnZh!4;4aWk9@w00E-Qa&Y(@)Cj}3?#^rTcIzWkMVq; zZ5UTO%_D;TEaJp=Wr#LS1HX_-58e&R`?KFtbuUB7h90)0r}^4e{YH~T9TUi+-WbB!Y=#g3W zwii?HnRZ`YbaNftVEMecK?~td3)99ZY&7{agJ#mJ_QbBPoUMoIIrF$1Hx})hFuQh` zs?$$RRgLy0mPdnjf#2P#u4?TtTLPlPbvzKjowv!4WO7=jA>`P}aCqB+@9=*TAThWV z2v4|C_-m+-&8ihQn~a}5nFQb`hck>U19P1Qes$nB#Q=UsQV$q`N0C|Au?_&?sxaE} zw1{mcsHZv2V!Lm(7W~D)A4B znWvFLg%ziWiZk_umx_&&vLx8XG#FHir==#K-%hN5{=yS8$7l{|I-;2vO^ZiSi~-6_ zGE2BGU?e`%zemoYP6I)fnP^7KMnzAc_w$%5(y~W^slVcWQTdl#ZWDEvFf|%e8>rTb zx?*XvOfzgSeUb0hWkQ|=YM?=hLBxSq)*o}OMo1pkpYAa6mB&4J+}%JrZ$g^WLZ1^1 z4-?KJd)8E^5PqtuoIx$D`+)u^S772E_KTEX`S9tsd~I2%swG5xkQrX_R<|sz%LmRp z-CTuxTs@^R6Ke~Xgm1QwBtelqMH8+2*;~)*i2L_G4IlI)D73)wQ$&g9zp-qy6_F(; zPqPYdH9IGsw}7W8OXJH4Yvjo6gPa~KUr)%{{ZwD~VkG@16<^@1_gtKQbw}0_hwOou zCyN;J{6jtVCXwD-f~oN5oLN#yRm*FCB*q-7%)^gS$qqABLEanDXH+AeSBsmCJ`;Mp z*av!)Qh}(S2ba*c=*S5!G%7a!^!j*IlNtbgpvgM=%{evG!Al114@xvYaDj_ zf-A2*o$X_k^r$Oobs@m|&*a2*`wQ-m%t031*(Xs#<1^B1bBP-KZB2#NLU=u2(=xkk zEJ=0fZ6}YF(pufXOTR|F-S`=9nDU(eV;9=h1XYorzTJMoO1~jdidS-!M#YjaZ#7Pb z#P4w_@&#OdWKmg^7tTsutMLHUDpY!W?NQ*L@%1*tuLPeq$$)F)q8L*5R{epk62eqj z-VC|fkKyC)tmJ$V0&VFmEUi;8F~|jAG~Lsl04G%m`>e9I+fGU$+7VBb+jOr^m+AVF z7E6ieg?le1Dc(GU++92Oen0;#s)a*=FqLOPylyF$;&G>Ry$(g7*40C{h%++b4iVsm zMZ5fE@d5_rRE2ApvqSHYv@>iYTO9BSSlW$vZ3`ppK!=#hi*E?c*L|h}S+}oJRj~A* z#Toa`d>fI?gga2Qiu1X=zS?I8xMk9(T@al|{Zi|B%>lclTw@bKW4qMlYWf$kV3m>> zZqyq*sfg%x)M+qdNtR>02fvqiz&iq|lG7_Mc*7*pd^%Du4*Mb$xV(S=4ty44CLP2b z$1~g9)Hw7Q45%ctYT_ysN9a?1gO||$;J@XRD2x1Mg##f@*8z|8Ncv8do5epU$@d4b zhy-tqvY&s*|I>hX94WrAGZ&*^SCr!KcJb%wCQq)Lv8J{p&}xrObA=3&B?Ubcm$Fy# z;OLj;QG2wrxaCH78niCW^Tl?H+PyOf?wcGW+#6&a^L^DNvhs|I#~<6}lB`}lvcyRO z4gNE5W!^SOe1kU$bLMRnNrt0rV$Q~CeB1X)SDO5|XW;ZEOu9E7-P`mVEzZ zwgUuzA%5RMtOMK95nR<8hW#%OZ52HGVcQL0y*+D*_AW%{Z{pCf6=5IKb|ip^p#zJ1 zSn+_aV;N1YdlrZD@Z0XqJHI5a`cqIJ2l~&N!#+FjB38$b7Cyz0cvl>0$ji& zs2z%ri+48%p4JetC;P)z{O*MTm&aMWKAY+^$b~Bvo?0Hk%i{;R%`|x>_b<5x6?NxN zH%c$zR_8AUvC4(OozcJXPchQJZ#owQMzE|HaRK|i4!Q_3)V*Jl+Nx14W?&JI$$vks z6hEOy2$c|<~veJ!#y?Nuh$Iea`=~nEe1m?scRYHaN>BrB~1SLM!RPP zM|>i2`}ju>%%q)|+aO})`ByTMX=IbmbfLO~p(FG+lQS6oC*&CAeN{GT9Z>pZ`4odt zR+n6&>tAAiRwEDkyQh>Q(mYAMk9!rw3nU9|4aP}a}_5-PqjrT&e zS}P~s*s|o$%=iPn)U&xB3Zj74*nySnI?g_vTmVAi_b z55LZLAvigs`9l$Fjfgq94PhGUC1G({dQ+rc+Us}o|L%bYNBx0oPs@QP?2(opYco6~ zZeb44|Ph@x}n_RZXu1crxn?D;&U#lP4fF~@~ zJn5LZ>#5 zX26d3Qq#S)NB*D)J$411Rdx2jIF#8}G!~S%n;!wfeV2e+5Q)HuyUnZ`u8_W00$)6i z(-dS+aj&(k4hrMgn>OxZ8`{HI!@%rX%-MIB0m1aF7T)>8Vd-z@Us;gfrw4cB_S7{W zk4t`RF3<1RJ@{lXXAyl-WXwy3gfur>en2&>&r*kvQ48%shUXC^WZHm*L#51Q9*p8^ zU75o>3$B&4t(i)r*#}}wUVm+@M%9zSZ^sQs&9eMqvs@HYNYoYYi+6Qs4n_~42 z{45q9&d_|XAnM!K)X*Q83ei+KdT}!4d#8BGl6vpJO|7w8?gwdr{Qjpc@Z2VLZ;7(C1Ua@%L*}ajVGnjh8Wbq1KJ{RrZZrx_c?0lkZ^L-I4J`xl6}jao;Cgk70GrsdT?>KEHDgQ4wg~ zzY1PFkvxgeN-3!7HM=LigaChV%@VGLsFZU9l-}5u`L__7xY2=71yKLpcYsopay7i! zn&-dY`T!8_1wiZ^T|5?#w`=(LX!=K1`ZM9U@s@fw|OO?`AYZFDS*n5YnDr(mrsj9uH zS;ST|cI+SsVg?}*$?bdpp8I)@`}r3>$B`@Nb)E0`>(z2j^>Uc*yG)1~P@hb~R4h7R z*ZAPDsV6fBICw-IX@0AI_C~eEbiznn0{UZ0aL)nW=2yQPv9t^X%k4(Dw1G=0v{lZo zg_-0}5lg@;hrXnFnl&Z2#|uHfyQ8j%Fe)=0!WOBh^#g?`==M<-&Q=`d!|XL{DZjAg zfJ$EG(kVyQXAJZ|3fCCiDk)#*s6CbspJhGeCWj%;KXHjfW+P=u;;kP*X6MrHw#I#w z%J}J-{CYTNihI9`uUgW*ul8hei7<5)B`##XPT$GW7fkU}u|CU}w@J@86#UqNgolemPff3MZ1;9L!_Srjefcm6 zk&gj{Zb0kdIEp}X*(P~DNg;Hcg%>iJ9B8izl{Hhka&#)c#j*C~l<3LHty1Wcozp`P z>G6%-q_rF}e9xUK{}GTbLsNY5m1M1I8oGf5t^~ggK`A1d38z5PX}kU2^ZjPZv-wlK zq6_mz=NZr5Ip!IJJLw=5j4LL2H?J+y;>^~(FxDy%1EuuHWFZ^>_cL5Kd6-wIZn|a1 zY=}GZ>0ckk4|?*|D)m825DFJkh@Y~z<@h~L>vE*^w4Nxz*Ld2_Nng5QnF5~>lT(hz zr}@FOsodg$oD03|Y%5RpXyt-z z=kz~BD^2L!Qyn}IKqc(|o4z=Hav2kU5tL!kkC^*n-rx7k<>rgKp8buN57)JvUj4i3 z6Y<|2x5VP0+pe!ex$3iD@hB^l8ou81*Y0q>XV8;~2%AP6RkCuDE{g80q{BV?$(-ZG zZa_VZ@`Hz+VM3uvg#@ujzsgs#1Qk!7rSh-84eZhktr2df8FbCwS7LVJkq^vF;?gYW z%FMrT5-z*H7f99Id2dD|7ImNrdL-+f$E;0Ysywo>zZ8b=hjq4v&ug zlcN9S5OA=%%7Uwg2X4-B7v9qWJZTKL;1+rZs$~?if)b> z822I8x~lTAk%;fBQpbfr7*nmY@Z8G$ZE*F-UHDU~fh#E+7fu#GPblHb$jSYYBIDUF zlQb|;T}81A9rPk=?0pIg@ykkCKq|iqCE~OR%^~ooZ*$7LZhBG*I@8;jM>M}%Oc`hO z^>||y2W+)`N7rT?7#mMc%+*K`DTQ-;IzL9~O$+j;*N{>llH?@z?67q-%E0{Iv>iVR`TqEAn>RgWf zG216knFBW93xhyx##m;SlcAFJ!oGipFJU~I(Hc$?FFbZ_r`dQa*NlY4PX{SxKmZ=7 zmOT21_Dg{s{-INoeRKq+YST|PgDZbig-?)sU}0{1!+ZO3T8Xe&S(Pokp+&w&|LLIO z&aky$oJ#>m-H=eRYQIsyiF5;Mm8q6wo?f$`$WvMA=(P9`Q4jKIJNX$P!^Fg~RK9Lp zDB0%vqI4yr(do#{#B@d%vq^@0DzJ8kI&S+&XNT(r`B*b#kb9k0wP2w(3LgtALBeS z5*LALt&*e6_7nleAf#j4nGJ=9C_s^KK>y-pV`g zS`MtbS6SjaQ%U)kDcg#c@93N6V**wZoOKy^C7DmXvL)=ZrNmwJuqU+Bsz~@MV8|5! z${QCBI1k^bzmgvu(b?U>*QOn1HC)J^KRg#w3X6xTG}j=mq7t=3Vy3ycVY^&2ma`}L zNeJ--1A<~f7n!HgB9(_(hS(1$R6Tx_Lm_8bQ1M>w`##9!y^f5lqPX{8z5sM=3p>Pn z0P|VIqJZ5C@rSUE1l##9-vSmzYU44;N4B{?4mm{P+XHfF&Chwv_*)$_X#G~_Q^_*p ze(IyG#AVH}AL91lysnS@rXqm*-v@RcB|*_+j&X0Xr~Q{wWU;wr*})G_6r|ePu!ocA zX7${j7O=*3sndI}ePofEF-;dCmj6{8O^5^PP-k38Kh)D7`GItd=@PN{tF&cy=`6^M zX+EmA?dp%MF<-Ely%RqZMH&n9Ohumz+(3ArLXF$e<0RW={AYBz%cp`>p6%7)7Ej!N zJ(mb?hxVb{e>Kpmx5oq1?jkmE$?!SZDJ}lZVF$2j&_H6e|{uiW5NIwNf(mV zcq$L6kvcrZ{*CM5uKC=}-}7XG)s@|TJY8~}4;9N}(M|P}I^EG@=OOtOJ?(~QB~nFh ztgh(G`+}xm&*A1$u%)T#mppaOYZ3~&?y;`m4X@&$rYEJ1V#-TTc&cfd4V*5XT!d_q zi9rK@P=E4{i3y}by=4|@lkRAayC*sSH<=5r_)VCXR%gL zsoB54-$G$-PJ<%(B0Xtsm4Pz4y4}1Cf=oC%o(DIa30F$cbwW+jrCXE~>ilDm?2PW4 z(;2k_2BBCoDtb9XDw8)4Y{V_`fUIcq=E-h%;;+^S>0BP=&E&GnC4r9tFo~vS=O1$C zk_svkw=_L0D}Gq-S%QX-laTaEf_8>}^!rD`k33>Qdc~C%IHW z`nPF`=yYP4>5P>nNFc*3J)7yq`!?*|%6iWgE#fd+ecW^INkS!Od2%M1BX31`)#bE! z;9;KZt3>4kEpn^HXqVnv(38HOx{Z7tokQ~P#%>U=F=QpMu=X#Klc zu6Cla+DW_Il^FCV@$B>G!(`F%h9^i-r(W)n;jL4nA22j>v7oR1o>!2l_!U#jndx_c zYyzmxv2^xoW*_zQavNCRJFAw0+;y@vuGa5Wf;@-ujEig4Jh-e#rm&fX zweN(_-|sqI9F6?Q$GC3$JSy6I0TZ3!smLi}m0T5bjJ@yAgPj?JHEHJ1&1yUcE4HU>FgHjP1cIl>A1^ z*oH>YE5J6ioiGi&oEAO^Mfjldw}D5|hL3|5Npp6P;6alMwV7UquFQAi0bYwwhq`gMOa^+;Ezj|k$`q`fL!GE2_4Jin2*kR8zi}2r@G=0Otf9dED zfgzvQMRkRm2z&*i#msA*u+U$W--OJyryZR-J`wg54JRFs5CO9f^7)mXutOa5RrOdIMv_^?saBDA@R2Jq1tRB_Ihk>l z_P+TK-1io(V3w3Rd`#9WM3!B_-U0xh@p=~TX1u*Xym8<^w1oJ~(Wk1@%8;D%8vVOc zES?9Q;^S zUV|T0M*8bpo1f)w`Z)!heWT}VG%G`3!Gu+G8c59Vmj_C(`TT}~u(UfQ+rH>y!T2%L$k%Rfx2qp7#Ds z?B=$7z}f3bC}A{?Gu^R{ZDX>Es}wUHiLdi&o3(`#8R?je;j6H=M3V_nlsPGsPhB(YcH~Y zA;!h1&!A6-=~5Sk@5=uz_^Ll|(qSg3l^nA>$tMGYY^nRH93YB$l^LxCghmo->C2&E1n<8EM*9Bx+odFlW%_q=~S7 zTB&^4-&~a6RnK79JxJ>7EDyx`?5&D8(RC{5^QouzS^AmL#hI&xD|)vE+&C?c;d{>w zCmC)ciQ6KE(C{sZ9b8@2w^miOIPO-%sNC~r+f7#TYiMn*zNwTMIN;lHy{6BnC#mcq z1H97gmOe%zsSKJV^ap7=rNPGM=4I7au2UZ-EG&ST-}E%M(BFyQ+`Ugaw?6WZ{pZsF z7hJ|`XlN4uuLGskW7i2o=iMyg?7{x~LQ1^3t%t*TyT@Ae-26WS^E|u?Zh<9dE;0@v z`s*Zn&{w}gp{m?m?D_!x<$77`Z#Vo-TH5u&3}w+F=_^R9M%y{KvxvLASu+N-N7#e! z#->7J4*dJ94k8L9)&qfkH8Zi}B`CjpEv`3gw_(R@GE*iVObpLVai**;C>ozq5L;<>mFnFKIxj&uSk&nl4{l9OdP?&X#)t4yrBv<-d#+hdp`vKMJoU9qh8Gh*>K zHzhH3fz;u(aTWB$#xM27D@2nm7N4|{ zq;9wcd!jT>d^Ntk#0}36wKfk)E6(78vrx+&f%bZ%Ia1F`Qtlw>s>_dTJiD1iYTO%Q z8xoS=GCkflzZ3z(yn<0%4;okS%~uTnVQq4vP~7}ZDI&!)Q1HJ+IRr(2%Em7MOT_45bbtxa2UNbY1t8DAV8Jugi0Jtiho^%Av_TSqs z`-8Q$@N9t24YT%X&wRHwBbBCGeTePY)^?N$ZsERcjDM!sPqo8nB)KrRTM_T{iP_a) zr>mVJSiUT5d%Nl)Q z7bsw+^=TErBlx5=Ak~NeFW5H-`+398;v(<`y{`CWS@D#os`x`s(W6@iC~;sgqx`o$ z#&4CgOCe_+vu|D`REk@>$%+`X++kSIe+pvos}nCvX`|s5g3&Qz$KVc|eBHn}X=}&M zJy03_haWV0-nF{HEr>3!xIRDV7+n*MyYUd8>#t(A(3a2pB>T8+w0kFDl(r{_GVJlc z&f3_q_tY7BfJ#{}pcrJ{6uM&9W z$e>+77bq-e^UC6|_Y7-3d0c5%kufmrm1+MZBjiPrS7wGrp24@9lR@9CxR-9!e2BJE z?U@jyt|{T(=e*I$s759GT$t_FmtSix@5XNLMQZ)w{#?;?m)zH@Fxf#+YjPBSc+T7J zZwB`U99#fj>sROG`fw)ddeUH6wx11~ryg)qdo3O|54`GV5+Y+v#GZt@03Y-aTCYaO5Ggewc&=aTe>a8=EPLhl=;ci%>9j^ZE zmcJCkx_w_7jK$iCZ));e!tR{U7kjr}FnvFs|$ zq4^~%sp)<%r%|tLpN8FPkaMk$5<=J;-^sZ8G|?7MjC?aSl$S?d`q6dBPonT$AyKmR zk)JE_)L$C&V*M{ejW5{%D2Io2ZU%GE2DIkxHT%9d?bf9FBNX924AjIt2zCjTZ*u~=sZkBrml|LA zLkPOeXD=i=6so69H1v(n;qzS~uHM@F13#?`*c5gp@!$HcyAkerWzyPV5XL$LEKT;GBNoUFaJUvJIa$wX$<>)W5a|m1mFDV&6+JAFZ`P)U!|S5*=J02QKUXy^)^LD=5=F8_t zs@wApGm*kq_c#vZX27`}F`VB&XvlYqos45@CD~8j6zLR3#tGwSb|Ef7FYx{w&F;aK z>-B3pNX}C=7^J^0m2_}_-FZZ0Lrh2*aiM$kP}8v zhYm3#PP+@Oq|Jc}cA#&Pu3r&@T~64qTUuzs!^3Iqb~=VYXO-A%tdrp^J~NvEE3dW9E2f!$(Sad-)=D3eMTf;Gm z_s9(-Wc7i9GMixW;CPX*<^JLwJ>c$c#je#o{VK!!8;TcI0BIpm(Cj|MxMVzVvoH{= zCw-pH3bppDp+++XY|Ww1vw=Q4FG*kbTW7*`Bw=7&@6-zxYmEH6$2UNdKT zg|C`b+yw-I2BUJF54q+75C4e0tmOad0SkKgZxY3?_Hq@jOZ3Q3Lem1P3VKXM{2etb zGo+z2WQM84qW!mTgv*UHG&DqY`LAMZ>o$^pIw*_(%}8#A0iU&5v?i&-N1R)3@7HZ! zt$#;}RaV)M-<%t7RGneV@EsG6Z)+Asp&vXk_VUETBFW#K2e!Yd2Y3J}W8AjgN_8eb zW>q#5w%nM&O5;)7pL|2!l!om5yG4O)wXH^Ko3BEAu!+}$PI9|3G&3&6kf3Cf5T~H^ zYy*c;oV9Zn!K6uy)h9MJ_dP|^JDB)HQF~qyna5BUe9_yd32DuA3z)SyjeW8Kuq`p-4!k%wSP%MbB+>1YI{0_@9+L|7R!-!#=b`|zbGg0#fO;Q7y3Fd>Ft1Yz1?DIdm#F__4LXunT zR>D_K7uh&xewW=%J(3aE<6*7FtXE&-_+;+DKXZEgtk3B5W{4~}4%{RI$Xkc2=3c@Q z#+8wC1huA6tz9}F`p{w7*=+}B*Za+alZQssG1PU0@}ntsb43mIzsmB7W%o8>bL?w2 zUwk_;uy&a8%)FHlM)p~%bt-IcVj4>$d1@FZ4eyveSg_6HA0N0h>F4(`UXNr<15NgwADFoy-9| zQl%eVpnX0ACD>NLKCCW)9gtXg+e(#y;De>{G0pnxyKqQrB_ zL;kF4D}*m%n{_1BcC?$#lB}lwG~NWPZ?Mzes+5F}B>gNpFCLV@jSb5G06965Awj)k z1n~!l?_libbtFI~-~z!+8h0hXU;FS8SF$2KZd0vodW-f>pQY9uIz@1=0<)`w3>bOa?fXSs8+ z$-;DN4!P1tpm!MO;vn-I>v8UH7amGm7hMl?e>w#tpk!{_^KDK4*JSsK*AKYCk3wmIC@^A zd+eh(CS{}Z+ExreP4$tfArHAoL9>Bp=^&Wdfk-#I;=I1JA_P_OTH?k5HcaAt6VFEm zZY`jX=x5uWDLc#2Lv3sxo1P2aJ5FZ&9=X(gG^H%p^u)wc>-_m0i5|h}fK%0mK-s7o zL-7&j2F@`V!=w+Vxmhv(e!>BmAzmd7#U##=94VOxNV{?q<8+k_L-Hd%Kb9fayomfZ z5wg+TkFJWda=t{rIt#~5SqD6uh0~KT^Xc+M-L2o1ceHQ4vkxH1sX{NT6N4r|Ly$Ct)p8|;iTHD z3*B20U8((NmHvK6kJ#E*5I+K;h-&mnKlbmJzt zfPVp9(|J@aUb5*`ZZ1FD6sAn>Z4&y91@qM^ze3#CwYpwC>c&OC)fcgQ)`G2V#P8Jx zUg4C*?f!|x-ci1>6K{tf)8Cy(z1uPY7aSM>$-PCwy!G3$ z?r;4X=2i!#y{g!OpVuK~4d$^O=T9S`k9s;AX*xTiBdjWp!o#8KA0rr~yR)5TFCDLU z2n0{u+jWg7hQ6!O3WKmLq$+EHcgbB(nH7VQw!-4#A1_UBP{PgX)!v^pgQL{=U!Zi! z=lUJO9c_zF0$$a2E9?CW4t3VBkqNX>`ta^p;cQKLVcod7@9@1)-F15s#QC2xLf?vN z$W@nW-ILf&Lj#7_gF~`|joqz-eZodq7N`9q|xMAjSob7p`J zi`I}k^|_OeF`#`oq$j>6%X9qj%l*^u%0V9)< ze}4Q!j|9g1Cc=zoGU0qyyts(a^=psbLN!L{XSx)@>F1WG^~3yeAag+R5PG-guu3w} zx($DB!-|HH|7pyDV?Q+isWvb3j)(C3F!^GidnQShv&#fZ-(Ipg3i#9V_RLjfF-JtE)1ANf3K+65jzWloOZ|XPs`1TJI-+!J92ahsb0aM5# z#ehNjq%Tr2{gEU9LGyH#WY<3PjLc=>=HbwDk6lldJrPBbHKj3?8d$SxaytiH#mq2x zO6Jq7b5MQE_V;Baw+~r!IFa8Rs@B!g9Vayyc7W96#FwZ3hIq#tlSW3k*cw$UaZI>4 zE%Ke&Oo8l_a?bpS@YhoX2uIM8K<0X>4=Mss9r}$G{k^7I?n0IIf=Ep!yQ=cvEcpLk zXZc5%f^d4!W4|-rwt>l5?lYIg>WdMY+h=dv@;n2%kSe9JAE+3poC242nGvoOpPziK zN9Zu54B)N`F!C^yf3&Z<<)4acQiMoZss6cbmRY0!;*nQx_~;j?K;UR;%Z!n{7J{K> z=x)pz;ApbY_QW!?%GILL2WaV7U7ai&!IM5#ua&s&B-Sn@eI|1UleMagUl&^L`y1hQ4bZfvs zY2DiEy^U32hXTvWe?#**L~2u+2wDf6ah_4{iKQZnobnz|p^Q~^+v!E-uTl4T@DIRC ztR`MNo;WhI-Q!dB&_s}+j4)Q(bACB~yo9tHdUmk3X{O^j5u@heLDLd9Z=Xa7(p!h<@aG(RP>>0~ z|NQpbP=~=UY&@q*{5-iDqvCt-VIN8O0jz`r;3p0PII9kKbvIiK@gb z%*Z9-DbEv$u!Qfut9VTj97|~bqn4{InsWGn!xV0sGKyUeg9i4Q#U=AHcPOt@;03fPnBVaDBsa>eXF#32j4emH~kFk zL(p1%&hz%4Jr6<%Ns;akLs@{ynohm}#M5Bxril;vKFGr%9wa{f>Y#j$?cgHq>95Rm z`8icg@=`rjLBtul;(<*(tZhbDp0Kn|^UnVGts?Y})r*MYpVG+K9AIdtSe!^X`T!pW z8I2@CiR?nn9+LLiG1;7um~PAR*EB*IN~VdwXME*DGF6f7}u|nBd#K6!^_^w@E(dA85k_s@)@ zl&QXkU3D4p?q|gsi|=)rY@spZ8JRN)lk)5K+0Fj3z2me!qHZK=GQ4~If6sgWb6LJR zAO+^a#7T|#W0EIrZ)~vZx)gdQCs1&yW6$5^SFY=h8zm<8fxauDAWCH(@4;lZ-Z%VJ zh!Etgvvw|JYk_vJQXt4!|J+*l5znkaTgTz;85+uLZGz{Q7yRahB{5D{ zo5k1QdEv)5JP|rctgb=BGxFz4>Lx$Uq6<>35g7ps`tb7-+aI5>xAEp=8dpwPBlIwR6N-E z5#!U4TU-Cb?40(aq7IDKGomg#vVD?Zc(k9yX*6TN3#T zDY_eX$SHIV-FsYs6%_9!(YJ?m1y_%qMqiqa)$$~jxjVkf9ToxmzIGOn*qxGeKYQms z6j*s{CM&M^_8h}9lu*6^INpvqYHp}zh3r-&`s0Pjiu3GT;@uR|s)HUJ3{NtnBW*e1 z(by@gV9|G$wiW$m8JxRN_g@D~mhHTVgy1H%AS;exNX*7;f((;kH$2hfZ_rx^Jca&KR? zak@HX4!SUruIz|8s{8KJtFf_F#L;y#8M!2Wxh+|Qxf^7@Y}A*eaucp+K_7?erOhTq zjC??%;#YaTqL}f#aL__f0t97j!OYG40v1r*%J;80ha>2VUygn@sx-GNq?alV0WW@r zIbN0ECnC|})xG5*Dc+bPkRy84= z$-O;&xH(AvG=QDJ0!}1RJ>z%sG_B0^^42(Jhi8i8R<}FX<)kX{LV|`AJrdh2KFG%$ z2}NI9qD$KAX;~A;|EO+>091rpcAix&NYToRDyo@<^61H7Ee$QnVz}qm#LT=S_$TwU z>W<@)i`|Kst4R{?`TsjE;bFeu?W1!XBp5Z@=rZNq{iEOKBKP~>$1XoP+K&d8-Xq?e z6pDkYsc9k8=U%MyvQ!&a8lf;!cH1{U9sY3XO8*{TV-LOzpoGY~;Xx=x>>aP!Sn=MT zL7`n)g_EkkO=EU;k0!iL6fc?B$zL2Q&gkBluDgOy!z{$1>#_ogL65aF|o@CEvP^UUe{O&Z3>mi@e@yK<;@FmZ)AX|J@KMM1@2$|b z0XhGTyv7Q!B}U<5xKo2Xa7XfdSkDRbN6V64h&jQ!`s+AB8CJlJ=|PW8n8JRPU2mB#;dzaA$izPc?LV&v*;au$tV+Qe^?qK@79RcX zv9tI*dgV$^2{z~}uDiBXC)hm-2naftvNpUi#Lpn#AVUA=a}i0nM8vh#Q)-Fu=X7^y z32MQ6!36>cLGVG0z7q^-WTBxMeC;;i~esFfY!CjaTm=A zVsEq*Z@!l-$5*?51RW_E=-r&XEaIJxD`ctAmxOy*VqxJ^?7g@FpS5d#$^bxSAwZ9Z zy9nR1vXt=TScoXR@h%@0gBKpeFe65nILRD2QBs#ek+AA!6Nw8ElneY$wm*g2<`tBh zy7jb6Xy3g=-}pA<3AX-uk;jL;P7q9c{(S9?50aP9_S@A_YYmKmc!^p zA09z?swq~=u9k-4{%$%n^Zz;%l8pXYoPvy_Mn@ z&P77jp8W-rs|Gjq|IY&W|5>MuqdS1agLa}H5KMOGtgSUFpLX%_wgI0a(~_RMp^VBM z3yObP8psaS2Nto$oo5Th>M#<^$TI_n_g9S+IR~dz)RZrV|yd_)z36bsL&`i1lf) zuKTNF{}jLlKa?urp=+k&_XmsT-)$q+B!s{-zdt_BrRiymb9r^Lt8T5Z9pG*Pu(FT+bk@Zn)U0#E zrN^-Lf#6dPz7HTLyrWN5+Woy#YxCx@V%R&C8>)u+jAW>%3OY{eg&JtJd*IT~;m*=? z8UY{EDK(?XZ*nJ4kA0yJj10&PieuFh!@MS!CvCGOObMvcvxsrfKQ~i39=I~(>>%526@1|72 zjhZOf{K@0H;7u)!Xy@WK2yEQL# z0MbLU+sS&_Q=iT;{v=IYNecSoaY^(+;lcd=jd$EKa_sj#t@d+w_Y>WMGCq2_s%t$F zFSq?lpP(mP+mMq|zcJZ}akIhMfEafbhmdNV2w|@$ZwMRbdeqH_f=I&;&j{m@(9bt&e?*0 zn!~|=Qi#<2A-gv^ra|549s^F~0!Ub=-7M=Z*(Rp`PpL%5yO{5*ekK%dQXaXV*kw7+ zs2XPq{zJk>FhBUa-7LwGO{H-&@xHajY@6u9=gtmtDFWslrS~r3o2=cAnxexuf1tf& zx{dF4`sH{yd{#A**?t@z@(>X+1R~J_ww&DG z+b9;90!&;(Bc*FE9%2hrjT3i4e~ymt#q>RUt&X1`rI)OUkhJp&IfT>uOccA-Ez&Mb zzqaDN1^GS0x8zlHNzY)0VOB%kb<=H-u;)G=gAn2V7ziTmFL*=k&bgL6YKBXmRVM*8f#YbTgiyZFeR7cs&rVJe)zogDmXJyc;WZ|#b)-If_fAV9}o#pmuSLf zo~)r~oeg5q{?ryyKr8#s#81BAvJK%e>q;9WkSc3RCD6hBW&M8evRg;hfg}Am_u_|8 zmH}qHcyCwDmz2QEfkbJ^wC{QD^Ce>a&--17a=|D2g?u}LniL;cxBHq|e$FE!t&^poYvfEcZU ze*mH67Q-K>Ki@!>CcDNo{Y}ye0M@zn7C@Y z$5Pn1!>sDzd8F%0_g9~SuQjkw(p0a@22UFVsCLT_eU)_qu{~>>WweT;4Dd0?3$2CD zZjY#G43&49$Ps>xt%HC7R+h)`tIkHHK3J~!8)uciv!(!O(=d?T3gK*--wC_y06 z4A5L@YKoQ~l+Ukkx-vQ9tQ7%Rx8grdla;VHOj4Op^yo;c`~@Jm9tP@33#a1IS02#Y zL`yF>={*+u_(2Ezv3W%)jgkBl z+LWH^&DM_w{WGs@Lw+sz{?c=G-kjHr81w0!Pq40&M5a|t&&q?}QXb@`SCNYbrfl`Ys*qh$m z)rsPCE0$3tdSB}P2W9QV{+ppi{kb6YB2384s`!5uiOb;S!O35|-FH|T^u8uJ^_*`V zwS>eyG&*C)j3%cjN9Bt@W`-{?bjyZVt?Dufo@Bf*zpS%Ph~|v_6RWV+-!E?o{%v^< zdurEjo%PUC#d1i#Ogt!V9fb(P?6J7RWg?|ThgE?&E+GNi$4`Xp3jczuEF=w4n&A<K=z;~U|>)e>>RUmX4m%&BYy7xdJB4fR#v2D zkT`m^VL`wk7kW9Zxv$ARI#8!yU+*%Lx>G!btx>1(Mixbfou{BAXQjaR4|XtmS81zH z)jr?N;bG2giljaT!N<;xOYC!)jQ+2{K;efntE)m2Nn<)h0^wWE<+0S5`&kuE`Y+(E zTlVp;cyINzCs0sWVK-Fd1;gVT_qNydGLbLyxMH$C#dXU! zH?;Yyl@2H=6hP$Df~|D_o(KVtWfw6ehwG zf56ETHGOSh2`a=L)$;AIFc9&9UsLV2n@Sm#uin->v$A~a(73gmY9QtyrNfFACdlxuDrN3Z^2l(HiJ~aj zx~$P@&E$5}f#M#7m?t*6rkKU^G~ka?xBKxVK!%kmTCd?+aJXiCcjV~4EFz>%^bLKD zKybAE0F~J*VJ%l6^*cv&sbQVja@V|JEDN{j&Y*wNs;iGAJW^usQ_y&PmCUi{6~n{( zma3A<*#4xSQ6fMf@#6xbHH()R@zx*3A*}ZzDm;`%f3M5)Qf^m0&}9zuY9iq3tTMac zasOYm-SuD7;omQCLIi0gr6wVWNJ-bGpnxJEVju#eq`PwiK@cgC&Y>V7F_6yD4Ff?& zH;k?kV=NBmoX7n*_xJw&{IWmc+V%ciulMssCsbDnj1QBuo)y|X4cp@n8f{3Et&BwUv}uY&LzjxmI(Wll>@iOdw~6IA~#9%C2Hj?{(aBB5QC1q+d%w*IZRKRCgUaXGmRnRk2JPVvti+xTW($ zMn!*bEc#Km7M<>Oqv_%PKR%z5U=#u+d9;V8hF9Sj85v{5-tp1u9s0NCYTrxXRyVbS ztO5!9jX&*4>0(K1zQcO8O%ER2J#-U3j-P)&h(31r4^h%G?5fLCLuNPVeNVP({WD(5 zvaZZ^_g{mPiO_faz>-?nQmF5_LG;#EIIBL4Co1mV4lbLR-Lj_?YM~x&fAd+f(e`om zS3yM7j@#b2_SbFaH*|m3rfd2lXDKS(>*40lpp($!RE7u9kA4YK$)2BH*{F~I4rmBr zpG+G~<%u$=TG%o=Im)>}UrVX|ftR1{ni%`|z=WGIy<;y=PO7 z)4s1X9psWYfofk(l|2IWH!9wlKd{vQECJ*4fxkk8D5`ZcF6Jn?=_)E+;ixz+*w%GM zHFx&q=`zaF2{z*t z`gdmHzfzMfS|+*CvDeLy!s z0l$ey@IR91%VZ2P^0a5|**f7;F5Xd{i4?u>-+J+Ind~WGLs_ELSqal9qyVM{_qAK^ zD+BKAu(fyCs}*xjj?RIvo9`b+wu$yA(suMNor=lJop2-#WTi6l(*%5QGeRCZ{ww7c znP{vq1@$%BV+P#PI4D z;z0cs@|xzDlfad?sSNtZN~toL8m>x$I4Ls<;-j3~Qb!P8!1nnmES&h1tQ>I2b@4GI z2eEc^;X;1>6kqbzJrU*g>za0p7HKH`c~X`5_bsr%ML8f1dVz!ydi%rL>FdKsqP`1v z*0;mvR+Kwk=Zx9NmKgRG%XNswR0tL(zQA=rT=4bnmvd>l{*x4~fsVnW?JIR%q0h*| zBk)U{LmQ|_%HxTpEaQi6WhNa;AXP>(3_zkqPTk4^7gW`taXv*UYxo!Qa>n2^X}vQ)jRgsVZEWwf|Me&@5(Go zo1zR9iHmekAL_{iClfu$jP1c^2_^D@YCY4Dr#1#hxX?+>lC<^2+C{flg}>&1>>`!A zX>Z;|g$iGK=u*S{1~c8f+H^9rhW5|<1>x#j6LC%NJ4CG$vp#@o@0Rg0UH%=Hca{1(}kM{bM+hZS|TBp z$A$X+v&v>&hF?6CGIc8CPAycLJljVajQnF0GZigXa2+m?=9=?XUH+tmliE(LG}mg& zKz7So*I{phV&11`PK=7tc5In<@cY|YQ7@X6vU%Z8Z5QNf3McwdT!M~^_8))*cL~=g z53B}Up$3Vc=9KobcC59{&JsAQrdeFuT0iAVkUL@R^ng4ZgtJo4P4X;N$LEo`$j^9>N0#JNxa*x8s@fc&^>TMKzL~a`X@t!` z*JWrVUP66{i#@w|i)DH_KmN6Jr>ia+hzB6M8O5K5seE-ul9jeL5O+n^?~;4hAtbcL z&>fduu9^oo+-Se>6YM`LaG!1gGDZ?<17EZz^k3io`f9zUQXM=ry79X3-?Qdm%le^x z(tC?*e_Ovy^Nm#<>`=JH2{}L$=H*cXatoZECxy)H9W#!z&qXr^K7e;@<33Rd@6IV| zXPPid2CfR&mok=p#&Xq6cT808#7i~_&h1e9w2cK|PRFrXoJaQp94$O`jSbAfu;Eo6 z#=GTttG(CHPRDm#aE`hTYYF7yh0jYnbH+ui&kNHZ{_w$Q4`pmwGTAJP5xZQ$x*P>4 zU33p}y5Vi8ala2AZ4p6$&w1yYljguck4eVxZgOmn|0U+yBBmb8RY?6zN_iYK-~<^C zeae!FwBtcpY;L$te$yCI&&m=LAFfkB{=*b(*X8{eYTtB=%%|0uqU6KGFo@oHsrmx>D9F2|dle`gtFZ$m)G}B^RGz5yTaE zTatqri0=R)Zm-(E4ibcCj9mQ>tk(#Oi-Kg}przvGQ=Ip|46NqtSWCtk#i&`nH2lEz z4{Wvj!n+Z~EnrjjPovujfZG?LTJq!XC$cs3Un@UtSHTo&2_el!Jxs0nW;u_r zJG6@!NhoF&N@RhqAEBVn%peWc3=VfwKbsep_QkO4{VezI#5XTDaS5qL5`vQXO(c-@Qe+=IF%55;xL9oF_b7+6C zP9Y=YcDVz|netrksjzso{Gfh6t58&B4tV|2d3fXvBu#lz$2_HLcO$5x=mq;8;Lb{^ zfym;>L+_5eDJ;2f7Vtl|_=z{aNAqmK>sXRnlyak4R&q~!9(vn}gIBUY7_|3kAp%@4 zVvFb2YRDQJ7>6RZN#Dph8tFK3C+Xj1NATBYi!~f;l`fd59=2|RwTm+TWruWrPL*Dt z^_hFE@eu$L-p8frj~}&##n`c1DS>r|1Cn#uxXM;I^(4bC_q_#A@q@8Irt9<5qJe zwqZx|`6;aup_@B?(`_Mv^Iq~!bjXI{x98-)QEz-MTDNB|+J`s$ohx32Cl~5e*^cdm ztrdhO?(H~lj3yRVik|&+jFlCdg$4W^l#uO{N!#?uO550S&PuySA5qBDiONc*V2$D95j7T1>@er7iL-vfc_I1{tBnPkRx0Jyzt(ge% z2jw+nj@s=zH<>u?ANT9$h+T(9Vwe~Y8sE|#s?J182FK>rUQqYE7v5AB-oQ^xcvG2B zqm4R&?_<5+_7S+s3vW7*wmnH1Pl8@l&%Rqtc{g@dF34JNtK# z8GsI&bK_4i`o%^{#<-+8Ii^e~wop&>9(H3#>*0L)Eu43||Fgv%YWmv`%@B~| zx%`C$8GxpPiukct8J3j{ZY!E4dd)SOwFgIG^y&2B=#2Zr7e5)UyH0Z(Cv<`HFybUdfFseY?sZjWzK-?})_?uVi05 zZ_<>=;Ak{CfdqB>=DdM3M@w2s?NL@CqL1df`HetTR3eit4T@Ac&XqnBAk6T&zh~7x zaXq6M4kI)!n;m8?T(yMSAu&CR%A3!2P`6D%rJV2M_w1$ARWXaiwZ(HRR)Nsk+Y7|R z0~d%%SI;1kEokft2vS~t2L2~Wg`b06&a9$|yOKc2J~C+UNC%w3)PSz(LhRmozGKP3 z+sd|@fn@K}KKaCN*9&Q}>DOD_j~q7J$$ezm|A@(t7YIf=>OZH%7>n=Y@tZG3gT07j zd>_bH#}de;uKE(_-EzKHg534%ku$$?ciEHy`!dHf5AxmA>L#|Jv2g4;vE9`luYtQ8 zLfQgdUi5-TSK$PKPfO{xFVb0)@Z~X#lr4;=;Nhn(D5G$DWh0R%61|g(E0a!;m-|&a z&&;qraXLvOL3?OiBZqJxw$ zd5dY<^wf8sW&UvqJ?^KZ;@_or{RVX{OziRsy zd1mL|agQ-3RVmFKGe0_~)>Iv`Pkdpa2Xf;R|3?4HZEi^!HOmdc<#!y^Dmi)~*StRN zSe8!6;LR5Qdr0zX=g*7Rj|2ztK{sIdnbmpl#xRYqE@q>!?n&#Ii`}B|aM}3FWA>k} z!e^P}i)QZ=GqEU_D!tMWnO9ox(pPmB<}NSzTo-6mFHMUXQ;%;R5C2F{2^KdzCfAj0 zv?+&sTA9MrRdmtFS#|V#wWr!lY^nJ60;5E2*>7*_FBLw>XEAa&*dK!|o>7%we31S7 z`XwoCGtp$R-@>ZXTsmj#D1xP*UC!L=XCpdU%r$0u@E6fKwCD?!6FS#acUaPk!{?Tf zZGb~rG3gDdrf~Qlkg1!ZWg~lpL1`efm6xxsQLYKek`FEfm1UUGteSTDll%BehJSXJ z%tW9OJh-{a@(*ktTL`I11FH4Z)t`#Z^^lc36Li|J8YY{UaI94ye0b~IXB)nu3}J|R zbJ;%VDHr3${jOef9#dm> zB)Zs=xcHM<^)pe6Ovx+#H?Z@Vv0j;nquS zNB$4`5w^#XF!gE|at)93E^xz|B>HO$Yi_r+u0G=Uwc$f6xQ{%WzoZDBAe^J(3eg%4~uIqkpg;` zBB^*C6uT_h?djlm3D#C9M{m^4HKDYuk``J`rK7h2BS{Bm`p+#LbtrdpV1xqM>BIKw zLg?yFq=~0)zgO}eSU+Q9f22hXUuwGYk#bdoYq*EeX~#kT62JRk=410VO!>Qp8~4J9 zdwBt=quhjYJ?z}62K_zhi`1XUuej7!p1J#3hPOD3w07YdyoB6SS(~M>uKNCA9p3g5dE4q;1ZXCL+LmVXY zHyv{aw#}17oCTCB{ZCh9<6T=?t*_RV;R6`sX2L=p;}PIrm6DgT{ujb|O??(_;H(7D zK@E%PukkJ$-+*V3Z=8CL8%olOion+oQIVG$Dq<#l6pes*tcBzz{$VW zwmja-K@NzY_Vavq?6NLa`;WduE8_0;a$~^Ps@)6O5GbQaOSgAQ@l+c42UMaw zwqkR4Xt&Ze=n#ccdZWZ_eChGKSPP=@WawyQ;xon0=y{g%QDe9AH<@D;(b?KN|GgT$ zcuOQM%~8bh_BurUIssvuR|JkgGM4$vykiPDX2xn)A6vEhDOpa0zBN#MNq^%U!mdrA$_x!2Lv zA0|&8*ve1!q;7mMSgkr3csDh*8NzqJpg5&XDfAh%K|WU8plT;nj~r))jy2k;lNt*1 zlc?-oM8$vBa;ny$YU=U9;h%+N`KhUph)gb{KDs4EZ~jHc>Jd&=W;fxt9&DFgKByBw zJp!uP4IjrJJ-pnyQPkpGUVg56Bde45C7*jdU)%60OKEc9^>=SF1#GFOYm=M~t8zFS zGbV>>0_Y!m5GnYNjo}KQdIwoGQ4wdGb{;Y2WyVY4JEJ}P0^ho2^)KAj`4~6o4-6o((a4Gp-T;cFMXz$eQC;-OenR55HiFzJ)xy7$Pb;E+%`bmFJLmFvmk)G~<~*BzW~C zYqL=zTeP+0{oI>bf7Xm~+kt`Xe*zU+Zuk7b4;zsbHt#O20;+1S;)Z-YEg9TiWCAyKPBZ!IEkYoHs}-i2-@6O=2~%=z^7iC2!*I$7Jn zd$S=#dzwdB64l4T%ic%wA6NKRV~|@~B9Ox^i+Z9P#4Nv1 z`S&4qLLqqfC>V6s(2F=uMC={4fN;}Sjd3h`a>|nMb4Zq8adm|GdRhi1?6KU4(nq?B z>2_i^gmF6Bb2OFl=7MMI-lg{UmvtMK!(wIu}=PIn)UyNJc!*;Vitdt3E|9fXXv>j5$B%{{xy~$`e?R8JXkm?S_ zx@^$3=IDQp*G}$LW~EP&}w4FYr*ex3vGvj5-&ZJWm|tZ zK7~i#C;SNH4t>Qm$!Dm^V@vXu#ta=*O3jT-cdtapn0A<# zNjE=CsRPW@sr;_-HAL8#Ruj@| zd+y!e%AYd@V1cZyKRT(Ar;%^ZW===fWo`bVjg#YqvPs$s6to#@t=;I8m#W6{GEB8L zi$jjiwpOg)xCA?Hkq>WJ*cnNAo?jP6!SUu7w?>$z zRsC^dg+ueSKpu8dCz^c|Q|p15To+p4$yrqx!1MPN#N>-mUTQgT-@ z?L8qWCKh*xrOcWgzC~q`ujvJ0=QMM`=A)XAY@Xt5Pn)9NCH$_7DttRR44Zz^#}}*6 zGqkC!wEIVry?5J>V>Jh2&&Io*P)2Fzm?9t3^Ikbz!>XX=o-3>^i@W0a5_=3oKY9Q& zm8DbWNf^QOsn&lztnk@5KAO#$3Lxf{X|0-{VL(bq?_4`8>DaNkFT8;tPW$#$zx9pP z(BlD55D;a+gNJ;H3-SUoidr!>P^aLUg{zMp^wpYl#lv%unO?3{p1=0{nb18d=f+Fl zlW<5Dit#L%aEL!Lw95ev`uO@K*v-v*P{z8OND~A?iifNar%{OWqheQ*BmhQ?BjJuJ z^+|f3#6{&G^f`2O^_+Bs1VPUA@$BmZNJ+E6GZL&7+MGj+6%*pY=x7H$%3_L|{$R$9 zp`$1bXxMeU1_;}{U~`QNo}V=`t_S-PFkunWMdOKaJ%<>{N{_?KcF)_@wtZYZ&sW>b zF+Y?^+km@p=_~CvaS4x&I%bGloFwaPvn`Ezwj~>PBzX#Egxp;6-Qpl8w&_DqtAV6Z zTfky2_*x&B_hn%jY_8n!MphH1>seNF*$01oGAeG+XP2pp>c!}Lo|u|1&ZR@1ZOiUAD>TXpbvk+j&i`|; zPU7_gpYL4-DG{yb1(`pZEk<>dofZq-H-`m1vobb%9QX6;8@8dUf-Ch>LGBvyOwN-r z$EaaQbK>Baez|j(IJos>IxWxbo<@)tgNO3L9rM)j=^y(~qj#YwtvPR|jZ#FdoYy9? z|5G-XS5~V(eDYZkn-%#ot0yGWA}<*qG6C}9re5Kd0bGde)3y!ulw^0jU_@G9D|r2) zBS5MtNIVe7yHcUa-aexA_a|4=m0zX~g~c@YP3NIBm8zgo$%b-^Z7z0DDSP3k^X3Fv_g7ppbY)Weo)(7`Ci*vDE} zhA;>7Xl%b1QyP=L>K}|WF z2iD!9hCUT5{RRWpCPU}3a!sQPdE{-XbBWWgfgL8XD@H1$u0NMsqSC?XhWityt)Di= z^X+Ecp3yeQ_;=*y&P@hATJ2j!z+=< zB}U5yd$EChd0DI5FsZmfhB>u2k0ru7HV2190MN=f79JRCM%#bL@atUxg`n{`o_VNb z$e7%bD&?&?^rFB*+cvjzF8)S3Xl4ql51fi&AFbKo9Rf~ew&KPzeHHM*gfE&5DUYje zI5_s4-02D6$sSIh8itvT<()a2I0m01c`v?!LDPK5R1^|%Rg|D%B64|A<#&A15Fakr zI9Y{iZT^EefD#u`qBevE5@H7y7=)`MD#XW=aM03zQtc38^*nfRRf`zCc!nK@k_u~_ zzXFLTEn+W&GcdSLX)zzy@ieT{K))ol)UmQs*3n+)z6}>^IK8m%=0pJF0ID$l_Qfw?tOMXu1d()p!+&z|w zh>RdBp7}Quxrms`WdkEl0mSKEG^rh=MT@>odB(@M|BJ=3fha)c{?#ID%6672QG04! z&wr&u%R1tsBfurMO6uQL$aDCVzcP3AeB*}ddT+N8_Ce|-{62}MSsJl2tY21}{B1hQ zIVM)W^V0H6o!TOWXu%SxH#GHLa=tU3$?0fF#N~!+lh)MutuM^L9R@AK9=A~w??K4V zgP-lGG6mj?=OkvUCkI>q1M^wlZ+i#b$nI4^v}LmGhsy>T);ll0ySM|`Z>SvMj$F`7 zmV{T#VK3j(#j_A#wpQ(+K&Tc;Qh-C119pcBF?w&U2jV)Df&Jwg2 zGb8Ok4PvAT3IBNAE-FXpK$om+@Zg3}@9_7L5a_C^X0T2Y8_?;f0e zWUA{ylm_RvId9{%hJKhZn_Za1j=VYc%L)B=$UUIW7=S_RT3?-K=GF-?%_=QVP+q%Y z3&PybWwx!8WsE)M%MOq_zN>KGlQ6J8!=Q9>(<#6YQt$oeMq8?{-%y%ZA-k>Qm)k0V zb=BEdx% zvvqisf*WjfqNO@7#`bfi$9V$T9KDV{drJ%>IVrjZqP*U&3;pvx&48!3Xpsj5drKBc z(BFQe@Vg)G?dW?mmqjVi|MiTsq{;Dp%2zlKaKC788`f9HS4xmund%p%8xfLrkz#)` z>F>5}!7H$C)h`e7kz$ulohlXP2zn?$oVkbNDp5Esuw=%f8hE}|{+?ZDviY}9h_F)J z+4?wfxKH@_4=B3ACp5C~UIgmo(WH4-A7VyY=gpzBna}D36MsFkdD0Q7ZaUT*yZEQ@ zHFMAPRRJ4@Y1&dzJ;7gIp;kd7dnf&r8^QB&CFgXH2)k2j-2>9O1xz=-y zd;U2wK8!StIFfX$aRnybVx z!Kf}yDB29f{%Iex7p1X|rRym$#bYJiQxE=lnxA~?`T;^Ka% z0`yV@fVg^f#;*nve<5+5PN>2T{10hB8XU9zjvs!A3v=B|Kq0(r%u=h{l+(#aKNs@p zBH!AMt;j+6^Zuc<+{(2S#gajA7{qMmt(WDjmaV9sNpITC7kXklVcwhAXm`Mx)p=A@ zuOlhQpii&A<0po^zHv!tjkvT7zJ{$_#A3rhr?UXWjuz+~dksNzryLrg6!q{}ha4|J zHt(HaDpL4eIm$6{khz}zjLH+sIFnazc`$=Ou3u$I0gLC7_@ikalM%YuM|QH}K|DG0 z9R}$A(0X1MV~$>W>#ah0t)tY|l_%S>+lqazbGPBan;A!I;LD;Pe*8W=$|8d{n&*d3?@Y1ErUo7v3 z#-h`O<_iA#`boKj!_8iaB>53SeN=;u6@hEyWz$06Z%v&We;&B72S(+ z#;Z3{e|1j}-$&HE)cCORFasQtRz*#hUK8-i=yH*(IDO__w$S_*Z?t9of(V&;Pj>-G zcS8BlB)lIKrTO^z7KY09fUdToKQS%-W`^qNL55y)6F>FXL|$zpxDx^n@& zB~_4)^j}YW)Sv_v+*GyapJZA0%Htx85Jx5(>cl=l|xw?Q1u+&P>kT zl@Q0Rag9FtBrEV^PeTcN)Stf79ewgBr_19FReFiQJy}QTytq!43celnw~)N;`7dkn zi~mMNridFAR;PjNWJSw~u`Nx|duj3njX#&aK@zF+geUsuQqQ>gG5kClN0W}Nj_LSB z%4+1BriU3?irk#!FqN-%k0~M~`5nGNh1eswW>#xR%d3)$!Af|$GJ`-|BuGveR(H@C zVbGi+;W)PsZjh<7bfk9~KgvlsVKVZco{f4oU$$`RTVu2?mT~Z}Fuz>pwuxlqt~`oV zYPfoW-10X|iocurV`|z8rlHQr0eU1Hk4-S$s?ktF3CC}E@3?`qgm*NnZF7wGgPzU!G!wS}Ca~qP<0Zq5 zL8D1W(p%=KMFSaD-H^*WzPN0BaZ$_1a?`n=TH(KX)*i*Gr)oKUURgGpD;n?)$Tp2j zLEUCnjDKF?)+rm0)KPd|uJl-`&Vt&9?;r8P>)z^{VuIs)gYVk#Dd;)!e$+gD*oMF zP0*a}UVQd?&O4jBI{+VQG>XNYD-!muj;F;(23H02^!O!sbKSOJGU!ejby@A-hLmwm z81;QIXnp6=jXz}Y;4zJF&}C$wqsm#9cHoVCpM%9aADLk=84JeInXTbVq7tQqiNmqC zbi;juLI#F|9Q!onU{aC-AJMB2v^u*0hNRpBA+Fs?ILC8P6lJv}FdzglbTkLs$S`I3 zKv5VBfOnyt$`U*K9Lp3eZ~%g=x{|;E#6=V7`+1`7<5%HeNG{pI`4q#*7tXqs66j&k z>5_SdR>Gkz^ssN?J1D8`UQdmkT%8#g4-7jwOfq z7}TkPJnn&XdvnHO`fJ#ySu(oici9m_{mT`ila9r7>A8pQfgcp;yx0Z?`DY&aFa{^6@iIb&6#$a9u2Fz!DwiB-g^UtXKr4iflrVf5>r6_B6F=HBZFK8qRdfX6@Z&ZaCwTeexd@PLH zWSm#3pcID&xY#=UxV;>9cR8j~O|DMe<+RNqQ*ubm>%6UgxnN_>&aAiJf}FPF`YNNP zU0;7)o8Q*dACbq~`tGxgle8&Cik`a@1|aR8&8d+Ka^$lO;ah5}UuuG<(_&zn{H_++R;dq_13aI|}euJC>f*^)^ zDMeq&`)Pu)El%%a)DE-)wAXuSZYjv)}v}$k!T0_F>4}U3ws)#_96G zKSp(Z-hEfPtgF84g+s$Zp>%u+S5xxg98l-HSUK_U)Ry{Mhy1%FE9-y9KYbp)A$$?8 z^4;4BmjmZowc8}`)cD{O{rh&UEli!#25QckxnZY;Zf6d#$y#xxnn#nq+h6y-FJ&-A zJ$ZldipR@Eo$r_90wHRTD?vcYeQ@R|+u6nz=IY0B4aF(q~EkhDjQm#gW zWn&R#f}x?$pU)^p>r3Mw`|XN__@RDKEo&C|Z~0B$zfzsqthIZc;v$@mh0q5K>>K&B zd&&Y)Irb^~)Cs0}@}8b7T{&r()sDi*b1@nD>o4~t3kdTv<->q*I!<@}iVq=D#Ou*E ztxioLYYxBvk0R;mGvKj1GUnaZH!+sOEbj3pzqyh{oZWg#`qt;N_8;v!WLI{9wGP!wV*wiC+x=WdSIU(q(g6Gt|0`EO?sGg9H|x_Wj;(>+CfDW@t=@OEAzZJK}}0nHX9u}Spo zNgs3oR!jbpgmp@M`k~KLMY>VP!}hnrMT1rqj1|5jHQPxP6wq+u+OK<7oIZ$Y+{ z%)nK!*rmBy*$$Ov;~6RV@a=`YsfuY|n^~#P$zs9peXtNh4u^qMtLB!BokgrbDtsQR zy@cxj+-t5KdeE+Jr3lI}J_qB@!E7zrI;Wg@Kkf?8qVYlq-#cR-Ci-^Ij&zaXDRAQAcBVBPomL6RG(6h(rkM%Idc z=SbGGeiRyUZd+=rE8m$5Rh7Lum;HWqV(H3eso+mBgYB9*y;X4LLZLdED_v6eefxv? z6MJ##uO(+5_iBSWHyiy`SbT_Iz4;dYIuU!s4}~CZS#To{=1hTY$T(44#%T6sO>K$4 z3Z-91>o$cIFmpn=BU zb}J7s@i1so7x`jfa!KKJIlrr{2HM2BLIuWTEoKD7kuArU|8HMXg|w+=U=q1?DB|cC zTNL+=`RvMN80u^XVjZhA+X|15J+sRQiEpT$D66*+BU~WP8~OVQO3i-vKC*33nZ<+K z_Sv@W^ALwRnmvC$y9!LeoXk~s`Qi%Y|FtKNQRsAtP=xZ!ixNuotFC;>^V6`Tr0cWv zb_Y9JbP-wYmVpUbA-C7QXWy5aNf>GyI_C+zSCNQJVJtvG8pSQYcquz)>AO|?QoTH_ zQLNO6@;r42|KoCO0u{d#Oe-m$-lj*9YADfdf6u?7P<-g6vE$#>*F(3)p6w-$kJmna z30Dh^zHjA(q>Xq?EZOs`qz!yj7{vwD2cpezs^w+_ZtzU7<(fT7^YM+EOWk8-@7wc2 zK1$Ii#=oYfB6%`M6`d(zx>6TuILB3rca6?vNbG26fOX5wojEaF zM)17&%mtU62w3&(;45=p24&N$0VDZ}x4|?1rerCYyD>_a=ty2H>x>e-RtYX^-p~c! z>dpDHN8Q`mnx8RV*`!|K&OLo5{656tzm!R*YYvgOewct(?Efz_xy7%?U&>~xD(Xji zp)NTwWQS|CJ`*%@(!^bHmDzqOz4s$OUNMvAM*qo7%Gn_8$eoMYbYGG(V2R@H6zZi}R2^vAnZa={1mHQJhd`(ehF8`%n>cJfa zh8AQ$-+Htw^Z6CaaC36p*PdGFH!4)xLzKVQg5uFts!6=G$Hy>nPEz)0Hm!N7v(R!W z1ttgkT1GK+;IZBD4x#W6(yq#*@jg#clG^tuzSV@VDsTh>OYUU&dzyd<;{-^qH*EHF zu_+w*qB+>?kYiG6wr+M7IuG>;94v&aJB*2ZKYBy@i(Y7b1^v`2d5ZpJF=C$sp3=$5 zdnLC3v=Z-91%xhL&@jR(j{??3YTQ`Q$GPg8?R3q6eiqzKL4wz37vC!QUTi!)uvn)e z+?!&TXvpAiIPyQVR0{m%BI`YZ&m>J{J?SRknTEorLodUq_YZsH4kZt;&tPYh%{P}+ zAeg-p#D(XHCYjgwFkU~7-?7IS6nW9PL91{GrF2bA;xzO(XrUtXI(Bzirxkzs@kd7c zWH7A<*ROP0(6mN_-pB(YlG+5uO&wf`qf<37G#VwNs z^yNlAzJms6d1h8!;~Hu{j%+1S#o(>qRJ#Lu zHT9{^%15NqG!VHQ-X)gnFO$0QERe-cd>-^8ko>a8`8VT`4#p=?tlH6pw_e%JduhAv zUuX&CJL-kqtB5BF|7kz{;&Ix3WPsp$lYmlyj5ri()N?L3$UbuZazpT&%SCL*!}jIX z%uo-#vn4hmf1r56BS?kZ+1e7M3^X^Oz*U;vGeoGk%!Ym<^o$Rz-9=o#^c_AwdkZ?+ z@18mnrr=hG+^GM1m|(6pxxJWURn-Yx z^B}|&3EyB_Nz#jGYVlGG7GQ^rDA(kd=V`7S&$u?B(#0geKNA(7mk$3;NVoIZY`8Rt zfnI+!)<<+NWVdm2m%uOIeZ)OsojA3rDQg^?$E~8Yoa=PUaIKUL`YKn6n}$5cQ?t#R zVu~O*n{~}G5ZbAwa%q)9rnQ~))O5Y#g@tI3mTT^AQa!!^fS(+kGuT^qbn=Rw-Ccn( zOZaQ6r;p_aXre7?4$hq7;-=_H=F0~(5hH7PEfH1cH=g?)btc4EXJ~<1c;tAUKY_?tfqknwk%G&Jd$aQUAHC*cuxeog0 z=s_s%my6czj?B(7war_L?{Wgw^!1;eMS@2bcUiukOWvXI`CvcY)xREOg+kvS=J3TO zG(KonWQSq5aBLh5wy)>p6~_bP{*bWWuQ#36zdW>w2Yev03wIn_ywE$|`pkDg)&8=X z!O5&K<2!F&-^qR2v2s@jpI6m=dCSq?ai@_E;==zLAQYp2CI5<*GTpaI@ttn&>$IDT z?qxK@yFJcp*B0H4XczV)*CZ7nj}Q-`C|a=5n*Qoa;rw2pZHAYvr+PUtyPOYP;xIT? z(v&k?vy1I5zVa3Ua=(BG=HJISW@Oe52>Ci-_m~sV=7KntL9CzE`a(MA7Z#_E$2>tn zfk)GbfWT!zKz;Bc7%Sp}B&5w+_z?2Iq8eNPNRLN7p;B=Ng@)UBtsu1KiS<+%4o*7I*L z#9Bl4#K~}=7qX7He*KO&S1)mjN_Pd@wI|bhSjgPhQgGIHftfKlq*oBwUJ%1SX#*rGh%r9)F;L2}_$v*9YVe-kpte+Z=hf2EK1pm8=tB2UnGgJ!CiXvR4 zb_NxI-Rm1w|DqaQG?}Q*CzyFP#ZS11p5{mx zX+NXGqe-u-7LRUk`hnvGT!C zf>A&wfZT~k<>C!Ie(F!YFuk;j@2r>FDHslzv-2I) z$$j^SYXRkdC2d^-efRfEhO-hDc!#dmf(N-TgEfqM4XAyN^C$GzNT`SNVh0`Mr#Fwk4HY_b$Z{_CYt-r@+2?p^opJ% z7?H23hEZ=E<%S429|JY+L2N*bbre|f7n<;d5%?PS;rn-bh<=~5mDlWda*>nO;6G9l;-o;mu|73vo5NydcD3xsDNkrGNg8v|p{X7kX;&?*pV zw{VU)rx2X^d?@15>muK*G#GV&t)2y8{})$p{m^tAuKg1NN=hirKvYy(q+=$al!|nR zfV6au5@{x&G)zUhySouKkQm)CV51pqtiGIcp7VX4bN+?T5AV-?U-xyruGSTQoJ;40 zr>k4YrD(}cLIP7KDRQBaCd8+$f^sW$ z$Nn~kY=w|S8yka9xPgd2f%(UaQRY+Jr}E zTa@&JGVo`#ZMJRh<<7nZ0T2SF!uJ4EF>0kBQ%WPK9}O8481OJsA->XK`cn38EJh7D zRE#G^TtTu_W#rw%r`hYj=>) zaZg`%VKt#z|4o=|L{*+Uc(i5Edc-0&aH-Yow=B$hZ&3nE9W_#Td0)~u=*`QDO_xr) zD8hDEW`yk3b)M74@9f>|_n#e)oy%&@0%u0wh05B{FC*vKD>ZAIaaP?}%@6hK-rq0;z+p$e ztFDJ`&&ooqo#tS$7oB zCqw#nYR=Qk-WoFLOpYum4KXTzSgn5)o#%rf@4gssd&CcGQmk$my;(%1Bd@6Pua(A` zEnH_5o<}G{7l)LJzvZbFKn4+R!#hl5YXmS3&y1WObg$=pT2vIRkGoSy@K|+%C<$9; zQ+Drh^oFJTjCCvZ53K|d*KRp^h}s)*Gs=@8FL%9NyT46H)>A#@Dj(LE7AAGIG!VOL za_N*L3=D8wqE4=shlMQEMw>Cb?~!tP01VrhWz4 z(nKRy2RRL?$S@YkSdOUAUn3hYrNa(7o7CcJ$61%&)y!Uyoc?6 z`7=79z42++=`8Z@`;K>NM<~EzE^rP^Fhq#h4eO0MR1zPy@R3X!R4QF69x@yc3r%8m zZ)&}BPA;r6N~~1s*C%Z%S^)c##qPMMO|FV{UO==JcP~6cX(fd-?7>**U4Z17X5(a( zfS#zgvGbA8n%+}psDs;MZFBz}7o?7rdv@@)WnQQ<`p$@%G^m(!g1TH+5#5lu|Vn$PYb-4FA}+Y zV1Oh|1HJb)f(V#?QZBzoClr4=wLYlp0^0S<@!>=Zl1^B4R#bM)NRheR%d>y=#M?1p z3sE5_D=o^WvK{#IBnUR;a*Wi5=}gN;BnSfhL-1GU=yS6W{GeONHgctuJ!Zu>@NA+L zkwDwlgD-{<8W!NBD2pNj#uo+m~Q^3 zXCHjOtPD+W2x4%jWKWLM4h@f{o}=#BlssGUgKm$Rd>HVozMZYHM*|EX zI*Fmwom6XPkGRRZ;Dc#oe&9}l(J3(YTj%wo$VN9};)(}OjkJnb$_+4fe^NAmo}0$Vo`U)R+R?Avq9oGEdP@{k+0ZrmBq7e(_2*3RZE9wT zFP99^2K{We>l~{m4DZ&@%el?%rM|ISfAgx=Y{d^ftq2=tr4eyc>z%t!|z_zeaz zE#B+(ycB9?Tqri=Y_*25pTx7<7I%}DuIQSC!Avij5bP_pu=*dS_LY$Pe0A8HJ?=g! zUg?JKHA(OEMyje)B8a@8lSa}NO7m>i_8L$0c`nHDKCRtImru<2lWe+&G>jecw!jgZ z{gA=iwGE12rtIDoX1DcZDC4q~`BZGXN6~|izO!vcW_|i`TTicRjS}YFazl=qyRDXE z^4eJW&w-?^XrVic9#r+I6g+SpkMumHF{iIcO-4^O_r`WvgN$;MLOEDF=)KNG4pNBV zB2e4tP@m2|^CXN5OEitqP>ky>s4YrPc1LI}dZfSQs2S6ddtBp- z?|J5EuA72Thb$?sOij)w=YpQLX>9+_?k{r^I|3^P4F~l0BDFWq`j_#!c zM%afdYK)vk^Ud}RB8$^8WIxA#-T@(jD(x?A0g|@O+88-BjE^SaIeD2ysMSokcf3(u zD6Q|9GoYz@%~b^nOu?IIA@&oE&Vxx; z()c0P%f&yJUHbH&P7sT4aBQnAy<5@paC7;%maFz8CumA?Q*SsAm3)$ zG|6y(SfyIYUa`SET3m-^hHHN!5*D}FhkxE~xA#X(3z}fwAy&*nJpM}284Z08*nFJ+ zMz?%LV!ZNU?yXDGrz6$S6|C#>^&=BE3)~naBoJ4qvMWnbRZBm;SqW6JNo>|U6u`mE z0dr%FxrE3oaP7lOJY@>`CT@f~K+JZ0cOi4%U?$ z4rF01(>2aEvSx@uc@;Nnk12Sw>uQ7ik&*J)Hux{L`k1mjl-*->QbjK0iC_ZGE!DuTGhM(zKt= ztrP@TIa;Wg)zo{XXsk2)18v-jpKo#*(ER_S?0@K{79V*rUB1Yy?&X_Um1wtDPX^9? znq)JB(cIFmMKiK-g5v6`^>b7jaOL)wro%7QI3hzAaP zdF?OyPd!m|Ar==V$8#Mqzd7|y!Aiu7K1|nQy{Q;5`h{Mik#QTxhT&3cYnU^3%;EcZ zAWz{?Le}?7VIZJsa~|hZt=F~5t3pu>`69SVh+m%lVRt_qbk(ZR8RRro(8VZclLc%z zwPB)B{oHB>`Nd<$(_Sp(S^H6&x3%&dlz{QLxgz4C!FKNzqt@2e=PL54K6KtmmJosHQNwex{ z?ck5)AO*IL&({+)cVavbJc#2?-nY{uQ3)K^XOA8p5ii5kpV&aN*wOo+&vg=O#hqHy z{#x|0XACKW*eSW!?IHN3PE=m*M$k>)+;O#Fj}%rj z6)iq0-IA!=W_Fr9aX}a@rh@o_CsgatYX3R~1!V$nZn*yh>(DGPirf@N7_?y%_|jAO zSFe>-F)JwDRc~(xo%6%#v*VXkl=`q|oK?7ZVGDn_+)YEeUs`=o=C7i>&V%hiL(+*_ zOsZYet2SC-XGa<8i#-_*}3S1_U-#|hIdejdO5>HDKM(p)P- zhJQR0>sNY^{ehUy{`7iArI8if?dI{(&xLST8;_B{bh<<>Z9z5^osfgEz%lVd->o^Ode+Kb+X zaR>`ZXSD^76rqMEwnw8m%vul)?1?onX^v9)W+w)v+XPbbVgR44{4EY)UR_!l<|gl0 zJ!f;f=4TYb96Is=a2uyVLhEfO?IE&v^DGK??v<*EcWj-bqH<>%>g)n1V{KGF^(h5P zN4ej=Q5mzoxhcAMsUV#@nEV6o*ID7c|F|IaQa{PtVSq*?3qqC^5ULocJpH@EmcHW& z4EMZAm$)WLzES)BdJBL`v0=+;@y3VRpzC99Cr5n07wnJwwOuK=G`H?aptak& zQ@&U;EO3O))Ln!;uYFdixi8pt4R*PqxD|dUifHCWrjD!F_Hjn`F1dC*$@rSoYM2Y;r+e+wCScl>?$|KU`pBQ^P;EEg)b(@_Ewcse3M{-jHI2}i3$B-zx&nU2!ql4EBGnUj`h-W4 zjnNbH8Cds=KhFpWLK?vn&mZ+4Jamt(rw!!0oHjn=!q0&i?m41)Kgi@6#7bGF3}iUmcu4+V_YZ1rgMd=Czhs_7KOjms*#j z*evD3KjlPJ|CWYZrLfnD_HU?2wHlowTn+z4-*4yX6{MmoS7D#`%4`tiLEtEV!Dc84 zg~L++i}<+@ucR{2NxdEOy`e>{TONF+KzVpQE2e0LR+kHM7o09I(Ug7N{x~RTx#zfu zMTQHt${WozaI8J#f0*0_*YS5q^7=&mu<~9aaxix%uNbzO>AzR!R#){Gxc5fu9N1vw z@%}H1yHSNY=n6@Ek2IT8|0E|Ptkb6PSo+nvS{Qy1*y-6Q?usRWFd6 z;MkAyawKEkub!Xg=7KYil7NYJ)+F8bK z1emwi8MdguHT3YAtNLY~4(KGHN8SqlmJJq47Z_nn_f|V#yM1eccLY#~78ojel#-Pxm*O-5zesNW7hy!aOM>_5EEF# zZAW`-&sT)K$NlmOJ>6&W5u11Br*8#qM#RuXJJ?|pEFBUm3UCzr8Sx56v@r~mobO`EYr9aE7q#Wrgc0M)|)+Jg99#EU(4 zcX6w)(!PR!ZWv<+Rkk1jqW2T)fAQOOYZl@u@3dX&X(QjgB~{3h6^Z}P^UreI)r@)3 zCMT;sm)E&=bS0W@2K(l7m*S5euAI43Ze<1eH$zTjACCtLHsG|+k9_&tmg^GCO^f>) z*41Gy#yz!m&lsFWwTgmUm$JIa8@8cahfXN`&xAl#->yJ!-u;;E51D?h&nE#3?Q>@$ z1x}eNLxcb1nWrro*jAnzw5@n4uyT6|^j@%76MEq+zXX+UphmK*^67KTQ(D{IdA+Rt zX6`U!GtiZS?L}En9X-ajqpr{no+l3smGRnK#8`1)*A*rL6~AO$FUNi|9OZ47_9|>T zsd}Lz!7zJw*!XLo2bFc@o9QPDzwM#Yq7f9zo2irA4|EtyzG_nq|5d_`x4{<~?sw|$ zNm%|>=uXQ0X!>|O+4Y}zs|vo}Cf$ma&e$`|g#1ZN=3(S}zEg7`@nDjpe7<($GDGS5 z{N0QJ5utY;s|J!cc#S2FB!$57oab>;CBl3`?XMvAhk>T8`?(_)K2V!eH?9|tT^rRb z(IxA-rH_;=YfTX8DZ7K6K5Zwoh{0dm`L8+EV>XuZJ{D(8a1k_jy4Su*S~*!qJ%(5A zRu6Cddnv4}_jlsSk9~TwtR|`&5esG<18ar7#Ah?TnH>C)as%N--O7!xfCc#BnRpS~ z^TciW*wLi zuYPa5;=Eb$q1JtKLsxwC=I%rRGPY6w$fBTxhOnL;QBZ&{&)*Q?JdkZ0N5swM44aWsNkaKm; zE$!8H!JIWenUhn|(nwJi(0+s@ADIYEM8HK(}^!(QyVNzYaztJ`8E|T=Jl3Q+!m8KE=17J_L z=v6K+;Aq9Rjqi69yPbyQt3t{#Gch0xMjyA5VH}}tCyA-@JYO3pomia!i9JG{P25Y; z8-{*!g~XIbN;4Gg5GwaVc^_{urc*J|aNul-(7^{#cAf2J{*RSi)}97LY(-O(xrT46 zLNA`0^8xLYmc(xi%L?^V(WYkk2)bNV*}G;Wz3I-zWbRY4(G!gepubAcdih8X6hI4? z3Q8KhnyXnq6K?gs3p|gEGe6eS4oLM@oF;HL4jJ!L<-I1UX30zQ5ClIXOMJGkOM`=V z3~l#xJnp{l-pu$B>|A*8@3U>zV~pC<0dxC>x7h;JI`65z-cBehu;`IR(uGxbCuK)PF!Sl!j4gtE_-?{)6Rdsv)5chYIr+Wlyg z>10RB`YFs@nxIA|5zLp2s9xyo^5IolQa;NQ{8OY#K&2|_bGYE9070uflS%UU7wm|4 zfQ;G$83o86@?sHTV=q*bk)K4jcp_&GX3iiK$GrAKcxaV={bt=~b2I4t|>9%b@WjbNyeR*t6Wq*y_I1O0PAeLvD5DMfN3`@DNoPU0i zDe%Qq3nE}pPes8Op3fp(-W*!W9S#pvD^ zb@M&%&k;<(pPD3Q6kn%U%;2?`M@nBzKi*&XHF|Xa2X5`uvEIRMOfsk~UbVUk_dA7M zRr5x{4Xd8f+K-1;sD8>ua8BBG)$R+oxfd;%z>7qc{a{n&6wf&W(qfoJK3pe+J9BX2 z6I~fPdljPuT0Vz{n8OU*lr4lRs{+>2I!Nbh01|v#f#v#fvt4@bxUgAn^~b(#&Ne{r z#O7+|C7$lUC-4lvf4&m(muV@Nuu8{o;TZ%49t}5&W4Q>g{c_WaVuGPG-d;blV^AF` z7Uc*hGeoT!r!jO|U%Hq2OlQSsB}tHY@tIGZ2g zk1i^0Y4k?_8(w#8x~FrX!vtG8}eLq1-pP|CqGjSEnMjtD102! z{mli=mN5&)cL7oLovxZ~7Bsv+V-Dcg_NT%;H#){;eMOk@7ro!sWl-zP3+k;)N?+JP z$#OuV$Cd>)?KE0k#gDw5x)87$?luqFZpYG*Ef(OmKP^SuCxiq`NpY;`qq%vi@mksk72!Yj-Ru_YCw8?~_iSCK zJQPz=j7b(YC3AL9;G)%T31dH`xC+pz*iDVQ-ZKY_3K?_u9r+A1D|HDFk%4rM@6FIk z+9#(uKSR>5+s)vzP3JAR9F#377VMA*=muA_(H~z{Jl7Lgp3<1Ttg?3r#`nq^Xl(ye zqU+qL8KV3Vb|*j(a|8@aZNSI2Qf z$js02WB)#u^ik{;1e%z}fwA05ln?`3w;q^g*Uu5JWtM_AXJ2fL_Q}ajlYN3j!DCh~ zrktXROq`#b?IL}zwJh7acc}cZ=>(M|4Lp#`EaN?uzZaD};uDh@^N}uQ4SaBPexgPF zQ|D{FO#!(LD=Zb2{{5JtibYJf0~+1(L8HsoP@tYE;+0$HbYs(eYv zj~+YhSgQiUjrq$}xD#|}f9vAB44gb7bCnsWwKk$-zK7)QNA>;Wq2oC%`6N+b5OHN* z5c_)i7dm=X53#zM4D{yw`K6;{h@m?YPng(d#>@}! zN`Q^MTAn53cjl*ZoQ}^--bU^`4eMLGi)fZ1^?&`c6Ua+5gk_iHBJk=Cnt?}n6GqD= z{dYxH)X3#f_WRd; zZ~m-5X69_bSwNnjn@q?bq4LUB`C>!WUwxMVCn-WsjezyMPUM4!nx)iitS_YQ!@>CF z5Kk9^4Y+6f@^fLk>PoBH;92pE)7(P*r(pigq~4B<6h6`>a3Uh-W$KD*SG4QyTt zTj!HA8$Y4FAH$qk^T8lMO9}S++oMN+uqi{XjF@-K|G0HYt2&PnC$yTCfHrKE0lp%E zQ>9}Q46@O-p*G^|%jK&u6}!B7i06)GJz3U9p#oAxIHp8@UZ3stP%na zIt8$>0})Ayn&RfaNCqU(Rt131Mn&0ktwQ&%y#)tVXmA<2X#z;ZF<{&R5r^F8r8<^C zJS(Xs8XrFRHTdW_PY(38T4en?{9f?I*sJExNKDsH3e3_ zi9}G5;v6kB5%LWgds+5UK)|{DYzSxQRO&y^eA4^S)J)C+bR`X$Zb&qhtQ2T4QTj8r zr%T>YMDCue$kJ?;W7?^M4@kSI!xbZ+%Z`~-^!Cd=NYyQah{uH;dVux zb#|wnTPCGT>}I9z=~S)%dM%|gCvlU1X}fPXo7MLXmVPqaKjFAmrh;5_#KfA4ftoiY z@#iU+Rjlm>Rg}}|^lJ-_!gP0sC;HCWDeyAN+LOFjqZH&?Mp31a%*!X-OK4^Vmc;Gf ze~b3(#Z=%wNOsgLK za3E+uBtaFE67cV83*WL?d#C)6|8d8?o&db6u>}owy5&t`c86QkQtQ zWUpI?ycO`g!~3o*Pdd)Or~UG<$V$Vkl>W3oM|s^DtWY^_nc|5tQ}1fJ>*Kyv`IHK- zxy7k+@oxw%SSdl%Niinx>1{}xjI?Kqk%n$NRx)Nw8(|e9?<<};OzULk-Ph-QHmstd zdVL6!Fxh?DGmwNV{GN@>{hW6A;p|#3O<-b#@9J!~nAmWOf}K(A^}q^?*5MzPQ0J>CeL;BCI@ ziRJ25WyV4ntzZwa);%$_2 zgDQKl%9={@Z zVKz(AR}*mt55*Ashw}QXsUFi2V1iDDa8!Tv?j%0e>udU&@|#d7_Qkh$;@QjDUkY#$ z7Eek>vT9dbTB%!&y6>mxRda&?~7| z-l(j&N;0WSupaV!yw+P3GPQme$mO15>ve)LvmMXtHI>?3Ljts6F%`&v8CUgJ{Wt8vQvKR984!jljB9 zeUzJaM`ls{>+Gjt^Ku_^pNi-QJ>|@!Jbe^`k>ggA?&V7=yd&`f)%MMoXmwwt<6hTJ ziXm2oBxnuYVN)C8xb_w4?~ZKYNifLNhI5);JtvvYrlS*^kz8Mq6G>^Zm^A6H(0g>} z`RtJ=h|K!Ue!k$%NYGkekvMar`tFM$m;**IDAK)hzq${+?=Rf9K_e)5YcRh8PZ! zKMbBzJMg=Xo(0gh?Te^aNHPe_;k7CkUjoP>8Y4A?Rrm*U2p9H%j}zHuH^}kr(&AfALHeb z+bccPUQ1l9s`=U8@ALyEMFz0PZWQLOvnfzZc9N#|{lSvPv8-LL;@~Y=DH@F8?Miso zr2O4gqIg$#h~`hO(Y#JXW!;6svDwTqc{xEENR0U7Q5ECCXrCENsUsPW(dq*m8sz5+ zWnB&Lqk0u*(CjR_!vJLiUbB^b|Gc(+LbJM}xB0$nR{Bi5OOE+`2A=xba}kJ%OX}-N z(TL6eV1Wv|i@GlNIIrtMzqBNf)9XF+;F#ojzG_p-xM>NYv)Vs<;hc2DF2gYs^i~{a z>dn;oIeidaYm=X6NL?FKYp1{#U0ouJ%+X4WpJ7Jt3Cq}d$1nG&5c-{^?$6H&o|ZAE zN3IEe+gBsgmdyQ|F?Ve4o7wwD%$i^dm*K#|xq=h&1zUsNRS<)me13eVWsmSb6p_E1{+T%gF!VWwSzTU=1=y8Wsug( zVd74y@!ETCRXHbRDqD|jQzmAbY#ruoVTxO9j?hT=&BL2cj$}!OSAa6hwI_DOf(^V} z@j`bulne0Ydo$ahJ40XW#HgHA+9PIRtFmYNy!99IK78Uh;_x0*veAqA1~3u^!VU3f z2WC5e)_6t@P?D)K`(;0)@i=|15ulbb6Wo6=bLZyZ0OU-Q&!N_VQ9CABsSRoqt-_N{Z zZttZ#ZH!*gf1gGRQqTC%uy+lS7wJjSM^lvPNR|~BDRgyvICz=9HZMe3(^}gsh z*^70i4+JH2O+T&teAEm=)o*t&vbl&9NZxNebqUl^?*2W5UF{b%1o`)hGY(g>KgQqq z&i*<4NxL|Ih7;(!X>(QXR$5ohyRMZLzj_zQqGj+)N$x{>K-(Z2F>RbS zSS=-ZobIcQCdwx$vsUH~O{5RBM}Kfh0aJ?o;qI`$jgtB4d8JswQPZ7XtE~9T<`8__ z4EnFlL#7CSo}J6e!*U%GG#3reh7gKLJJOQWnq0Z($#SrXipj{$09`%M-4o2r3MI$B zfH(#+J$He=#6V9RHpx8g)knsr6&^dPzzKvUamvE;;VhY8S3q&+G z!?OG|aR=pTs|}3*p3LH%VM~`FIY8#^5mUJUc4FYtRT=u0n$mj(O5J zYlDsBzR4=4(k{fkF>YJ!;V!#8dmTkIxM~Tjr+(r!mH0u3oJvMpi}mYESDe}?j-#u6 z>fii&g&9Tp$IlWocN(gD_g@|;lUTxQj$J6qz!@;+o#qk^W=!QF(2zVR;XiVh|BpIZ zS-`l%w}a?3AlWZ0Uc+{LTAHn9CirQ}sxG#9hD>n_2Z#J#D8#UAWIgTpoZ;qW3+Sb& z{hsjc?5Uw=?{?H@Mc-9A#mDOLMmfPgLs>V5q#d<_dC}DeOyn1SpO;tzfje_TjEA-q znsam3ft17En*zpw_{}lKp2LGa0UE^1`SQs_IS7MnYCPM`3g5jKrZ}#^yHX1Rh1?xvW*BDKZH{ zdh-pGgv>CR1N*Xp3Ugh~ES+B)WoQsR@PvQ&x~~^9(o?pj)>D5^dLod0i!XO3Ww}+>U<=ub3RG-ZEt|lwQ4;ufco$6$bWrrC&V;&%0E%aXBZm znsDIckpusBT&`>^N^>=4=CIQnp0L;caUaoe$GVSgSj3-G4Ha14vmX9oe5aE4UiGZQ zAkr92yO(Vm`A!W3mCYwt9cZyq)z?PAOT3fkpTh44o-DY#`)ZL!0alasZoz+~@5Usa zf~j}vNeK`x-yXKEI=8OmF*j*;A0?8lTY*cnM|&ttt}@Q`EWI#R&d#dN(c{n~ygp^~ zN9_Vs3F(4+PCJ&n$_TkOh>qay*PTUT>`2_~Ar%i#3LAC{;Bh=*!}o#>#0oXS?SBn- zLcnw6_qdb2->7T5$(@nEY6O)(&WuAX@U?|t=ebVVE_NYj*Rv}DC9f5|?`96`*>cbOHOIma{ZMSuiZOJ>ZCnr=G9zDY zJ;C1xtk(T88fvG{8B_+3{-REQrz+bYo!nu8L#z<&?(qpLWab>lMHJ${j(&FxvFtb< zzdSxZd1D&~$$g)G=UrSv8FFGV_o#+Np=>Fcye`(+NYY$t1I4K&Snr9bkH zwk|E7oWc2zGB;ikwn-WQLQ=k4j-JjA@_5n0SC0{QjXJa24TosnKH9Gt%p%7t-9fDo zE9_mt#P&2-H-D4JQZxpiMLdQz5ynWn8KUmCyQlScmo$Jh2kN;@ynER#p_~3rb$DCP z9b;>(>Y_HI(P_{uzB-1N3q-ViDA#oEaDhWSaS!sCjsuaej#22PtW|OkNqs@jThI&) z6uzzDs7njqV0HWt11CCHyd`*A7DU{~b)XB~Rw`j&VzQWH$Z^Y32U4dUcRpuvV$%pC zF#tDZDR^Ao!5~v&yAOHw_(NW+DSK5GI+3fpHE6|$g`#gvxRztrdu5K&4ldNXCt-phcOQa(&*NqMY4` zU$zEsN7P>l)A7>O(5BdSu9;Vdx$I8DmD`=+U#h~4YDd+RPy!!6?Z4VsPzp-MaEsmW zam_I+3_{yURPYhq^As3GXPVttj|z8+c)hPY*?-F1eSq)n^C>r;@Vt=|FgSbGJH7KQ zx8KlzZzbdAHL_m03;*jk?xoW?&NUB=3?%Sl!A^FKg;fsJMaE#^^M&;#_P{1uNYG6%`E z+1@^@C3V^}&2&_q)RL{%UP2Dt@%iFE_neU(^UYW3SbyGq;I0d-#8L1P>$K6KinaAUtil&j_WN?KRu)eAZ^Gt@(;3&p zirp~p*}*%zh%GQX-e%8|ms8uwvR|_aIB#+G%8pcy z>hv&n>;zeJH->o-t}EfQ1-zt9|F*pq)b_k-EZ)MNcedpN)qigg?5=Fr>cTRQB|y!A zZ{)ly*h#Ox+`iDbWH2><`^IeAP3A(M4j;6s<8xYKeakd5ZL6j*T+BhB)Ja!CECpQ(UFF7H~mo{{6yf zGf9~GU~gq5g@~2STJW5IlqC!M0}rUfjvaoIwU1~xtvd1S$_C=yQ2<2+@f8)cZ0E&! zY9omtVd1TW(+xShiXIWc03{OgxEU^wAYtu+Tj%zjyCL6Xo~h>k#hK38pTG3?d@6%L zWSEDX5Isp-Zf%5M3&L(vQ(|X<;?Y%Z@+^z2a*~fugb};;xrv*dpK*0C zqQ9~WHfgm`Tugx4;>KsM?e6jPjdrDknQn_L9!?lmWnQ~*jsJ0wr!&2M7PZ}|j~O6Z z(fqV=DCPXCH^cklQYqZhAU70fd&bd;!V8jh)_W&bfx%QJ#1Wvxp_8YN#TTb694*Cw zCVAwC0Ehu;u(|5CT((oQ%g8Ltd*Mcj|0x$cJkZzj?I(?V)p)wOl6oIyPvV{>bxFUQN;i(C3OAHF!XX&%wkB80Ki zJ7f6Y<3>-)m9BW3DZ%n;O-^P!lJ0zJOLyjYTb!-hLO7wKTst$*{+qaI@OxmqNQ%F!SY=HgkCI;SACk`dl#M`XcJ9T^d?xfA5)%sYRbi9Y>sFLWk915#-+Ib~+~uM( zLgWpif>i>cq0>HTs*@wrYJtue=ydw_2~tN-VL<)jV`J)63dNfK-m*nUQeI@V(@$3l zg`Z(QELIMyjY(HXTvH_@&utnJh;*B(C%w)~cL_DHw}5cxJ2YSPX55N%!1V=^98dM7 zGTpe3y)ydm4Z*ryNE{^C$aPO+SW7a%!}#eP`Y)p}58i$K{!L18`g3EGYXRZve+q_l zIR0JhQJ%SZy&KLEX2d`vi}g$d(wqFe2~5SAL|xF_L9KNKF)i{F4CJ`<+oMQsQu4%8x%qz z>$Amxu;KMF*ST734jIRG3&`|hb+Pv0QmpRm{0p3D`~{49m1|Jxi*A0gIGTdlZbLlw zrDJWxe6%=s((AQ$Hz&L@LTkk_`q!r>mpvF?`0K=@T?XTkdV~y4z3Kcg{MvbE5htxI zOR2-5hWUrlH0cMh`Z$xTrj)64p7j=*zbVQ;$6T4NXq)wc!)w75zWXmYc@BQiE-)wt z?L(S9ub_>??;Rb-nAiN<=Cd!?&ae44JT+ui46s8D2o)xc_7;lQ3rZV*Z?HrHRw<2pbQVP#5npY-icXu5oI*n~NL;H+7Jj%tg)0HLaU2kNzJgx^`ryWC zmgOzP{}n0ad%oK(`S;x5I|3(j=|pd75zX`EwBLR(nxT}#qG)x~_s%*k%L+}kbwOgN z$jv{VOmO3!y;@M-Bl?O4ifJELd_scCU+a=jqkXJO4%0F;&G+8^qNFRBXWC|G2h}S; z9C?I3l}TpyH{|M_I#AH`&NkB-n9)R3J8eYqk|Q!W)qX-?8ui$jZnX(Wo3Li|;fl(WH+FwS;&qX==5ZsPD>h~~L>*PPG{~%<358C_XK8R*bUJ&AmM?vJB4vi@KvfIPSS8n_X z(QZPE2Wyx+BOr1V(3py#18yu244rmYA>2wrl-Mo6MjS1fz+QJKQ?N~ATs~JnB-%{g zyg6Q2C}}vvG@T@AO=Mm=Z#zvLZmn{0c zjp7VxMR=dS`TB0i9v@Y=q2fqbe5Nnp%|WT1Ck=RIOGJV(K|N3fYVlkp`yWJ6I0iO+P&5=ByDUwW&e|GKaHI`=u}`#qm; zG^TK)uOKhsQ$dRl@4n`%ObD^D^?0JT)m)$2kmhXWVD+q2uI#?$!J>hbx5BXjA)xFj zb)~ZtDvTnkAWv#45G7`Hv{g^Ll6F?9ODq%GxQum<-255Dxtm+=2yjxkdT|8HFQpPn z^G*-^KMf6kZeSzFGE3A?1r#fFTCH6^7C~TWneslWpsah)D%{qee4#SJy* zphU$|#Pp~08lN=Cr;5TGu@vb>=xZII5jy!CIO>t--6%}lPb46%tN?}ovw@L|SuJJ! z33C|j!oJCv9@m26bS%CY8HxKf6fGSKxt*{u*_|&2I-d&LFYuSDIvj1Bat`W9-?c_` z?BTS$vYVmpRm=Y@T9~71sD3=B0-+5T<*wCc(!X9g@h2-PP=g>v`ktP55(``rrI{HF zSpp4Ux}+)*1L60l5qEsn)sd;Brjx&VC|AWB1NE zY`GYewUJ)aLz-C`IRd6^{EkH8;?UKqAfR&MfPUVOP^*3AvgnmU)8^Q~M4RX|79c6? zctB6NSzr8O+Ye3Ga;1Iz$72Hqoeo}kx=+;i>It2&i|BdiK|to#E*7LQsqV!&)?yah zr0r(D+vy#>^Jh-M$iq2uN;^{Aoi|JzZQelhbYbX6v9Z&}QgL@Y6<_;p`gOyc& z+1h&07g9pq*xee_pQlJ2RHMS&h&ta!A1vC@oP9<@tD<&@>a({I8bOo9OKVk%X( z_{dFo?Ua@klmL!&`~Rz2AtgA2Ntx7?2nG;iE;swoQ!dQ8+2AaiOUX0NUANpna^9AYicU47 zW(;%Fy&_{RK^lD&>-rz6N=ICmY6GXLcG#<$Ejo$cxVPIh47udvkYSGt4&FO{53u-% z`pZ6p6E2-);ak4h6ZP|MhAQCO+?Zfz`uE5$&dMd3MF<-v{c!*Bv5e^S2j$a5k~gF) zLS@q=N6A+Slvh)IKjgCkU$I?J!ArX0>)jBjjD(0;s*snU#@I@EG;e%&Wo zM%&p?n3k_B+_LWSXLAZ#^uX`dLoHp>%N3j3CqNf)*K3BP05PaA^8tjAt6U*;W9ptl z_ewP!*Ch@2kuI@xP##jKT}K`v{cB|Uy-fQzcfL4VnaX%c5cIJE4Tuc8cVn$p(ZuOL z?ddv?pO)B0nyNapkKs@q$pDH=VBg+5Aj>iRX3uFTJIb@CfUwb)%Jzy*B|| zeB}rCyWHY9lhQs0Kdxrm{nJ?7>89phL@d?StM`;JM*X9-__TV?X*>pfG#*rgod$E5 z7)Q#;{hoI4s-AtPQcL%FzFP_Jujf)V$U*wV+=VGyT1yFCiFe4)bIJWa_T!87579d&5e!jnmT%37O;yb{{Bc~m#av$I4uJ?}B?O$*ui^0*S6~9Aj z5J9sBjne>boXpVz=C4dIf0D}p^Qw2yM^eDkR`#8C(gl3!^?nZxs`<;?>urg8Kb2=zgD5`$zZ*YHEy8<@D znv*u)S4UvU?FilmI%fyv!&P)ICOaWGFecKg!)lsVwD>m=u!j+0eozj;dj<@sqktUg z#(m!oWWSo5#f2PscrN$4bKpM)CxX0oPY%P8Jb2LBxl#0*aGD+e#o?$TThEl3{_`8B z`awG#1(9ds1niXy*~=xeTWR za$9h~Fy--OQo6z$-n}C^=bIcNO_5+n6J}fH@s3v$a!3`HdFjG9wWy)8kVBo(ZWCAK z4lrVZ(~E07a9uSs8zcF`bHei>(DS)rW43sAwl9J_3sJZJ|A`hlW8}~a^l4l@OFwh< zVX-;PdD8n1$w#wcmsy&iv*@h*4gAl`vc`#rb+aZ;x>TW-y*(5BP@$=fFrAL}!E-Dj zRZPJtYo{51*A_k`#Dfmz*SlQ5=n;GmV5f;IslB@fkkJh$$mVEH0@f2Q1T31f&mLY3 z`NQqXE5c7E_vP7IcEa5xq7Y#jIqG&72H|n5`as{a5HdJz{>mc5(2aEI=R2(uJw}V7 zy7EUxi#>j4q+1<}5pO;)cjNuxYBtH4wsHL+m7&-wzp=!itWBaP8LLlP&lgt3rbyR8 zwROBPH3?bY1?y(O_-XFSEl_pyg$Rj~qBr?j^@t0wJsNAP6EM?%%hk5V_ek+MeWaSh zkqv7Ob+_;6%zu$0Gw-X|v~GOV>^c!tz19&qT;4hk@-eB>TtVRU$20)UD<1uS^cTr$0S6=DB(Q$-k+K@7^y>=BgsoRYQLfbAA%D`g_bO zU>zv4AA?b@!kRTS7|I4KZhv1{$!aud3f89=iU`I@>{}AEsaCBMvY-f@{DgrYo#3deQ`h2^JYZJ z#0PTPX7Jl5(RXz->GKA9;qM{!W<$($VJ05RE1TH!6)6z(7PIm7z=omkOtw?eG18A< zursSv+EPMlwP6iKai(X@(p_Na+d`gdcbGzn(=q}n##e1`a0QF(=OeW17hi+Bee1i@ zahn|oqBcKFK`|X3LUV|(PxYU@HQQXsF*~EkLS~+$Rb9Q8rW3)LL?OL-vptdrVKXoh zj3j+uxSJ(M=d;R*kW>RRUG4Uf)6m|g=*1(hD?Ee-@(;(!6#}kefhvpZY&iLbU*gK) z)UuE4GOsO&KO%-Vmv zv`1NFYGaqI-{UA9^X?S77ejX6eQ%#%!w{aZ=igTpOl@<(IbRjN^xFSj`23lDkm2?0 zeauytju}oxNk{6O)xFHg>%!p|!szSEkAx4-QRx$lA95xm9h(2V>!|DF2V;GMn$bB3 zzFE08>w><8W6k{PQ;fqw)g6+Wv-3i9?SYQtoO?Y#@9m0t-#3+zYg!SA-i@>!PL49e z8Sw_g%NWJ=`y-n3V4GXX9XVAgL9CfoGJ}s(R?`KVi3+GFx6ox9T>@Jr8I|vPekcda zzVzMBGv}8Tr{J5u6dYXE7nxkF?hDipl9B~RxvB!DFK$+z+q|&0wHWs{doPP>DY~;t zJ-hdJr@p)Sybxy>A92hAxJbQ95s70Zr5*F%XnCB8QEO;VT<`dxjGE;1Mq+T`0M$*b zi3YoL#vk!~)75mI<;sL>A2C_%+{%}`-mlCm-;;gr$^{+e=F4V|8Ess$0ex?8wp>vQ z&QiUeaUKY1vUVcNP$1<_U9-vwzd#GU^D7mlK95PTMZ4tWomM9BsB@89uN2Gp7yFdZ z_8lTLsj6tU78;$FpZ9D~cI?IPA+l>q1&21#d2|^2z`r~D-h>uOGxKj4-2oa0rNl=e z6wj4-qy>a`v5)6xl^hO+loSf!DfWDix=n%~uJ+oCTxh?to;^!sIg8>{{EO9Fd>29c zS;O&n**qYptScYk8C~QExZHe;S$!Gs!OTDcaggzdGa)

c2^$&(k??nN!sN9zJI zF}H)5Mf3;0L6*LXC2GgMzGo_I*>=rwDkJt4PVxJqZa`IzyLXZBX>kRb2-7fYCp;c{Vbsmv&C>e%u>9QD<$wvG`H zp`d7;5v|#3b2^0^*!3`8+q?Z&xAa5bsdB1pKk#Q-YK;BF`qzFsI<`N1^8oegth*`< z{PIS&{UM5D?oH2XZQA)&#-n^mrWX&7vcBY!2Z$~t)OTPtMW;AfUJ$xb&X>YjGSSr1 z_If;;)N1Q0T$dcFz;HK^`?fAC&xYQO&e;dE-%B9>rosft6FjM6<0u>y77T3?r4JHL z7jgFZw3>L>X~CHZuXCW{q)ynbP?VrutBb%2N#UcXVR*CPW*qtoIkvXfn<<$v zY9Ce8xDz^??{i{I@N7U3WDdy8e00Ir7vXe8a*V5kl%6?cFh@T*mVE=7WBieqRIB*r zMFYFwj&bhSC-Yf=%Rhd{)E%r|TCM$1YLK_3eq-q}`Xk@CR+`=k;|E$^6(iPx>(>M5 ztJRwV$+Gm8oo^KJo`!<0EX*RCE5)EQ6B(n6s1Z^j4DzVj^h!5ecUi%lF&<}DSb5+F zxX~`eux<>O7rqaf?p0~Gz?c0g+KH+Px_H12=KEbDplQrfSXWLX^=K|PV;nLkbG7!r z8X=GLk!a!&$hUvzf`oyco-o2Lnb8XeL#N?+@R|C>v%^vvrY2d*bLwl{B&f^e>D@gO z!4|($zxlhJJN4@>92pR4;O^ia$5gL=kpQEYBuD8-_%H{-%XVi{x$#rB;yaj&XzA86 z#+K>Iv-jS3hm&HPGSMxTM zKTNdgGAs5XuQe!Zr5)o#$u&q!5WcnB&5>TA81)_kU8Au9$obCYN`6z~<1M7~I+65v z_nX$RR?X11R1kj%cBbW_oM|?mJ00P<}3cNX+(MvsFmtx?ib^~zf zLZDhbW(nJ0{Q1S~C`Kp`S<>p!gL(qz7?SY}-y>F#zkU+zNK;a2eaLUx#QjKT5BN2T zuU(de9eyCB^JY_rY4F|RkUa8C@JotY`cFjrj;EFCi^G-H?H)yi{h0fgfj56-@U6Ud zbX;iWU;C!xbGwe}#^>yIhg&{xOKHnqS|EO2?|v55*%5XWVN8S~nUp7i8LMR*Z8bT_T;uH{Yqv{0xCXVyL_ap&FZoMU;p6t{}CT#I;| zu;a7BY~T5zZm_wtP$D}tE#Hjx;N;weIuEduY45oOzF==8Xo1Lkw-_TP_sbO?RTJej zX70q|o*FuwXJf*bOx6XZRAYFNZ}~y3m_sARaECGY*t3jPfS*Wcm3;B6eQCATUEuBB z^(jBp_>90K(?v7xY8-P&-0Atm3^NTaADkhkcZ{G%{;&1DnsPPPXS_V6!kHGBb!Swi z|D9rZgP>LJbFu9nJgMw-w`?ZQz!R-R8|~;|DM9loD_cOIpyiF%>y*{Ze+4r{{aoo? z&0+Pwo0{}??{BZ#-88(=wbWC^_#NlP`G#BB z!y9ijy4T`yc}zF3oGmZ<>m0}vUK+X9`IxW?)ktR{6&2$?-(2sbtF9doQ~OL=WxmQ& z8J+X%XH@ad;_Me-mLqq?#k}{bKl;dKqRLuonau4`x0~r72Q7ZiaZMf6tcW%FJxrh_ku5)PTwwUSe-GLA>R%oS&-yaI3L@gN8%9 zx3a53n0rzR$#)c~|Hy~1jJ~9`@cLLCyl{PK)tp^qD;G_B$_0 zOqJ>PutNh1da-V%cQOw-j?OuViYx}T@vEyKoYmgqG!W!rk`_^@>U(GctjWA^J~^f6 zz5pFeb1!!hYu3o?T?l8KXjE5Im-@gF>|nEIF7zQhvkOibFyM(AQ&e(}X7X7y1=L+` zg1nGx8?gOe&n?*4no{$5bFI%biip38ke~rl{TzWsAM)(QnUuLbg0S=fQI?(=_|tAU zE#u>WiFT4~n#&Qw>6tr?1dgERR!3OM_2_!4U?Mfq=(s<>SoWCt%Tc-UJVYC?@7m&o+ za|XwwV%~Y?L3Yok;N{dGA2C6;zDL?U4L-&u?(e?zL0LOZe_ir$_AYrB%749nr+?XS z=hSZQF55;j&sDNSHg|)YEbE2&{-475N;CTMUN`4b+>MqCk&jSF5>McdC@8PzD6pIc zatuCoIok3WQtupRRbfqMeIGe^ADC#H-1onR%#5Vp_z zad%;(XyIj(h^AYL+TT#n1e>sHJgV2wau_IzBOJl*GK(nr)# zGB4TrL{DE~R;k__(=9QMlPhBunR(Eg-r&HGUa-PNxv zcgWcJ9n0@G|1n`uVH7!7GDuUtN=4j%lx1ceo+#_ z?+MS4nzyd4n*Bcar(yc;XS#ml!rjZ!D)z;~!PXmkS#Gjmczk@O=|jd6hS7Yox$+lc zW#1u>u92HlJrwlM1&pxNHbIAfvrAPJv<(LTa99>hddf2*pgG=TUXWd_&LUAFBxbuc zuqgc!Ewx0b$#NJ@TFe_hfG~b7TKHJN9b2Le5@n;y*${#QS0I4*Zy4BAXMb6K%E+B0 zx(w!?tC=*sWDt?uh;1)RxNQ-$DD|#=ig8IQ@m^zsf8BJiP(J1r{xSY*`ehaqhy2N; ztQxJg2HlSeFHOFUR|Dy7zYI&5H(fX5D2eMv3NA&@ooRX#?S(HL07R2(;qB*})by>| zdg=Jm_`#esqpl4_$$*bqo|746{t{EnZlB5*94`K{)bK&o%sJ~}ty z9UdjbwIjZfMLUZIU&WBo{p(<-^}4!6yZiopW7Sr?TuaZf-G&tReOmo&6-AG>t=Ia< z&Ft(vm#F=qZnYA`s{ARS^Tp5%f23gZb#Z#>%^6y%v|Dd)GKu^0hkM6347~xgP|MH< zdgQP@uQaX5iCfD+qL*`Dkxt$wJc{^gQVy|L8L?H=KJa~{{TCJJ9q~b-ZJkT<3%(#z zTU7RJ+be&<{6*3m9_zR&Hhdp#GiniH)97(-ZdznH$%Iy*QL?3eF)M#|zT<)am@=!D zT(f4gGb z7#G5tU$>aMlZvqM5yVTd>m(;}7C@NpUn>B7*pk+X^Oo4~#?Ry?vpekzm>w8ZM5^G8 zAtl;1yI8a-3azz$zJ=c!kQv-;yoy9v5xEIBCSIJM))IqZ8=9s``6`@czOUq}So z4w`Ir-&Q%R_n+16G^mZ~je8OvuRmo4&T5dZ;aFG3l;%B=Wj+;C>&cbjl|O6K_1M}y zp2?tgAf9kSsT1zE%kR4lT}NIW(5_6qknwkJUo(=0AfMZG_@E0Hx7W;NiWTd({!p8_ zpx*NQnEYK^mQI_qhNmPu-r}*L9r}NjP(+9Ja)Y$79tF+r2vJ%`CkO zVc9RHONR0um-4~hPZCYk6hnbVFE)+_OBL9?jlDUg zGn65I5!!36#Mhuwa@!Jd#!cIdSNz#RWvz;T(NYck(DoVz<5znLkCB}G)V7#3LgZMw z71I9M(86%PC)vM?B~mrU{MP$@Mcs$(M|8Q~toxy&+g!6d+)r%}EN9{B#L2YWvBL~A9v1+Cu8jNSe14qpDVy4ujj zNlE6S!jU2whvb``&bjO)uTnwHd}eOA5a6FmoY zCu+g@%WxP$t{^l{0>%8Db0@k*y$vpZqjE-nlcD0M74Vw>!tnT@;>sJunpiQT8}`&6 zB6i!I^vwKZc>KHpX7G5;GljxL>EFkT$XRv%kCVzFhS296i4}THX22Wzya^*5TpbsMRTTvw+MrlcE%e0=`Khm?tOW-x(K;lfS8m=ESX7&n`t!}HrzKv>4XEA-M`8fG-mOxE zMp;$3eNaLHdWU6tESqw47YIJ3!!G}OAez|j5H+#p8)MGW3{KSgN~{(qX-9Iu4^QO?b@yGq9Qs@Q&~>l0nN+;Q zo=7<)Zk1{cFa&Qv#Aql6u5B(iN+dpBbj4(eeL0MLMiP5 zBY3ioFQisESw^P(#v%6u@=Tx8;@}Ecop7!7e|*rqP0-1BO(^JJf86rf@8Fb^vX#Cu zpN;9$tzfE*x;b|e14#`@2|o`=+)yn7kZm?8HMbBMw91U$3@z#9u1)U6%FS^%FHQue z9Zi$F`^gbutKtM$V&;XvNabYw3UYzuY`XOzb}#f4I<$5bK?B+jCR@mBrYa@eXz|K$ zo^a`u{MMl5GkXu*{F9(emap;0VQyH;{rDdw9rg}JI<4(6}#hQy_$ zw80UNoj%@_1sTN}#Pcpq6{_f0t_TLDUwQScl?ZqkL4jfrTTM{{H_#W(IK(Z!}~6)E{eusoUDYjX6`y|3cHq+>`r!a z>}pu^Hyf1VM+-yq6P}A6xXSg(*~DV3Sc4STuW^LKdfRsklYHvr7+uZo>$x-7`QUW7 z-zNI)HpnU&Z#V_~;|WD~>Jj?~2Nu)OW3WS0FH1Tl2K8y9@kB>v_C;qJ3|20*B$$v< zWxbISn1@mA&Gzth=&X)(_8D?~uqiLoy`HLE{!FoSYT<|x5V9$9V-|aSOy)OkdF>&q zzc&c@FSPO8nPeT6TWK8-IooVu2)9q_lznUQpe^!Nl@wRbTL-@C0)1IaoStg82EQS% zq;v$RZRM*6w&ksjshmu@0V0XBuMgZ5GR7cchKerF(S&yT65qv)En=L8=kaIilGd9e zDKt|XbDMy-1}8yPt3i-QQH8Lf&fl^vmRbuKbKb>Lb_t&f`Qvk;f}NG~t&Hf)p$ECF zuUpGoC%H2^^MBZ1A---67gC9Ri!l)Dzk=jN(KeRKPSH=3NmMHs%r70|1<57!`b=~b zO6N5Mou&?XH(=KmBa#@JQMif@S=HWFz7z%6lANC1!ES6j34XHr!3^BGWIIB)Xa8nO zpZ&fJysWGsLZa!EIHjM++;m}?h$1cMHKBbFkd5j7iala^f4U7(%y_670co1+_!1K! z{fvZrj2Q4**Hv|+@;w~g|J2$dXHDmQ9cAhxA7G`3w;`GRLouW7SK-}W(xB`#1~(d@ zp`za|l0l8i``h9VFrFI*(DUXj0NI%_3duMObH&gv>Z%N?Do za2OS3>Y@fJVG*L8F1F+{l6hERztog=~|~Y>wLG>f4W;;NnrN z?XN2@tXrbeAtpci63ZiHU~k*S>PoyA0+78H9dh~adG){Rolor7#dc4&)`@{H7eUZoX#P$KxlwOb?CCP;VC=ypy1|UcDq=mHIff8-*X!w|knJ zrD{t4SXUdWbR}}|1nbOEz4ZD#o{D{99-Qto=v~^M7~H6B8#b0-y{k;)w;iv zE4jGD7WTE4T(W|Ezf$W4z0{v646rKxj4w6==bjxFR3X^3c8?LNCx8Y?>k55UvN)`0 zNd29!WAVD=4VTf?XePvrZIdu)+l?0dM~ z^ol6z%(OuM-uOv`YF(w;O>~S^%SzHOS2N3ho_|r6o0}rsNoI2C7~>1jZS6oYhZ0t; zXatTlr6%|Ixqjh5ny6KII`5AKOd(`{p+6TqhJ_IK$9jZqGm`xW3>7+M5JF~Pr0=%s zIi-TyTLzqfJhkmMuHsx+4Nhx*x($BSXBO%Fh#Q%DQ=!-Iu27Iq+`Oy+*$}cQnp$qu z@5vMYbe2DT0AklE=S-Si;`;`O{YT%a-YLPwhYczeB@7Lr%IX75h1>Q+IQM>r@k8D2=*GbnPYn7^!uySz0>IlcK*)K=Kmd8idTv=<~+QniLy77FqxrN6UGt)@{Fh$zwPEJiC+)v!#M*th{udhmvUxYwoX0mobKxBnr| zQH|qEgb>|%-uwJv4Jt`a$csw95boxU+ja9p_M=Po5z`ZJiVE@#fjcl)C+aEGkp?iD ze6sEZN~kZ&=X?fJEhRI@W6;#4`2%riv-Mbm>`zO%ICQE=m11&@8|5X)4C`(nCNi55 z&tN{MV5A(;H9gZ8nTeQ#ZU&FG&0f>ons~ zTUt3WEK|H1PVA@#lS3z~M7-fh;@Zrt_fzDID0U(T-GmW`n>NUXRv%njZ^j)ffySB1 zl#jPSuK1n?(q)Y8&W`hReGGahd1tIN7JR{Q5UT^_`Drnx7D<94u=iG zO`zwn37AwYyF04xD~`36@Zm`_S~IlyIx&z_dBLc!o^#LG; zk9=|SelEli&ypB!*u8(B0rmw0qQ}PpVOCvNm67GAmv-81d!klKS$Xx|&>D~s3Uu-8 zEX1)Jo3#b}ryt~A@bz2`&PAY>po6Vjmuqqf)&m8Yj$^iXoU}Df>MjUg0S~D1s`LnzjP2sD#2Ug zn~&cz3;im_A~YZV%U(EMVqXCLjL%PI4#HQ<|I#*BSV>rTk;%0luA%-%-p|e^>h;l- z23P5M5$p;@_&|`R+c&i+{nd-=`vH0skMpi09o1dPE=W{lK^)gVsQYI>7cAUjcM+{0 znj9K1TdIO$Jw6ZE@*3%?>-(8ltcI)KXrS0AY}!IA3a~gceqU`&PGI-n1sJ?p0YewafP;a za%-RclHt7NK)gSQ2~v`i{nXR{Bkikx>#=AmKUK55_19$);3RIuty?9gb-Fvdbyt)= zI1wl5mEN&J|M|p?+}=kEs0tpw3vNlv)fGO4YhH^;hYmiCLz!*2FuQ3B{_aE+EGCqK1eiJ3(HH90mQ zAKMbAoa9_FUJUv}o4d^8CnqrhdU(C}fZhaIEOK+^eh^g8WA{;d?HGM-((arh5~*t(^asDEvZE ztxP>o+P)^tHU7S6ee|@>r5Z@qrgOVV*(b%|*ZFU^l{)B@9G*93~w*?hkfkYlej;?^u7P51c0LY2vJK8{Oj zQS~ZBRUC!9QMFsQ;1VA_6p48onlfq9GQqg?cTY_=_R^mEmMSh^f5DhR{$?F>Uh(C$ zWA+~vVMb<6}?v2b>I z)%}0swaRBRK(Efz@Cz?!vCaSpC56iTLzgm~=@egoYpsQ9)q*_$T5{rf5*?{DVAgH~;3LlKy@*Y}{{@OZ>v zSB0p09!%_O|1po9gIgsy83AnaajqUmw3pbW55L zjw$0=O}m^H%|4Eo0c6Ks+c{HgM-tmBG87O{;o#}3ANfe=gKj}~Hk*Dv|Il?7z+t2S z_rt0(MH&v(t0cUnX~miAaHalh@xHP{4kb(pGX4b7mi>AN)uQ+H9^dx-;HtGf915oz z05Nght*9%oUsLy%zR%VaJ{l4FsK(|~tukdrDnv%P`xR}0g{w7YDfLF)%DVU3&zf+s zU%WG4qi6zAz`&tHe=NrK*0bv+74C~22OC@#-7n~(dEfcml}orI{mtRWej?xp;RDN9 zt7(pntas8r+o^u~*(80TRGMZj2=rEEsh^F=V%Dr=q32D@0rHlS!FK#Mp{ zN%oJ{uXpA|k{dwYZD<3sU9B6zj2iammXsLyj~c0Nuq9a#rV|qi=mWGlD}0X*o`A{{ zfQFZgalijk8NHW*#KQ@7!ox`_qxr7+C0J@8>Q(6wwxbUEmTEwCRL(}-*y%L$pKzj$ zmlZ%;EjeAk*F;H^9Zl^~yf|R%RKUmy;PSc)^tUtxLhM3m3^7~73e-OUPeelZ_Y2D8 zk1wBS19thm9mPB+iE(%59L6P+ge9czU6)zO-&;)YC;PxP5)}Uc`;~-g4{&^rp@#5? zY%DUtJc`%>#$2|zC1rgBj9W>o-S=F|i@%ZNuP94aauB-a|3M2T{uf%X{W+!E*SoVA zaeDs7U9j&Q*-ev{aB z@H*wBOsxp zBC+|D5|Gl<5A!-1A#ELE;ZQ;u3r?c>=XMkiRPL?Tsg2@#&_WBIN3CHAi2u?%4K(H6 zz^#NYd1e5Sgs$j)Dz7&y`l@^OKXNjq%vO)!qz?xVt&XR+4f+&WT^}O7{oKXiK0B0& zz=OS}FTVk>^NHZhdY>~?CeB{O?F1ckfvZN04F}*w$%qvP9v3_o;#`*z37%m%bm$5i zK$h)+QSUxcx9E?AC3fx3bVdvv#$;%?OmwM0Nhr1UmEdb(j=pC_8)};RsmC1nnj)#B zGDk!uljjP_MjU;aklCnw7!Yl5F#U{ZI$?%D7AP3^wn=dH#I{gvz~8Fk7mx^_ZUflP zntC)s;LP=lnd2R^y{Lm^A)o+I{wMO<%A7W;48-4p8vboBU)50KcBu7t-@KJOXBxlb ztf2Z1JU6Xh)m3*C-rUCwz1Fcink`U#=~_SFsNN}#a$a;F^CmfqJ4iZr)onhuOGLYs z4V-!S866x5{hXp$=wRA<&>ixTy^-&_`YAQg;cL|Y>hnaN&^oEO)%k4NIN^hWXL(_* z((VR6BPen0L+bZVS=&mx3AWEZ;oK$^CeI*KgSkcJ_g=F%1xu>%vaZZ?weSZYjV0?OkcI(okrylIb`vv?wd&lADSquX|8y z{Q&74J^3FB-~~>q6jPw+5if{B-n(hv$R0GkV;LTHSM)5emr3O#E8H#dk6i+WpCq5Q;eB_KbA(v%wNt#SOzuOe2du;XdYu*|nmCfU|C# zYPg_->p)6?o353Te!=LBulv`2u(;xOByI9i93ufGf-~5D8FJ;( z;^&{1#K~Iz3j-*ps3MZ&`ufulAjL|eaF>Z@lThD-Xr%IIbLT$g{@w=URnlgWJ$$c=R~79 zHa^C$>&Jn&ZEv&rt9)nB(NN82#&utdSK+kTv;t$9UC+vv7OQ$&ZciB;8p84;2k^z2D*k)y43i~FkfNtQ1lK3hkNrIIPebfAy z|3ed!6p|#R*vayk#(&9+Z?0ZUV+EgAh`C+@$l2-m6lHzNEe9{-%B6i=O6jFc8f(ch z%_4A@FQ0IQJbeaT_dd=K177Qb04{;z$i@xeKv%xeWgYA^zzx|fPI2jYX2O0<#_qDu zW$CYIjE@uY>M3kUWUThv-b;>00`3|4uYvbgeEQYWGAn<6sy=D(F{- zlQw`$8vwX{ab87c+ugXFruYV=?;z|_bm6NfE+6qJP&K0!Op-cdgi7O21ES+WuyY_0 z@9$SMu;eBPlQD}}!s~qdt?z)D>tkSl35rVdoAXR!g7r*DutY@er{}9$fA`8VHUIXE zUu=?dPGoT`1>ic|!K^T~7zu9o;Q$#O#4P`LeBMQ>XeZIpWFS(@L!4PCaA%O6aMt+0_{PhH%4=Tbqm8=gw@Xk$YV_EjfYnl1dmvq3&ww z8zQ@FM3em-b;~OrHc9hVi$h_k?W`;v;7#dub&m=`aTXDNE08iM3tFdC6gR6mF}MCQ+s;J&}Akf)>Ad$m(Wx?6b<`iJClZcRf#X$yF8Sl z-+PKVq9vP)IQqW^mH*r4%_;4#>M6U|9r2*EmKcvr><(COqG=3(b6`e`>dSXV)zH`f?RZk??y_k zqolI&yWpa9W=U5=TBX+;Y_v1~1}l$eT*IEz|13!9;-3um4ApRU{juP9-Q0FLmhu{S z@Y;&yjv7Np^BxgYKuVp}!2~gm?u@{>*^W6=4wPwm?>WFK* zEwjsmfNI~mC)FUO#c}BV`nhXW=`7C5rl6%8;k0$$j?;^;hRo|s+@Cva3jv2rCja3NU@ie-u~nGX zI`(6r+xo}nKjdkr9o49ooi9ULY5Sasp_WQ7ZVWWZI`50|%e?sfgN@nJM_=Rg#j;6r zSVPow!*OIx_37`d3yHdqE|!xTv+BP~#Hq8|CD>FPRNnS|sHtMr`X>S@o8QeQb<|{e6 zy7n;n#bmV7NArs^F+qNR!=FZ|E4Uhy>{c_X*tY)H-w<#`{zDi2**#vIR7h6*03CVD z{b>*!7tdD^Ic=XO{316gxk8{3PbaDpG(F;B_m1hPU8}f&*2i+Gp3FOr8*KlOO=ViK z=<*La%9dv~TT_m8*YAq_m*vL$fue?NlcQT%b?DD>9n?#8am|9r&rG2I9`ufJ73sNn+Ik!1VqS?FI*OR1_ zQLju42beA;=D1)AGHaCy{iL9jLz6z6XhJ6Al+xg=Mrts!+FHW#m*aOX5fT>dNjMXF zphuU%>h<=x&UFRfuEiPMXlO;8vP9SY760704j{tCPF2pn7+k8tQV*?(+*|bQ55;{H z7Si#jJ|p=i#LY~+iaTva_fZe2lf(#jm=qEXK#`i3_N)%$eg&tHkHStele=$Ko(M*m zz7%B&^E}0)#q*DsLIS?E>u~Ez9NraRooUYmy#sMY-OkBPkh1++Eq9hmzmx+lUX0P} z9+xtiBs%ZA<65{$Xk0wd8^4D>jOuTI?n~~Vd55@(`mpL5-+Yr5=jlPG^_|J#vDvay zM%9vLs{I{MF^OsM0Qvfenk;TT%20D>qI7mjRPJ&)SattaDcj>PZgOE06i0;B4W1MNv$kYvTo;V~_nQRb$xnx?BWaG*1;?u5@h7ELmVIcw8c? zLL48KIkqgh2$=_)aHH2Vvd#s`s+Y1s2byJv;CgkDw6e}zPa>Jxh3nA&NWA~O&8w%> zYcxdSHPvycYdX2E%ew_9PY@yW*GZ$ToP`qpjr|P>FI0)_I(n|uedGD z{H=N4!58N?UsPmotWN8*B)Tk*{}rmjvaqw1@+#Bp`vh%!CL&%E2peeQ?_QMS)8U38^w zgxWc))#~FgD{2L59@La{+Z%U{$v0#ftIjm#S<4x=hj`1ud){mrK7UR8U8}(zrlSM2 zciAK}1-omm3z~1Syo51PSF*@~AQ$a4jrk$7dJlanCdol(FK=6t%QjZd-#WIQT7KQ6 zqtLQ>R12+z?vz9E>7o8Ovi$A|{tuuH=}rlg1<_K?&zV=mbZuS%#VF(epP`&4>q`i} zWl3Wv1b{u>Q={6*p#P!knO<|4Gf(4j)VoygmH-lP`-x0^#$$W(wAn3tU60!h3IHfe89$d7tC{3W>qB@r8F`hWLE8 zNrQIki2Sm2_)o0~hxJv8wtC6rX>L`vS$Q-2lezcue$$<0T_3$GWiEa-tAx_mht&~# z%ii|x^U1)^M&$lIiuN3NS>lhZ(-z^=7DC9qWNkJ!w{x2d>#7IuSNbQcarRvA-~NfX z!W1AxP{O7D100;vrx2fpkWDsw zU$cCgiP=&vqo$1bs}vzW(=97Q)XjTR*0eEH zbX1y(3QCEJiiIjA)C5sLrKyPYCRHh+*N{*YL`qboNDGJ*r39q61f=&W0YYyv+|1bvl26jr!)ut9Am8)_;hq~^+;#AoqeJEMDCo$wdzC1P@w{PT0ug6EJI?xvwc-OHoTw?kg{&nkkZM7&P0IXkq-E#=Z` zKC%{BBx*$ z_^d^tE6L8WbMo+&PT10ZcmQZc_bP^*pm>^sTP!vuT)9!bO3P!q`$=++z7rD)Yf`=+ zj#7k+Fg5T!TUlx)Zf3lykXCNs5Red+|JmVl_*37X^VW)7S!9wrSiw`rXDgX(-j zkENXVq&!WWbS(^(24K00kWTpbaOx|KlryQLsqTG^r?%X_t}?F3)Opw5gu1jUfF?IB zEG+pvSM2C0cy3j&FqC%MgZM5E`6a{kUym7><7ePYc&A8nu0*XX>Nj8bL|aKg(8}kg zOWw%{$O>RK!Gbts;q0fr`X_ z3fhw#!XMRYkA5(*(s%qlCXc|4P**BA%1a$@KW}DA^pF%;;N=_rIGesJG^ZrL$r}9! zn#g^6Oe`s*+Ar1VN44#4T|`WaD^In6j?(5ktXm3iTVc>zb|XmXW3g5lM*-7EnV`Q} zw(E$rjX2o(%dsgmN|#EIRkqr{Iy3Lj@6LfL)JyNNhqWP<>kpY?N4y?|P1~gl`?Cwj zz=53==3j(I0M-MaE7OhWOOz)fQrb-3gvVY+A@3W3ueY?^S_6=t17=zKE0pg{!Rss; zxm63!wJZW>p78Fnd3YwgXwFggyVpEx+UirPbu=LSa765&^g4?h>D%)cw|zHWI3EBd zGJ6Z`KRna9drh7tSL285s+cHa6Z+gkL|mz9 z%CQv*`giZ*M%mGK&@kyhOkz$r7Op) zsXhhu&BA67exzx|^^pA+pRp*h#(zh^_xg6p(Rp@u`8C7h#V;mLBdk`w=9yHxUYZ^Xfh!1 z-n&psIP7*W@jiRomYVI5cJy#JPCGHw|u~KA-?i>z!-e; z&1pXhiPTj)Q=KXIyJ76}Lzj)!F-;=z6^{;O{+3ku+8{?^pz%h zBOfYBz82ZsEm;@Uj|#tIpsun^Ih|n7v9~O5R}p!Kmm6_k!LSgTJe&Jm<$`KmtHIFN z{%M)JpNtdstHAy)nIK2rJO->vpzXSI@yF}$NA>I%*l)OIrY->bfgMep(qdS?#Zi&| zF@c^eWT0ox-4Mcj*t}WvlQ37k_LY=YkSE(gcd%xldrBnWlN?uINHa0y#4_M%q4KIu zjTUNXokewlJEHee=+F&&z*ss1{uD!ExZZsgvIm>EL0#_yl`4vw$`;8=XCW4Qy!QXb z{yU7_#NYym;85y~T3F!L29joj{bR}BC^Zwbz1OP)-nGG3Vm>V0vu21(qsXC*lF#TL z+k3Qr*D`DT!EY@tDmVUc09CiY5D=nFWPgEEI(7;)AeIMxdOT!JqWgkAz>SvUPtn!T*^gq;Lt@FOJkI4jKG5Ux^1s(0X zL;mtHtNq74*w#Mnr#C)H>oCanXi1QbNyh~7YMj8rr84y~ zDo))tn@Jv-EEjE#?+IUzoH_P4&Sf!3jjhay&x#F@34x^79yZ#k&(+ce)O)dho^noxY`tB} z`f~P@-~y%Nv!B<*yjns%v#{@^c_n>YgelnT9a$A+VJsXbpt9j zM9mT}ZBph(S5)=WyXL|tT6&@^)X^xdBjvsuq9KO#G0vJ7z~dDmW%J4jh3qF`^5<=l zpbOCeWJaBJqs)=1&+292J<(i+_J=o8*UNcLUJ-Vhvz{RjQG-;`IvJTIti01B~8d01*MF$J6%d_`2aQlj+BPC+EJ zTMV`-#&~`&M6H9=xp3UTA`w~(v)d0c-dK1yy@4+j^f(!gHgq%%1~IO>@{0FAZmBEU z$Yf*59-DR!7E&q`Y6*0=sX{aUnW?j;6OJBiab+hhNwrys_RmbI!~{yK-Oh4M;QB`q z?2WvzmQM}GK3e;P2Qha%l(JqI(8?D!?4PZUcg&R&pLHr4iRU(MN}`X~Y6&8yh5v>B zYjU4#Flp0d+GMvpLiBLrgZ|!_zEDlPY9PDPfb0kdL?r&bwAj@G?30aenpPR@G?fZP4ct5xMSR^HPV^;szwix%7c;wdg)6l=2 z)eQG%S_?oQdaf|r(a#z(&nj~|irN?LVFjb3z(M@SUryiz<+v0+8ip~vLL5aD8bCG+ zQ?|B16eknU4f$ctqwDmWXUlGG%5ik3*CxV=h}e}?zZT;PvUNUouu*Nf{wSFO5#Zw4 za<#tMG^4af82N4YK4jH|k>0!I4EK9r-4*!PIkbJn&xWKP>`bW&PDF~jstpnl*a}*< zk!R8NC+OzFC_N`y3clKaChgb3m#h4m=4rD?+U|-8Z1dsNb8DTzNTh(-tbFyBQD*UR zO}L3SCe3JMFJj4(&dl7}3RY>y1+pzV4?w1S2ZjDEms@+naDyjuMn$uY*eRO|Z_4I} z6xvFzzT+N#?#?7^DQ&truTkcqcvv!_A{9t}Z%+a)NAsu9SO@t81c|EN^YM(GaU_M2 z4?gBkiH6^X(8Rrh=YiCpK}3yEw=H@vD-k3^2o0DJ(*r<%Ft)#09z27ywS;o4oGY~7 z{yUF^?%=J^TSX^EdbZuDgR(%USbyzLw@})VANVj2`E!-1rgGJjSN2N(#7MipHrnjU zO9)xvnG zX9|_x;N8VD2<=a*%W-vyCtK~z^L}eH*9n9y&@}b8+1`ZNM1wRDno}T{D=58xF}z>+ zmUwLv@Z4L2akGjq(&X02#HKq1Wa#G+X?f%RRat>_e#F88!bmLLL+CaF73%UCr zt+v>2Q_L^VpI`jAr=-g0Io8R-x#y{ad+V``^KSoT^y4MN(WZsXzsf|I6W{LMNV%h7 z#29jsS9N0bn?a(Vs1D<$LfPfqC1X=h(qnqDMmv|P@K;xat2_@nIumpNy%=_d>XJvA z{5AN~{cX&kvQD$&{2BAG$d2>R{-*1Hu>6O!Q)L_g4=kP6zV3WOe?sN@b5%0t%ediA zNqAZ-YTSTx=fy4k-roaL@_&N4oiaInSEB9plg&3N-IrhYbQ&1gg_Ctv5vjKWSe*E-+ z)ldDcethG~dv9i}r;;-Wx_>SYUE`6n%;0vT%9MAChY{Ev`V4B)pGGB!D$>N@&p?_^ zrr>-;Yl}Z@Q24R3bHC!LwM}>ww^HO3Dbm))VB)j`S6H9;#J@N0kQ;TkMt4owW7#Wc z#d~7{R;tXd=KuvgQyin!%jbAt{1tm+@kHEw^j>V#2g*+_k8C% zlPOZcu8miB^kMtFw4Ru}L!0d+4(U$iZ|^XCFo8jo;eg^-QL3lJp%&Al$lla-y+tKlpp*t@luRe*l>#9X0yG^dn)Twl?!lERgtsV7@v> zM*^|-1>XtEB~ zgYv!y)&*JJER>}hWYm8}W+~fTg@X~HOGxk`ql`WVhkXbK5>Hf%N#v2NLeW)$!}w z_8ED-E%Vd{PYbsZhc9#FD=Ao4K=n)hn(ZWw)6x8WBk!=BpN7?kjyz9L!M*E^Ykr%W z_K*X2R*Pqrqe#PCmiCz7zwjSdinN{IE2?zGbvUzHsVJc}1DNp_0|&v=CxXqZR)eMg zxu6Hu`OkYDGc{A9QavKdj3d^w<77tJ% zuLF)>J05C1@VUiv_$jtqIrBz7F7NQi5x3jz@p2ycZ_U9npSLMZv&OJiU_+;j4A&{ z)A#DxqmOuy;%5ZIEy29xjCyRpw5;vc-0crV>dyStW(88Y>1|T?bWt~D8|+&R>5Uy# z1(WbIH)f}-pilK@h5QA*f1kbuFcT$vg^$hAXjB?R9Q{VPm9QF;(~_Wj z9uqH{%JQ166n%G^t3>>*1;X-d{-nwsSCp_;XzI{iaeE>1wsmbb|2m1mZk}qJy1)M6 zr;;M$g}VIP%x-YaYkrtGU~>rZ;{!l+^Jd{OOU$X@|a+Atu|QJ`&TSy5pUm{&#M3_laim@_um@0devx%=TYA*EEUoPWf)v;sj{e zditaxs-oZqb(#<}?yq!z`*UmS-b?hV-!^;wn~K9p`u)bzM6)MGHSDEsUFvg2uYG$U z25ied^nMNwMxm=UqfM1k`?o)<-)8a)BzR%;hI;q)dF8K6monYs*%Zc{oI+2U>m%h; zBYB!mf2q5Up$rsAW9Yj^*z?lEe-Y4`25B$@nDy9i<^@$3u<2?$KC|Ygsw;W$Z~XWY z=^j866GIb6`pAnfZqA8AkLdoE3LPL7R& z#N)-zNaTL|NvLI^#>Se!KIdDv(=ynNq=`$yDK^-?LpZaB7vZYRQUzwsNXmwi!uZ^a z*^h^>?XMe#lx+(rFh~K%l$8_)a_;OnB$Uc?L?edGdN0i}gJ>L0z#=YFImYVmW&Pcy zxtNJi`wZPChV^`JY#^yox8LXw+L3E10M*WdkYoqHA~@@FgS>EQcOF-RqjqSdQxJd* z_2HRw=fiUNAp`R>TtQ=DD>~hIK*lq%T^#%XNx?#BaDv5b4v-GO>s)9w2_6G(|NKX% z9thEcpZ%1Ta(tVFcuqSm64xBTT&5W_@hM2)Q<78{U9;~EWY!=`ZEz7mi=oIw088LY zFk4u$p|>6vFPF$Y!NjEUOWNN$jb*Mze^Gv6EAMoF=eEa+VLVfjIuSm(-oaoh6h) zmB1kNUqT?@yIkWSBG)T1BmXdZt$M3r>E;~UPpm+AjIshJC|7cRID=?<1MApzHPKpG zVDwDB(Oc!TpMy|wyoS12CHM(sUbD`Lr4@2(wQb1hqMq+Rw~wv{TH=^b5^51<r9;(BD9&##G zPAlqUR_jmc_-$lB`+I&`siYN2v+dq_-KjXoW+9y6F0(7%;CzG#<-#_7s`i(A;H-q< zk!H^@Gm;H7KVL29L0d-5k(uAza9+2lZutjJT?Sw9CZ6LQ#R~WQ;T@oUJNyNZjbAqO z>W(>5LM4jc2)Abx-V5}6y<|U+kmOV%pHhZf?&%QAm}Q@SdNWYm%Nemn`zTWN=qg#K zPw7;y*4C*tL0FqR4i#zW^t>XOS6Sz;oG|`ATjp}@Nc}mXPX)^{b-2F{_5%X{ifCn? zhAzV`4N#_AKJE^+aQhI(y@&y?{>^Ht+KWlXF!RpbmC@eQjtrv);-|X`I1kCOZz6)% zR2N(>_GAQ);I?CwX&0P@u5r{?D?4{iQ2}v&iL<&vHjY zCx^4*h!3nlD3r|K7(kmhFEdxAy>=j)dEpTn^0|&lF*o5dq<{DFCZ(Kc*&~hfjq)R( z8+iX-E5j{sQo5wi!d7l{>}IW4RK?9);r=51R}*6MeOsM>{6nVJenIDiu3^5<@13dq zIH_lCO5C?-N}tbwzf_-oa|4`wF(UB|eP6qpCzWUjs=d73C4U-yari~5nvuEp{9os{ z%q_NH`{$M8SuA?ClMA&lD1EGjWw#5!-DwFvXJ}A_gDhxZ>n*uhUF;NZtq$GscU}6A+$l~`a3Vnm08)?D;XO9D@<11pA-Ms&3 zNEyA0TB19n>D4Gou`~uc1*Q!2x-yz;tVJntaO0gNw87?h%2>nn#_T~)FL=)p8A={u z?D1LAw|2;jy?92s;Y_P^5B<<4kh0%u!^mnZFKXID>CXn%tN=K=b|xyeCP^<>=AihR zj+O27!-H1L8;{$J>PLg_xL^TZ+2Au6svBTyK$K%?cBkQwjX8O_1a;`IFUjjfgbc>w z5#)skM+=p?1f4n^z@e4;t99t%%M8}uPXj&iiU)N@|c zZH^U=o6)$(i9YvzCsm!HY6<*=^X3Qj|F>H7|0w6#tN_^Z_{t762>p1O7>qvHr$wwl zfWMpk?iK(a`>6iK-5s?3C|%l!0H^o?fB6BwNMD{9PVNP!9V`KDO*_3S9I8#n_Mv}{lVdzcdsZpQ z8TT}sdqs%R%3n277KnFO-N4y^8HEqO)xxjQR_^l5fBaJdYIS=xXt z5Epd^8puZ@YS2Q_zqbU?_L~SJEMQk99?+U zmL1_7^^Dec)CkibRPa{Aes07?FI&}Zj@l6yUz&in*a|opsKb8Unee)|*Z;@@+SWj7 zperqnTL31(AG4c?n`FZH=mU(PgzCy*B@R**4z^4YNXbcnSQ9%~9e|b&x+-`eu2Bv%2&Y`}2YIP^=s*^l<2*3zjsVmLvM%W&}O zQtEJv;S}u-c{fP%PsFKC}rT?XO9z4^ z?6x;KHXr?Z;!)4-1|BPq`KZmYPw+;*uQ^$t?fQuIg)Ed|dNrlErb~iwosnYFw z3CjR*x7z^Osp7nxHC7MgQQ%QBO9`Ow_1?2S#u0YTKxm9LAR33+8XTXv4k09_2b~d; zhEIWymu%E2T{@t@MmeV0b_K#4Unha|dlo7Ov3v|$jSJtAn`?D7b*D^AGzOOn-~%Dj zj8z-x#)=;#a17h_^m*js3sW_9v*K5M-x3t)7Y{TyKDt<0f7D&e%FyR{($ND}-fA>~ zab8`^Aw}$vIV(DOZP`m792FCS_N8aO&c9I7dt$azuD;Tw@ey?#De2@UZBuwD{NqC| zrRaNBP!Wy*FV+B&rC;FA|EZ3joOg~mW;zXQb3?Yad)8Un8-HQ6(>8vi|0^lbPN${0 zA$3nQbv8q~eVuuF>wL=MSe;!VQxmk==7x0R%j?)TvwK=u1Zoj?j*}&$}=D_Y+pP+@4Xd zd4ojqagOE?cEo$ z=<=w7H!B{Z4$-j0OeX6yg@O1vrjTasYos=)`qZE~ zUuY>>!>cc<80zyqRI1ctjcE-}5Syd`anqOopFQS_T`XkQhu{w^sm z(EK!f*jK8^T#o-?wXd`(WUurUC1z`M_+n${p>teYPg6%uMwTN|hfy!Zcvgltt=~O> zT!)>>hi_h2eFIA_X~B}+rpcBCpTY$EhAw`vG|Gc~yf*sGFgDbG{TXP4)%S`UVTrph z!ML?qyxJ$D@lB%AI82JM~*GX_;_i@t5jEpHJTrDn&^fH}8B`H3=Iv~MJcmXG^bBM~q$rdQgXIpXUuhE?k~bldl}x8)M&`{Z6$-7}BFjKuG}UeZs? zYg*SajM&CM9mguLuf(c;>l12x{CP$?Y&8RKoZ_0V*j~Dys7(ho=ijrth}+1R-qmr8_PgQ7#rTO6l!-eE z&VHcwk8g%8+4VhX0Cl{{4?o-=KBB$Nbi+&I0TSTN8_>Xs3hgS=-k!zU^1=e&M#Nw%47&PP zhrN5H)-|PLlNrfY9R0>(qw$u*DsZ~HSA^w9?J$V&NGuE9Bxj)-njQcNW$G7`SLE4+1J%X(AWTCf|CVc#n2 zS^q$t`#-~9=*1JhM!Yqr82{c4K?^P}MCp51)@kh--7r(~eW3sz5)kl=iL{OiO@e#s zaZGi!P;Qog;sM4_?(=c3{W?9DjLgf6f@JV!#-KFIg<5&MI(p^;o!fVMFkY`DLtyPD z^wo)jC|KTx`K`}&E?v!9Ze;)cdFCqmJxhUwj1wfz?Eitp`Muek2*Koqh@u14JiPr? z0}Q67J{~#!t4&!4);}veBiF@R(%xSsA1eo0Ia^i@S<~~&EdP?{R|+XJgD@5&sLJRE zmytU=66$7|k?2E8Rmb2)D?anc&;K##Gn6h)3R*ovzTjYe!_E)O-aA3xja9l`lJbeJ(73LUrw0vogQBLWI8dC>&oP+b%P}Z@t(if)ye#6 zF=*UhWuBd<@-97f_k8*tbwzQvgf`nhEs75n(fgZh(TU7m8mqDr8fQJicvj5A;ir^R z3e`KC6z`^=@QJToFLr%*L(CR*`JvMKNWH9lc}p8-ToXP#gB)ouspB0e8@*SheY#jt zi7l>P-uwjQ^x0QF`f9B7?@iWP$8y3+fY9!MGW_(#0BXH>U8TImrSBTQ&MCXI)iHx1 zInIFvj5Mo48(~Ih-t%W+EOYiuSPR|tpm}?1NXb>h*#!7)S17`yAt~)I5Jz8xPsQxUetO2aJ z$(}C`gT!;}*~*+=9zeKb?B|>N;`mw?sL&LnzGV2`m4+7QNg7wk{!H@0>e3NdPz0-d z8OJO#bu>T{Naio_%EFY0uXjTBDL5oJbn7hxOBmu2XCLf6K>DhQgDGfK(+LD7fOj!Z zZf})g6N;0znLRuXikyU052n*$xz<9v8wH9pSR>#tf4q1oOU?AKY4!aw=MnILCDG^Y`GkV7pqHly>wRuD_oqpaQKyD_ z#lVlR#=&K-DhTe>)UF)OYMV$z!EM7WNAEo(*|GZ!k@^vhdyL)x%2N|M7;BVxxSPtJ zhUk<4gwc?c;GnM-;vt#6cG+)OYjWL=8gc7a<$%()^Q;B~SLanzk{_=Ge|C=(QTb5; z(vk4>9(t{|haRkhQcW1`aHvE-z3?dbO#zhK67!he~_l#%hRvoB2+RBR`(js=K%J)B#CI`=&p|oud#`zmF1;h^eL1*SO%OkI`pKJfgp}6SZsl78F2eHA zGN_Y-`uggU-33h%sHZjggN+U|YH~qx`;;#rfjBMtY@-U$*AI?)B@Cy6M_zRk)49W+ zPiS@W!kr7i|DJCitlb_u?&M_R`rj-70RYDScS;0wrG9@^LgZ>7trhq~Dd}zKZnbV7 zw*ib6KC_RwF8GqkfDwjQrucyR#)O4x9|9M~^CL1_{s%~RRl`BTW>KbzA$CErwj~(-?KMKox_Hw3ZKkN>wla&$ zFQ&E}m5$(Aw>LYe_LFV(s^IA#u=BhcAd+>0)m^!Bota=LwaPkIk=_5L(MFy$j@-h{ z+40?;e{>Bx3JSKLP^lFAX4JV|)MO)u7S7O}eEH7RYjwkQ+EU=oyQ5kYphUw+Z}m0m zc?%9c?*hi=&d}B5yh=~8nCD#|k7$M&PwcsH9`r}zQj#=D%*b-Yj>B^Q>%uc<69*O2 zkm{vVea=9Z1QD_GInjf&K6F#VkGV|Bmd)2W&X*pZKom8ES-RcFGk~~zEti}b%eEFe zYOW2aMlBia>|J@g5@W>H&t8(Ft3ovaYw)yl+GhWD_1laeq|F_=8DENPkEL>1X0+yb z>h$s^yX|j2kGjKnonEPuTL~+)JkE-{sb3$?z415WxFh=KMMP3)b2tbj;-*@rQTzfB z8jfOJ3xC7h48pzA=|V1Pis+$`>Rk#CCG2bX`1Tfzewc9LyS}C}r@yUODxk~w^m$0Q ztZerVKPksmgcj_QJI*&_ney4Mg3|jT$nlugJt_jmXE_4~yewg*3FaaVJ;BV&;p5*BCrZ zxaizqkI1U_p7C6S+DRhE5dNB>Q=>%(iGcPeI;G$%b8zfRuHmftWt#T18y7y5K00_$ zSj^pv@OI?aB!wlUe-^0DsXKLiw0{}8KS(dpz1z`LniN8|{*Fb=RpeK1QBWw{Rbf>u zcrZ^5d4BiGP~86T4dR$I>^VLf`dl88y&t1hP0qN6tat&KL zt?`UAfsfmcn=2ktMBK4o9qCQ6Y3@X}EYa;7?QpZ{k&#a%VpYW zVbE?V!jg_hK}q}I#+A$yC`C(Wf1@FUa`MOd;c1ikZTk>&DI44N!YE-Z3M|XG8m5{B zkKAiuc-8}E8*Kz!XU(^GFPwXZXxVRNZgUX_;Ur`(^aia^u7Q{d#uqE180VWU$hu6( zb8+n)V7xK2y-uKhH-Dzm`+J>V7i5{2WTm(ac&e4px(bW9^EQ zyE^<_t7^c)trRMl-08P`SC;IP^oo@6|3h(~xQcRl)yN5WsT#2Vw6IYy;$tgF zNzO?9LGJMoBt6xDseQlmQn^j#YV0MZA){~~=J&J1=BB-%5zb{9VRp->w)zmj%c!MN z1^-5skB|U@x$pOjj!#M`E?a%j+K>?!=_M{OdaCb2177^+g;&gNOL7DLYQmYZVQ$Y_ zt1&@*{?EFV;(F5G+Z9MG_9362rURnqHCt~o7?9c06To?Jyz)2EdgJ|g-b zBLO-nSzXkA-W0@0mx zy5~72^Z+BHOd1p0RD-uJ6w2;Ntft00< z@0Ir=GRrdAZte6L6}Vn5u>_k{YRiAIp{olpM+sH3B}nxSiUuk@rI)L^2HlLo*w^go z*YShCs}E*|95c6dcD}6HyoX#@TTFbse=qWgJA!jI7h$evDE>(5jDqrY4}=mLR#N3f zhZAR|U*Wduw}S`EGgoc6s`(!g46o7;u4@$5YBUwTWDd|O%wvCWK~qc0{DoHDU3ZV$ znp!I?E_d13-#vZ*LdzI8q#1H9sqmt_e98HzBT;QJOG?)aGA6t>?N#YJKDa-Ga&)2w_8!%V#ek zdw;$9`1=oN@XQt6-xGaMB@ChG7NsltHF!wkg#hW`MyQ=SB{F0>jw=7!4w0`oL>N~t zdz(LX=cXTP>H^J5Sk6t``RI-mwK`a))H>ZF=&fsYhrCL#O8&VPgcac34CBTOmQU-6 z5g)W)7r2>z=CxtVsV{S^UYFH26OptmPlE{sp3XYqG?!azV`bUn+ym&u`!5D8PQ=WQ zRw~{hjMXv|TZz|(@1>Ae;;Nk15kXT6IJxMIi=P)Z#IOPn_A}B{Js7PV<|$7C%1hoy zY{=jK7VvcgXjU=!{L5&P%dKrK_i=v@?ovuBAmq!2_>FxMrHh#2j(mU1I{h1u?;~5P zWnd}z?)Bb*o%g83p#UBwM zA!o+m(v6Ob*N%)8&2a+hu1f`&oydZ9d_R3z#|C{oI7g|*MZ@TcvwZK%SZy$FpQDRn zu})VuMGGbasZgYkk)EbX6!N5LZ*Vt!d*h7^(TmhaeqcqzZev2me3tNIF&N4bxgJJh z7D5DNE|J?>2L+-J?!JgSZp`9f{jD`S$I(J6+#6qXO$YyQ zHnh;4#-?L9HG4fR{m<8;f@)WM&7@=Bz4sY)d+9>$f$imp%We>1aVIHFA1mr0K^FkW zh_-&?&AGMdS#EI(gl#X5R^Y^El<%PckD0_k01^%N?@-bbb~bGElnN*JN^+!%`-dII zqAhV@?2sJhT?D#M(YmgGY-d?(jADOjh&{YXwYNXDTd?! zD!fM-#r$<-LwaY;dNd%Z?|@tC-p-wkvCB6Up#$G6_~wwWpMMhglYims?y{wY95gaC z;+jy-ogaLSR96o;g>PM&xzUCpqS3`ACoZhTbJ|qQ2~|LPF>~sjjYJxrfF%##WwH?T z?6{Axdz`tp#{8j<&r+iAj=v0%&wqgfvu_BcytZGB%?qoV)9ZLv0^^T$L<`N`e+ zTDfh7Xz>15(ABE}?$Wsukp!EcIa-kTb<00>@WevS>d4u6ds{j+t=& zr?#e6#nW$oy;ue z&xKuX3n?j6L4=S?u5m*c5BBvV2{-|?x;Y9$(PR+;C}-5jK{!g1)jpQ{@_cap8Ue|^ zXTU>BG?{<%_{ehyK>twBT~Ls09CfssF)u$6>u4bWdU|VPx0s#(YQ@sT0^%Bw`LR=H zhC_EEC=a&qOI!@SYXT)RC-^4@fpo923TmT}%VNXo4YgxeqM%FF39h}d z65~IS3VBZaQY#bPa7*xrnZh^e(;Zz6#BN8S%d)@4B{@>+xCX?PqCWlBPt+eQ!);vT zck{IRdxy*gSEtutF(stgz*d`YP;74!bUTsaHPa0z*6rbeF_CEP4OfuHf zwBX_ZtuB9-ZH0Mh`?W`+YSyTeR8j1khJyW+Ou_^$y5m!v>ee~areC%AUrz@&Hpi7$ z9Vld!2&(bVLM~7@@&2bTa}7GZFXZ?{ok#jMwTNfo>oPNURw?Rk`?c~fz8JOs>?niK zirz5o=Gccz^hST2lUaysaTc*M-mQE*D~TrZotwEKh)(Q&D09qpSIJx6kd_@$gsC{z z)Zwb+f9oMxqVP1trsVSS@?SQgJ}1Z>>aF=VFC_b~1UMX2+aEox8>?K_g|@!~I=gFm z*-5tMDC*;7DGPewPP~;ExOR1|5y==nI@}Qbaf>7}j%uJxYP@B6tekeGW95KYH5&8K zo!s}}{?6VnNTdD>eOfZc_-pfp2UY?Va(=v=0D$dYrC zjHW4csGK=RhQoG=1uz`WV}}F=En}a0a5gNH^?feUpI#^+_GUHt`0tp95^4*^(w%mE z~ZT3%dw7-8beI49!z@DV$V(qy&}; z(`l&UMdg~SNJJX0GymaZ*|lTh4f`0gmcE;SzZH7Q);i>%gMp-pfb-`_@FyzMyZ9DP z%nDL@V{8%KYnVUIK4|*4!-m_IpJ2}<6@~)L@8Q<1FC6meDE)eTqzL@SZzOt@Ut^h< z>qltd__6W;IgF;HwX6^_Qki|`rJ11x{~4D5l%y_Mv%TT@)>qW=&a&@qtx~%tr-lC8 zT_%}aC+Y96_3v6&C^$=Xo;MflXvtQX1WT!A0yq(u72DOgxW}M%qK6pZ05uH z`>6juQ2&M(vD#>eked1SS($>ci4ZBufb(ils}c9k4~po&X{RC87fG+Ll*8q>EGSyr zb#t4(w-zB&ccXIs=dMn50>yh?y7xn6CDk@@H$hHUvF>YJqrutW=~!hy{pGx5Y_)8RYZii zL*9>29^z|tHa<90DzDld0Kl1Qm)Y=8*=9Y)_~{s?Nq)cZYLO>_6P+woQmVNLv@^o~ zBR%1eU$+fT5SEOyzBd_AB z+=BLGaG%+xykI&(Sfb9SYx>^%t!@9?)K5llH`ZQT9QKJhO9v~`*~aM%h~{XJt{ZY3 z@ua6#_%kngvHz|cSVZW!aXq^E*7z<%bcxRH(RAq(Okd-_5ti#$QeS-Y{0w`n9`Mea z{^v;`DL|x)AaG5Gy|_b#@u8~lsjtCz(Lx1jvtALYcJul4>}<>BD-E6&SB3zbNK6f6>62rZ(W+WKOMfTW9D)Fm2}(2xiV>` zkVe#hK`iB}2UY(IVu??mRcl3loh&=OcU6ui7Fyct%^PTy8KSPEsoFjyMvhLM-?ZDo zhVBLN4$OoU+vH?LpH|k{R~(#eeXgPFTXuP~@>wbB&`%pAQ~H1ql*NB7d0``9Q(YlA zkk`Z&yS)>I<=3Mx|MN4pA+jIRgIa>yixYnwFdkz*Lgp;rF;OX>qebI7MzMTsska9W z64Y|;zOu@`q7FBktmw1iOOvuAaV`2qEUAu!P%Dh4OCR|7t}G;maT{JQ^Jv7rk>z7K zn|n^zjgrYeiiUl;h8=_+3mV8F3BJ<7f8v+z@&+EY32OwJ$-}!^=3~Ly*n2HfaPbnQ z`O7B|%Z{Y^8NX}RrO0bJ*`qIw)rBDYJ7cWib91FWiCt*>wiOVuQ9Cvlx0~Fjaq!^0!8s(IfqIWN>LO zgfSX03v;5Me=tzRWui50`ovC|T?K^}h&1B6vf?D$8_Dxb&Pv845j*|aOSq|k90RCt zj)E*L7WkPkym`FTcjvGF^Sh6os~=wnYIBwT#M&_|lTi?B*@?li;4w^=ktQifg?a=b z^CiqN9TA?%&ha}pOb}?TM<;R^aqA)c2sjHOZtsvXjupZTLupC4Bf2vy65+=1@CUc=b(>a){xHm`@zy+$PLVXml z{)C%3tV%!>53gjz?(c;=@(fHQdQL_1Tcc0~5&w&;yYOo|{M&{PNJ*-wNP{S-h;+w5 z6jVS|R5}EuyL%!MN~xn68%j%eGrD1tqel-Ixv|06*dDIyzJB-Xx$ggAJHKaqj`u-> z_@9mGf32hcwNnkD_E`oU0CD(p7*5Nu2uY{*mQTPvocj}=$Eo!^@R(Toi>;+z-8Rfy z&b>h&(P4a(J)-_ysQ1#V&@3p*|LG_I`I)g{DZiBU)a*+j6k&6sXEEUJeAHSHJ{F%9 z%ex|rSOOqp{&>g9O5RyG{@awH+5ApkzJw|9cte0sY?tQtt#_I_*RP^h=gW2@)#|5x z?hT><#=SXP>9MSD5i*6r$d49bvSXGMlNT9^L9Dy#{rD zk%E1dt5f~rx!uBdUnv;}R0VYzsgwrAMcEGi$AVRaG_FJ5(u3s_h`UiGzpA;Bo$3#= zrQmt#L&3)?srX=o?SqPSS^e62klSh_f@A&;W~@_X=H3GFL~h&rJ_H^}MCN7$i|3Zj zo_3o#O#rkQ`U3pS%0LDuA4sXL|J-+H4Zd*Cvjiuo9Cz*!3*V5F!8Au$| z*jvDUrhG)I0gWv_y1_4HfIRV&xWq4B55>2ZOcn9Si2)xs-_hztv}Dor9DUQZJDDd9 z6Dt2QtcYitMN@+{BF?>ctku08SHNp57Z;&^$ajS}Hz*DwJF>XAG;>|NB+#Gd7WB@(4MUx8 zZ9!<5pC5VcFc-L^n;?R{sBb&Ann`xfew$kAL^;!l{<(8tB->6hBJ5E}H$FqgcG{GI zT+7KuR(15s-6bbq$ZqXogO+W)KJpw_&xvFtVim}nKuX#C$vFamGTcStQM}lH zo8ugdrem#8Bw43z13z7U?g<4VCtlBSERL;?1Rs$(#F(d1o;#jrzQ5PUD^0644Q7MP4n zL!^@${h2oDB8`^21Jzb~I?4%EAuE7&#$onBVL|IX3S!S~&N_h2j`zmGvCP zaMv-ixSEX84bM$ zln&q~K3}2{ka|EkN?d9?Fd%jAiQ??Z)rLPnK)WFc0bqJKueD;nv|Fo!Xl5xg!`y>B z>;egSB(|FK1g7YIf&8^BId}Vmp+aZMb#;6ZQ*FMj@B2!}JB)=NrnSD{=LJ}6^xY~^ zb3RWg4?5XH5+um&dx*A;^C!C}NmW!s1$5{YI@!L<641MBqF^WSA1uThh2-y-f&Yva z2%L=6Y7o!fR-5(=3N?|piH=(fiBn7dD`?ld6|5xH%)d%qFj}4aiP>G5Egt@WVl5=k zXYOnom#iJZ)F2_lA$?OTr*du>yB;cxzv$Ebzi0dZ-ikW#EyF1&9?_*MIQ^^5Tg}<0 z#!|{BBgWG$=g0=^h=QdUA(K}37U6CFlR)5&sW9Qsu(r`DTxKOz)V@n4ZgZqI4wCir zJ!_66x>jljtdJ3QAZqSKFL1x|MmNki23BAM2=S7YD zd^X;%W<6Gge7tzA*-l)IMNePJYBizUyNX$jEC*n0Vd_Yu@*cH^HC%X`jrkv~grmO3 z`jlD%PWS1RUGsgs&g06JwiW}apUJ^t&sD!zUbg3E7EOGQG17Kf$+)Tf@6d!VC;a)l z=Ldlyb}IV6q8`V`6}|nvp&&md3>s!ixnR4@GJR+FyTP9;YJpyZ_BSp}Taz^arNn(6 zd{ZZ{t?g#^3Rq3=WlAZxa5^eg5Znl2o?Zxo#Wv;x~5;K)EHO=f3 z>y22pxxkfMXBl;$XQMgIm5R8D<{0zh(ps2OHCwngqgf%*gNFelFo{+@GDTRtVC;#;LtS%g6^C>R};QJ%YsVfdD znk}aTEe%WzvvC?*`Fzvxv+%PLQAvnww$YQ|xfee$svBabx&xlvJ}A{V$i*BJsdsE|#OV zlmeZV866f@*1qLa)$WtYN;Qx1&3~(00Og#izvgPK4kVMa%LO>Wq&-0%Y#+_lLx<^hyUVT-K;NL9mO>qXd<}{-=t0t^(DX+gyaFEj--@ zMsWQnihp?2|NK?_b9S~86#witF#ZRu{&39q<)`H+rN&O3AIO%(rQ)*{X$*Kx4M47( zN1nO^kMMXHzQZ#*%PDpQ{49uG5x4~1E&AGEB;moF1m@emo8W607FqZ=EvZ*15NJNKYNO*(XJMzdg|oXReHyD5-Ws4fzw zK*r?}SV+?2vIqU<7hwGE4ekZ56S*&xTb7+X>NL#K^c+p9PDZPfR!_pe+uDV<)$-g5 z#}um_s!$u!O45t-$_!fdOqDkVn9uOG6VJyg`LPdy8vtCfeQAH>8qLO*ImrCtezU7d zoq@jkED=jJvo08J^S4J8X91wnK$dy_*Ujqx-N1JEeioqWSI`QwuU-nMj9+8@iG2Ra zq8!O^IavuwEBoG0s)Wm4l`Zg?9(|0;lu!G5-B2GAx#}9?bobz@isa2|yP8?UrHi&x z2T+evTl`%;#^piyV9T$LUDNmR)F#!wzu>htE@#%NPtBFsoAy%DoXoG~>)0^9iB5=x zg}w%SK>^;pJWmXL5<>VlN^j0P$meV@3P5eTMHH=tO`O-cdND!`F%Jbk+VEtObZ&rb zivKp{C(lAuM;Xn`;)eoxA7*CSDGyyaX@q#Q?Z5V!e(BEh>~MsxG)Kw@(ilcNh!Yl( ztBQK&%C}Jo$w5!C z@Ps~d$M09NLtbnDA>{pp zM*4M=nptKdo3bVcgQD6to*+c!ZZ!#+=;l9*u2H{fumz@^zJ|@uO@;^TyjRW3dy-PJ zHa+%fJ{p_N{w0KG-Bf5rmp&FZr%I<+eNX9)|H&rvrrdE0{)lvHtbO zt1jMmrPXcxK7xL4rm0OuB zVDG=#+Y^8k>wwej>Q4d*)$A&6qzBnFS`73C0^pN<0Kyy{iqClFuP0xQ-tl2wttnRI ziJ>CA%RQ0uP3vmAe;JAjH}hu0pk>qo+hbC)^Y2pSH@OY(Tfxojo>7}>(>3%K-9U0b za;q>?-4?B@d0KT*L+HTLdMwoV_rQBazbXq{>=JNgL?C?D`S^D@U(lS!sz@qaj%?3^jD$*>`uymk)E6ZsByZI?05Q@V>BZgxnD76FD7*8{Z2i=Rn`| z>^|vpX+N)o!$^(fiYn*zXr<*J(#IC`;M-2>>ET^)p z0Tf!bJez2DGlsTvg_~wYm7KsAfg82}FXEO8Yy4Q=o#3QeO!qFyYfbE_2UQZH%{%^FodAaR-fxoP_prHW)I+AL1Zu! zOkurrP|5TAM-BV)%y(h8KG!-s8D341pwvFKsg@%sQm_c-artnr=i}zbNv2j;@#hER zzw`bV&6I8FFxqx@YRQbD;F2F4qN7(Ua~Ll7+n-veE0-uSM+^9f!OerWyUa#sMiXIL zNAD)A2hzXz6}9iVkyj9X=BB7-W$op35=LU+no3UKoHg~Dtq*@Vo|3%|rrlc`1b%)` zUj3{4{gQv$)BGsJpv2clVEZ>N;X_UT=ZWh-3vr9O%Ao?KmK~{nq}vj|ZN}BggW>tp zveDNfKwP{Q*K5#x`k?AjvA0wfQKZFrvmgW>ODs)WnyiIjPIy|M`~v>n*vmvR%5#>K z{veIq5;+PntU*@eGr0;&+ZUY;mCarVqNY|45x%*w=)L2kM3!HHKvkPEp>g{6hs!5# z?FDGt;q_rArtQI!04e)d3$6T=ea_cWR1OYY`YLOEv(|!^EAy>Obf=5BhdOWi2_ofH zSz?QFXPA*~wU&9+wL}EFm%-&4wqjnIB3P|xABInH=w&$^T)F*3)-P=5Ul&hhCA#X- z_X$8|spcYQ3(oCqU+(CQla{2tjpkOv*N+Bqmlf6m5eB0OP0kM+gT1#s?E7kE87d1t zs;_O!#k_yQzhXCw&c~KHC^DOokIRRWd3Ct02fJHEXGL4uo+ek$3Rj;JbYeI%)h>I; zb92vkisw+MK&|+lbS6%ZYep?W;uWTE3*c<%p%rz}-yG1eipgb??HZb!==N4;G)0qC zWA8nLNV7)-6)4938J#g~;{)Q)l;kDSPBdD%d5e3&uM^+z`D*#$NW6-D)qVovfOAkN zqyqxc8u#2$|7bHPm*{z1B-1QYpZ7TIWu2w}DC@0S@Ve|k5T?HM!QV0$!FP|W-p~TA*_$XwP~{-D zUvoxB*W0_p1|kLO_{r;a>M-8{FZH;w5pu^DkGIa00&0miFJkWjnYF&246?dSLD`eW z=PwqvGWWBe^9Aaima;X3g`EO+Fo=Y|{~BpML7J!ZA2fybAjn_wf1Pzt;@W$rOIm+- zjNA(9IAn!vq~^%S%RGxdDoszzyAE2yyN890R;*2NsgK11aR<1d^L4p(ML-`8O-$*- z&D&pB*bUYnTBSMB524Tr9Ysu(r1Gq{cbbp}uJTC^90b@7Uu8Eyb1ogfKflrr2n{}p zr4-GJNsw~t1;}DBB0fr?H5-7UY|rZ~QHpqA+Z3sDM@nkgK1aPlXi4(xEGxdZQJ8?I z≶#)6OKVa@j0Zj;SB9Z}7QTrMKHXGxBX+=^;U}r{GTWa^90SfoHxwxBzIUBCx`7 z`kLoI$rmOKm&Aad`os6`opRvb_I9UWO?F#bd-X5ORHwU))(me{|cooCyiLeUQlJOlzVDmhJRXD4Ej8S+dT9;7v=dv^-@^oT*6~> zHMELe$q)8>;R@{l6n!uT>5NlyT|46EY)_gV@d(lz2z)W(e`^9HP?S)eat28^x}?ZF zH7YmGQG5PD%TfMpvFRmUl6)D{p|gK)-xkiBLW);#f>(1k|B^XrtazggUlU@js0(Ne z`}&i(J`a3jl%R;%#^&o3o^~{`g>-^bua_MrA^=tFqiSY!3!IIMcRs8O7~H!M6ahB( zH>icTg3cop)~cJszymxnb;X}zPY62L?(2`O4iBzg=RP6F2Mn(Ao`H+fCzmQoek{F% z*)l=o`RduvUkt%G(-D)|-`R&X=@UOpquc>SKkkJ}`kl}?vDkY^3+L%F3>~!oFjJKF9mY_Y&^MR4RA?&s`|r2Kb+v_3)W_zm)D^gw0#dCN%Yj zu~{+OL6=bTx@NTtRsjDS0xEF=PZ3@G`F5MNYiC(OpT?M;MEN_Og`B@~n6d(x=o$UX z=*X^sz{HBclbC*LbLEwy-=vg-n41O!{oib?(6!AN-D1_g@6H45%Dc8J+*N!C(_fnw zLyuF-l+{Bt@^WW>ITN87^Z)~74BbiV%*PyIM_4|m*=JT9G__RoPwMOOH==0oK)fv%y zh(xN9``+YBs~(L-(@8B^px#5&SWZyU3r{epu0B>HyO991uQ!cMzR`Dk}u zH6+YlTu#YyZ#&ne93e_oq0Vbvu+wkz{^#=)_@36m`B(S3Q*tKv0sG0Dn+izYf4JZ2 z@+36yEr9A!4zOQGlhfL!Q;_W{{{_z7{m}v5bGpFho>ktVtbGl;!ukW`Z?ldU996XK zs;8_LD;yu~AQ$CUW3{3Y9XJqTwP>Ry!IQ8df`aFr1&wZhWKLjDZasX9(|Z-6XyvFx zd6g3_vG&v5!E%*_QJo}%|CR{c-ZMB~I^aqUQCng7+Aw{#QZ83Qdit}p@z zGQyPtHeTLtz3q8i%cBbr{LzG!v%NCDOo>0)5YKF^IV+5=v_zUbGIvr~KFk~!X$;%T z2kZL>4oQT$qDMM>6gRycZjZ=WTw#8p`$y0>j))%=1Ec5;Pa8~nTU7u}Y*rZh0y$N2g6;-xnGgJ+GM`b0qiyJWtgs(qPp2>Rc ztp4^=ObAF4JNaqzpW0m^L1|G1_a$S_Xx33%1grG~Vbftph;pb|&*oI@nmks|h+iFY z)2r4MRv0k0b?^Fbr?l_W@SpiF&a4705#OuAkK4I^#bp$=5(LIoZuWSz!rwby7WK-~ zPx`eA;}D_Td2xN?n80RVF4ibEuY*x7h=HD(qA48O zBws+K6}D^O5U`BXv{zN7|HZhiMDwmWH9%hwt^!3{T@Mog}6_`S~MIH<|ZTE^iO75LabM!^3*$C|?a;elZpm7dh z@Bd{RstZ=dsfgZrGt)?T$Y7Kfo{M|+3fliBLMp?MJxJ5je6G#_Ab*GE$SgJjp?v6A z8SiYxsYA2pc_P3TECHykO_@a9Df&$(b~0-~dz#(d`g%4$3X18AGEiHV>r9A;U7}#4 zg0ro!&dygm^kuo*4*WQ~n)YyM{%33OQ)$|E%M$Wy!m_Ht_Iq&WH2+&IsSS_{k2U|7 z|Dj3+2(hcmU#C2*IJ3@H0iRm^om}<2PhOjAS^tw=kZ)ZZ!>01CFr$XeqtT;-dkNZwoNEOS8_)_GH{BIwoNN$YkVo8)B?Y1T+7CG z@~fRbgfT#gW-oYDJo^oNX9aL@mTrpprk#!J)1E@{!tx3MLE3{zf6rtwwj#4MWwI`e&C1xCQyV24-_SdcE;+EDU zL`wjXlX7k)fI+RCeq#ro;TK^<*Lrr?3Fz-%g^h-7`PO4re)&mlM|>b?C^KU=)}_54 z9}($tQsd8cDOO;9Mu@jEL-*`*n=L0y-(1{Gt!rZXB0PWYXtg!M*^cv82Tr3wJNw=v zK)kt`<1kEb5eEjIfAIEmWl?NcCjIMBC(#}P=DMu75A8cHayMs&#NkF)K)E0G5_RA? z1j)i+Rffh6nlCh#TIso!2O3!Cq0ATjQe2I?8P7Bqw92i>;k4oX2i%1^4J}JOFE3Yy zsu+Y=Hl7<@Es2cp-36)cey|~R_f(CQQ7TscP?sxVCSI9})t#4x@Ui%d&qkccG!0${ z`xNM&_}-tZUh#H1UIM`K66poDl>dAs#P~>ARvLI8wsr7Q0z;Euo0I3MSK{al9{QG% zx0OFM7^n+O7A01ijBy-l=AVE8HH9~NNY)w2iVksQIqDw1P;$&s3TUb|xwzR3m7?`QR2(at6oJwl%?UpQCQL*vw=omGl*pQ=9^gJzle z81?>z%nt7X^FGTA_Z3BZN^{<%NU;>VW6~s8uxmfc5nHxfrdIzMNc}&jb<29bes-$i z%uJk!{gQQ~6YS~!e02*uNPzy{rYn>(TzmdyT|YIRU!)*~yjkKl((>G3TCw$)L}OHq|5W6RB<4Kqtc?DDpAd|jN5hkl&fE3Y2|Ni z&J^W@HL7X%;onFC2st5BpDrTLq4y4eH{L1B2V?A{ zk?b4x;vu1;{?BTzkb&L-Wzt|YCO2gFSU|e!<}A~<`YXgPgPT<1K*yYsgScMmo z0LqXI6RaWY54OR5WT&paJiCtg@3;&D0gsd9tcqKz`9mhwyxd!9*C9vKQ3fw%;L{G@mkE=cduc!Cb>w5lcyd2oyu3go5WZSGgvQF2XYe4ugT!c@@J<#|%?kY`LJi+%*I^O_p){j*8me%OvX+v!UcA7$chz#NbH z-67jDJA4(+pKM+7idwv6#k5*Mf&bs}Sg>Wlp1C~xj!LjARB`WaHTp|2e4Dq}X9O(dyn zk)<8KJDRD&=(y2u)X&iTTB0b-hdz4~?1cO97MBN8x78RUV_dL5tJ|G^Xj!-;dG0eW zwCQjN#A_131&Z%~Y~taC*iD<~2?N{yH8C+|MIrC^$1eQoSP@1gyNZ?_@6vO!0S-->~)g0kMf`G-Wy zD|=xTWl(G*M=+qC8!J|ihbt$FN>;l*U5II!pO@MDH%zCS z52;v5s0;*^Vp|dWd**p>v5|5ak7$XnE-A_$@#tQUzSySpg-mp4=N8qD{0o`Gpp}49fNNd!qr{rg?|a;GU)duCe7h+OmH;!(05aIzqc#!DoxklprQ+ z{YSUFz0n>MXt2cC_zRq#crpB6d{Iq|^due zsgo<`I+l8wnwZNxy!<}wGk5Hg#)5xe1cdY?R`lNd(AoZs>Dz3@dlA0S4u$veqbEK; zxZ>gTO+FqWkxLs4g?;I;h0$0AdO1vhC2yKdAidhJa@>DzJpX4Bz;_{>oqRZCXtA`t z?m9W4bEQQ{z3=?N&x%iI*2${Axzny49vMTn-k_YA>y(NVk~YgCF6Q8_@~9H`Py*7O zDogihWv!ZdFMNZiXgzL3!RQ;2hwcLxAxiHKFd^Gxvm%#;L*~;ZCf@C=3)GI`yKhE) zmP@I&fxe-}lPjX-QA#r}l}5#_^@UVO_X=ZX3jSM!WY$45>29{r`u-MlV2n=It? z!Q*8!#H9W3Ye2=y!w|>ARPh%an!t+iql#cf$Q%cQkstHJZ%T=6&vGk&eb0m}XSjEY zN`;!Y$^vHWH0I4Wvb@X}+QPoxvi$y%ZFgB}?&q+>KDct0Kdkp}a^yBB@WvI&SI$b( zO;g3WW}4+)E__`?yf-RQ0i9B=@H?Wc{eh+_x0rtQ&ldd_q$Bev{QO7SY0j` zKd|jMFIb3xw1a@VDL13qrC-h;*%%6qn4!8+-)N$e&;@2I0uK{Nw`rUyw~K{?M@3wS zAFtHFY3d^CKM&oG{qRN{Kp4nG(AlzO24Hle8+5SMw}Nru`VO)H(%flBvKz7ent*b? z&a{~jN~N-3H>=cl`M%YK#k~}vKgDduwD3vGeX1Y}L1(?4D!HjgaY472{2K+jtB{{u zO3@`Hhq;vZ(f4(=)WfcyGOE*bK@q*>ZL8f~YJICzZIcmWQk-wAUD3=7Rft-0L;+qn16TBX-^MvpM$IJT zz}9PO8r-V0GUivnDQ}Ka4_$|vOK*wX7{6{%i?i~FwU*E9P87|NNRSY^;?FYAQf>+GGJNb}_y9L>qY#CKc65-1%h2v9Ke6xmE zAI?RvHli}GsV*l;M0?*BMCR~0lzUzjc#5KThyG@cm@)6NJQ*J!HXVxijCw_5d>nzH zZ5@;mAR7I7rwdY^)%09aEb3M=WOFJ1wh3c=R_cB>evydpgq?5gb ziQ-pK8NVIX;3}JUu)ztk36h?p}+8qJ~r_x-}s+i(FX7XaUZRja^#glT@cpWwpC!T(S@q} zYY(Sc3gNFsn@U?nn3`-*aT;f&LqPeMIq@Z`WTZ53T#9rfC#BhyLwF$aIQIKU>EkA6?@+$o$$ z?1AIP(e}W-11p+S+cRA%ch)Jv^x>rK&QHN{2gV|C5e#2t3URhEp)0DjnT9`g&Tcw* z$X+exSh;em|4+DhckkiYht`^pD&?2@s4u(=#b&%G z60@AxN_idYySBJN@EdR+EtYfdk2}azIA!-!B1c7&IQ+$XoZQp`LC}nV2u^i(#y+?3 zmf!qgA`fmD#CirtLCu5MnfioHdnz6KWJO`gG?5&R8ePcKNZvRs`}a5cMi2c?*B5K4 z@*zLKfJa0l4Y7kuc`F8~HQ@7hYYNpdmxXfXY6j?)i%|R}o~Z14r~g<0!-I*s!VA}< z`5G|dDn(6xZZZ*f;4ZFS$_={~&Ln&Cu_GyC>or=<6qz-&$|?{h)-L}`c9Z+98& z&1~MAtuh>Ko&L?&rpx&2vBj=SyCsLVV?{(bU{6kFdF4g-#?2VEW|9^vk|-t2ouzMcxEMYYWA z2&Ika6w7sevk0uQVWxfQDV-@`MEbcXFQ|Q4dL-SKpiyB_ZPT2>c!v_h#qgo#2V=cVNleXc~rLd90yg30Blatwy)=m$Sb&Tv&}99gb1+PxrY?|JV$ zCnv?+B!bVJo$>ANncgDsl2%HGF{kn?!UH5yZi%cVq|^+5Otw+_jkdgQzSb*anOCb zz^h@B{a+0dDla?knhLt_y#uwLUbg$dGjV}*UOOsTF?-F>^&|sh$ZQ$fR3<2Hytj^0 z{_e%3=*lqcFEV8EPkG?K>C^jBWCa{zOt8N|o$ zNg>NE$V&Ta$zg@|*!AaverMk9Yr+go2?c=jt_pCC6$58)50NT^A2~% zNl^rnY%do;GGw6)!iLgOf1uaHoGK`Ff^MsUn1GZl)W?9ZN9g)mY!~(S*_S*9 zVP1@T1zcZ(PVa9S-9+I>wgcO^B{Gd-7Odf=)opf7e^!Vo2Q&Xh9LH!j%YX1H1e~8e z{oHhdHg)p()b@JReNy+)B{lI;M3~KHMOI}z;=?j#a|(u@T^jdIXFxu_S~t+a6yX@= zWLsl*a#s`)7UT$FW@39t`Va+2Hv#Tt@K1p7PjyeIw2204C83+4)lhz~E)xK9Iyk?wCQ-a4ZplVzGpXd58l^*~K z0EZj-xkNZ_Wq1D*Fx18EzULhlqFd9@#e*yT*46msn1@0=^|I{Vnk}m`ei++3%&Qqc z-SM}3IMckhm!VUc0g$eDRkQJW^?v7|GxB^lS8Fpfg=OP6qr`yY^Ozw!A_yXVz~GbJ z<-Bl;SV%9e^eGssV>tTl2#9Fb=6crTAQwjUL{RsToI&1m5aY)jiPiqz4 zrO$jqO3*6y&IV(eUD?KJyU_Hv_)nt{4+uf0qwxhwS$>!>D=O_=r?IMjKkcWS$Vf&5 zDFri(`ahv__JKdLkk(NzmZ@5-6F+$kv7ilOf9Vr`dufaB;cYuL>gj-0Ch(tUg{|7aED zi@(3{(qqmrGpEt+57)&Drit+f_xP2(J)Tetg*HlC9&B!<@%f_adTG{QndVQoML)3WQzW!7$hBvb{&$vVDzmYl^7~kbe|R4X+06INWlS5mA2nhRFX6!WZHL`0XGeY1i($g= zIn-lq?R5IbsWH`l>MK04kO>Vx@!>CFWmyBCZetVEGoFv*n5g0W(M+&1vv6jnLI$J*AkiZlh+3Ed@{`D zHBQyD_$ISs-p^Lj%k?I-b9v6w^YxGJSKBRVPJbTu_W3;u>^o76W_K(yZYFOI;y^99 z^fi)4^<_lz?b2%QB+yD|LGJXyq{{=Qq!;4-1Clp6g6$qoa}7AFCTx^v1u!1xqTXtJ zyMw+ce~=mz0aYg$P;@b=Z63sU%D$02i3@c?nkf&_9=2ybT>%gw^X#Mnt5*hdt|KmB zIfdBW0)-=<0!e4T)y#Xl(RYId`0mtbHcqsZS#ZWf>=Z29BC}aw4Tm8t{-O@@lX#?@~nXE1qj4%m2rE$zO%=00rtEsvnGs>u3V=(@=`H70N#h!H{YR}VCj7k%ort^l{p5FS|dX;-srpS`gP}X?5iNh690k(NDjkjIf zJYNA+`b(`=&bBI_aAvw2cHF5jLa{5M1ui~hhYQDJ!O@u;f1b+k3_<790 zH#c}k`Xw%BYZf=X@=(ibovrkN?M4%Xl{NeaP220tcB_yZ76i>}w%o(!oQ;FmniBrs zt!yZR`l;6W9&iaU%){GSnO<)fIk6;g@=R+{)#H5Mkb+wyWm5jG6CRL#jWd7YS!D)4obvJ(@4m z%BaaF4C{Uxq6GVdNS=%1Huq0vt7QCMDwnd-BPyC*`| z&AiVWyoiMsySoo<1&`ma*u{9}LhX~)kl|)8>0TQKW?7&jG>+^Hpw-Y7W_F+>FZv9x zaAz`^)#OrZM-K9w*g~U)_{LFtxo2oyzcIq*clbm8&4lR|T2I-fK#f>Y%3qDj&c6e5 z(pt}gMxB3%s*e{iB;TWjrj_duP0+vLQ=In_W`AtBPt?Lk zUFxnSc+$V8rXuS}3#>_wRvf;EiL}oNT#haJY#W_~ph_UKiZqMJ6QlEIKHBE}#IoEa zcs|W`WXH>Fzus~%06!VU@F6>bDa)gzfwmLdtl-LAmLHv>bl$r-5}>LS0aGd6560ZL zo4qbOr)5ldX7qFAe%+a9BoSR;9B|c9C4=6d;P3l*YE6})aJl+dAU^Ft4|8=0*QH7; z0{WYxEG~bl^5J0Yqgk<^PeM4iTs?VRhIGXBShP_#H77w7q8VHH;yJ$lwOV zC6Zwe36^>nrf6+gi#p!oJ#dpFrmb&ddJ^Hvzk{ zJ&L90C+g4Nq>bZ=Lv>d^!XG1az@A6tWE@7h9AwEeTtM;lxiDQPCMlCxiFwBCye>0# zwVoq0UE;B-Gg7N(nxiBQQxZEmz)nsWaMZD&zwm?w6$%mR{LQa zAOo{A>yDOQ2jx}+PSA{MqH?@{SH7iV!6%b0&#W*$`&xz=^~1j}_^@4cCHs3$^ zL`gP!w|80krG;~Rj$+x6(}h;e@$buL4fu!^Nhxv0B5YOh7KeKnsS4%9wytdX|2#?^ z@bz0!_48x~2IrjU1$JG`|J${w?tlVe)0w|l<5uF|=s;*Kas~pZuw{O$eHH z8qo4as;p1d1VYs250jNlktf6or(eG|k95HEQ2)`$Vi(7x3kV#Q-0%^)vOCQ3x%LUT zN{Gnlq^I|ylkrokC6o15TO zrYbqb^d86VN4Ls$oOsgH6;U0Aic1kJFlfpi;hzjNdgpVjh z?_y^0mRDwON!0k=7iu8Kn2tu{Q(A+d*Z346?V`_5rcbq~pUXe}8T896I+-j*5dYR^x2uB@6+tO;Zw$(i@65R+pDO7x3BqiB#1KRM_m|M3GKwbw)Q1(C{MprG zr>l-7YM6ZM$lL$wa##&IT#$qBlbK&Qv3&f&6lXlX2EpF3eVnMK4(E}7i-M{Sd_BJA z0kIIC(~09)^X7r-Zkty7_8UUCchwR%3zjzZ)Vz!z1}hPkG6~-u6{9ryRT8ePK}fVW z)-=`2-?W|k6;9mnR4qJ>V;UlLH_RsD{vJHeb=VuNrTv}eHjVJxoJurucPIUt-{Wa> z4D*)UDGwx(0Y~2T?5#vly+0Y3YRPeu{snd_4D%umQC3vk6vCD=qY68hCI|HIooo4> z#|+p7p3RiHPhVlC{pg~c9U6q3&={g_hf;}^2Il%(&KtFTHt1pD9d$m07Ka{PJedH| z(g8c%T_-Kh&Q}ZKfzZ=1JGH#fbpX`1;e5es&j3IP@Rg3{(h3F}8I&Khdte)16Kz_PValcb(^|R=+bwQjiOI3~@8+@G@pe78{Pfi4_4m z9@aiw1pP6-dvK%HnJdfkc9~rWxrp=Yh=Bx>vR~d7Dtf^KgtbAcxw!uf`0`crEtP=d zDx<49OA0Kz9(=W|y!e!LAwX1+8=om}!xXQma88a$bI8=wc*vShbXX|%fKSq{N?HhF zul)Pmb!bjKl1R#bv}B{$k)Yvh88p@NI=qWt8Im^^iDh0kxoj%am@>%-uKjXJ7>T=$^%791n-_}qS^rC^)L4?}wS5YI(ILUuiuxIZji%qN9!&4flo zI@8ad>nBc!MJ)MSVxx*Zy^c2dhO?v_lq)jVj!ndn_wE=)=!K`AXkUe3u zf|yK>KNT#I3aGdznj^l z&2xE{<2cOyh#h)RUIl@_(#xp`qK;ddc2!}-EQ!HtEd~))67Cn2)QDmf{I`y3dJ)E` zOY{HH_1@uZ#(&?pt!h=Ny;?2RR#DUzN{w1=wQ9$z6+5;_s8woKYlbMTQJY$|XN(YP z#NJ}h7(vA2y6)qC?%(y?$MawQIRDFee2(w={(j!Cmn_9*#VlDjJ#P!e+m`K{J@!E= zQ5s)fQl)XT@wtK;I%M5_w!lsu= z>N{#OU=vZap)ISTHIV(xR#W3dywS}C&H)7Irxs!R<3yj~kMA|kb??7$u1fy{=jt;E9DPf(G%4_D$G|!6 zU~>L4RR2c2tW0^PJxvA=-&r7Os>02@cZ?zkrb@jCtf*q@v-E$Khps00;)~bt+jIw{ z)aQ7w@|{+)3hO<{Pe_OnJxZ&wAe7@rB8eD;a5P_kGX)KzHTEyoQzO;DD4sac=+G%t zdpnOkx}^mz-ml7d;u2q+FXS8`_Rc3X0dv%oXJ_Ls3UnSC1VHzDg`X;Lcg_f~O62SwHg=7I3nb&5wc}a5^WoQo_e)+^#uN8S=T^bqtkbfIc?W&4i)@lb) z37?xzHzxvI9wg%%n>#22SwCwxLqwL3^I_*aiTfAcPfdKZ?Y^eQD-%XP!nwcgh2Cb@ zEqt~esbLnml3%LuS1=~Nn!0o90ds-wOkh&3O#5wzCKQNo*+s!C&Rv1Sw6rryMwxLM zDfW5u*qoS|u1O?Q{#$XysXW%E9{Kz5xDE8?)LZa%OCE|2AoVr$^hRO(*#l0gBPwYn z@QRm(8oRsw^}xT8FdgIx7sJQ}K9+dSe(E-JaUO!8zDqS0{1G*_$bGW77Wr5PHuy31 zdZ8aP(~O(G?iyY`ASt**9$p&>R!4Xm_1QDyEjojKS#B;8W=7R+d%^_$ zoYuqfa(dPkzWh@q8X-xVB}vzEo#MSiMqk~VS!V-|?p{V&XXyQ2^SZ@0N8&3H2>pQ6 z0Kl{2>JZNNWMLI9g&Fw2kOBNWej8WBqu-KlhZoS#(&)hbntZpQL;6?N#}xs8aC!7@ zNJnHXc+(|d9>sui`@5ACFh67Pp}dll&Hf;x)QxDAOEd1aau`d-WhTc!-dB2|8_I3V ztK{X=ayCxc=^$dWceJj@?oVmfw^3A*miRV5d5Afo-?U)w?%KD#0C3h@`M~`wlJ%;l z7}0+RV|GxK{@cP*vd>6r&JvXDSAamGRjybye0zV7{X5?*)5yDTGFpymJMG|0=j1@S zZEK8_K;}m`(jOVEB){}rZGw1(7%Fp;o&}{-CM}&};{TY9{xHT{HgTKluOJ%BmuNRo z@ru9Z#_q`Z3%#*Vo)GTx88je-8Tzdcitgp;Wb%uHi8hfu;iK=RurU`~LIm}+sNA%_ z)|kjor`*Cevm{JKk5xmR3}lPmSMKy;9nYno&ulwxKJvnL51Zu*kx&K6!cikxr&3mUY6*r#ft|#@sEqYq8sdOO+u~gXi zM(?kBIZdJz;86q{-|<7e+c2c#GAO#!_c~mY!1TV$hMc)W15JT;e;V!S=!*gn?^~nT z!Z&x7`W%(OJ+dFF(`I=+f-X(A7M>7Gha4YiZsrMzo%B$I@3Ef-y;b&r%o$d{{bpP* zD0WBE=Y+Y8fK z+Ii>VnB&F*8@q{^!CeEh6PIK2<5{WYbSBLv7q26)Z-~X&ICDOlDTC0~**pBYN2|Ez z0rYY0MPuON&BZ|er=gKShaIP3;PzY&>Uw8gNoFM{qt_rR`*|&4fbi|Me2ofijoqNj zYouzhjedA(6sJ!a!$I^{M||9M)$^t8H5&E!Wr9LJHf}n8g0s98gW+f$Z}-W>KETC! zUJ8Ov9EY}LpBZLK)`Y|?I&CRnky$I}G{Fk>&~)ET1O5ht-z%+0&xe>u6On7zug?$7 z^km#(^5iMfq{DZX8 z$-n&TfqHr!BOIhy_{3KV#hveGNwnbGxt4HmWa~C^WcV(V#_{WYf6?gUU@Fs(|aR;Yc3A`F|Cx%)<#BiJG6j`^+7_&nDbPn$cE?DOOA(@B96u zX&tsXsP1#S0QpcTDDgZD+FXiw*4#L#r|`Cv{E2D-C$^!i?z3;Vf>WD*hJv2l+3~~C z2lRu@@(i?zk#6KEvmQ0ivG#{(s-a)G+>=E(Q?DZ)*)s>Q0HV(5_P&h_fj{Evckp{K zc^2Uy@qv%q`bF*fn-x)U{+)jyFF~}@)ymFUn_b-p!<1y!2Ks*s%)*S1hEmnnL`feK zt(%pYOqy=qiN`Vb$2mw~99##^r|#LCR6;-Bm(xNqO4JF0dhOkv4u-jI<%EOO*^tzD zZIXE+5;srE|ACIG#@E)S%=m;fEIgx}g6a#boK_m|>X5w1$f}1k{UG-k5o!|8xZVeN zuGNMCPJ;-XgL}&5gQ389duQ1LePB~vKcfaCBW;iMxH1UkfaEEuppjX#+&g3|n>;h7 zZ8?-iFDSgxxpasd7!Bx7DcWAKIQjpsV@-vmK=G^1T?brn|1Y^tXH;T)$W7cu)}%&| z#b5^ig$ItF=6NV`1IM)GsX^wHC|4UBS|y(K;Bk+?{cS zPqohf^mgAW>5oUVN~=#^)B}3j?BI?NXC+b@7MO$Vb9d)0Ps!CW z8T7|qru@UNt#hrpZU;#bV;fcPTBFuM0fhZB*`Hm!{`9<8{QSH_vVbh8AULnR z^+QWcJya0k{UV!l?SRS$*ij4K_{_Tf>RX+D_p>ShWLF+KiQCR$VS7c#fwe;YH*7U+ zwnQ=Q4yBL-VP8Wwb;TYg%pW+Y9(VJel=rWRQTDTe+8Fn=2J-VSNq65*4k+)LMZwcB zK8y^1Zs6-EDN2L8D8JO%w|;hVhHb+o);EL2=1w2As>>{0i!;gdlP7k8m+487P#wLm zpg$~2J4F@IB^ZF$pm?C5D1;GLYp#CC>rY_}|Fqw046`3CCoig%c;gp1dwx&_^E(dN z`m5xwSNu6>oO3!bS+RNP?MmVZ_MtvQ<%|4JD<89h9F#ycS>?TD0SWEBsE#vxG7TkO ziDHnM^-9U!pXIQhIvtUA6~E+3b?c!+hxd*{Bw+4uBv|36+3!z;DDMR8@(eE1TQLAA zdlJdo^%Z`UP?GcE+I#IL_6Ww(yo6Gz;R_q>w!o=E*|XbQ$5lawoL{TpCpUhwMb?Qo zd-=Lg3o#wOJ(Ku)~>es;1Si%JE1|s-m7r>pMu%navfhio7~vx zHx>x3{ZYRv#VJ6g^eXPdVl z9~+P$x)$_Lu28_M?8KR`{>R_hTw$jTu#GB9*PeX9LEjGStO?*BxM2^dC(gj!w(*<$ zx?HZsD<|RY)gT-^B>JSa-hIa5HtPkGe~bIM`Ie&ktzzt!R0emQeIE6Rc&LwhpRte0?oz6H zK+bmZz@s`3`9|Y)-kOSWGRLP9u&>{U9iSi{CscMd95zihzQbKw|gF;P>(Cc75 zd|SCx*c!Ds|LZ%qEjAt_TbBgjWkLkYU@K(~vVCu=YvMyG0?QN+BD<@WCY}jy(CA~| zEAb$s8yT5C`Zl+)X7Xhow3g6i)`BG@X1MnC$abEF_`<$JZ!E~W@)1{SU&C=Os=bP4 zcoq?4&x5>hD{l2{xyXL;087+eO9NtrLVRm`|HdT~ca)Lwgo|}!cVF1Ni5{^&#Qs{u z^Sw$S*y$NY$4i#|RwDWny zp(PrsPxdU24lPn9qe@3r^rLksCvoiPOWhrFdyu_d*}e(DN8y>>pSUOa`ohYkVltv0 znK$90RLw@0g3`?^uSO~3re0?|Db!}&m+TIbr7clhjeGsuLFd15tngV>lz5YnwK-pc zM)oE7grBBtP0SL!_sC%s?K-S8qrq~l32W=(iUIdl;43p)0&Oz4sLVDUojV}`#h+z3 znZ>w)Ggvlc48!6IBNU;5^H>x zUw*6ETTdyc?D85Zo*YZ0C(}H`=s$%o{f+#-HPnUSu7|1%Z7^S4O$0U=P1kJ8f!>?T z->o3<0c38bQv9^M9d_@vA5NQvhW8UmZ=y15AFU?;%ivpJ@x_8a))+zvFD*f>yi>drEBo5z_-UgXaDe_r+S)P6oAq4GdyJ_wV16kVku(izttRu4iu&zoH z(Eq2cgV-V@{yjF%B|Py_6wWc7fKo*G4Z7T)<|A3my9wk~8hHFFX!!5JXm4|GMJwff z@m(XiJ-zii%|VyJlYF8;z#G!){`mKo5+lE9W=Y}e*bhbm>?pjA7f%eNfspxoX`G2F z)g#h|Vi5Q0&9(P8-y3}#RYZ7L_BOr17)5C|d#f?7J|WhuR02MnP4v1c0^sK6Y^JFi zF7Pyb{>Ka6Dyq8GEwP6i8ECp-pm{F7Sx{Gz+`-18h2KUV04ca1z0qzef(Y*)FkVqX zFRm_#%Lrd0q2~V8-Z3>VfWW47=(kq&-Wy*{eR2XIn!>gYXaW0LeR^pBqL*^Sp$yp| zT!gn0^A;mbU7-?VXO)B?@g9kQ#sE%q!MI3CS^;fEE(`x?6FO{PM!6i*7QYxiEB{THj^$@1A!(^=75;HM(l6J%1;|ctd8Gh?9CKxdz*24K`;pf_=>>9O zPqXfD&V2}7x{%TVw?Og8lp)0kf0qOxV*ya~U8`BBEz-?oBYpO_>Rwog%R?wr@rLHM zxJJ*XQsht@Ef`xSIC{79o8PX%g!I#IU(1OkJn;3w;ZJ=uU>t5(LECC2j>J(GcmZg<{V^~ccjAshJoLT6P_Cn0v` zp`Snf^cTT_h*EVOZGUHBQbCOg9_|U#gE&kk`{WjAk#;FMjPZF&6so{hPmh4GPY-?6H_$PEr z%D()bItW{hXv;e2en@E^-D&4nB74R&B~EGHoLJE&^zzPax~I(rA2{YtzFk z@09ocHK!Ks{YwwNCG=A5ZiD6?oZcmT23D#66n!+>ydqc+dNGYi+tCP9p))YBlSEo1 z9H>yo?YjR}S{uDh?>;{Aql%dx@M(q5YOOUH9e(?;l&;P5^gi8#3uK;X+A2MU&_UfM z-Y!hS>p$eJR8moHPF8X7>n3%Qw%u^Y^XH#&>@O9jUo~!ZQRhNdc0(tATW#tdADB84 z#;anb&l)h;h&_tj0bV;ckA6fod6I{M2S>&0!^Jqg-}0C{V%6EbYELdu z+j9cN6==S-M8(+n?D4_)EM9G{mY1K*g~*j;_B$^M-0bSGd|RUxXJhs?bEDtyB_u2P z`-!D?+oQLyt?7dNtsxxIu8`s#X+zqQeee5S39;{NNiEyUKZRRskY^C~R!#}hab{oG zh<~AB`h&>jt>#5-KHzaAv=-cmSxkW)?I87`>oy%@rotm@`awq$@qAbPZcS{n2Uj}) zLK;#Zf<_+2k2F?)jhwe_!_w12!CNAAZ88S`Of>#MibXVOPwebyR%mTe@dCjRQNv<%2-C{svM zGn2mX(Vf9rCh_V^=02kLQm$z=76n+vPqsSbLd&cBxGqDkm8J^0Dkp{f zK=K5*(Hs#D4mE|gLmM+{)lEq&j)ILXl#Z2uU!-jCiCx!O1+Y;HGWM+X7rquHCCgh6 zZ9N;#qY_b4MiFKH{sMqTVRgXD!m;K3yG+e?Q;U-x-ZBlOAM2mS9oL)~>a#kO3U@0G7Vb4r;%zMXJOi8n>j za6Y6LxFErLog6fAKVh!6=mW4N@%@|3{lWl|VHNyZjW$m{7|WV@^2Pt-RTq|{{6nqx zf6n0<9zTT7f(_p|;%Y6=&ehoyG&)UK=5^i#*6RPgE9V+N9>h_;e9~7O1ZI%WZ6195 zk85=>Ki%m_TCbCPulUeZC8^ARugi2a1fFQmP%eFFFzfu{{d?+baQJT}?9^vWas_Hq zlsQmRM`h_})=@vB>zR??yLhr1x2Ofqmc((4O7pX}yuh>WXG}Ram3_g^rG%=!KXLaT zfp7+`8bfYH@u|Au`_uFlZL7;sXnI!CG>WK0V(X&5oYoyd~!-|C3kZ&fvsYm>ZWHx{AMhKOKl>sB{sYe0_xyt-&=CwZ>IP;eZl#@M_CZ zHDQ4&omD&ZThj9?%RIJqTX4A>**0L+&FahDTbM`1lyP)Prw>Wb*BCKOE+?z$B)eXq z#8j?w2$he3L2BW8&T@|Pgi4ew>>xzz!C^z`InYXIzg@hCXZ`#cy4&+o$K^1@c&+UA z^8A2pc`(PoU_JB}T{F>^gZ=<~dBfJs`;cI6yO7&qCb7|5rVr0zj@?}`j#0IT zjNf?Bo{Niad7C9fZ7;gVx5;^ls zBauEoM&R;o2HC%sE}=I=re{5__9x^{$yxRn&7}jc%MTv9|IrZ6yC$Ce;O>MdsxXZIhE0c6MGjIQP>xd(qYJTu#l$&I~CTiKu1xE`Zl+S2EEHH3>a zbq}c+Qmn_Q=wE`*S!k1Y-Amx1QoPp0>u6{cNaf}ig1g3-Iyd#6>@LS&rj;eH(Q;j3 zU?*Q1zxy1?{9U=&N5J;3s1`1+a6kwl_Ub&v{PC5-0N3dxpPOGNmS81bzIm#nitXl z;yI6Ne~7w$IrC2o8y^LIxw>ww)>%9*f2G@am|z)k<=j|xRCBFq$4U%x~M~p zLrBRyvQZSrGH0qMYIyFaBMd$Jq2=>-1Sa|_*~>8-Cx=)z;tvoMgBn+AAsb*cyPt6G zLM}P6&HGgpI`~>HR$A#B2+7sra*o1~j5SAeM4z`fSteReCE^SfWhRbpybH*BSYy-O zlgztzy$+MF3XFfy%1FHedRrlj1XxkL~x#*Z=e1Zbym z5~P@Dyv4cP9UY$iUcSa1WE{_vHWpqnkYt6*ZO3-48D%0NsaSzMZu+oYBlDCqBbi8w zh3Q%LV@u!JGq2vr3sj5cx~^G55h^$tid#mor$4uEy3Iq}ly4!#v^VSrI2EG76{`Eh ziiU3PX?#cN{Ml;c7BR)5*v`uHrOArY3{TyE9%JWPc>K1?U^TTbkZ>-pIHbs6vvAf9 z+@k>-QOFG;c027i(*RSmKd)uPTLu9hBJ3+eF}iH2bB(wAb*DQ^gv-{tE9d4XJVN93 zs9vunhcr1!#1bF|!O6VK;5Qb1Z4MBtr8vvJw4s$$zrve;8A|HQoXg&#gY&F0OJr)E z0X>!w%~)D49l7ZyTUMI`E{%ut3)xchbW#`x!O89Ed)zgj{0H`Ao759YE4QH%-}}CZ zIas;4%d~I2xwjG79!;*2LHw8{^_s-f#E!xYd82MER7*5c!VEc(6l1r=p2HJ`K{iA4 zV3xy*xa{1-+?TgC{`irU3cZw@DMscvJY% z)Xlm}+xHi6n-Sj%^xs&+QN@g#d9YPK>XVn5LB46SkbN_lL;VYM8>djdIE9pFN#ARe zH2~Kw(%jqeQMzZ!9OF`e8k<~I=Ms8u1wCOMj#Qc_yxsV`xLuL65eSh+Cp)m_j6IKGO|h_t2a{FMp-ZTD`;3A*JZ z!8A)F*DV#mnYPyB+nw_p6tiNHG$^5G0S17Ju&&6-qCX>knvy=(iVTURjCjM@T zI*_I2Eu~CAX^;MkVl^N}Jrf5ZRpa5RVZ23n8;;PrbG`6;;@Iqk$ zr%JSOE9q!_9g|Bxs9iX*rz<)=QSAU2_S3kglBuH)rT`v6M}K=`^7+niS6yNfm2q8< z>`!Nr7|7+`^_m!LMf*nM8Xk`hIzOa!@M{m&}qN=D~pzr5K-D5v6ICKNbT5pVUN=`CldCX{?y zEjvIymfZ@1!d&)?0?*<^ireBs4-!ZKb>CJ|CfQs&X^G$6YOdkx)Fzz@5g;x;HL4NI zb172bUyy3QTBF8fo`g0x0tYe|-vg^90pLHi+Q0WVHuBK?PBjrpl(lJT1M1jo)7ZKQ zsnhQi+}`u|nBSBZ66v+TZc+bwCTY{Y*p_j?Gn`o3LVPGwSf}28Gm$fp*!I&6uiiVg z4;IOkRen->13HpbpZ-V=I8AXxMOF1Pb7-~B!b&0jY5hZiE1p(FAY@78asjwy4X9}l zS4)xbsR&c>X%7EY8rSh>^wo2ceu3YSE@@vvD_AQgQ8@PV_m=Kuqn}#R$M{H3!R@NP z@o30nm=p{5c?6I68lU*gnE8U-9Y1kcNN)XM{JfWkD6x$!5!?K!$Q%7%3BiBN+EXiP zr4tOG)^)_h!tHx1T4S#;HE?TW(riBL<%9WhciMmfoo{M!(mIMj40>Eik|eCf|MkuAPHp#2+H8C9VASq zIPqn%qW@K!-_WZW-t3Pqs~j&AbD#F?vxo74FyFX^8_vEc^*SxZ}-Ga`4)+U zuGBes@U_5d#*4w*`or%2z=lx3Br&2hXT}V$V8WMvdu;08oWYVds*edR%j)YsdR+ue zE74VO?0=qz>FG9Vop8$d5cDsnRYl3hxldfytQk_6`?_jnmR!at{>NUy6YF2zdIqnw z7%Y>xj0U-?RTzgoCUxye%QAk_w6_SVe?)e~)|_e*mva>zc^3KseYL()!RJDeTRw7w z0?sdO6+S4VE=OW?;Tjh{*vhz2lJ21u6RCUv&1xf4%={ESDH*!x>@g(3$uYE7CREDsk9eBX* z?I;GaOdMO|mZ}~9)=_UYXUObb=fLVZe1U1I8Q_N;!=3|wb5hwV-F1+ya1l`bc>}RD zmw74^lqBT+r-%vg&omGS$WL;wZ~XW#qHzka&CXofQ-S^wARrJrsy z@Q;^^&gNJj>fEl-Zhu9^~bbW0l=acNJ_!-g+CJ-%%?{<8Cw z@e&M-I-rc*yE*{|C@2Xve_5l4T;eL{Zf%?`&`0nQ22-wXwxWZsg!tw!2d>HvS?2l3 z)}Kgi{FQ4GzAnu5?Md(T>Ygvm4WVT3c2}iVn$XgYlP$!|T1*4PeHbDRI&0nVH7z7i zcZWo^W$d2C%w@mSfq!WWi5EeB{XFgQEE;k88{txNs&mme(nt_!1y3oJrfpDONwu~g zd<)kolFJ=Pj|4K?qI%rImoZ!Pj5L{mu>0blUaTGW+%uv16~Az4qROzShhTm5(hb|; z3%~gqj=96i@-!w=`mVXteG&JQ)?y9dJlWs@<@x^YT1g1~mZgk&=1)y%i+WrJ=j7dq zZK*S3Z%ZaxK*0+CCv03=K0jYf(27*R;dF*Yr0x^h^nTk$rXjVshc#CWQ;{$ZPa(kC zaxr=Haf+Z~FC%HI>pcEPOwi?PA(e8beJ+Pkg~GBz>*p;XT1V(<#tk`# z0K?0Zw^hp*w^*d~$}zsKJ*crKAW#+t;-c#1;AZ9?7{XNxMtI{*wqG zpt&cXVVk*@B5PJ)!I4IdZ~mw3Mgu#k9r{FZSQIq+8}Ywc0CfhI8|@z$BJ9~_!y(MJ zzv*j!t|IPb0;$Wto8X6^1v$HW`&#(@TTm-|-lmFQ!hFK@cbr91ulhfky$~f)sKr{$ z|K~w=uY&=yyMtU#f*D*<20Jac?F?x@|Fvu%EF4#T*-T?SHq5nBDzTO)TZ5yE&-ggr z>@g1K@~+HAuq(OtER7`|?~AFNN6+LX%a|%OK8MoX+H+ygokTjnphg6n%>wVy-LV(k!)eO$l5~Ids{s_y%zVghh zE`-{FMwXj{q#2tb%L!e_4UJ&kh}iFpIuoDixw19zXe`ACZ6nh_KUodo5@HstO#Ag4 zTlZvAlY4BhDPn?}q2Klz^L{SFSG8=rRy%wumI2^8GU-Tut~4bjkKmsyUr4lPx7*IN zH9DW2U}{FbbdLX}SFSlQDr&(OCZ#p9>y#=(?pN*}kF2xotUGqBo)?O4c~hok$tWo` zYE&8KX~p-MwcIpbUdV0CSfyl$ndFn=4peQE>#T(x105!ILkp}hvV9CDhSc;-kjpfg z(sQF%owEHIoa6po`lRWQ%r{7?LH_>;R@So&Tu=X)H44ON*c;LWV*!K8qSz40@E~z?DCBUjc%{z3#3I_6J z%4YU>GiSrXGL#Ldh}O0crt#?&)~ML!8%{)zJ^qoX$CKM9USV;Y`YxGmH@>_w=K>U!R8RAA6qe76j* z#|Njp#W65Ra(j?`M6R%HYA{N|x&(P|o4Z!k@)lOY2VWd;*(t~ktgDCKUQT_(@EFp| zXLl3|BK_#Z8)X5rqpdLx{mw{tGjDx}!)1@2e9dHGD530f<1fag6w&#k^6B^`7higb zl91)5Q&O*N&Dn9%>yt-X>ZN=ilde!4eQ5|k_a38KfAy5!dr2g*-ybhM{W8VlkT&#L zV(X2bnYz41%q^m18};2w4t2_cQ-zeSg=O?vE?orQjT=eJ4i7mJ??)q+_s)JZDiMjW zrT&jir}(j2r3-vZ%htdnIfU_4_B`E4hAqK!g^?CF37m(uUGwr_TNqy00h+k7oQZx* z>gK+mpa@V1COghon)^F+Q+(iB6Ix#3S1xe@-?y`9YUL{`w$H7^v|cff-B0omYO>0XXv10ez(n&$BrI#RqQF?)P2i=vT@|4z6l9j2G_ z8LnILE>u}<>hOTSqyi%HEpvV_vVU&>hKKn%?rki8%9N2!x#|g-lw;+{<}F*1 z&JKI}sj7xS)q8(sSxg<*Cw*Lva$>2&uO~aNmV7Lx;Iw<{bAXT;NO^IhR3yH?MZ|48 zu4nE2=SjDLe6ODYvQ2%ob_KwgE_|!o^MFjd2%V}P+W=h~RgNNVPUo&$)|2kGMliO| zmwP9>t#bU$zYphLJn#Mj@3JamX>cXUm~*=!_}{eIM+MikSzx$U%v8|)L@KsA=xfD^ zT}nlti^v>I8T(x5?{K;zyN%&X;Z~`H9I5vFllS(Y45(etV~y$pGa*SL7o3J$%A5Ce zpg}q(X(Ma2uFsSz2E4Csc)$Yi%}%&!V+j8cj^Qy-ZDJq zQ%pAGQ?%EUUb5WM=TTB`NG)7@2=!=uv)KNx!fPu}ULLk7Ft6EAGgWGXS06V_bP(JA zM_Q~n7p%$<@fFv!ex%H2%vU`nZ}vyKyr>7IlGQ2HL#d}6I zLeJB>-}W;5Pjo%3oq6so^pk1x#k0RBQjvaRIjrtJv4HQ6i*h_uelr1o1XEze2d8k2 z_Y9B+KR0E96mZmPCEFhH2k{*jzLZAi?w9Q=I2}Rt%!I(pZJs}{&bP})=#4e+@r}vv z^wJC46*y*2Gph|2e~z1*%#+Fe?Uy5s7oje9ZOWit{4WO|JFCUbEV|A7maohK0dKqR z6#%$Tpeq_aH+v+>Sj3>7WkiDn0^~;G-?ym*22b~5srswKce2hME7j3#T|%CUl|kMA zUejl!O+*{)g>>m%$_RZq^|3wWq>Q~~du>1Wz4|lP^w#-i`4UUb$qT8_ILF=tP!Y5s)J>Tb11EFv`amE&6^cdni zpL26%_?tUu8t_-7vC;LyyU`W?y{T^`qzjen|C25bU-TF3# z@tW)V9BJ6;P9cy2`sKV9XxdVaLq3KhGVGfSV6bUGU|Vnh%l*s`I)w8f)zh8$4PD*u zKW^ys$XTz^e*`BfT;5KWe&e6Sst}k~gn~DJA6I-^3B1BmlZ|6?%QN-!B%j0-s_^Le zUsjfUY=(xvm=NQlSVj)G`-`XOiuAgLoyp(W*zZ5uYKa?r1(jP}iisb`B^(4&Qn>h}5R)fE)i7Mb;*Y0>QCoGm;z%}%85 z!!nr|3S<{_7KX}ROfWs9syG6sI&MC&=Zfu{SgCb+dhD)rNY$dflX3aZCa$TwPLL

|EM}jr%ynE`B5LN990)VSk#-x2dXypF=<-iLr#D~K+erf^fm83Cg7syDmgX^wAxLd9`MmJ^S#uEfC*Nw;Z zs4HD}l);=kA1%!?7}{?lAwQO&CG{c;r3=mHG;-OxF)~AKuK25Yz(r4?Fe5FTmo=fz z<<>5LLiT&w?iF%Y?H)bT zM?#Jg`2qGuHAc7f- zY@KJCIZPsb6X)BcdN$X_jenkMc6j$Vtv^KNdb|hZ z^wKRi+LbS>3S;z3F;l`$hx}W%R_4z5zUtFkTzs;oHW$dLng_9(C0|`*LGnL+X%aNQ z9Y5_-Src5jOP&#s&IPCesr7xqKWX^F$nl91wIas-ZPMT{pysK$z+FlEQ#l#gGZtiO z*F5F}`c55-7Dw+(SDbe%_5Gk|!J;lcx^JN_3XN+agInsRZz;f1Rct9A&jvf^>r>j?Z)$?<6e_-Mo=HR)-v zxTcB*BiGO%qn&yfH?W?D9+^j}j{Mt8(=AKUPTr-eev0C}fUBl=W?9+-gM{WP1$%9j0%4ao}?0=*y?pZ*)i4ZCmXN<;EdWQ}TD&Pf`OCvM&#lela+^)ua+d z_}1VP{+B=J@f!RqBDY{K1(fd$R{!hgqdBZK=v@UF_#s-bYv;H5+UZ z22(N04bf&!^kka0uPW*nXXDb9KWC0c?!+^t^O)Y1U15rxCo(226CRM9hV^-h2$swx zoaG>w;~~o*Y|nT#pt)DnSJUyD;EBe1v5X!ro8RqgAx=u!*B501RK)XXL?GcBSFNw8 zbbv#6p#5pPszb**K#m7%$vC^u_y7SUyIo5gVk=r^+Be1vmyxNIQi7Y}&s6N&FrN)do>&7QbFMK$KO?Ph!wem&~;(wtd24z4ILH zC0Iw_$fAkB{i_K_Ft1n)y~`7?-}DO;EKm!~_v^#8f#R&s*aORjtt>!c*DoXh4+)wC zP^@Ac{OIxu`C42qx&a<*-maRQhs^0mlj-A{lfF~m!`<;!UkyAMv4!E@El{bsrobJ- zM%Y&OhJJwFJ=p57f>y;}`^jm(VskmQtv-F8M&VwK2EP8Xz56GcdK0B8yQ5zx*WAXE z{yu#WwMG<==Lr&#jJXpVgx`u|9=OxZ=yhY+Zf z2FdL7mxwdcO%JSSE!Z)$FcG=6w7`iYz*}A{P)(c-&3@<$X&Lxm>s|kEczaPu&UdkY zjMg~eT`%^Sy}6-oKWXDausZJ6yjQOkH&sP%GaJm9DJ5-Wk+Td>@}4}nP)F6XNRz5~ zAbHP!hY$)wGJI9Tcce*XmIkGnmh>rQI#iOL>7Z8NdX*#cEtWAt|A$dqW6!Af%7PwT ze&;dFW&B3?{q?B$@?y4w==7^y9qG9qWl{$lb|JX0fi5fam=9-^aZX z75n7K4twOc-PJ1k80tIUZJaVT7y6zqj6Khvc#s{vIkG)h4clkTm)J?)Lmgt|}kl6FM@h)0(!gj4t0B2YbR-bq()_h5T2J?uo|zwFZKso znJMI$ZKv$Zm?{iQDmTz4bbf$FB?`^#_K^)M&zijG<+)2c(Y<htScg|pLtz-hP3_X0o=1 z->TS%N;cY^vjj!n{$Zw_)OXaYz?{=WgtwXmnQJN$Lh@l1V7s2Bt*?{umK7Y=F7 z@n?PS7(%9sP%2eQQoZKRF5o<&FZu>@PN2cL+ym$wEh|>KuG;)I3=ve0ez$Dx;3u6B?2zHa9mbmH!j+7N@1sHYK&c=` zzeu;`Apm#RcxzM*|; z`~OF#P5Pf?+N%F1)A|#wGlPu1tNcMBsUeys>Bb=cTl?IvNWMT{TV#Lm$J$)okN#$j zuXeA@wOETydNs~%g&527otnUXOjL;V2U;#T=+BUIFQt)H=c1%A&M_&{dT8^Z^n~K zkyp1{rT@!4b2diKNnw=V{m=t$@o3`pTDXQyIV!SVlC5Tiv|7_ntPVlB%_aTZ2>VM` zNtfY?NJxywf{c+Gh*I>-7|^Cix^`y)1%%jBSfF66m8}>;>6$EHtF2*t*f-96?;1FK z_CHUf*B}1542>7{*C{OE_Z6A4l!s}jLaj_uAI_&&dXRZix+mfJDNs4ZsTq)KqXyWSs9J zo2S?yfSpC>!;|OylP23H+u~0vdbfI&XLw6xyVB-4)0kB=zWa3`5#TY4tm+$%+=r9O zX#HnPU5LLG>p^~1 z@uhx1f}o3%$)Y^T3wnpZ8j)KvUBk}+rTBc&ZkDhGs|<;)!w|~`yDlFQTSt)!n)8_i z3}qgYDYe&UUMpN<880oo4`g`k-n(VHw&Gz#t)BPmtWMddN0ji zYRi~}Kg-Wr@x43#2=H&*$#H!O3s1ZU+JlLW>ju~uqHmTZhjEYmz0`I%iJ`IyVKB{W z5KFCs;b#E{P6D~%*PrR~hJX(SF>tuR|3lV$1vC}4>$-pff)o`2r3FMmMFgbRpi)$t ziUQJmF?6Jp1VoyY2q-lW5flL-AiX6>N4k{ILl3=$gg`>FS^r+=oW1tB8uNNy%sIyR z-uHP>3eu_Wikaq?TDh5HBTV`GG$9$E&Q>_f z$96z9j`X+k8(pYUui%9L{>tVO;i$sNS8edrisZ~P6u(z=zVx8Fc>BhZk)%mRb40I7 zS9cBl+_M7iYk7|5Akykai~gyxx$pc~;SqNMcX1A-2ppc;ebd3G4w}D`z!To}u`kso zipVA=4jDLd7appLTBfI}* z&5BO=<6%LDn!HTkH4qt3|CvYp8T2Biiea7}bk&@NbduVpfLem3JrR$lD5QMo$wl%u zbQChLs!{B~r%CG`Ttl>!^?z9rT9>5mp7269_GPi;J2WQ-czKY+4YW_sM__F~|Ba+} zBcFe`&xG2W;FD-CpE>iWkwQ}f}%gdzRx#Q)JHy^^h^=lA1L+gP1_co)C4{qsM>n)GCFlm>kW$YhZ zu|O(2@FUw=5?Sw)Jg1fXl-B;7k9+aR#Qa8v_R)unQ03{Q2M~Odn)m&d%i@djs*B4R zHw~kXJ`)gi?+`V0j&f3ZAO)3P%_2Jc733`ssmk#7r6{8&ra`n#*m(J3T6o-n?93UeMDp-0=ALKfoP zJeW*oE(#7Ys@k?j{i2Y>$`4E_A^fk#LQ(%`JnO7w;H9$H10c^VRU!r?rE8^er-tz} zwF+dRj}z;I>@U<%3xdAeGtM|eRsaZB*?&4pbsqZP(Ak+V_VM~KSsp;F3*1ayNrB2bm7}ZkS0?&R*j05LcL6X0l1hSwe2l-M*^?K(HUxU54(#)2jae>Jm|90_ay(<$c9I)_0lHX~SBSX=;K9g8J zWBJD%vn@+tP@QL8+Qdj-&=08SDv6Q&QH(#C=x&Q2ex$vXwrUw6CN+FfU0`2dTj5H; zgjl%UjfbRjqgD9F^!I+UuGPd={`fJGGVwwBljm{&m^Ex~Wgkg#mTVzk z7r1C(KALxsr&!B4u!nZrSaZjlpRMgw(?9&WGnZ9JKd^hKBCI!lm4CYa-bRqz(bUSq zXnBHj!KR{M&%Tq1V5%rtDv;>@>6Y#V`YUxUlUy8@@2WGoj;KcWRFhXrFq}=^5us+| zJt>t_ZC&;Lww(Kyt`Yynm610l-;Ar2U;r-$4K3V=GXmQP?pNm^h^2*F8j}{Hl}6#3 zL?_O%zkVRHnZ?M-6cB&d2G_Lu3eujQ7{>g|8u*fdkH^42iRSB{vlH*();R3^hLd~d z`@8xQK;}no?ny?;dbw7PDf8e*#jaLXSHz{znv?wAD(G^^{2emx>*)s)d z{OsP(^e{$^foqrLiD5^}0UcQ`2GNv%BbMkqyH;7Y3%8S;8PyE?DA%P-uOj8w`zcSx z&0UH1!|R@0kgP++z>_gOmt*?K3@bqejMgBu4EBdj0jH4BPJYa=BBM*wkBQ&shVI1! z&@{kl%DuTIQZ0}|TuO&5n|=wNtD_s_KR(e^^=c~7@c3kXw7;%M7@0|eaiXwIyk|Q^ z@mxiX#U+EsCzk;{Gkvz)-ZNfnc6U9)4`-lr@Ru(Tq$o6QzZbZ#OYb_%@h)llT^DB` zOVKGG^&g|DzVaBs(!~YNCyuM)B52&NgAeO?Q70=$JY%MII(MkmvYFGoC-0`TPsIp> zgJx*bYws&?Wg~JF1;Rc=^Rdt51~l_-&<>H1o~1%+Cs3@wn)86+iV5QIZ!PNno^$c| zX#;(`m#aPW+Pco35B>md5E|!SA)}E z;DB!4j)l=9^f_9w4EyI6=IHbne>ICA-{{|TJ8$9dB)}_=B;V8mcxCi?4>{TzG0Lh= z2NiNuR@lXh=Tk)9+zEKMGIXIP0OXi^FpGv5s8pxKgS9$~2TH2p+q&mdL~Qq#SC~b@ z4Ux+m{>Iq9pk-U9Y!0IU^!Qk9)k?UO$z+XXnZxoRR5v1N)Bn@IfYY?{M;rbxFSMpq z9`rB%Cm{Qn&TCzYUMon`x;uCBgWWY5^kiP(r1d&*|6-x0_=T4H93k^N z4!1$#LMjr>&mrlaJ6^DdU?)DJ1?x2%A^es zYq7a0)pS)bYHwA{22^70IWS&(_p*#Kwl7@4CTR6@(bkpqkP1=v#Iz-^95Xfz7B>C< zGhB6U-L^^}*XeTl&gn(yB{8`h<_i~W2brn?H*l$=MfhJjW<(5x_nb6&HRvjcF6QJd zFH$~xc%td*C8;{UE&l=0%or$x5xD>ma9sCqu<~#2?xlN$a*lVAm6br2t6s!I)z=(0 zL8P+|7zTs-Iy`4~2BYQLq=K!VCfuio^{_?}_T)-u`Xjf79y3~(yjOY~D0C@|v%iGl zAfb^9)XNrOzW3R0Q4}1~q9a0T4^y8SH0K1Dp)`H^qJM1?EG)^Mv)$42`HW5#dFSH; zfA}D(M(=-w6MG|&;Di4OqP=*kKufBUeDTGLu(SHumDfPX9p|LR8XXdZX&%#Q)EKyY;+yOF12?_`HgkX>+gBuP7)1{)FUmN+ z{0^x^Wc~efaj@X4bHrAHG!`64dmRouNVJ)p4;=tdlVG=Roicy?4t+^HwtZ=+A)lJ# z@av@Nz-wcW^P+tEevuA4Z2bD-b%6wv16`PABvu0;*u<8b?L!p+xK{8i@|3?nPJFNY$C-B2%#~gh&CK6*UJ0 zEchYm51LX4*bVcfhH~MukO0WkCczH!{3lYr$-e0!_@sMN%LdRY+7)ujG*WF#$j*v9 z%4}vxSZ-wzMOw`N6XQlD)rbc#NdgeM4_DE`k9fdoUGAS}-+609zb&t3F1&fKGK;z( zD|Xo(v-W=A@h)>pO!r@@v5l0e6PL4gNAl7dq^mYkJz7kL`BOW|-RQj43zJ*z3CadYV|5N_xVXzvf z2!tTK9!Z{m|1{H-8d(zC)v^PibA7yX{Qs3)&&pLc0pS3;wNeg7U(U+$29{Q9l)v$L z*XO9b5%YY-nb&LmrCtT}W>Q%aVj4mvcar_ySft^=qFzHJLuzaCW7aqs(HD@7YFOC4 z9^KRVdvnzS_qDDqy?;0hO76$}dnc`SO*1e1%1rA8t$VObQ}@>ZdT=EE@khU=u~_3>c(>i@FmZ7!CjGx<(4u&pYc&7s;{e+ zB^p-k&sge_;M8Wr?|E)sDUo9&A+t#rS8e@Pm`Q*`p;&3}i;K7toK2JI0nCp6z4tly zpEx%g;8c`raJMk_>hsBaToOtd%Ri+sum>E_vG4v4t__2|y2qoRVnESACH^tIJ;xF# zarF7Lh^_mxbMk#ZQ()@OVgna`lWxSp73yp^u%HeTl%-VptdYU|uVocK$v18snM$nM zKB-+|8lVx~s3AVK&C##nLs?vKW(kp$^T@IQact>7>eX(cnA(XDC_pk#a+kZpbX}>Yt;zzVwV}hil6fOSffq7Pwv| z#BlVn6gxq6S^U{xiXErycGee)E4z^y=KGW$Rh4?Uy#Iuz_}$d`pn_gp|-)v_ygW^NQMh zer?}8x~X57v5j0Q3Y(=znXx=WY3k(bC~6t|4XMqyfaHeD86QG}I9N_?lAp8+~+*j|%7P3r{Ch=Uofvt0GrpxYN>W+(faREg-9{)b|ku}IErnXL$E-*27dgVzj@l*Y= zUZmCkCdBeayifu=#6W)!n?!NB7{US~{)32Z^HX;zYRVrekC@-*#C}@Tzuug__U#sW zy`<(}PGLu1&1MO|yT>j-Q!t|jiGj&8El+hBdU5=Y7zNm@UVZuM+uG4dW~^;}Zq+#M zw?(dlkH zY~DQV>jv>S^GXbskxnj_BDR;FZ(5a zETrzAlR?aOD+aK={~p7MAw=q6+6p{W^U@@=>&8tPaLmn&&n+nCJpxBbg^&^6!i-IU zKH_WBG3yLaX^6X#Ri~6iNkublDmk$4RNJEB(DlVuC7R6Zj7bG?Fk@=)&%60jv*GYC zAu%%Dos-Udr*sppt{VWzNaP#t3}BBVph_uuy^RuKCiMT}VSOPT+1RxRWflg*R#yJJ zZIOo?+XTO}bBN!3YXmgOH-A$|BCO*}eiO)Di~GV^LG7SL+Jbpn^fdrJ@`L#?H{^gt z6P7UM&Q`t>&pvhB#i^kzc}d>>N-W<6_OPW|(wQi9bFoMHbyP|0nY3{IWJ;%u&G$8| zRpM2o{7D}xlKN%jpqt4`2?xl@vtS3_xt8a0IrKvR#UC|~s#CEXn`XUAE)P5z&J&?hw)D7@At+(@ zCw1|hB1h~+*gq8wa<0#P5YDoRPZ6Ed9d@)Ek~53pG_nO^M?R``VYKntdz9ljAk77U zppK?XKF!5_Az&D;fci>4*tfsw-%Q-r3Xa;qz?>Q>za<$*pnnQNAJ4ieedT1!Wh476 zjnE@bS?lC0#b)Gd;>3E0YVlJS$ki{BSRUf3oeyt~nroDIKE~CNov7XwG1vSAUuZx5 zyNny*91nS|`!dNXJDnj1TKOX5=M9-^!+uwCn>o)Hv4-OYy8Wu==$xBrm6FAkp)x-! z7GlDo(e{V2Gbo-GSI5DYxL%RK1B=<9Ppe8z$XjhCZ4C6KsWu??gN6Kw`C|zcKdU>= z2vnIEv@Yzl0}Frh4nBqFitJffjCu>{6FEqyqsDtJ#L%sx&y_dO8QRa^D{r>A&Sn}j zB(vPM?Q=ok*fea7mwrj7<(=R!AWH9kO1IBR-&11#rOXw8t!3B0UwROFv&icwo#{X8 z#Te$Z;^VS({>$uaB%nqoO0~p|zrZoS$ER^Q$uqZ2IA%BBP>>K@Z!wqGQ9uS}Vhy zfwa}p5&m~r*KAI8?$7AMo=Nl0xpm_YZ3QoF|HY&n4!*;Mq&eZ|9^JI*soyb}EY>hr zl?CkN%Kb#|KLu($Fi}WumOL9#u?h5@}banLf++kDvweTaAg^fYz+l)h zFF=2-2g&D4eRLF^OG+vn)wB8xUGH_5XL%>UA=yocCBXy5OETBCU^)gwTXSLy?Nr;E-_ql`8*Z3A%YI&B^`oOK-uv@^;b31XD?1A~%kd4Vt)Sk|V2ma##f>B6 z4rIoHzqoE_^@VD@etNU$b^OH-++u!YGt|16KCQDRY0I*C$yHgxO-)NHCI+mM z0A9b2adn$z6g)f&TSa$4_)MDnW}0!PtI&1%i{FLv@^}PIn+LM!y`YxFrSiO z-*gSIxLtHQf1lA+cR6K{tRRIM-ocl3aJL?5S~78xmt%HWa36GKIeaIxT*bmh%fF7Z z4WLqALSEi{Zv?YXPnsc{+ap`(x^h{qxa7C21sAz*jqC~LoWp!bZNuo6A@?6DlM;3R zGGy?Tzcd|paR(*;@#p*8r<%1nb=UWS>~9w~sMzyqI*v%)1fRY}s*>MnyH0l9AfT#3 z-NH4jI+H$7%a&{=kqe(R+7dBCQ>-G9*n_JIE(foAS;w*FW+o5+QQE`(wLm7HP4O*k z&7U`$+O?z+;0}fI_gQ}6cVgi#;;n!Ezr`NK6wc{9PvqPbu%Qixb<~HIo({NR!IV9l zpppHw!9M6b_Lyc}3xBb;frnnQQvam)gDZ$`&&iic1^bcYWkc2HjK z;odyEp;R}1X8UlDznnHG1T7gzC821mSpD#8TlHdTTuT>;r#j`vLzx#ayztFcL}?}X zXt#ESkXl%tn-emy>c8Yan2I^ZTOQ}pP7#nW67<-GexG4cFB%sn-_uqSzANjFSNS8V zVXf`}^Rj+*aFS|f)7xSfDm(+K3~-6cLQfE`(CM^2-`_WefwST(Il;_I<(F*B6}%?} z#mUZaG9bqGvfh2~rtyu(JA3yWm16WxBds1To_PDRz=Ms4F7w`1=X!h6<$n5EMAb%h z!{}b958s0qxVoyU96_I?0RF9!llM{53~9pDKVkhB=H?>h2yv@O@DIS5gfrRkxz~=v za9kQVPGyH;j+4UDiK5RR?m?Vh`a!z~fNFX8)VWnl#&Geuq2o;kzuD9V`F(9318|07 zwQY>L+1{R9gXw>%4G%nEMor(*=UdFKU9S%J6CP({ocI*;G*S>9EMUf~07}bP zLA&<4)kTU}9<*WFmRibnczN?hru_|Dj+sM?qUxBueM4NWkGpCQ&e^^IW;w`K=bnT| zS}6lzRtCl&QahU-y;=GHHUCWoNgt>bU}Wf5`BkxQ)W}Z%5Zx(f%5T+lXc^eJj9==^ z!$OqIkUN6&SA_Y=)piUhE6z*|OxG)V)-Q-NwJTp9yUhqt=;5=$-k!+3)}g#}YyKn# zdF#>rr6KbvmQbVUXW=hnO)+M{!!0#DadZuIs|kmX6v8;d*~Z);t^-HT0xfSi!Uy9vozGo`S@HJFD z`ki9T`5UNdu4$^V$!3^}zg9=) zL**nnC|gxu;cKz}<)>psKL4|3hcmBzFZ?NCf2o2tKa#tX)bJo9pU$Nt-D<@)1#!xl ztk<#4kpsgq-u4EfEVcZ4I5bbmmSBRSlo~l?!v_v1s5L z`n<_3DP>!)uv!TjpDmQBbdmT;w~LJ%GVCm5STxPuyHf<7IhD!|UT~Csev4B^N0OYb zSb-Cr-c<4k>2jSQXZVBZ9aokvObA7cm3$1HV~rEf^vftb1$o*u0)dd;?-#^bn%ivLt40b}C%5J|cDJaF8sg7{o(#A-yiG(pUAAd{pa9lo z)DN_edK09w{j^>VWcj}VuK{HYDN_5~Tyt_t8}I@Fw)BcD06`#zXUa?VJ>DVC3pF0Dy$1pXcgXX;Vnsi413&z0UVG%4P#!IynBen%CCB!!-xgMrw1^?}O%Ju3l&U zvJg(<{%VxT4$%5wKb97WH+heUqj=L@77U8aBMf6v`)HrmZ<_Mu_}k7qm6~d>(Y_ ziZ$$=!=Abb0SgovjS=4I^gcS(4bG6Bz|Nc?0VzA1gIP-cxj>q!taXEl^?@Wqr`I6$ zcr)JGDCnb9HbL#aWJZS(Z3qAj8-$+hmMI$eko~bpy^vd9)6cwyIssF?eVA7V$rZ}M zQU92wOh~covMNj-28NGqyY4IyTqyqnL&iTxOqXRYfWa=ymj zBV*{z&zDnfg?oX+7W2;p-DkW%g{u`s+#LrVmELn-&VChtfbykBH#G$!{`Fozx)S6; z9jc|%I>?`-MHyl#f3az=jbbhHYEv+p6`-i!isMh|DfUOzFQ7JB zN{b5)w|L6jGD9Duj$aCBR?F)CR3hJQyJ2)Z?8K$v9_h5pzv+LM@g<5)gZ^*E1GT`= zj_dZ)X6%g7Jc+-4*tD0fX;cR|6Is1>C6sQen(K~_3|$rG)fv#Ue1qZ08awpL`E)}J z$|_KuJl1~UMhzxUj8He5UO6;nTxPczJejeYH3^N%x%Jnh$?C##cGtaXp$MYaahr8l z+6%aBrcmNZ^PP>4Lwj#lDDVB;8x}#YlRDCy%dm9KI|?d+Skcu^B?$pJu}_fiY>)Qh z9dyJYpUg1%n@OQJA}e8!BWF#o)}#}JPMPC^EF=0*_iYos*1K@*SSY6`rNUdp#c`$U8=bGh&MqWHoB?jyU+Nr&=XTlw*0=E-k&hch!2 zhQ6yZn!q}cKb+p*)LqJH{BL3_eA|9+7}&*>-vc`0UQ?5kWS15kH@;aW+JaxA<5}4J z?pSf(2KbB15m~Z~+5cqyBhgdy+dz!pk$BOvEDunKXQ3X-)i#?ojp=~dO~rOZ_U*wA zQ(c}Una-=!=00)Vy%utlc8LpK6^h>Ze16Je)pUcm7B!j~5(;S?+*!D7%Uf)F*G;{z z-c#9#$k8dUw4r0M6t^7`Q01o6sMlZ0Yr5@{i{aABgISweNkxn|YJGq1GguUfYG?Q< z6HhGFI6`Xfk8JXmp|yWbY%O=E9$p!78H^t;9pqb~Bh${)xm0XEy*%4WyjZ)zPe1-2 zaO%!~z^N?vKA(K^Un)ukGvjZD%koux9%tDkhP=p$e7ovzr_`t+DxUk5;3)PUX|mDR zK=7X)vzrZhFVfn!ojgnsY3y^Vatn7ELW~QVzQ+ZBH?4<6|MW+ch?gA<2RGdR^3$#V z44%qUd7kHYa<6~1EFat^u*G~W_+CQ-i=Rk)&Mc3)%Ab=PkFFe6{)Nxk_$moGQ5w@( z6ZiqrUEP%$x4o_?S)a+C1E3wRpVF~kxv&Y{juCaLr$#_GdRZV3mvpJBr$pKd+qWDj2?*Pt9(!= zv}m5~9s#DV(1xJLyXvSTRcc}kgy}|`xFonDvf9tpKX>AUZUN|^0qg-mE5v`GvY|)2 zD99Ng1PGCzcPqp3!T=;2^!~mT_5`u!Mru6NxQl!YS=rxY+UJDqC05`YUJJ=CMXn0h z$&*k1f((3^Ha}qi)#1jCr5}=wQ*}P*@*Jbv263^m<}C@{w+EB${aOI=Wm+)U?!#+KN3T z5up}m62p8OZQD&3`L2&bJ{NN!TN?M5#SNqnAIknH8Fg&*<88lg)fVrf@ZfOR&zo+} zt3oz3D~K7 z3%tuFd5oKRKBIh3y?P$N#X$%n>l*ai#0?$QTT>tVdR*Ew4q58jwLG_9v%Dt%dUi;v zd+hJ}6Yl7jTP8onD+A|k{c>ap4ZLSPi|c;hLsw2JycNEH^7w(^Zx-33Qsm^P)GvPp zW?YO)sFu8--4)+NO_YYwzO+(pv*&|pRm@;Pfh){;Y{#inoqwZKE^?syL$bgEE|!%6 zX=z%BWKlsdv=!3f{x!(vjqGF{3rO_@1S0RwE1%%FE?1wC=8GgSgPjFG-Lg`Umb%!P zSK)KvjaTWFts@d!$Iv#LVfQ=m{;aXX1z9#{ZMX{jYkK%mi3 zuWwCNm=ywFf`QGuL;`mSezw`#mYeYy9GRoP{>l#w+x+HnWa%*bTa-1>@4-N>y?6-- zc!axTUsAS7gm2u9+k7B4)`2;(Zia*lV$SR!Xwt1`+51kFvK^D!&ifI{>Fp|AsniP# z$vc7ae+O0^S+(2=qeD-nWuEQjGFur+sJm=1Oh079J_)w2&!w!&W%4f66z-k@r+2I6 z?o0!{ggg8LJxL2#OnZIAyK;dt1J3n^uu={5NPox_40nbmR`~WIr7Zj=3%Wc{^dK|Tr^0E5& zvL5LzCrVLUma-bNy1Rrhahl_=OGVK05xi$44J6www8eyps5Zmgi66BN3)KBl{!ow>gSJ8Je(1m-l5(=`qo8juJO(E3O%IERKm z+)ecY_b)xh9wXHu%a3U{jRG`IRhF=6X>$<9r`vCu;H!Nc5ODA-v+?8>8e8T;U$6jCDod{>9z!FBpY)Pa05SZ!7GL^)WbssW-Cq zgTq;yz`*D$ZnaXm{o)LZuW6(k5kkyS}@&E}(NL@bG6T8+~3LnkjU9P=k65rP+YP)=j~qtjjVj z&1b4Ef!M-g!zP!m-nhIMkfkp{>|k6VeYRI=N~Tf7pBiGT2~~6_V|jD3O?wnKh$f1afv(F;9&yq&{Xo=`|IfiXsdTp`hPvDZKpYo%n*F%yi5b{$ z2+cP|`KUe_tPR6u@qeEi6?c;bFl=^iIC2aqn$H9o_0Q}{s_`}C@suj7^_pHC>V#KB zB-ieyn9yG|SIO*TBt{+b_B8-Jau=5Q(?#73d=X3Y3#-#nl@KV`4cZr!VtIx5;?+`c zXV1Hnz!xuay~HB=FOYB1N;Gc!@#&%a8c%qOpG&I?F4@*B!ox+qvrpJJs;OY9%ef?nU16XDe|1pzf-A_R6>tD^4Pv9c?%~+_+t&Z zUgZwkE9(|a^tVq-d5nU5pYsa!J3XN2GZJdwcOtLI;W=GdKL zVgHS=Bv69#s`(Kfg$?AmJMN|iLJu~tX89$^;IfXU$j#W@$x!HT&m80>(lQ>M?I!yQ zn;5+8`{?@>1siDRaFMyynIfqPJT@i!aMHun%?fSLKWI5RLf$r+%g$Ok`9hh7oSq~9 z^gd|lawNZF&VJmK3w)k1lT`v`ziqPh19Wan8k|jd0?ae)8Mef*X=c^ms)QN!Vg&|O zTETF3aX9-sKnmEF_)DM#PqAbiZQ_CwDRAnSD}-OpF8Tk+ID49njY()0r4KPa`}FJ{ zW@&ZaV1++@KLjEqvky4U2R4rM(7JsVlS0m|BV>X9n8^j4CL%vAbB`6(hZ8(f(voL_ z{|#a|4JiqH3~Fo39TiJ+(5GCEZd>2y@s*BIgSeY>kO8YNYSM|jO!o&~B)%Mn*(c_H z6EJl0gS__A+c89CNyg1)v0=%Mr-sO*%D76SMP2G99myKI$kmIrVLim-i&qAQEB{?D zn$}>iyE~z7eR4_lGYF6LV)H?tJL%2jyMId))fJD#iPIve8uB8SrNq#Sz!Z|&A%IxH z*M`f0+llefYBeC6z|(U8G!965k%kSRNYVCf$Rq$QAB|Ef?mbS7N2ShqeeDOovsCaK zOoh_Z>xDr|3&@>{mxiEBSm8@02-9bF9*l%lz87gWX0P5Rt*~?GKDCP|b`~g?WE$yuW@M>7286wnUQNZm!M{O)Cu#&z6T_)&72-+Yga zu~Z2FZ4*HO1F)27DEh{U8n=Rt3*AA-*@ac&_Fw|c44t+|kg%bxh^Es%Y$EAa^HYOR zLbrC1@{9BMUH%sJphCMM`QHOY!I%Sn71W}7FLQ@YiFc4sKS`wzfvi8{#TKs2)Zf)* zgrR{34cg@ZR+#^dor0(9;QfWUjP-_!<_X-7QT%Isk-)3ab&WftxBYZW>T#U|<6BTw1glUNoenjQj`@Uer6hqst1Taz*7!qg-* zKKplbANI@FYqqd(t4V|$*?@V8u#9%di9F5l2&q6@W6$rAX{W%w{c0Pe7sFR+9Y66~ z9E~r6CXjV`*=RH6KQf*Tf+R28g_#C^R0ZPCYefCZ)HV7MC+M{K{Kc83oMD2ip!u~x z5Q7ku%}RHEdR0**-6D`P{`0#}$-%Hd<~hNj!1>vT|9)sJJ_n>h!JA9a6H~NL?w_5F z6I;LIpn`>k+I$f3>gGZZOpWyja1Bf%>ZfU#5$wDU|4u(T5tbix0LNN4TzrCBbv5YQ zGUeN8G%k3*67k ziM?Bg#E6Gw%CYc@Qz2>@r=wrkn|nuI7xM8FD7?Wm%>qtX`db`O@Ji z=hzfJ53afX zvQ!-Ell2nVtAtK7Jq)F8gr3E+D(lZ;2WM|r8l&=HD^v7xHhY24B?3E~kbc$MmvLmUB5hoDxc*}w z^6X6}&i1Rr*VFYH3Fc*B7sai==N>aQbXJHT#3H?<>tX-=L|>Pl-x=)JrCoS?Q#Z7c zTdP4GoSCz8pza&{=1VRj_D;IeHWYkkzSn-PXE3TGZmJFpKGNyiG0WV@a8JZ(-zgZHve?&jlupcz|^?B2a! zp!~eIJ`{hUdsR>^?fh%r^(onTA&wPs1w0d@iZ%usl!+$h1E5qWSzH6MA$6LeQG5Ia z=hvmSUfHCF61v03CTpX(x@n5;p3X#G?k0hz^V{c-!vfuX!>E3gR>Rj%ZtWhg{wTBg z7sPKPlx^_lIjh@mn47Gf6SpA zW?$vA7_9!Tb%n4hjjUT=#B}tvo~EpCG(y6e{8->Zob-~N_BV#qD>qKjE`B=hw4_O@ zs>&t8GL?n0u$;>_pg~13lvIi-LSZrt0BqSLWYNr)xT{WSlmF3w`RG^0bnV*S;U`N{ z{=nF~eC=@A`sbuS*hAAYFNP;GL!UZ_-5wZvh|bK*dpQ{|$CfsBYEPbg(54NbiF*n( zTdz!`t<`^FnTQrtKBXw_++RrQM`JAg=_^O>cKvX-Ld!rFhmjcZ_IeC6-(lrlyH3>=GBhrUB zQeXhk9}X;RiVGW~?-1*mi_} z!@OuNaRt#gcoXUe)o*5b0SPm-{i0BB_478m{>xt1H9Z@df1|p7omdh}c8u-5IYAg| zmPYV?9@ZCjBSPfsOcIszg-UO~E$5#N4OtNAn*vvbg=7(HnO+|~(ZKL6o=N+^YP(9nA}ad*oxe6xjMe@HAsE zVtfnJT;qIqH}NaNlSZLIA`h@aVVMuE+{F zTCyiCf?`Yu3q1(*gSajiSWsu4BkSQC)pfqBzh<^1Xi=3zzmCG5${!h>C~MAT5e$SY zs!EnJDO~Qc-}UCdH5SyR6O7Os=(Vo~xreDC7xq+dsF!d-;g{_WN`erGz)vmmNGcws z2KUmi7x$3{S58YLFFFnI&xWb46U4|NM}5nZV25+)9PVBD)Ll&lVsRP zdDjifRHnx>!RO4D48l4m-DGAeo9NS&9G@q~i)!wQ-;MhnKYW;d{5$GgC~XQlq`~$0 z)t&3E|72IDl%^oEI$w((a&%><;!{If{;D>_e%rnl|Htm{dJpf?LL$dPob}5_8=TUX z!|DPZG+3+p9-OAVc*7#2@V{A54C_%keO zs@C8M^`f2t^XG}m2TaoYNniiPP8(UeyaWitTl~fVlY&w;cTEiMsWg!L$WTt{Sy|eRDYiL&m3!i$% zOoy<60E9L4B>y#?AECr|uOlUSIMm=^P7;G(vnVeT)vvw$CUH6mN4o1bD6+0XL0y*a=Kc0#XBEZ+c~N+mB9qyZyZLX_ zdpFew{!0yf-JCa?)=;*8PE~e7$)Q=%Li5^m`)_hWEl2hP&+X) z42U-MciInDdB|`GF|}Yt8kk}ouS#2!p9-BIhywjxN4qHX``e2vVH`&(h{CF)|8sl! zU;9kdrpnpw<|G@2QwQ>Z54=A^Z=-n7G^JN`a~hZ8ce~_-estN~OFlW1H#=$79zBk4=(=BBf}lec6X*b=KUDC&RtCINng>w!@`xQ!NeDGE6};S zhm#I)eAz+fns~%LfE1sIz@?ILXc|SX*1ja z%Yk{`04Ml-wsq{dW+>M@rMH)nu|Ff*INo+i-1!$CR+SS68#;f_tyH2~1V_;t#A$iI zvh>{r@$f)%5n($)UiZzlNu0dRmU8CmB^8N(bng=9)jlR)7pl}Sw*eC+AjlktEC(?k z2`xo)Lx)|7&SUO7;_H>Z;C%n9<04COuB+pUvy;tV8?HSl_PiQ&2Klr)zoxZgZT%%= zlR@%+@b{Z{LvR#ZW|mHXC}N~UcynP)<7Rq82EAv-gB&h)*r?{f$zXFrf?w>~?>Z&) z#ZQ^_EI*I;m?JqApobw_y{s$GFD^c{7tj+IsLhV#@^GnbR$f6oD-}r4hQlX*iKVac ztvLGI#G}9#!*8FXj{0#Bwp}3EQxj5P+ ziShB`@*o!2BL#jrqa1^VjBbl6-dK1X5w=DGCbRxGYt$k_zQgV7aOm~@{eGrT-a;AU zPuW)rq%MQh9YrFhH!gviDdGVnR|2K|ey5z3?-^}0>p!$nn4rE7DfmlK@FVpz+Gs0$ z$adu%SHSxu=FiPN9w~}{?W3i)Ve00EMw!XN1MpA-9{1)>U52J4eTO*4oAL0az_N;n zd2C8|el=cJRn5gD-UYH4VBXo#FWbN&{D9?2WBr~gX4K%Tli1<2K=sJzjr50?2spO) z6p=U`JP3^Kwcp~8+bY&4;R-R58#jU-fY;DHSjEa7C!ox!K4L^12RsZ#5e1u%VXcT` zDU>HSdjC6tdUbmXKjYzc)DJx}x=bwPy#`rKTR`k#ww`VM`@TC0(g7$+VG@`m6f@}p zQAB$*+F|3VOx%})~Ix2+s{l#5{O>K zjq-njx10Wz_boh!k+1qc_~dB$3duXO;H1%PXHfLPc-nSFwAO*+eZ`ZOCosfSP;dJV zH8#0zsxRzP7w4<^=JZbX0N=*MOVPY(X&h#@zF*uO!$xnx{Zjf>xM1ZDuX>+&^mM5B zUvBF<|82?JJ_-v8TYtpeKmMMu0N3^z7&?`o9W`Vh9Wx~}^S;)AyO0_cY)a@{yuQ_4 zD^9+DC4o@!DIJ_WsNZyS5Aya8RN6dN#}j@0zu3C#ho<9rfAoZOiIjpc6(pp)nMtTH z5tR-B0qM@cK$I>;X&6dNgEVY(!)Qj19v!1L7~AEXbI-l!-0%JE^A~*H@AvEVdOltU z_o@<>h1CN^B4s7zhP@1}|Aoqa!D<77>?3kVy6YJd`0V`z9!7wk>1@Xg%|cc>N;$lm z&bF6q5McnAZfMBn{1oG@FCDN4JPR8>ai>DNkNkr|!=k!FtJgJ{^2aw;^0e#gkM^gd;r#XnXwe^fzIzou=8kW%E}v%FFP9_g|+T*ZEN9UYmqQt-a%AciMV zT0KWOb#OcK!-O6-V1|VAx1_3n77jqd6^owLnxwL9JpdE(UpShjT?`4KGj66Mv>gDx z2M^^LBFl+u@j>`e$T3qOcy$N(RXFsIPer*Q@|vBFmnHZu;OW%9zR&j=WiRynBMc{bLL_uBUA`nM@u)!#%I< zw0McxZ@u~K&TWF6#qc0965qlI|t zr`b+ta}>zuuJ-Zb>%{5i#(fVNjp(rp&0mn4KVRegT!Yq9m6m0KFbxuXd;Z!)8fOw8 zT#c@#YC&x5la8}pYrSJPKFE2CaaL9;ATan!fbp^<)^U2m&6Ss5W5?s>m*YJ4vMpng zKMl49KIS0xpB+3oMcH8QuWsiQDY9#x3moOD!ugo^%Y&tNZLou*n>TG%n1Z62#jg~- zZVSW}XI&T-kJlp-xiqE|d*rWJ;1@o>j4x>}|ACfF01Nj0t=au~jiyEHRhvY$E0(3QZ*zVD%693rF0*7m_3gZZ{oItKrOt52j?#nU-=$ zi!vSR(z>nn&$fP;byHjQKXsu*8W+^Z#_PQC{V4JCmBocmJUZ1cn_)mPRYWI)_PV-} zMwv35_0Zg%WwSB0H81ya2hgIagL3iC`1DzDOO~Kg1$b7`V*CC&V9Z_2DtoEf=Q$suy}0Oz1)MX`_09DkNd7PW(C4a-z* zJ=aV6aNP2;n&8AWk-RCg8!p#>o7tK~^BKD?vC2jI!FHYu z<1gg8KgXa9Yl2-8k{v#9nMVqImiIl@+BfQQBSd?wRv4RKH2^;GW+$Jks6T5tDs#C& zgBP0EOHPfH&JJDt1D6ik#QaghCx@hqRfYGlxxH*K2=@W?0SNypor$uU;0aN|of7eK zq!+95#L&CL8~`E)LNHbf>HuPj_pbg9h~r~jg7Du_SE~R3YA~Hqrzq`mr}k9t+2+gF zr7*zSiP9WhaIF0yC9&ColpjTZ&k9DG9r%maSD6|yJF-=5dITjNNGW0y<1?6OyTzda zFRt*pRzXk4?Jf(#$#%RC=J>GY;_fcG$n}4%HT_#S1eh*UonO;+^zyYDJbF4|IGc{z=YV*1PJM=jYZc zmy&kk<{RQm!*S(o|Mt0(@z)DVV-N=gyN>`(Z*7xfedWl@m6(34LJn>-_4_ zzp#pj<5riGyNTAp)RXde{g5k z3$D}VMv99hz_eyThUiec`O%G?%muPq{%M6vWiT^?=Z`h_`$_Z^PJs+x$Is^Rv+S6~ zdtU*2hWh#*2NpZ18X$-tvEpvu8VpkFyv_GFu>62bEMPlegA2yLlV~e<7`3D5-QWM? z!|FarrKm)rszg<2uFUb{*?E-l+Y3wk^dK4o=&9_!^wmW=NpK!i@Aci;9-KBwytZE` zbKU;8@~8U(Kpa#F?&YAQUhRF$_l^CRdhVfvE=!iu5SSu=(!{1g9m z1*1xnBZ( zl!FzkIa7t%Jmt75K8_z&)twI1F+nrb?^+(D9`eGce41y?^Nk(H!Hjhm7qMDhE$IKF z{F_G(KcNEvAUon2;fs14OdfZxsH~<{1kV9?u+2Z1y45na+j^NMeDMjLz@S?-5T1V} z9po$yuG-P6YR98>I-cSCcab4U&b-g%!fWryi=8rscE0WN+?Jo; zxRKnbk$6`}{R#5keo%iOAaXg+$^rD{M7E1t*bo85VYOhAMXK=~@1`S$dC&E{`NK#+trllNN#3V=QME|+?JpM+9Yn&B~;^B(uM2a#P| zcBc7m%~vUVSYYddzIVIjVTzb-n}W=Uq>##LDFZaahI8C&mL(y;S=(MqGV8l+9oVLY zviO^ZBJ10^>b%)D``;r7m(g#ebDTpR+T3~rd|GCr`J7E{)Sm&>LRp5Q4{OUC_#QPU z)f`YO-Kj>46$M?S4jvvzhjIgM%>)iRIGwvxDa9s!TW8pHE`)-$dHx$jmBZDznkJm~ z$Waupu9YB;iLQXhi3uxR{lA+xQrCAkfwr}}i}iL>@6-t1BT z8o#u*7O#M1gdYjRU4^7*`TIY?#HM1N{xk{4FB$~*kwRuHF-Ke2X8HP;N$4?k=>WwG z0m$_`g{(uD+*t;|T0JS;vAmXr>!J=ZW1hnkbU3wEZW z@T*|H!=i*1ARwU7H%Vf4zh=mCjx(#W9W>bg=$+;{9P+Y4CIY%R<^v!0U!3V`RaOSR z*TolH5qhpRF1+A-2bXb+c#Ty7LMH+YJ{lU$f0yS|zNHww6$-J3^1tTwjR&5`tA4pr zywiMi&0P|QlFgU<4dF&PAW@mQ^GNygO|FbB0MKdcuEG_SHp!RQ-(6P{d+?hlL<&Zz z=lcDL1Lb=bO=)_`;{!J0LDC-X2{TI7@gJV5^6>X>t2DA)?aBx}19XmwtGhQ`%qXfV z1d=qW8h#ZHD$Ip`OiJWw8@?*nsrU^D7>+%bwJm;DcZB>1xKt0*)+s5mEcmjavRil> zMJ%Q?8ln>0$q09^Mwj;k(LIrWQ|$NL*Ri_xdAbFJjq;(pCNo=##h4sVd{NoUWo~bu zw}jMm7RQ;peNriYvfh`=VCM`(&U0MG02hJz+HS!#v>WSb19!gwA+*lu|0*@vM(apY%Z8LPC&$Nk#P5IX!Vr>y zfwgLv;qm?(PQfkV2kR#D(jH3z>7T;YD12A`kd>6tReP);+R2=9DEwK%<^o!3Xk+4K zue*56I_o7>n#yw0cQ0N)u0570=O(%jLJ_ydw{H6Pecmc+YaDyBO;AsoUA*VNF<|je z?uvVRxxF0_{~3uh-=T;8Fzx&Ev<_Gx+S>^yB*Jm4@dRT$e=tCY$4wtwX8R|#bzVU* zF<#r>&S@I!QW~vhq20v*e?|V+@Z@2FI`BAouHoPCMDNbPe*&y&{{^s4m6jjcI}_Z? z!Rhw!Pu08U`2Wwf8jtZ=;v)8l2ZE1YsZ_2N)>){@d?^fmhOKd{YC>z4D(xc~gA{M4H@?PO|R;wNYDJn{jahbi%o}#4OH=Tu5(`}`81?a__NX_qT=u27b znZF#F%wRiI^18#&23rzcl2~8z=;8m2Nvu16h?_-C$h_S2{%1EeY47OzBFA*@@YxX| zf4j<*AZGo1U+|xt1hg7d>uLZ5pCD41eP=!GD%0O~&%P;CxB}K*2mmYQ#k+>IT&&{b zo(d4hc}R;)LJ6|)4Q*iUv{mTpCn#T`)cnG)&{!_Jn-=s8bZ^w28qTR31NM>sX|iTK z6lO4e-u*fv-$kLTa!L^*q|m|_Gz>a>oOCuTmm+xIt~s{ht5-lA13c#}Ns)A_p};Mn z2|2s*8k7X>4u5CtamMpaKix=vn%b`g-1i;gKI1J*wmQyA_z)2a8WM3(2!gBm?r+iU#~3%#tr|n|ovVM(McC4I7Jh$fr$e zp1eD$fkZw5yg=)a&h$8i+S?SI_`j^`PzCh{20N)+GX_|zynlPV7;t3fgmEmBRGI86 zA)6)YbGaX!|GeFXNoOI&We}@E+JIg|)4&7WwmV$5hzTT}t+PC}=QayJ@CESjirtNqz%(WvVn_3$LQGZ=Aoxt^^p5{>@)Z@+vuwB0XfIBS9_r^hwMHvJU zNF&U=U8p`Y%uPN{I=ffH2+b16(U}2zMAZxu%_hxj}vvqJPLIbjtWiEH|Yg2C+{Ifd%uP+NGh3Lc%V2u`Bp)}l@#ua zm`G)}nbhzy3iIfD%YdZX1`=x9MJgvqjZN9h9Yv`Fr&yYV`(pCy%?~@GSQsx7(C8V6IkwKAB=kp2C z%f|+yflgsoS>U?TZ*;OS3iVc{milT7*&opAG(`07uLqSRCb;VF^<99@+`X3z>}5W4 z7N1%6U_ZN0I`PAEKz-|RBTNR@%`Lo7)+Xd zUFZ-SOzIpdWF&QT7`of(^{s=>$%etB%;e0??N*FMD=x3bL*W5x&^(PernqGH#ETm` zaA46H`#ET6{_BR9NX6uX6fRj(?WKV><>uo$`r-exj!yR6g?SFskD#yy9)Em- zikBsnY6cm*T0YbP;&Jt3{PD+Zk^xFpGP?aN5ztr_JXY`+Ylu#z4RSxCp9+UhjXf3M z&s>|HFOXIk>8-?vny*=85PQ?eL_Hr@)hN^;tH*``9K9g-#t))t7my*Z9QJazXB&p-rEq&G8KBDvPGTl7kQ2^-?zY|HB=>#$ zJzXyTqnmp_I*Y~Dglxk)x`T-luGn72eWtfF7PRKVgHFrXNSAoIWxlO-mAKI2O?=0t zHvK16bb_aLi&_cJAjVlOo-Xc<$qvpQ-9QDQL3ZvNi~?}S&~b=GAB1%nM>>A|Olfzi z8EWWqr9W(^az1};#s01i=>R!(-4D<7cQK~DAm?5Fy&hmZ1$ zPkwBFKPRL(^P*0=BOcq5{P3|xhi!~%G8gbJTIxn-u~@l#kvE2GqV-7wp%HB+XP$c< zlwZku^KvT9U%$T#o&_LPakpt~L<~ALA;|9kx-y>NIe_e!oh$s__3`f-+M=l_&7-t& zoe}nKZz%u9DWLXfAL_AL1t!Z`PnnWwl{?=pVFHx43OYGGxs$K|>gj&L)P``@o9&aS zmk*v++^||tN%uUD->;R zzqd4siQ%XFkbg7!Y|R=WtqW(4Q~hYd{UjBdP8~>=oSM4~aeLW?w8p2yvX`pI*R|vn zw36?V67kEA!fM0LT+9WVBFp=^`SlVF~`vW!a`$7&=30N-_RH>S!elOgN{uO2DmPu5PTssFO zhx}rdtjG0g&}{21$<9W-_MSr}ruwujwS@|A<c9Q@80lxE$~kxd5LSuJYPg_rMuaGlPg*q*utE_y#6aw*BMZh56i7j5))Hb0Oheoml}~|hObc8P(Gu#8>}}2`h_Uf)+JLu zs;BySb{A;zlEtdjg0S1E=Ta+0fM8a!TlwCi;^x9tM7y1WzkVK4Tk{-{(n^x#n0LTH zX&@@4O&|Y3%(TC2D1K31?&riHNk zjGgm#kliGqtDuexq*)S2BXzr7vXVK5!5SqQ0dWe7{E>RGpnY8#N}H*p4m7#>zqc+< zuY{1N3-E-pj5UDUw2LvWJDmMY?9=0-F9DKAvwh`PbHNarUb(m>b4%luOD zXoIkx{>cDphE-(BvodnAtd?&2JSY1YSoJ-s`?zzRc zWb<v>P{!U!zIDfhI96k4x@M-M#NAX^SX!TDmS}km*;|+==d0{V&GWF$m0p#IpfP z*ON;cV8cGM13}j{t;v|WYftQd6vt8A+}Ii5)hn^Jquy1j-@bSY)x4>V-z~(}-e;aX ztCx@W{CHvpM~{C1GJTz&MyI$V`I9S;LVVZLg^jWhSgMx*Li7u=OGWf=sjfP+lT75F zwcM;J)__-IQi`8EABW2|cehZWIo=EtIzCclFp)f^9(;Gd=~lsq11ceMr_De2O)d|V z)CFp zQST>;=T|Kao04C8+t5&(1*M#5@Ma@Ly}_MJ*;_GH9W@y{yLUw8evA{Bzr}Y}C@V8Q zBX3%%a**QqfTE1tdjER0D*zH@!+ywL7O2s7_WZ@rWpe!ci)oQjip*oHU@?uh$x3~W z+=fdr)_>=mLnlhK>G~OG2pq!;VTC;9S`WhsHA5|}Ai<55g^E|jD9R4& zX)M2dH84gjmw!VV2S!vXMPt@T?S4w zoc2L%u*y@gfQmbg%}AAi(rF^53t^H-8n*{YqU`c#g9gv2il&z&@A)8gR0wVD0E;R{ zn|~3fCZD=P4g69Q|IYL0-GJTCZZJ3=b-AVKa)j?az!RH_16@AMe?y0Im+shkdt@+^P^bXD@Mt-{`LBF5r3P?@@9iZQ|5S?f-$zg6ebD+$OzytMK zB@exo=L@tl({%2sJVsm6p<*akq-(fK0C~1-27x-G1w;|0S6570d}DzHrfEy;t=XP> zf@clZCiU&Gj?+m%ib_^j$NFqbaBO%l+2}N;Ym1NOT2SUsFTXfA z`d{b60V7!7Ysr=vbKUo05{>V_u#vR4`w^(O0Ezb5f>-6#C^Kl`a$iQgxuqV6FTYkd2AO5>j2I_^R08R ztz=WRvJ>fF6l0eQY}pg<%xtG|50*}5TG_pmqG*{QvSnU@dvt97ozOWhJG8xjl z`w|lx`IwnQdFuvl-uFM9-K?c?V7)S=3VQAA3jIIME|jQW8)VvK!r_96be>_AnH`<~ zZ)dj-f>A|)Dsx|rI%$kAi4k=L-nHxpB>VwoPJTIfJr?CW6$xUv@j=u}iPVhzn{+pA zcUaqG$eM*>sK~_p1(lp(gpTua4oM|!<8zQ@VgVPqv4UT)NodV`%IhU`&R`A>m*_if zr2ti$MreA8`84ZK@qKG4m%|4y&eTYT6ruX2`>&m%R56L_1Xydn@JF^e51qraJCmw8 zEVH`zAF3VS@)WylEZ?n`QeSxS7(OKcIhlRe02PLmx47YwD z!Y1XhEDew=A_Ge0%N5cGyF-NM5h>B;Y8Joh`@j4+*W~TdL;v=_ z&Rnq#R?Dh$1>i*D*k#vZL3eHrO%JMnix%6drzcta&G^+)D`$iUoA37IaJ+I#<$-RK zuPU(FZB<@7Y}(`FVg%@KX@tSJYDQuS)=-V#a#!Si)=dY?jW}QBoA2~j(+S?L?)h` zbMQ&1{jP!Fa;Xh3_VVwv ztNEO9VweKG4K~K;wkZN_#Im$wjkZr71(KxV`N)3hA9YImyZoR+ZTOs78=lds$laT& zafbHPy>dvrzxtjwqqv2}{U5Xqz3m8PN%(gZTSQ|xeZTdmf1~`V;DK5=>r{H7!49>5 znQ`$xt56zZISWv~*z21bp_^`+DF0119{%y0D{-II`(+)o7YRm50=%$;cd^0Xt|8w6 zF($0++bW>LbUOZRorsHYC~dkhZv#BVg$(-)#~*y-?s->wV#HQsg-)b?i-w!k`+M)2 zYr1s-6e}0cIY_D0AIqhHT-nGV@khM6)U~pyJu`T0C3hnYe_yfRF?{8gTwSB#>y}V? zct~m{#J%@FuI;ZNiv$0wql#VMYenIT&B6Fg=oAFG9eRsNM*5<4j!Kwl^+uA%Shcf{ z>O|#cTM+`GPsYz5CwaUSPxA9<0e|u1ArsM>g0_sQJ*l;a%IJZDoZ5=vK*;UetA*bR z!vZ^|f9!#@7(1+-;H?hnP+6G9Rj-m*6=9I91ENk}bK1oZxO*ZFY5c%u{b^Gw+j@eHPFEQk*j3U0czWlVn&px@@-(4`uqM)tSp%3(MRuY0qB-_{ zateX7wY{1h#wJ`k7$RKCSGj2DfZH`B$q|YLeNX&A)iy8p3$=T=Rg*j0yLn8>4TK*s z*MmiLD#}tn3sqhi%xwj8$c+5OTD8A&%s)Y9R5aWQrJcB%9e%dfw%xaw$Q!Lf#A%F;ntTy~^;R(*_FJM2ZOuQP;O!m?q4m8!cx56jWHx?8 z3V)TLp6f)nj7T?+LxxK9$i3Zj>rQig{rA8txjp>k|7`vpTx-C(|EU3gNxrRyx~7yj z-FO(ylZY9jHcmd&MMGb7uGJV`4nUMwe2)gBga;vp_wSL&W5(rf{r7Uc8cQwmhB;cV z=OoC=kC}LM8jwr3>%@6*j}!|{zd$XHQ*xA=YRh(BGkS!3%q`AMY^d?R%Rrx$?@w(s zwLScA3t$WO$k;#NQO=jMsj4yLu^uy-onCIhPH=L`kiO#>5Q~jawo$@j-&AHyF^|7a z8~W}wMozm(sh~L|ED-R5ODV(G^Vfo!r%O?I5Q(&}Chr@Lr-abZ7)9~XWQVEK#2!_% z;9|}_!B%@!-;Cg$jhKUyZ&?Qaa!6_%ZQjH&TB4NH1dsB`OpC|`s|u-ZM(LR%vuFO623ixd1+>+7BY8t?mQnRe8fG zR}id2_jj<2dP_hCS-VyVSV5O<;N(oa+A8#knC#XzPn)6wHY2JV#-WnCY|G8y$kerq zdQ^674SQoD^W=%MS8oqpMps!4ol>-zhUbsQE#-zxSdb_ya zu)ieYkqzv_oz6cUN|3ouja1*inWbaN3&EBh-6NWg+m)?toGOC(Q@(T8M!Kd|?LX0n zWS`lk$#hiDwis^NI6XM8B#SaCOlXazsDRxn3qbs^u2-r8>B*>bT}+ zd)}{y59(umf^Y#@Ak{?XyRsOH{%6wG3}q)_%Sw{iyOdRcwaRDHU|Ev6_!dY~#;iaZ zy*?v^@s6EnLAAeHT~H&OW@+cTD=YL`lkn!nj?Mbe0X=)d21ZF>p^Zy_mpVAG>;Bd# zNpxlSeuW!_gSQ!}ii2v4cZ;wrS?MTlS@Y;jkra7L)(1y3yad9fLyah_S!iVC;8Rry z{qC=*>Hl>=T+hZQ*N~&INB9efYEf>S+LFopqc_`Bt~gAv3P|mEWTGCL*GVO9|3R`Y zPVFvpL*UfPM?ansc?JLOv*m@VQS~rz)a8@3i%%{Tte^IlWd!!!nB|`%*Wh1z*?i}I z@lH4U-usF$h~x0MKk?i(|I3N6Rt5l)6x8iWT$5NJJtghC6MOtT4IdtVVEu)IyKu6V z146iS3tsj|Z6>i|o;kS5>I}ZqRtp%k^A|C%iGg3iS;wowTLtG~l^yUIyW;jp=>iSW zmChq&O4vtSzt{Tzix|IqB)KzVmd{`j7Y?iW#WUhs>t@u!RVPdP+iaIovWHal*E_-N zU2$)JkME;W4i)T-a6uVd?^fR(X>AGcu+ZV`hh}lwM$PLHwvy0xJ}br>!_U|MnZMfZ z$x0wCnGU&1TZ!WhO8jk~$@57kKH+TmE-&Nh__5x8L}LoO1r5n)^5boR`xl&xAk2i$ zJ^crYK*j0O(o@d$j8P*oMca=A)Z{$Ek(irKsD?9hjI`W^EofS@KHaZufy^xvQhkQ<>`pb0aFiBa^#==%2@Wz+m#wy+qd&tMNuO;$ zPlK@*+(>FzN)QS^byRM=r$@2GyH3|>Z=v}~mrD96ucX_~zyU$^%PiB*ojPs~o|RFr z_!gy%#K>8txVLN(e83Ob8SSLnYdg!<(O=@7cWA;i;#hkB^N-77y3H);y?G&&xxbxk z>r1I3;oQ4NEU(}iq$QSJR-pIfZ(H`Yc{WM*&#`-9=c;%b#C7srFl7E`4kbmCb9i8om-&D(-%WWyGd&SzM z#tc|PftIIIe;uG=*g^ePu6s)s*eFF2OEtu3DU-dUwFmqbdVBYJHtX~EU%FnrhB3e! z&C(*Shnj{3Zl$8}<{?S(h)|Q{D^2ic8Tec{{O;=+vp;z?#}NKFIDSYGtZlCN2z_Cm z(8+mVqG>fa3?yAO+1wKpmOhXD7+V=glrwe}IcIp&Iw^ZqdB_Dl{aX6VwfE9d90*PB zRwzTff`3nwmP@^2x7}Hjo~V7u{3D;!2I|F@Liv_l-2CUfov+lcey^J8;Y@k(R<&H9 z0&=v-MpxWl3zH?tk@1XeYk=)uU!umJ+W;o&TO+|Gx*>AqXW`80k{b*vm$>C5(h&6O*-{g}8tl zkBT2F?T4w;!+-ewui@p-n5LMl{e8dLDv_{?YdZ#>{JuM<^rrK?leva(A^qeaY zZmN~nItIE}cv+ba^mKUhx9*MkIXt(uaKKAvZ?`R=ilpX{>6=QY?fL09z|7evnb9vb z6gT6UzFx}keAu+*lXAS&8yI3FwiPye#QZF{)|KD=hpt@avC`ce_IU>La_k}lO0%z~ zaknHe^jDyQJk;?qDAPM49uZjn!IsonRIVB<5x4VYV{IYuby|A-!bu&_li4O(S()_W zHmBozK-gCM;K1^4t8=yf=IvztrFkN7=Jk;_6MB{VlQ>b3UQlr>cRKU zzg!=07R}f5he`)BI$xmcU)X@glb3(3s3fz`29Q@o9w|}GI_reHNM<{~E9Ure)rWQp zIhC_vU!;(dc1;J&iFrK#0ra!w$q3ZD-r!Wq9J|IrT{^9M4f3XT+iZOD!^AK6S-j@K zDm!zT*ZsmqX6bbGD5lc>6bB5uxa^D|>d>)+%Ok3&$ zXh>HQiwGIeqPp0)tTK#r44_HvM{Pmhz4;uHy$BPGA8G@AH&YF2)J%uvi5OV=1jQe! zE@vFtbw3d^W*Pb#&&h5-w6xnKv@Y=C0rupPx7V7QZDb1>`Q3m=p4t6x5HWqW3=6#({@iIteGMt$yhsWCqlt)P&mt$vu@xQA;+MF8i zb=0;)!D@y&?2*enwpCxjUP%J)b8|hvO2rwzh7`ISd!%Od2nR5;Xe>_}FIbl2hQ)2p z8)n#SJ)P!YqjzC)2hE>bk(eXB66OA4gsSqzcFF#G&&n;^ebmW&hn214KIrfdJ=l6Y zqwLbEtQ>yDv19d9;DLkz>z=Y-TVT774&O-Tf~Ed6)x8T{7kb*eQ=Ds2Y^4f&0|lo` zC0rKU=3~oD`SfJS&2q$UZO+Yd*!(-L>l+v$V_*3hd?1`nHBZ1}uN7h?NxAAoE#d zZ#ioF5w0szdu&TC0$o+3i<%E4t3Nlx&u0GWgwZy#@LJ4WlUuS4B}40i+bca~;nica zkw+L*QQ5=Vz{HcuGs=>?BygHmnDgszt%e!LpkZNsd3Dn_rpc8v9z+hs(Fe&1Eay?p zJZnGNU^mAt8qaT=e<7HVYywX!T_7(g|1twV5bMY%UsbIQqYNyBNS^N!k{GUsZsG}T zz!D;NFpMVnBhs#1lsug*%q9I(Pm;&Sh|2gC&UP13`YXPU)w^Z&>v;oW_f&_NI2*ClpT zrtx&kSw|(0H%3GzKGnZ>*|1RZdH}~&xE%T&fAfYdPXvBRmPzX#r|pNBK1FREB*KH1 z-gA|p5t1>?m&KBF@bKc4$^6wOkf^+u%A@9`H)F|lNN5nTL>KwP_efYV{B{^3n%50uq zD6JEFR&w^?Z~hFsn#b^WYP_NqyZ1+VaqaTQ$GvE9H$`tFdad?o60w_`1sc*#sPCAN z{btBQTsu~&FM2pXu3sO{lbM@YEw~t`)iK)=cT_Rn@^kNk^`QVZuPNeaU`BIW^IMZZ z^&gU|SVr`RxJ>-6xWV}pTZYQdy$S(Z5@ojnAbv%PN`ql9)zCei|7MHFLo(|uq}Hkl zTg3xQ<`I*S_FEo65~g8?nKvyxl^#KH2ojn1>59T3`?Q@qY3s%29+;7MJ9~_sQ0Ms0 zb%GsrD@7GkWk^e~X%dhn^xkc4YW?+Fk7HknB8T&E zwFhJ+lkXA-V3Zj=r2m>V150p%I-DidK#h{wtjuHHI@cLi{@Sn;sf=DDGvTa}Ey&EE zbt9F5`;_qj;dC*^s*Y8qZZB(vOYmY;SuH%wdfq9%_3ZCTR&iS695q@Z{y34P*{`cZ z<9o3dsb=4SYL51Ig;Xj;`{%ZhbBg(tq!)Fp?y63&j4nrPudhGq;99tRn%xbs_bNxa z{Kcr{_L-ol?P$x4;*x$|a`WBYkiwPTRt>g$&{MYR+>KB!RsM_)l!CF}sbUd} zoG_;QQ@q{xS6A0^1*P59uX|4v*q;oF4c#{as-_2hXnnJf+A20#q=Q`qIO_>w`Xa#^ z0Z^~u8`#9U@1<`UG3sn4?+U;g;*O!;6{qJQbET!QX}`1Zo0qTI3@IKRG#Bk(HQBZ^ zm$19ev=s%pgw<6m0GBVbFdHz-QLXadjnDrjd~+y`Y|5P_Ice_+Uj3~g9dwkLC972L zRT=L$#VC#v7VDsYcXiH; zVKe}FB5FU8q_!zrh5f#gc zYYD;fhcU&t4Q~fW*C24^($ZL-8xR(f72|h}P=;KH^?^%=of-mbI=h)8EnAOB-Z*1z z#)CV|YE?XDt(DHVPY=Y&aM@}l*6#j%EpZU&0bLApPjYr)dS}j2h}yw*Di^z zdE5P&QKhP^uzZpR33v0A{zmVS63bI4{qjToKVq&E>K|Bm*}Bh^R(`p*1~$-@s;+bL zWhKXcE=#@AM;g9PcUj^%Nl2I#E_>=$DP8{kVT4E*5! zGsi|g65FlCoW?fZ>vhB=akW96g2qv)t8xdr>;e|eRcDep&SEAUBk?ZW=JHkTlJ z(U9q~$I(Hit(;JbKVPo#r)E-*-QkC)@9Ni-Z=;S&KGo1;Lz zaJX0K_H@y1#M&hC(go=%{C^A8>s$t=Z)5U@?s)`_!8f*eS_4cPry}GhnJD?Lq(fDV zSpEW{0&jC7WAa;d*p_*oKQLy=_y{eRxA52bFr$DzkB$7(@GXTxzXRqREF0H6%VBYL z=aspw>P5FUy}bkBs|&Yj5|D9>iTD!eN4e@tk>#-y`PDn>w?2kR^2w!XYa;`z3gZT7 zTfgu>i0Z^TzZH)!daXk5U^W%wDY%P*Fa^2W)AvRKq2|c49w(JM)(<=O+|%49g4Wl) zGqx*y*LU7ZDI0}MMVAEzklS*LUI6H_yG3T}F0RK>bHG#0Y7n~Jj4w55nI?Wu-#@r& zK$ssuAO4k&)&tRIoIrt)>hRBRSdj$BxC&fajxZBsQ21rwXyZ}VxTV>RAG}hv2XOI( zPpX)*P!TYgfWNJHq{)#?4Kpf|b`XkFHZ9k|gx{iPHfzx~HLr3g(>>~a`}MLzZ8#zj zr61LgyOS~1GA)1YQ~N6>#~<@@w@x}?*iuyVO?`NlhQ*N=8i=>As3ca>flW?-Gnj7Z zjb%$40&Nhwe#S;Ftv5m9Y$-~Iq#iLUmrwjeU6-Sz#^CDFTw28s<uDA)5Q2Q!U@oV?dZ)L(&6cLieCGRd zPa_pM*xh1F0b=F2dmBntZ(xc+qg4kC6`0AgI9-vGikZbFq;;`G?TYoJy%>#h%r|NOwY>f#k)G} z5IxLqcU(y}29j|7uJvY=YMFW_I@OYZE$o)|24eXWB4-MelA(;Ypip_pnL`$S(e_`< zs{_Eoa$Sh<&R`PJUt4NRZJy=F~OcNt?ub5PNc6_44&x*)7*!mCP+3d~pew9FKnX4qCCf?WfSR4ZJlf88kfVWus zf##f#=Tp<`wR@y)h$Fj4;>BhU`#eFvWPHuJHH z5P)^`UeMM0Yh9@6#tz{Ao2|XWg8ivq1`;iB+@-B=C@8H-r>o$`xi~{*yqDErtFIH$ zCNqmg(`1SyRil}#lTX6zg99qCE8QzW4LbHXU*SPH8aW_gIWmMB*fYv782BrR@bYA=O(s#V@`G#KdTN|HeYR+Ix8lnzrbNztIRI6>#rGY zbFt(50jKLY7PV7*Q&lviPyTQ+XLu#@l-|i|t@=jxorRtC3m)!V@xFIc0YU$RH(a>( zX9&ctR&m0RxEi4eby*#6t@8IUVWy$2%x9x79G#=~hE8*^gGsxJwRkIBf+xFmkiL=W zUsV#MV;5zT2e%k)z?OwX1KRojFShPH9?J0V8@?qJMPw(VY>6z{w;57NVo2F{S+eiD z8B`|ODLW&QWGDNcJwzxnGt<~Wbz^L>BNW!Vrx zOM3a~G^Wo-&l8PFy#bQcPmAqxnUmqrZ%t1ful+LKy4h-DclvWPcZf~5`eVq8sF($V zyE9KnB|%A-1whbIq++{@u4_PZFJsZ*{jW{Ly-Pk@<<{tGFl1NthLLwU?v`yjfHbI~ zu^|1hcv-DsMEj1-hnY|rARTXx4l$+sSH*Q!mmz)etPK@BnowxZ%g-=k;e(D@y6LHt zFlp&r14{b5kpA;%(nzgPto;Cd$@{!Z#mbYKXcL~Z&xQg*$RolGsHyhoJ?4}97 zHq7S(;$Zz<2Pp*YWa~?}d7`h3re=0-J!-eS8WS7~t)7k&Bp1^(wvR1jOY33Ww3bys zpea+=D1<21;=tm#-iV@MK@Ot^6q!4N{ER?v!&_MDjG<=7$2grQ63@9%PdzKzj;Qqi z#V8Y{-4c1^3v|K_DZt`Dp~1@3wK}d4tLG zGUeu-hb6fnZ)@xmf{0OYi9hb2w7rk;lM6>nCouHKmDms~Eue88q&S48y{s@O$8t&L z6bRIctc8_=vv+zuH!iZCy6%9Xe6yeYCG#|t+3+6ts^$TLD#%x6KhMtiD{kkGtiq^L zo?jH!sAKz#t0i3w$=vVo!>PR>(vFU&*MC z(`Ww>+WNXN&268aC>^cO>b0y{%#$vK!*AkMO;$9^VLp&iXkKbE`^lCTBLwl%WdW)E zUu<@EsghjFw|?3_*e|P4h~%y%oscR*c2=_R2o}1n!}!E4NCnI(X4_J^Uo`hFgS7aI zxzt&^HUNr7EXvc*s2OR$OwV+Gf@L7Gk}-LU)(!6|-54=FJu3>7qYRK{fIoyIBIhhT z`HSi?BiZ@_48im#k`UIK($-3lm7OKRxj@GyAJ~2_ltTZL_usCc(t0cy0$Y za*h|_SnQd~v$@*T_X&5im;6c)Eu_Z{)6T)hEQBlaxo?$5n$*;`ERi#@;=MlXS*89X z*Uwi~aK6+rhODGT24sV$-#x_Itl@}xpr3k6y1aAnc~N7i)eGxa;zkG5CCwcOJ*c%A z<~-#-m+)ReYIyqiC83~WSMJ&1ch7BgrZ^@%1X8n zCVp1JgIF18gMs~`&O86?><=GrUE~!8xd@%{mRFLPvlrIdlvj8amW03$z|d{q<_JB- zf{K~9SvsV%du=uyM_-0#A5%L#Z()-R+7HdIq#74F3I!&d;aV{`ore>C@}s15%`OCJ zx}UbaN6XTSfR%f+sIxzufoN(vv6OhWAg3{;CA_0mW%PN7gA@w!er?H8E3ti~Or8=NOzPMBeHjBSs zd3N*13;WPmccjI2ZnRDA;qM^d-j&J-s<$WTQyv)y#Wve?g44*P&L|EPd$CP;tNyXV zp~quSGCBMtmdZ*otaLo||3EMQ>tTuQ_IY0-2ucJ!IgM=f1uUJdR58Us{${yvM)oI` z_wXK+Iei6E9NY9wD62OqSZP0mCezoF==WV#GCKSX0pbrAF6Wr@6CoUy>7tf*iX1@v9J-B#vtVR)2jpL@#DQ1 zyR`wFs8C=D_Roe2n_AalZ=UZFBd^NtYD!tD%uv>oXd|ER|si}~EBeHuWt56dE+UHP||5;b<3 zx#t(Rc(gJ-K^=9jCg{3R(p5UUsG=x({a#xZS)bOIkU8jo!@!p;zS4;fAr6>of6dOD zM=Ui}Ydsu-hnUomKUel%HIFl~(A<24;o48WvIz&}fV2-PLC<7zT-mqMdGZG+GFp;F zhneRM4ktL2?nz@MJ)}zBTNF>7b1ru*Ts_Wjh75}?D(PjXI2>3Dy_XAA^bbAbE23~* z%{{=-)syy%2sr?UXDMA9n82K9J%-(FtCT###k+Cef>4Q(goC&29E*KkJ8})k{gK?) z6wNhSUSBu=z_&Ds-jCjZhq)pLZLL{(xgcGS%XY+TrM!-H^3@y?)U3(T_BXsMPHt)3 zTm1Hbd~BcKA}$$j3#tOg*NDu7lX+lpgV9&t9PpFD$pR*1sar;r`=Xp}AKB1&&|TE8 zsxIb-w2>DXbPZ@9*><;(9GON)eEqFhrL4rzpDt~of2p~qBlD0@IyS789FL`YWk32Y z)%dL4crMM{A@0kU79bIG|J3u7Y?FvkZ$ea((X)6vXX+;GQ7vF{;#d{u>xyh z-#eZ5+?8vokr?0U4NTu6qxMP844jG;ftLKBg#VU>6?qwB_YI|gDAU)PQ_f2R6MmN? z_)e-&5oZmG%OK6L``2xc#_>wp8J0Lbn1Wx;D^d8aRLsxvA{t@nhM(cez0(q?1X^i{ zUO``{b#<_Q2DyRNOdn-SdW69et}A)uu1&1)y`>vHihsJ+UYY75T6RE#3!Z^doDDZv z?~9BvT3&gG=;;>O{Vnx0k*myc^g8xg<9v&=AGrjY1iN{6>Zl0muhlJf9Ow*=v<3#7 z9NjOK`897`rt9E#dkk|wUA`Ujz8Q{K0n7cA#?|F<$EuKU*C6e-&SJTrsc^+aHiksZ zII`~E`*={!LGIGc-`fn~@n4Z%F;29cpsh__z;)N@{!gAaM?cHr2qLtvB>StZ`$~rt z?O9h6X*?hV=J<@AWEC`Qz_O5vyRsRjlA_pDAjMNf?SwncKAF*}U&7$a1kfU8d)E5_ zFQ;MZTKT$?o>6aMqwyR}k8bL31=rY6*8$3Szq=$9qj`0z;!-vnut1;#WKiVR!~Ka+;3 zhCeZz`5t3m*#4mHT9BeF)R3%tg8@nexVhLH*Pbm^hrxejMSVRXNW`2n$9Hod2b(TI z3_H)jp6Lviu6H`y*rI_*E)xjXpZOdW7B2DB=j?Ok5?&$cW^hI|F!?XRt4}gxg;O5G7FxO`Agjxrbv@3>BeRjd9!%4_e|d z<%E_o`g7n&S*0|uOy!1_XLVOyd){YMIP(9(!T#$%V`@C|a`2V}W$MJk879LHEnvil z2VKvZfPEN>9^adDht&FjIJaACgU;1uxsq4ZK&N+_Z=%`hvh3xJwD>*^raQ^1f0UWv zuQ&dy#MkxNFvM4IctY0l+1ogr$x-!dIv;5XnyYIkLU$=>NnOC5leD%`^IJ@C6UErC z{`RF0JU@vp?VNwNSv(Hat2E&B*_~iMz4QKOX4dcQ#4ny?sj0Y_Ghaw^^smrQmXuQ~ z?H^>~(B8^u!pE=sC`^bR1Q2%~;u{LFjlZ zZKYU5fxXM{DSHbuW6zV6(*+@?p)<<5_@!Sl{19 zznmeUEw6amMIGvi(Q}m@wb{3kH&`U z#Cywo1$8}@s@~J((N8$>#^a80Zvk1cxiWv9vi(AF@l;A$hFYFsol01%|uDR34yAnLph7eTUru&RNktbAa13K1FRD;pyqPQ3p>8#e z=fLIql56mSxudKWb%kw!q2jBSacXW!UHU*1Auoo}(xc(i7&_G@@?WNB`)a&alL%Fk zRBUb~)W@K=C>di{>3`s#?`$tUVdCLDwWz1&qs1)XANoKUgH-3ZPrb{vBa$Fi6&iL1 zHUX3>_`W}Ep+$D}r22kl)p)Zut)qH_6ksWxm8Q_X{$17N>}Wr8=ZhA~8dulh1^Lj< z5ArAUkZV?tH&^f}jWWsB>cg3TrxFPi9+sHC?KJ!$wkfYEWCU4;wEjKZX6 zA~JQ00%fp+HY0|Swvr|#m8(GIE*r@+o5G~4izb!6(zDObk;ABdv8H2;7#r!M)S@IXm)H^S-N`cq>cI(P`W?85Tl4N7|Dgd+H|q#9$U`K zx%krU>J>NH$2E4yC!GV(>_+!T`ztzK*LLZIO)1o|bst=g<^#>uKdhF`@8HTb1E#8H zf8XibqI1>oDWKtl8^?3#xJgQ_fp~xYHXXj0%$}4vh+`VsZF@E6Uu$~47`Qr(08o1W zjDT~X`(&+|0LJams~seP8%t`xX&044z-4zqiv78oY*kZ7!S?JDlF@Rt!{I$n4RT3O z8QhVU{kN>;SA6t8*FtugcK`uPLtQ97p=%J+KWsyOp{u@X8Yc7MKb>c7?I(1*4l;pLg-EO?B)A%KF z?|C#fpmX0JF%;I=*w0-IUl-KcXUE>d8UHjE?p&LvyM4nl9{j}_^t|T~Qw@D8KzPi) zushq#;hVM7vV=1})}&Y>I_xNMgz9Q!GB;s8$3E3PvOo>H)8TidI=b9Lr7v$lF}(z8 zW6XTUmTN%m0TmDhFd}tH3_Q%K-B32d(D65+?D)>k09`#zE&reSCIY#D8gy<1*;wU^ z6TP2UraEP_r!BIvZ##RhKNfq59lRo{UrD7aqPK>FZ)~tw*JwgF zT7XijrEl{B-ss9tuyfeo-3c?3IhZM*JAcNMTw0BMw<4QIMgR9r)vcO=d@HOO=EB}u zp^B63JIH_!0Ae~aG*9TCdU`dY;?D#puzlS`mGkWO8(pr z7=J7htMsXja#y!o*WuB!fz+#=dHdH58T^a4T-od_XI3ON9K%+$KpBVk0%j$`E_N=A8`Vz0Aedf3XlYlujXPOSW!_kZXW?ry}chxMZJgdHt2P(z2` zhwDAt^ho=6Y#IB@P~=XhK|Zke>~$(`!H>N^!{Mmdnfxrg!6i1x0{1J zkcuNm^2FvFzpQzxcXi+Ky}00W*ksMeCMbO)wA?mj(R_0Z_acH+q^+lUdhv@v{Ep-N z@KlvK2WBG>qEh#xb2|dcP<3KLqzZy>gp!Y+2DX;PEL{LQ@4WK@iG#h z_pN2lfPGG$h`Do7N0yB>aJalh%A<;r=J>Tg6|ywj#5EeY1=IRGkh(F9bG6Z^iHQT? zKa`GHdsWVaE~G@GS{z|>!S)7!hctFWcM0EoZO)&OoUE*Et+wjug+ER3PjQuZ@8C8{ z2OkrMOK!*S^88_F$(bT>GfnD1rV&&Bc^`(TUDk)7xUcMS9W(9VwY~u> zXLz)Sv_b{;k2m~Cc2nzbvo(j;wj(V11`eul#!Jp}TO2U*bLa}3mD+MzP@O*{6OKPn znPP!ssO7PKQ|2l6rj0h0Z=*@MUrH*KV6spSM<=t=PN0 zlEEj|yXHrnB@#qGUhIR;Jnq^HG+tz2iT!?U8qTt(7~3%~-mg!?&vkuI5X*~ICKAW} zv>nn-{hCV`!~>}m`~@?YXFY>qt+D0vHkO(B_@OQ2G?g@q$BVL)N#Ylz)DOv zwX@ICtJM6=!raBh?4(~y1TgtUJ|8BlUio|(vk>%}UA$m9*o@@Q8v0=u)qN+(`I1n;3yWI7ws6=2| z1*(>|@}nuGP?Q~5o@~0LI>iyqFu>dOfJb^d37*oS^Q@$0hdEB&+(Xvw z+${6LKgDA=RaP0==R4Nro(eUGvE?d9!S(1jfuCqr0Ng+3!tKW&ZvXY1<2Ytk1P&HO3TY+ILMfeo_}nLI38%Ef8%^;jXVSBD79l-piQ7FhdN&? z8amD6Mexj9v?Y?dG7mYn|1h@Zv18`5sqfto3CZfSZ97_>ikcUJ26r#k)_shXSr}O! zbr=p@V;P({irl!{u+wWygi}a;=aCPpZ}G^^-+xB(nu3WFNGdu9)G0-@^KsaoOshCocdi+$nlOq&iWHB zqjSO4-b)8w1@TwuGbJz4N6y03kK4g3y#$C}la)+}+0H6pKT^@B? zpx5Vd4MMPG8p>45bS~`3QGoc7lsP#*=(x`+;<-akjm=M6!lL-fJb8*Q0>ezPuXy9v zd$O$xeWYsg-*GXfuTeOxVDoIXCrS>0DZK5Cjgl zqg8Txu84j?DQuI6&-&oong`!cQf0mxZP%B4L!`-0bGO3eJy;>FNO~VHphD!snfDY`vzg_w<+utRu&ME^qH15RA zx9u_xUpCtR2ZG<$(Nl`{Cx0}`qqm^hInE#|3#M}eswonM9h8ghV``&;}`D6h{^5%QWn$AbUY|e1#$W` zJrx3z2w0eE*dZ>ZmasJTvcB`uO#s z`{bvWpZdca^;Gg8*!>cMCvB8eP=A!AtP$aWpj{TO7&$%yY%O|@=@TDbEdatb zlE5j>;vJLNHr~GW=WmSde>1_LGE)V5mn5aXT9fqm{3R+Ib=+x7I$f_h>8~98e*4iD znzRbXorsb5;T)@AzK)}Y(+2XOK|7Zj-jnQ_OmM=RGBET?pE}5}v>s*7v2?Wx5Hh`l0??6DV|PPLZwYPx)o~>S1aChpDuy1TJzMU7Vt0sm-7&bw z>DtEWsIYGaoaJAiBZV=o6pRe>=XKkXEg7o+CC@Ln_8;qe-Pn-~oq!RI8S%^X4a~X! zsz}U*X0mFt)RSGWc;4HM=&>e>R@)tLFO>|d)-JrO*3kK&Ts~13ZsHU0!zfB);G@)F^+?pQrACh^<@`WZ`fi}n^% z9gH8(aWK%2IWsz1toKC#;&&-|!k23ecn~J%zYnuK2vxF&GV6Z2^`>+l0M537?cwj= zX)n-(<^<1I(l>K?BJXDMp2m%!H_%TfL|xB)D?qIo@ZPJZDHO^xw8{ z&*gD?_#}O}oe$AODWY}lRvo-`CHG*gXY3of=30l%xfgsUt~Y%26#=<+*GN7nakeh(dZBBT z*@9$7nmRj)vy}AVnoA zmiqqTVO{%i7oT9X-*@*5t#&S^?{5v8?1p6Ge<#9EkC|#`Opd4iW5bWjMe9fdh~{AX zb6gw3(sWa;LeFc#B;OClMBQ3%EHkPQ>r~~%jq?h3gK=% z3{*nOm&8;_I_mywi-3EjbOmCwI=YGi#XoJqu`|xINuLCGR6;-Hq9)k~ntCMv8r=_h zu*~4*Yu-L&QEvKJC}7&gQ}rqqjJen+eQ`0m75cNYstHPUD<>7FmqHb$hI`L7h3l_- z!4kF5_RER$mut6wMXzk44D_F0{MWn>h*oYsR+C8^UAuu5^xbb4}x^ccN7@Dm*?qoZ-Kp921{tC(XR&TN7Sk8ltMSN zg&k1x`4u9e&#gXf4_+Hxrq7hb^L+|!xNoOqbzptPhio1$r#7+JR5dIAPpyTnwnXF1 zS!|Y=x@67_=T5n$h-X?Wgob&RaJp!dTf)z&g7E+9*Si(u6>e6U%T(IAI*$Zx1|1CK zg6{uA^1%(Dw|k6)0=7AX;eijOQSVzZ?*e3365!l(pkhxx%|TAaq6Ia1xW4zhwtYj5 z@Vh$5xUpT5DY!kMu>5qqVJ7M76}JZx#`}kW`I1oHYi0d&P{rL`RZ6q^fbaC*D2pRb zk&KkM{2r&m8r|}W^r01%3@;*>y>x&f+)C0~Vn0&a+sRY%reqnv)K9~1J)&ZEZ}ts| zp0AYI6w|Tep!+XUA2#@jr9sZ}x#QRz!+eVGp;)Z$3vINcq(3yB!&a5wPuS2|A1~D` zs?A6r=~(nOED`Y;91=wKO zRw|W2Y~dct1rl8xGe1H)7S=Do9s-#$Yzo<@)yz#&i{pQn;S1DB4g`etg^P6D74Glp z))z-}=RwI=vHSu`(=p-xp-vOmvoIGYRAthV#z}5MJ^1ElKF86}`<&5AC54CUFZl5{ z=!FT^L?$R{%kzE5@x>l_>oOM}Fi>O8{lL zJY6uXH4m_IE(>Lm>`z~&t4s?n;La}!Y3;P{)JThqSK$gYzR*BN%+m+Y zaryMoxGXd@b0Qm4owd%DrBoRdlsyyFQSGy~3NRA9ai3Q6hDET92oSY5&Uxlhw%Tr8 z))}2WS6t^>#;7QO(h>;kh-~Mk@qsiVZjm4v>m`^OYH54(*y{3RqM_C{aULbM*JqDD z>vk(It}hlo36Pwb453jtjWs7>98bT%v*xFAV^4wzCo&l`B@7GedGOPV)p@gC4)VM1 zrFM7lDyl`-aX%UVRyU+79H@x)Bn)a+w7#Tno%pku7j(hw&iDcQr1E_i(Dg`zD-p`w z_#SB7JFsybHJ9AcCQe>dd}15^a1Q+_ZN)CT^qPr1L9u67@R=i;o!0p<=m-1&{*_a7 z_^%*Src8qM(2N&RjsHz?a1_PL_G)Gd=IC$`uA-b1dNrXrUnZd|%5wQC*7TNu&%2fy zF;dlBtV>*XYvrx`ZA5k$;o-|-OWmPGE1OfE!p^qJQ{+v{3{2a~qzT(S3o5~6^$YU9 z8}M1Riupifs=)kFS8+m8nN-TVt<0hwmGGbtcw&=)tIEbrb-{syML``j=J zX8&x;EQyS=Z=usNHVHpw<2idLqR@U=n0Y{rQLBrj)bq4g(U>yOdJtwlksE!YNqM@} z(t%GWTrTNkOX5umO5CyCOkFlLct?ZvtcpoQy6pvkoh)}fyE6FuAi;au_(2Fr{9n9z zs$%22a@04^GKMc7<=8Uho3)@}BMri5w5kdpN*WpP^U2KrKYM<^Wmv~o1v1`EGlWkN z)0v<`2^zi7C}x`aeXhZyN&;TFy!#7Qe`H|Kq?v{F+Bdy8)B(x6_U8h5(PPR4L`waV zc59VGn=2S1Q792VGj8o+S33jq?v)hboI7n%6E>*IK~S~~deu9+x=?~HM5RvY$kVFR zB6_#0yO!6!kdSGGh00d9X)vjmK0=m@qCtH4AGml|ynVk7euw8K>onb%#tbzlz7;xS zR&|ya8yFD5WO6lLAU{ho`zGOJuR0fC0SomQfx+<^7=;{6O@2~0RPlXEN9{{R5M{g} zYc_h&wn#J)IXYVXql3;7>njlkqN5jd~=a_uO?AZ%t{5+!~X%Kg6ofe zj$mp>L*)xu_uaJ^!D8nxsV(}6r`9xsZHo|xSDRwDH#+#}7{D_nZy-3c=SzK<3)E znNyrBmhzd1Bx@EAhFaS^(_pbYcYsdgEXsoPWOUH0yJ56!dk*;~+8fTbd!96~?`!2$ zoT$BA`X72eXF(r?O9NiojTL>TiFNMBt}D&_JLCVGp5F=mKlHrM|Dxxi@r6}Zkuozf z6xXf)Xk@Bc0y7suJ+mJVnR9Z&KD|3wk%Vk;NIZGk^|)zxsyEBvW6Dm_5)Xrv(lVev zBPgL zZigmqPJsl3`BI)&h_twr=daA=AI`Qq@Avr48bP>Hx=z`tlhuplcU3n}`^>Zc8&IdPFVkA5e`!BBC>qR$Q znB@^_+d!)!I08#Pm7l`Bfp_r(&YMc0BPfpW-e)sPFY|$v{E{eLbHJNB%5v7tw4g^v zTH(fFT?@tqWh)Q#gi3d-$5Z)_BsgARk> zFd$&r?1KW&q7|wSZX;{$w)|W3=tnNbu!2ei?OrM}|L)`y@v)c-%WsW`USi66q`)#QZMNrUh4 z(*_SG6hGK;5KLTUUS|adGOgO5hRV(KR*t)GZ<(H5+L6~X zUtD6&DO+)3NjIAp)Q^k8ups*9g48_PJ{)#)?UU=D(R8}&twgIkHfw_=LT$6*=DYxa zmFu6M{%a@2+jNCblrJ`07saIFZ0uojOJbmACNZP43pWacR4GXLo7tOSP~-a9o)gI? zo3f21uho$p(VrYiW|^MxB2DO5gi6i8^=Qoym992sgVRKTJbWKcTa8$qeK@q3Nc&=n zw_UIFdEb}hB?XrC8qCtzMs<}D?#_2%IS~CExshGoRWQP3gV?)P&Bo2<;B$uw*uww|)pa@2EdK*rN{5X0q>{tOIyQy6_jq(9yvmfjd zs+T|%ho-fQ3I7d0I9FD#vL+*`kD>t?b<1Bz7uCiOUwxw!lML=;5n;-r0;oVh5x6@q z=!N<3dF=gtqO+))WRG6S2;$4w_{*ONFggP3dtt`je@b)HS@mUU`8B|;utwdh{Jp!u zWRoub*MBVfN0b^F@4}CCu0|wXu?Y2F&LK`E_`N^&TD-CWkmicn{WH9SgTEUWNj-;0 zuq~P%?y+sVYbu?OEd$Jh{`!agiadJwjTijZ?wv?sZ$gge6)GVKQDQc@Hgu{7iPL!g zyjOyH7Ks~+y5m$eZ6zpTL)-MGm_E*5P(})))-OR5a6I$3_hjE`?r!wJ_qjeCWx|;u z<*RUBy=q zkiBabuej>e#5iej*6#hV*VEL>y8jNtkJYe$u}3E_qeI&WECR?2V;Z4<`+$_GlA%qZ z>LJr_4JjE5ZO3CPU(}q88``G*RDDfJLyYE(@?Gn$+wgdX`OW&e_O&AF(}4?(oY2b6 z^xdh2g51QPO1PD3sPTKw35)5}mwnZd<=b-zER9W*_3sP}0o%iUEOOpof|i93-DIE(m>EGp!W>P0>y+lLYbAvtw@wo3TVrq_4OQ|G%8^2KUOVOcfO z|7Fo9%B!e0J;z=g3OysCYW7^N^c9N|4DT=k<*w4oi?g~;Tw3(WFt&&PuKV(ZZh;Lc zthQ3wZK3xc6H`Cw(i7sQ>vy#;T$zH3p))I~k0t%W9JVU>0F4`2H|z=k_;k*b`^tgz z13(X+e-BlPrXCD3VpZ>8DeJkCgQve7$!d?F7h|zw!pOnb-QzjK_icz|XU#>TM+`GB zREaqWiIe2vBotRb$QVAhT}AIRH`3iK=C_inuI|FKox0bSMY)GbI&?(p zJ*}|k<*`N#yV#yi+kSDX-m(BHfLc%P&=-rK#uVaMIaIhuaTDYUO?erAVlDIt3Ax}P zkHGh)$WZ*jWx(DTf>miScy3&x9>nC%S!D40jUXztSfST$$Hgtp%4RX_K`YV?H?1PG zD{v+|Faof>HFNlV&-Z~SAtsdix0C|vvfEfw{NTQ*5eDQC$*3fFZNm1^DmRbV=O z^^9xN@|md0}FPi{yN9R}mqyG-5h}mE6?^n8frK~LKlYx~zgC{3zFLf85^8Pb@K*Kvlq(HU0to>2b#aL<4tq-eTdTA5<5kN=zZ zp`7ekIS#kKl@nzLW|*^l{ri6K8KgkpTaka%sonj!2PxM*;|`2_;{`d==t(tm(&8F< z`!=BJ99f;Jfx`(W#SiDpxA3H7O~ADJy@oW~ zGK|^>UVinyEdAq&IRd}h{s9beiw6BI{UT$#Juv>y?m^~1o6o$@HHDduQqeqc$brgb zC)Iz}^ZSCHp{@AiB-VQMjB#m3M(Ia7HC%Mw{mR*4Tf8g;7Bz6%rJ@z6H6ruBVUB-jI;r{n#fC?K!qQqgd+upQrbye#>-A7s-64Cx^wbe6{OK z@=PkhKQ@}Qm>!1UylFcCIYIoTx#%3Ap95tPI0WUC>vRufqayiP?R|OLnPynOtVjpy zRg&uHfcH5Qi9a^-z(<1q*JvvIBG2qcWJrcX?rPhGc=5!LwXoyKKr*4m6F@SFyfVU zJArWp6u+0(!M~jI;BSERG-`ZqMpT6KRy5Pw47NnD89cCa&Gw9XAW>1rd2Y4yCvIO8 zocv74_andD$KW7kBufBXmV~EhW>S-Ovb+u_ozIf*-(&lm?BhPFg zr8&;Qme*I2QzIU5w8!<_1Ep`NLpKui08Lmdy|XFUA3F&%(a1{?LAirdXLBY0O5$u+ zJT^zW;I+=j{TS-hWSLt$w-Mlgz`6a}v6(q3lo&IhR>zohp0ddHL<2w5d0hfM8Oqp2 z(untUAB6K#@j)Y$B)KwXme#*Cg+Ru|W-$uZqKa#QFK*Veq@x%RJ9--EHB+kw3e zx`=W(VRhBmvK$zihV(b^+?!Z-J1%GcSr556T{>RH&K$-MFGL?g8Y_rmpL#V>Yp#NPC#S9n6!go0Z%A=vfLnPlP-< ztfE${z2B_Yug%JfNrWETS005lj_&fKop2gXg!O)dH&2Lo3JQ_jEz*VnsT8^gKb|7* zjL4j|p1owRpCI-*ZF>{WvjIP)Ulrs>AC$WGIz(yicRVoxqM68T&_zYTyfMxYSoTNE zFS>ef&Dz9}nl~e2M4h%~Ws%V9A3%IazJe#;0Ec4*dgdCFw~_2w#D@5O+kJ*Ju%jzN zOQ)j7wR(YQtu&r`QNsNoaf-Ci_5wL=f5CAhdDQ*Jt7SDEmeaXDjoim&G!c@;7yki48_s*JZJJe!@o?*j#+g{enVUXyy(F`e*_-n& z{kb#pwA9OVSFKXl_vsxTcf+~9F}(W`Tf^lxdDwsZ)3aS4zJR;*5o=p0!2zag z(|S=`Yt-Ak>$dKf@gPpNB$*|;0vcY63(Jd=K{<1kjh!r2PUgPjsz)#7JLdltB<_;y z?`RFFN=oMJfOV_>690)x`}&q3gUfy}w0fKRFTKpX!SdM8^zFUI({T1j%{~>{1&!$+ z3s79{aOzD|*%Q*usyE-Gdl{`W=+4#^w9^Tfg`n+WeOS{KAjtC? zTH$T}AGIzp%P&CA&di8ZLTWPEDAiX0y|J}b2s648af!m^UF{O&f`mOs zQz&1x!sfp`RpK1^`2O<)-IcCpI;w|EzOH~H1K5LUC2koeSYP?j#S@Gf4_yRdVm=P9 z(_JS4-N9WCoI2trL^F=oUvLLkF5dp{ZQh_>MuI1l2!lg@050JQfl5F}kjaX7U*dz1 z^Xfgizp5E|uwsmqgV(ckDuVjAPJtwjVAekm|J=lWyz)lhap>);Z8F`zf1gidaXwoQ(w+4%f7r1;%jwpfG9Uln`}X2pWuZ=Npt;KN38O| zym)Do{zW2#-R=tcE$Y-aXQA|MhzF%)d-gI$zyE=k1(H0Rqj^-65r)JKas?ykXKtMT z#x>pdgpx+xfBu%-e|Do3(>J`IbD+zlh}LTH zOq5{|@5a6MLcH<~^QP|MqeMsCjua7w;c=8Y6FX4tM!vVLeNr$`9JPbX^i0a>pUA-Ih&#Fd7+$3hY8P45z8aha zKVnV7b1WfTT^{W{l@OUG2ik`y;Lk?>^ONBFe0JU=fKUR93;D9)aGnHl|EqPh#bxi5 zIio`Uv4_{%+_FCIPV)>xB2(@i`I3R^U(F2OB8j!#vbEu+_7x_Euk+7WTVt6_{3Oz` zyooYFu5-e-o9sjQ~6CYLdnUWzKPY;=>i;#F$;#?eZ zG@&$5H)9B~9|b13?-i0uCoks|H9cPoF73#-Ul86LI2q36fY(PH$7dQLZ#spcLs0Wy zOpg_|GXo;Z$sinnGy(27_9W*_f%cBuI>=gZ2oXfmT@v#m@pS`+kw!+O$;!Zc4Fc#9 z((>VcXexer4j=^`IDnj#nV1}5b{c8$KQWp$V>QOds^{=?nCN=GG2_7MLYFVa-Ohj< zf$YDPFZAIR)Kxy|;!V@9_ut4g`bhv8R+$2+0M~aWVeyRiXZ=cJJx(CZXd=2A*k>Y> zR*iQ;a#wV;tU;O-c8jkc4CzapUOeq=4@TYjP?y>E5xYEbHdc1xG2?b{J#oA<&K^Te^?Sws zx&BabB^JwBEDkz5{*A=4{o~RGEIoJCM%N#}pIy_On)F89%IM1b)&z~V2?`E;8s}%a z01A~B!5Cgk80J_`eX8185gNXo$3UiB{IdHI#{0#c#k`07lFL`+MkUbW) zt6Mc@x0khtX^DJks-JVud?uhhdN=r(&9?ve$Ze(afqh{w6neBV^9GOf6pSJ)&xj#~ zyFYiJzr6aU2ziRyAaRh2mT)Iiy+dBKNZu?9UfGXn1fEE6?;tX@T_T8rC(4d5ON z;$C(Q%`&0Jxt1Dz=^ioaOigaf)gOh%Z<2OzyOr<}GojSU< zAAJ6G4+3-P_?z^$bp%1uunDR)H~A@U9dxd>W`;x;q>xVfxHs9r(@yl%pqMd-y|FTV zll0=Pb*sEszWax!w|b;QeKii%Wa0D!hFIarG|@=2!#LkHf$-4Ir+3bK!ua-_%F}^h z>wHB=O?GSmn%Gr-Fd6T5IpeO+&hy+WNbFzu_{)}iKC_Z^?WcpaRDDV}%PORKKfX1V zM2S8nZLBc~w+c^rC-|=@M2b1gh$Octt)8<1ofmzpF z-;rZx@VM6E2DZr`I3+5$toa~>Dp??2YrF-@uvdRm$J!xI(kM)qTDy7y-MOnM_o9Jo zPho#G7b4d=3xJhH*c%*8?66i5y5CIoG()fc*77K5LJp`B1i4o2z}!X1zL1)`{R)TI zCv{f|29$rZno5PW?1$E&HaJw{JjR}dBb%BM)e++j|!1R@9 zCzBv%Qqluk%x*yB6DZytM2QQA9HIaTQ;i7L{O2+MaJFddqkE(LV7T*lB z$+=h&MXw7v9q_ubR+)qE`yU>P9hQB#ouitpY&HX?u47OF=`D10?-CGgaBCyJpr8FtlQN zS^4?h*>MI%u$3Aopg-Sm>S@LD5$&^KT*@A6Gzh?|k+m?BT0`44Mao3~j@fbm-U7s- zKlS5cyh_$;eu8n zhykTMjXq!C$bICQWxG-*^_P!V+dd#czuZmzUzNv)ZZ^2>n)HyT=}dwHGtq#k!2PaH zkLYM(ICvoHdZwojH@OQLWE9EU z=h@)=%ce9BSMBbwk~Am6aU7_ukyLzlz<( z{_Ll<`bABCb$dG;!9|BG%fxJr$reREOTbvnm(!BDFYSJ~a|2zF+& z=WprYk6QhbPIx*qQh_)4*)=JlCu-t20a=j|PIlYx5}QxH_2GAcNJrSXP~BSKjnu>4 zH%D$Aj-WY_phwdh#piuF2egCLc;>JQ#F-G~&b_K>e@I$|LoN{k&YQv%4)j{z?hXak zHILFA*x*ItYtJNrDuNp;9dH+^;rK4JQJVAZJd}JyYik*oa zKk&TB_LlXu(g$BFZg*)S@d7udriwr>`-glZj<#^JeUtMLF%U0x9bw)R67Q515J&3p8iFE_Ay#M%Mv5xrT4^+x>EwlvCjJvy28~brJk#l#gWv9-am$z8)gcEbo?HhH-8x)^l9w#|gzm8_@B%41p21_@gvtvG>43$7`fKfhs` znkS8u^0?qz6gpb7ul~?vh`iyTd~Q$!&7&(`)c{Q!7@#a`g5-lV`r==u1l~I zQ%BMNrg(Mz53VH1uB&tEs_Cuk4q-DC6?vdu^$6-)tzuPeb-3RDhph9AYBGAaJROlP zQlte01r-QLuR#R?sfr5Hd+(tW2uPFOR9YY?3L?E1fzXQ(0)m7ly%TC^fshRUJ2Pv| z-23gU_rv?~tn=(=@85PdA(cUWmw#JGVX;HG8T>=|zGU|s7w@JMWNrQ(H-C`|BQ`~N zy^YYqNDANY6}*iCVy8zB_)6`~a4ZuQja!$S$b%W^&$0VmeR|2q{$WR;Hh&fGKeid9 zE^0fgWhiMD`+twC4B0n(%woxtXlxm#;YUv{vC}q_{;{buBAXwPk6_dPiYaau`^;{E za6c}lQL$v)xt>379CUgS#XpA=wgi5PA+i?fMcKKyZG+#f1q&tw-_}Iq*FS%66RGqw zcl6;fA8`-yEblK@b&*3Ug1jq7VDMwlde!gmPp+Zu#wl?crmO|JX@a^>ENWx`vSC(Y z!+e+5-1gwTU6(3u1KGvp*nG1Z&sKv$a_6Ak7x_Y={`z|-*7e_cFGvrcJ!V(G6*IUt zUJhfQyYmjEpAV}hJ+N}5Pp%HGIqcE9(|1FHX0*PLhtf*SQoHmfxk$YnO^2NdnLjSw zf{xEjVvok7T%-GbELK+kv9eNRr&ht*b@2x3#;?Z1=JoQWa8YRMges4ISWlAj$$+&) zyk64EFDCCa2c?i?-qzl5D=tGk#JmOK+x4;-*q)(CeWOp{>rG5ho9u%e4z^nNU~4IM zB^@(s#<&a-fzk>$1L()Y+fTHEhle83^sYz7xCB^eHm(twwDKyv5p<3j9e^b63IdB$Gs zWU(X#OF`xI9T!NIw%hYb2Wbt(e7RV(z~*0W%4%fEpYw90)Yurgqd5}NRBR_M-Cn3W zvZZh}2|goyp@4GcL~Mkm{Ug0hM~Hba z)C7oZSo@l#&cw&3;p#%m<_hpDKaQ4yJ0&IS*;L*mOA5fg;hh)z^;eWh`)h1}<@*?|ajqk~ znu$5pp8@TlRh@4VZ!>B?zSFI%1c@qtP>=l%c1cS4yp%1IGsPI=H_gEr*UL`&niE42 zU(M-xSqCV#a!7EDxuMCeLn&f2)VWJF8}?$yC=qNqwJbHsO3H8 zhg@5d)o7Z?YRf93l?>b{mZ4Uuq)rP-0X8Fxg_E}V<8MzNk%A5b(|0k zED2$~7;u0ht=h10Y}*vu!` z;@!GcZXNREknyTv=w1UmV^okhLT<6_`%nobzY34$RsGT|+~9%85lDO~Jg9HH^0;!D zQf_OaJSkR!UJAGP1)g&5$9nLIXMX7|pR{xX^(wVX+evB=E_bu%Fof9kdgkGJ`;FI2 zr+*oU4%*t)$HJ$3V=v6O5w?r$t6?IHp8&r|!pDINsY^N~^O>8=LZA>7;U(|CcW)Dy z9Xoc&FmC$*B6n7UB})GXsXerMJU79O?}U9vKAP^+W@s3vHRwXzsKT~Vsk>=&?e4$u zkCTvhnw?V}n}%{p4>h?P&r-~uw&y5P*Wz+K7uyuiOyNEg7L2z@#CYQ6@Vl_f= z^etllNdNxMRq$BATqcr$!{i<=Pu0K>>RCH?`6*7mi49F1`?wFZ_k8Y5n43s}o)oND ze7@Fq4E{t}&0fk*vR_tI)n|h2Ja^BH2-c;L^Vc7#V44sSO0T5(u+uE62M#K~XcpuY zS;ucELtIc-wt0b+EtIY53 zA$NwSSCqnW9r{FfxD`4!lq{3l66X}+x8fk=peo4_!ZZQ^qA|~7NE&F5k12C`n{I=1 z_2q(*2lCmM=i9N*2&F-T&JmczsgkkuRP0^($^_4{$w9*EgN%3>(C=gi&@8bRT&C>6 znmy|1AG~J-(V??Bt(VgEvoqlaJ>ZxeN_I7k_^{G9+z^I`!vP#Uw^IHIz6oB2MBhpf zS}LRUbMtqh$YtcL!e7Ko&?%QbQ1*1#pC557iV8cayy~)pZsRWzR~qp4%U#gT``0-p z$G%-q;{wqkG@y`769dW$K+e4S!Rj<;x{tF4@LCCZWa9%KKVinb#;btdQCDMSMXzn) zNg5=~Pq5F`g2|K9Y}#JwCf_SC7|Fp7_H!{3mdKIkBRAe@pVpz{92m_VX630bt4ZXn zcU$DXX)x|%3vZZci2$CK#Mu6Nb+`@Qo(YSb`1z!;f6>$FB8k;Y?3Fiez=H=HT@>4p z33Mg?_N}{(^cV42FdxK{0sM`Pbp`gB-A; zErFj{n=y8BQe^a3?pVk~IFLL(zZm<7ueS7xFU+f~#dv$J&ITNA0O0j1%6LC@)k3lU zTSnA=groY*ACk?d5cfnBx*8QP;|%Z;nux}#!USblDD-(RlLpp=x@Id$l)LqmQJf`C z(@!nBGy9)&kmBj@3H|L`YGFQlY_XjJ2tFTzi?G_h|`*8PpV z3%GvwRVho8=BN!5e)6%5Rbru0s8v+cXAwa40&Y~KE3d$3QwtZjRZUIT8MyX zp35sY%VFQ;z{qLA!*{|fyurJ?dbB&f%E%?w(_A9)Wa0d{5Oe{?wTBM2Bmckq|5_8* zZ@W&XPNp2=zs6=_JHGa-PAkbAX=cPuJ*wFFsyvl%gWQkbxLd2IY-vyOXo_2UY%;sm(cmSd~sqU@#);;c){EsnWY>! zf|Bd(s>1{dIA6iwRQt~(SL`jT+f#a9oGl4$jG#(X@z*2T3l$dzv$9MpDWx<-5K2Xy z8(RMTd;0{dLQuDSEv0V>8v(``MIO8CwKXMg__)fnxNQyPFrxjFEt?bEw}Wdwdc^HN zf&qJg+XF^?ih!cG;^fQ|0;x;5S07CKyB_wmbveKGwOjEaJW*6cxd|t_Ny$i9+z@xE zbYy_r7(dY`eYf?q36(OpE-ykHqx)kwH)I(gM>Yg+%}Y?sxz)i7GA@-t(0*8He?=S| zZ2K)!l6xz#`SlTczU*F=q}ccrOKSD)L*;>g8%TNfxRsS|oI0%Sj_AJp*Lc@d&A!1! zvX_g|XIq7A>yojfglul+MhzGY{$su^>FV{S6br@3khQrB;#efz!7FGtgFAi&+felB z>u`|E%TeR>UWfH=oYq25enbRhj4VgBU^yO+btNs2TLF>PD609ujej%z%9-idn_chV zEoVne|NUDBz6!MIba3;BFSi`^SLToJ z7O8WwXUDjb-e2MS5psfUm<)JpzLyNfCm?U zvN8+3dsu0Em#>`of6i`yHrD{RM;WQa%`&c@-hv5t9_6*Lk3?mV|E0d@r(RnI@;;!o za_P8BgyhD(0kDK_#ObcarK3Oj!mVy+ve>`x$?WsL0#g_Keeb1ruYJ(!f29lAJl6|s>xa%LU7Z%JA9@H_Hq>D2VIjh*1|*F%o^Py6Ep zCwVe{c5)(&-2Wr;)*IDP@Z_>)*oc1M$j#XIQWm)D3JsE`KZfYt#)m_39rIIE>t-CB z3!@9X`Ba(2W8t<}4dDtHWiOdng)Y+MRE z2~yWt?P%8b`UgFSL6ysaruVyyn3N-UXNO2wev*rji7+G4{7ik1h+8K|8QuRfVlKHp zSBUZ9XF55&~v*O^*HQ01nk;-bTG=_vVY#G+IaU16LNJ zA9*3I^se}EZ*7a-`c4^Ih(Yq@lhsMTaqAqWrOOM`}C3g8tPIvH+-+d&FM*6;@bFae-E}kl9)+*$8D_6SK z?1!#gz$TRENA6i%b$gZK!oMPk#@*aDlczrW7@^FLk?H66psYU`bqjP_F7P*@F86$e z$LQo>vwC6)bx#~ytbMy8LPhH+`wsH@-B03aH&;z`4e6nwl%HhxtPlUHFIi_UTsH<} zw$%iD{Z;eEH|29k1{KEhyx6iCgtIPusDP}3h#vUm&;7^C_=k}czjy|np5}HFX_%v9 zXQBr>#blnSiy0fKAjsNK8o8qohXHRN!fi#GYp!K(Bn`o3%560dF#~AsmSA~S`UmLu zV7T&%c+!s355P*PozU zx>(6zc?isMh;jd@1RHXEu{@EAmt)c9WK;D-Jp3^0r?geLX1p}wOlcRyr?<6gW0$TF zxJjbfDlZOONB^KNsm}&j9DUOtEL=Rc>xn&Zd*7Is1x_niX@D?dQ2CqskYU|oT<1%x zD9kT+^mCDs28W^45BaKYP9xuorYG-$UA}%{r%bPh^jcWts6?!#p>T<`sV5_Y?w5GB zlwGBKLm{m~Ci04U8e%zVXpN|CWtcu<$Ib z(hrXULV|t>C*)M^{X@Cz-L=+FwnCswT2x!;QtGqr=ARioOMxgxXw&dLt;*Z9*4H?A zW$-;82M?XBSaMO5b`>%*{qVaH>T{A-YSO$=%$(%rcDVTb*@KSfa?8)j%*jdnOQ)}L z|BDE}J~3?kpeKNs^u}#tW&^!x0qZBh?n)EmiW}CyDlG=fL#=m6wFToOWKhYIt-18d zZ8uKis)?%!sL;C8TKz|XKxLsu-TiN=76Tq4y~;rti~FK)ANfAiv{=Ug2p73{JptK> zDVg;4AjNVzFP=$CSMxRDJ{<5;j8D3e_k%`bm;azMbfw$5eW!SDcRXY>pZ|JXu^Ic! zw^C0c|4Q{djv99ibz6_jK$2+d_Hfi~_;k9EO47ib^d+#a_pd#*DyAL?iC5)D+ zXZ68qe2crPr854R<*%?g5!o8u+8qYkF4sBLg9nLoH0T#5zJ)(R54p$_zi>RI2nZ`G z_XAly7Pb#n!R?k?`q!x{TE8pn1%)tQ*8G!PMyk@uU?bjzYlqSYy8JAZUx`kfzXsLC zS&X1qKoUzxc~fS~UXz$1H<^yoi={gFNwdcv_D1g9>y^ajCB6oo0C(A$ealw-+|7kd zQ{J!Iu8P4ePmB^e%O!)sp8=(G?j03O&ub5)qf zV2E;Ld~4a#t0Awy84Jxjpu^=cC6!b9sP7?#w#RkF3z}}uWUaO#S-RSkMN*lM z6!H`k`9Ld$xaWFQIH2_cfyy;?dIjLj`NxPn)g5=$So2gt%>p4cRUVf1&-wvZ!xg=n z<(2sn)2?T8t)(#&BL6PtG>)9wlqN@mgWi94*h0VnN007ZIyU5S4lfY~w5I4WDJyX&if(!}j;--a+S(qQo_EvQi zW_2?o1K6LMDDn;*&LS@UQVwFto<^+pzqU(f&du^ zyar}zy_$;Vqr;8id&|Fv`o`O{d(r+XUn`oeIOee8b(k+h4K;d8e_uLkr`|1=63)AWkszv=B8Mb&*K^X1UJ)Lao zKN+$)OIeDrAbxGl`aq%YrFqxgs`t9 z#3W|aaojA3sz)O_Jn}}3`n;ZRK2E}|dFS_p-mA9Q0yYJXHy%7Fy>lC~t?e;M>*+C_ zMs>f1m06?k8W+D!^2^I=G$I{u{BA$~V35_0DaMDUUv7YRDEZ6}hJ|>IWi3d5ah`V4 zaDOo$K2^zq2As3nS_-1vl4+1jWcViRD7g${GKDO4Ya`M^_J@wQhP% z%KhXhksRz5;cFFXQaPcB1QIw*XCJWJFJZGJ4$E1;flAM)KxYOPhpj3Qmk$F;rg92^ zk?*%e%bUYbT5yh7#>cN(+851k;fE}hS@PBPB146s{=ZDXDonoeG5HB6wKv7u8Xe^! zg$=3>r(p7HO1zHsI>aEK(n7E>HB3~&%*O0&2KVIYPbxu6@#e0De3Z!ZJ=edl1fTA4 zN$<^FZC74F@X)T4Gh!zIdeMfsmRAv7(HmjEphhMF^)Y$LQ1(Rh) zcBF5&Q#fucDQ(3A1NUL) zu1qXBZyn^l6p<`AO}Wjvv;ROfHI~=ay*5Tph^S5a`59BxHMw?u$ufx)8MvOWkAs;< z^wMG0N^(CwDf8evHwO06#iPNNwJJ1oKvE7TAM&5O)BgBP@$=sUXsR$DB|reLk3qLA z4#|B`b=l49f1Lg>Ni*z{e~797GH7~}zi6jIq8$eBdluk#sGkwIn^Szfpshx#?shj~iQYjw7XL-bbfUAXdB7UUz9KO!-&s*cjOIjzp|axu0JJ5G|V*A3mTPpjl= zn_G-0DMnJr=qhD3_>@yC`OfIMIfKU>EfUN3@4!~xWAXz{|7zL}u1$Hh?|S&Tg+f~XONr2lR1b+*}mu!c00|Bw^isffnT<)S1`v+jYIV5$f8UL z_46LMWV$4O%E8o=YZrJfMe@wJ-z{n`Bd{r@?jL&x_{&TU($t=R1nY1v_QW~J`g_1F z@?y&TJGv=0#xrR74I!otb}{gUEI`Z5kiyJX?3`a~<#vU7$7IbeeL?no&}ZFuikase zgLle!oFt?e1q9kJve^V|V!+H>CXyV>qs3moseed>y`nqm`AXt3(0d&iQnp`fb8^tt zU59aYA*w4T;+C$%vx-07hsL`U`JVx#cGkWbo!*lr-H6yh4W9~h@i~xAGY9K>-Ut%E zsnN(iZohza(aG;2Q6uN4_{#n@Lv2Fdm*0Xrc$U5P^0!68Ki+^MvmcZLsCUv@=lomtn4mvyJ{3+b0etN<9C=wywP1{EX z3LHaOk@S;DZDIe=S4<=yshsQTDkZ;sUc-Mm^iv1$;cnI7%5*(+^w`5?sy!hWhx%b< zrJaLotiKgOuTvRA2LCeJ+WkW3WB_g#%FXpjN`BCYc=Pi|{}dm?3zfNPfP^pnghGes zhBejPg-_V3Ymlj9zQYJm`8s(Y%;Sy^AXarcJ&(=2Oh8Cnaz?rm>Q!(+!1s-O1+cFz zZ#$N(2VqwB3*>;NP~+&P`#yOdZsA+`9R2md3q5w;tBP@+^uxFraxFq&EVg}A=5xE{ zMr>Cr=}%1&b-u9vp6whXQ)u@I0Cz&KCNLYzhybL6eTUH$Kd8VK{4 zlKWR)*8~(#cVD^N6MH zkO?|;`^Y&@MsB6$NuVW`aFGE#BmDWuD-bArWg-m^U;bk^IOHYViqYYT+;0ySr9<#^ zHJT*jdde7StrM!N7L-Yc#pAM37YC+XDdhQ|22WT{+w1QqFI+bA`25zW@SW4el zd|ORQ*`!A;lS?4SyG$3ild+Ftv4gnaFuIzemD}&GZraVRWn5nu!9(6sJjE@GWe-BI z_-Xc1hN!`6>Do}A*;R|a`XjTS5Nxf3s_pAnljXTrTzsGfc`-`Ydv95FCz7R%Mrane z^8L;Od5lOBsVy_SPV33FzO0$)XW{az=)7K5-Op_~Kb~%*in4?w&hii#D8u6A!sT}+ z$oC)v!IXWU zPDw+S61u#Uy9zC1@J$|+fWuQBw>Ew0*Zc2#TP|&o*~BpD+CY0|Z3}owEoBj{6$Z zreh7&Z4wr!7kwAsWPCzBkedFY;TrZwNxJ&?jTfh-c2VIIo-na|Mww(-{!1S!|66A5 zhGQ&rmY5*1`3PIakS4*|?QDBLW*NtaD(kgIo{NXEhRDM<$VuCgk-zVcU$1q}2Haru zbB(Ah^XC(=w)Od!>&>1$4-a6w2_GguPmw8a^mnnAo+eT5AIgOizdg}w&Cdft4Qfne z6ww-=ibsDNA;KzuTDo|9EbOI+Ry<*oJbu^=BJnA%Vry1DEN?8}Fa_1-C07GfxPJw! zG9hB^%3D8{IfSGvelsu#?gfPPKnIdDb~xX!65e%108eIUG$xe5TZ6m!-0!PX;YPm= z8C6af9_uqCFpm%6(ghIa?Pk`@e|aPQ50v z39{)tw03PIN}j$}$t|w$m;{1lKV!#dR>`l6#wnIj?duqfvJ1OcX|wzWb*I%vr3q|# z1AoJA&iCjfWT2q5TS;nE&+@PN7{ZaM7dm<4Ue{mTus*$`6m-&8Ge776_ zAI7}~--!Ck){E4;&v{nCEVEi`ezy-0a2&9V}|`^-KwqzNCPl(VBvl)Iy2h~vdEZqC-{ z0$kG0Y}_C-ZD+|SyPJGo_z{(xqJIP5#ltay_U8Dd)92r1T`3FV?#j1=MfJ?N-gD+r zIe)PjSdS$OOaprc>It;m7zXDhZSC?FiqWSaliWeMW7-m1X()Z19VY{^>TLxi{dik+ z`@P+hl}e)&Kyq-XZyn$zV)=B?(_2X4_FHrplhskP_ORe+v29M9RZE-&cnQx$#xcK* zY9?brIA+#eS~svXdrl%Q&Td;he9?AKh6p$vxqmuy@^I(!xUTLvqv5vcpRelN9jYva z{QS3=p4m)rQ1=aVL`Bf#WXW}u0O+_skjH&ZmvjEg&yYyhasFgf^=5nw1&Hd_Q&Uwp zoJ;juU2$D;C3?SQ(r@9ccHykf(KibdLOcUkhLrELOtzr0c;Y^`{rbzS&!3GZGT*Vu z^303nf6Amozt>#v&kMD}jLOcl*-bk(m-5C~#)Fz8-7GP@bjmNnC=6}A9}&;vgotU` zyoVHpLT^4TurygDE|0561tEuf4I|w%t8ntr!e)!#cQX;Np^_6UwTfo{)0Y=kk^Z;U zyc&E+`VNNdok9T9lWg=~g*v9A{LWxh`aWjog{{6Vyv@P}By(6T!i8?|I;q--VNG%T z#7j`m3|kkT8C+r_`Am^V>#=(h z!0;cu{%M+Heo|USTA?ml^6h;Y(v&wi6U+`O!s^Y$Wc(+rly&p{H5lR|R+|3c1vO9~ zz6gPeLoVF6#E-?izb*ScXJlH$yD_M&UioNAZZYydd{ z%VbF~>xmchr1*OCi!!RY>z-Q$KqZ>b+qEIWVQo=XAdZ*|2wB)AhbHKgjpmY=DSA`R zl@+FCt|wWJ{(UX<8Q_8S11^qMJl|N)t+G~;f-0ZwTu2-3sDPTe9<{nUXjQzd;0`+^ zh9LIWQ?3983*RU)!GzCU-GRP~V-XtEygdKsV3EfFxp)TLVsr5*^BuRJmGuNeSGe-y zW>q}CCHr{{m&nUz*aVXBe-=9Po1++V&YoK}q3Svhwq4`WfBoSk=-U}`x-6DA6T(xp zwWzRqJP8w5nVcNylw! zIBw!NwSq6>PMRy>TW}xI-I8)>kQ0DHv-+DTZzwtg#*mb9B)NHFaE&H&Ls}nsxN&G! zRQs-$ENs?sHO#6@N;f!_^Y3%l>Rej8>0m50vNMak+B~czyJA4~ z$or)$s$GxAGgRedlUv^Epn(F|`C4xu&b>v9!=b48^6*&9s%wGLi1)|zfaTQzT=xyf z^5SbI{=Mi&UDHA{k@eRVrjDO&%nEsI^ys&iTf+LGHcM(;+AE{pVwYxV-T!LABadg=_(Q|uq z-l?FHdAY*&RO|{PdMUK2q9bM>V-1fJ89g-^K8ax7?}<;5O*>#m&cxkQ#4M)yDJ#-c zWb$kV=#&=4k7bURGi?T6VdNla8M1$|euuhk@>-{Qps3eMXykEH=xaxt4+J6n4XiArJpzILmrUmeqYXIRCB=6fqU-n?S7dXIIoet*kNR`*I zffD5sEw>kcFcjn!)-k)lzCRO?HZ&0VJuBpO!Ee4R-4;hbxbYi11=F@$9C{%Z7-Z5h z^EBe$`)Z+eSDRxT5-Zf7OXbt{&F6f>=B@4!5*3ok7 zynEl?d}DcL7vpc|x@-9eQhwHY{~&UNTSw_wp}xq(pd7EG^Rp^)HWcJ140LmT`g2^3R^M&2Y>3g)}fseXs}kxUAlQ=37Co!aog4A>%c6T(}Cjn=ttv8St#sd#@ymt4Z-E6SFiJ#77jOB{H&2QkfSURUX#axxI-cR<7zN|?5Gn`=V_DsR2 zC|RpKt^gE2->hnZZnG#82m>8<1;wrq3Xv>YJ`4rGz?0rXo09MPHd96nCbN#aok~MR zdq;{ZrT!Mjv@x7{xq}?RN|4Gy*wpr~OL#DM?Lc2g?CQSXonb-)7u@x+CbhXi4>vj* zlYf4fOXbQ6X(#~KOx;Np^xrX{?;c}jvz$!GSE7)fV@zDK6}v059EsG=JU2L-`F?L% z`S(ui{dCKn&evtiPx6iNg4^Ian(0PX`ha9(b%Q6oA0M^n(&PqHCA3ntw=f8lkZGmF zpOlG9Y4NYLXfRUW_qKHtnmQq?!x(m`HJNtEG#?~cK&EF;F2<6hz-G0!)IjwV{~ibO z&;HJLQ>eZSN(9xu6^-E9II6es<39S;$i^hxbHv=WCLN-ab&CmR+ z$%%yhKpj4nwXCFE$4Nftu+0-FvjCM;bB9+y!G%m*C^X$U`mQPe&D>39?Lq<(!U{$BezrXScX#FXb_lAJbn9 zVDRO(;X;7hLBH+AHjXt!`)MtsCgll32}DAze9m#b<0DX~{@69ssiTlQg+WQ-;C~-l z<9W_^84=&yTFNKr6ZfHV7wbZ@kDoZ_wNo~lgu_OBX+8#lp?hr`PPHOJi zT=+eZ>bR28tcse$)N+C2{y6t!PILQopR%%Aa^D_Tw~IkQ5B0Y}D*{&24$SKe7QNJDzCkZs4$gV?!iOYRt>eNddV=}u%B`KPnsBu4ABrVQ7O;oE zk{Qz$AdSz*P2Yt2{3zvU*RPiD!_A@{e}xeM@1cF-o!HRMTi1^aNmB*zJ4c$=x7!WY zEkpO%`H%7s2N`mV&#m5rNoz@q_#O59z&avrHxb5=BjeeY3~d%6$D~h|`Kxf{+e>5) zo%cC};P*l%Fv1}mA2#9!*ZyQNDrlGQRKE{>lIMC{=^E~u((qo>LJC|yIYc-J5_xdP zx#nroe)~&}pgsMmoe%p;#MP(Y)8}UgOsFrpO*~ad);r=SqSQvEqw|lXw z%7cmfzuKRXWX3|4x<3U}olj}mRo$-$$`hk0yV9TIw4x&mx$U*8@AKy#^v||%VyIK$ zvcmghncq%(-sauGr%h@O-s?ZYLVwf+WBMwmqfdG1N!FM0N5W=V)?IG*&xF8?{XrX1 zS-k5X75y^x5$UBTG*)mS^ygLA9nEagZs*Ibv@&hMazP)AlhA z|HaO-<~W_t=pAZGg@$RstiW6&`OxxG@^)PQ20$2fe!kBAg@0~T_>Cb7!y^-{NCw1(OKXxVLEA-7ifjQ_O zmnAr4U$*@yg&6RH=2U(3P5;N;K|O2yS0~wmJ2mZQ2#jAIw@Q2xND^2UoJ8k)D$~~0 zAQ*cn-3>e3?3cuWSDwrd5286DDZ4y}TO@lib%q~ZN=ryFA zlo>HKmvBXPa_qBeOh0xcMnu>Mq95;S5n(~w-Fx!W=%iMb4VZ(be*4}663)G)C=6Ha zUeZ`LNLBOUUwfG7j7#F5#SbcLG(>S@acYb2s=wTmgPo=<|E#`A5?Nb|F>kk>CLZ@2 zoTxGScL!ye?_RKj(hjuBW5N8l4C({I%FMV<Xr%>@T;p6U_&N_Aq0 zsKyZ3;?=-`SWZF^M25*a6d1nH9w{t&#RK4=hct)1Zr)i?x#>hV3-SIj_)G;q5?$zu z-1-IiS=hP_xS7nl)6`V_&DPMz&!2R)wJ6}3R&Hw2m*VTxCX=|v`7|?c?Ct0#%O1;{ z>&*0uZz}+!q3?_@0b#yn7!a3rlauzvFTahA%ZcAPTe-Xkk(s)ldhomWAnhx@UzM#i ze6Hv(1w=P{a7g4>dctn*qsx^mL6Uh2)$Oe$CX?Z&bKPW*sIEt+uySdd(%C!QEr}Od zu0rXBp_D^w%1L5=`7rW^tJpot%hl5~_+`;7V?F{`DR*UehUY#hvqc@ho9qtz?=wO@ z10V zcV)3}t1801hGl7`VVw6v8v3(tGi_rmKjialunWGp{2-WBHRexA8mw;DXDxaWe77&0!z($=SX?+2e_%2)Kxy z?ChkY=gu)~B%A0ovCNU@tl8$uyebhbN^$Qv;A#9*9ZFgvd0}!}d*ettapKd9F0K1n zwGmI=4`wsIKf%m}I4jK`&){M`%fN+?(Um(c-mwH1w&t(zKjptdSIhq7pgCiWnJgui z^$T%YhQ0kfMu!LHfxSAUyz&S zeB6TdD1T*aBlwBIp7Gh%5!G;pN_{)nsbQxf3M-SJtux^Q*`m+HS z`|6^V(+2&g#zL3HTzmEB^)J1WT;gW?34;mt zXDlI>cvRfz&}IL_alMD?6SJ~V4LP*lTUh1RTJ1Nz^(eDwXR9u~(Zlc>*=F6N=kJD@ zims|Pc8(uN-s;IdWY=~-ktda);Ld7sF_c7;ds4}}1$3yG3i>2lM7D|}p^S_8Re}DA zlwFb4(JJ^<*%_ulA}U4`;M}DfB4a^H#~qO)TLGO+1>;$sOq zL<_CK?ry{dR#a{Z$(g7`>aEUAeq(4Fc{aHu@lH{>2A&mj^1!MO=Rjh~h$(!cC25?} zYc36}tUoD~(jeM~LMGW!Y1yUvesN>nsa{c>8+5TF!s_{SO{WRC3^r^ z+~dSJAesrLMAJ9V?IHq_*a?9Cbzs>XZap_KbOdwQI-OFC+~zS0!Toh~H^ufS$&RQj zDfE?@*jEyglHmKG_xaOojJrtJ=*a-MnqTNkG1t{x-SW7xv+P?bH#UIs zp&v;&*^{v!v+2k?W7PX{`2);Lw(4$ zz2(Nb>G zV~DuCd1md(9x|jUM0f8KvR?Y-b}5H+qAo$}HshObs545XNO!Tz);OM=VuT zwkXO;pphCN{_4mFIDhU6x_n zbA&f^Atv%gG2a>hF^&5Qq^`Gt=i?_pGmu|Qz?ph9rdT=T`*^f%wy92?TpcoitB*? zf&8W9P=?{G#Z~pxe+?4P_OU{#-owwDUguoo5b_!CT^1xy{AO?wXm?YK=Rd3NTL_&1 z8GuKn%=E62JSm3vHO`NzM9DPvsxSgIr=FA%SFF;{mdNI)n+G$&7-E0eWCSw}qDdV9 z+F_p1$-{i(tyWKowXMr?AM^_zTnbGNm*A#~4bie9SD|R-jyP4`U^6Hw;nz5C4$I#Z zST-UGo9LqjGUUmu|N772=pHWs&A9F-OPNr&DQjGnfLiwcO)PM`A~J+Dc}~>dD9x@+ z?2i`3F20Sh^&Q!kd*QbGiGuI~0K2hw-t9w;0gL`j(-_$cf+;MS*aEn`Nn|d$DNzsE zP^_{yw*N|Is~#tjU$2}$!c0r;^u=4*&RmH-rcA{2m2t!&Zni({beuL;Bxs|qNy#l# z7g}q?R<0lOj=Q=u7y*9jL-0|~5g2aKGq|HQj=mc>QC5HRE;WolY2gvW>8yBBeSt*c zfulXKRkK;@!79fHv~2pBMf#^++H6jh3W{+cE^h&h?JkN6|7TSGa_YEdJDWHB4lj75 zZO~BFS2O3Ti!q>l?QVu&2kCuqyG`Zsf%Jsp8A+n~(s=M~oxZvndf`r&7+1_dl3Mr| zbGO_2N)0D=sN*>I`(`zQ*gl&6O*my#_V@VII+Uw?56w;lJgEv6(yJRvF z$C;vT?saI|bi-%Ie1MKm*Yvzxjd~MMPFQ#3mk(8y1J2$YA`g{9EM09>mjZ@=SDbgx zqmLAzU%w?UpZc{)@moIMu5b)LU}v)!&28{HKxe0*!G3%?vn2WmO=1Yc>U_i1DJ^*!5yRtW z!Rlqe^nON?)3*on^$bFBww^jCGK!w_hG$1s@UYrfFC0-yFPqLEbk%Sl9X-Bdh?vv^ zRuEj7Ts)-KYQJq zb-CXAsP0EJWg=*tGC{06XY+rNbrx<>fN{1a1Oy2cq(fQ+3CW=bi;z-L8iwxf9zsAG zL1`Ei1nClx8XBZ#=%E{iZf1yy%kHy#pSySei|_lLbKdtfzU;^5ZIFXZ14S%LN$=g|({_?LIVprX4~cR6dm2+r zzYUq0OaZ)oQ|xiC_tRM6K1GTOWxzCaHEK}NkWKL|i6sQh!Qpu1f2?)SE#e0UQE5m_ zCp9p5zTvC|7*&XzUcjKL79QLSdr1%Wyvv6lUP36&Ps#4AJlh;`HrV@1sJ633X(N~- z%Ic_v(*XirS;g&!Lv|89)(zLn{ZQAO^zym~8zKyS?pRYN#sRje8F$ILEnCSBZ&kfF z#fR^cKWl$49S~5(YjGGX=smUhVLMaP7&;wKY7$Gma$?T|#7S}SbaJlb>oFTj3m?Q1y45CB~H3gr;u*#UA|{|e>UZe93o^lhqVQLzVjvr#riorr`JdHy6 zpbWeSEAU;=DsiY*A%1d^j!O=7|L%exc8x4zYsInuiinwRdkd85{Rcy z@5jVAg7%u3D|mQ-+0$msiRmb9w%SyXY{8pe`Do|Lz0mSiOrAlBVLKNkNg#PwmmHFdGsO#ew`%pU@OSP3XQz`D7VhwM&I5Kk1 zl+Dd-OsX%7CQ$sLO(a9c8iiD2hhO|7H}~>6 z{hQ{RHa6bH|0-+q@mP@HRIbbVl;IhhaJKfJYr_f#JQzte+Y)rnDAo43B9JTO0O@tA z3y1~w{f}(m_TgXZy&?@hJ!{0{q)q=Nq#pTt9VbxpPWmYAE!E~YIxWs(uwN^V&nzo1R^Wrv&S@57x>EDW;?n__WulR*H&M=) z^*XpjZ;{!fdZJpdqz2t*v<7>0qRyQ91_nD!caQYGCOGcT>AjM+i#afi*AFl`P>kaW zfz9SBtW4GwnoJC(Qj1;MI%_5xsa2Hqw6R|^XvP|tJO@{`Rpo^KCXs2NPpF`+eD{!7 zD#VIOM0?qr2_dT;{;1N(c)qQFu>vk`6sh#nEe(PRbS(EAkv*kk;Z?4)VuLZXgnT~h zRRWPRaI)!`*mm=c)E$h_2`SH?|Ar039$1orI`7ZpOE^7vu%(ji-6J1^9c-!0Ko z?>Sis{qNAc#11e1-mw0E2D+|caA z!^c7=$pGMYbV%Z89Xxo57Cfmh=+;$kLQ1eTR6ZbCgS$wzAmGM&a>x603RU-feULjT zC4ZhN?sX-7o7EAo2a4Ojh$C=Oo`5e1ZetXU5MM4Ue)-oz>E3Nxx+HDP5yez_QykNW z?p$dYU78Nv&GD{PBn$FlEXJ052luNns0nR)J}aiWwC?lIm3MAr-pz#2j@vsQD%?|M zF^i>!f%h8=@3~bjuOb7E=`m}-3T5*PZAY|rhc|QR0*xQq`;oX9j>bc@DWu4@uFkG_ ze39Q!L0 znshE5#T4WJOAuinqIJwih!Ft8GOp=AUFx@Ht_&QYgNL$Rz`Gn!_@0ROfBK|#z2Ll{%!Jf zlXw1j#M1sNf4k`bIXQdf1z3g2PbSYvDRv>ng0*(gS4pp>2C{^|e>c>^Pb=>INpGuR zph8?w&c8Sk{##xga(41WN@~gv?lBAXA~kiWtDlHIq?;(HsgmhEfBg9^wHp50B1Qo` z%>ujoS}@GoG1HT$TPnt>Qqnor2~A|-)ccSU%n(qX5cak0ar}rKJV-avQ-mecTg(UO z&FGG48O=YO9@uu)L07Ynzhr|LnqCF`GYbF#$ z6YUi|(L`N0?!7fPT{eSBOEr>+>{4^R%RifSEH2n#op~!Ks{)jyCpdShDt%HwoiyhC zUcK;ipbSX8Q=#x1E8%>$$E@{}AUydm5s-LsF3~X5RQrKO2#1anbDQ&t-m`b5h!K0} zHySIq5^EWLE#`{ItITdS+8v1WJrydLNYXX}V-OjFvaSgP*n(8uKFuL1-eb`)9w0jHaGa++o@W&P~!$UwMi|gth%qtvQ9% z|JZySb@bivE#Boc5sf)LkZVU)EiPT7mcQgjk{kj=&*XbKw8*|8?2txB<$P{!o8%SwXP2B|C!dTBjvg$nRhM9}S=oY1!kh=!>Md zW~M=qzUPEhw%qM&b|UqrWWml|Jk|TC#LIF$oApT(_Py0rIq!(Wjg9Kw!bhz)T)zQLCJzS8f==LRlk<#B(WEZH(_^b1_NNA-E+FU-TQ=3Co zWp;?>EJvji!OBY*<)?al`XV5hlhope1DV%p&ehkSla)_hBdcS=cP?HT%yjw#>r5|< z5@cT}D*$q>55VI?Ov791CY>WO2}xnV2G*4gZmSUE6BVENP)6Q=61LNu#GO7Ny*|$# zsNx=oQ+L@7s1{E6)9|Fw1+1uZ)b=M!Rdl_o?2mn4x>khQj5e8#+eU1z zo7X)_*aZ*R<4et@7RR&CjAisw_ubb^+9eIsYoE*;+FY9j)W0^Pf@3lin?o$(No1We z54+4@xK&?#Pgw$`{~WN2%$C=ckFh_;v&VTo7uWmR#X;va#!2u@F>qw(+*9i-g)A~d ze_C}Z$^PqNu_mn2H>C5pY^y{uFz>n*Ut<&zxv3sG+O4;V>U7sHo2k=r3wS4&Lz1#1 ze_qibP;l>CAuB0uNRDbGhuVC{K%+y=OSk7E9BLnvor#^+y%ggqabn5fkL#WHQVp3b zGgOZqq>~MgpZ~TMik+UL6(Uj21jEx4t|zMipw37Jua5!>G}DgwV_Tgd9;l@W_qLel zy;QhD_I87gV1Vd0=#gkXeA;Q9+hw-KwoZ2mNmFxcF7$yXofWIW)Tq6>`%k+hbqGXo zw)hDS3bzWn&MV6j&*%|M7Jno7N_yG<=GJWmo3DZ%d54^E4B*k2&SXO z6?mQN+SYctskMQ9r-gzWtZ}#(+kA=wUTqe(P9b&>w^IhuNN-m%>j^b3E6X_7c515X zhJ;;nIr!y<3s&iOxt{icAMa+Jp=lNWyUX45ot)WDsEr#kz@5FjQ=wc@lO5!zv#FIQFX$d!8H+CLSs0oRFJC98gK#>R;unT?FRLw5dmP>@kB70j@X z-*Lt6%-NUo4bsvwXi6KmQJ=O00KzUSHzUS{`utG<4GUK<5+dH>pi z#`cGGyb`x9{)-K$p*H;i`s!9|GJKi>vREmqT`g8b{~G9ElDq+856kG3%Q%q`5*@_h z^5nni9FBw%umaIt({`fCeq}w4wSj{-QU)QD!<@-nw_{>_VBpfYsGG})+S1ooW_*iVcwSH!i4L3cQ<9&Hyr1y7& zxne*Eq|@|{p0da%6VQj2@Ih+~6qYh*W1r zr72xi>U3fN>H4SqDRn74A6KMzDgp-k;M|DaQqbR^haGnI6c9&FMN2X44nV-=>K{Mw z-K043m+hr?D-+2Dma>@fh(x;9Yy}SO6kS2LubyZ=b5S^<>J7NWEE5_lk`v_T(e)(n z@HYg@NaT1`m&f(ncrC8oFRAiO*5(koN@8W$FzDx9i3Fdui{Q``afRw|nF7jy9h2rf zucV80Dgqby`hV4c{`1CPK-|v4=C|5?P4@aQTNS1m>uPFM#Zq{wblGR)Qtr{65gYap zt@(qYmn$YXH`w*t4R@yHJHj{dX|~gq1E(!KX1@kdp_Rx&kbAnI(-t;8lcbuO;N$&_ zl9xWbS`|x4kIP)nx(BF2T>o(235n5N@Qk4d44v0U))qIWWTtY*uD&6|+gMun$i;DQ z&bH4Tf_`+>Ht;oI0C+;PI;!9YZu0z(_0ecLeaxgyNMU*0ZDn-p!^ODjl7dlStWU_^ zyYf5~T;u7@bK1eHFHrm0F!yY&%GU|f+Iz6id{7$?v13bVErCk~ zmZy2vJdPC$Znj(1NLDT(Goum^CPt*nyRmLlV`&0Tm6obFkM!3ouw$I5lPyS zo;I*R^&oCAt`hF;=?C)rxw3oQ^mt^kvHo}1yMV|89%R9I%OxvBoVRwO0Y6$EBVrqB=#NRu)l8pSN%388gt0PNGk>Xx zt@eSA%M-^=ey8g6$WxvSYTp*AnWPcC%4K-Q3X^Ou%m^+tMp0EFk{-P~Ny|t*hZ3N^ zF=Y6c_@C9}OnsbWJgmozeByX)ahWL|1<8Zvwbthnbgr!=Z<=-D(0#$Xjbcg0v^fVxM^Izc+?2F>60$X z`5Hk@76WfTY?>#-V~kw!+mN;!RNXR8x!qmqbw81#>sUnbGV^--oyY(3Ns$SrP!$U~ z;noS4W^ZGhTB8}P!r#0?*5{?_tUg}k$I{we0p+J&Z4 zHF&9INA<@DXwHClKk8~~&b3-*XhZ%3t>TUMiaP%14bC;#ngf6P>KpCHpZ%a#9kmPo zdOd)7)jE_xyD||iqjh7oP0JO4to~H;&HL1!f+MwYb z+j6PYd7H?u(0atEb!tRyv2q&QY_#siQ3k6idx+Q126WCo%q&Jd; zWTJ>dePIQP5J~{U|w$p*bqoO0-_wrr!&``O|O`o=wrMvm7e+%A0mu#y(!J=9S+Fs)~e126sNY|L@T0}1cg(Y zh!eBlXcvLEBvfoI3Z{&w|0M142c=B|-}>^MB>d0|JwJQ0Q(deD7o>vCLg@HNXT07R zja$w3pch6Hp&L19;QVU%px^euQNiWqq`# z_HYVoSy5$tZ=NjZVwvQ1JA%2XYs{t0Ka+~FsJbCMK{&7oG5#ni2uaz>D}tJg)%P&` z_J$G_CONb*X{e0->>ys}Gi!N+Niv0p?5b8&2qZuK!upBL6Dx{*;gn=7=x_g5Kd6;F zG*dHhYja&qISuIrtd`=l-VY9OK(^m?;~1ch?`(^7s>|U5oc6u?=BC_+w0e-A-l}x+ z<7ml!qO9tIFLXITk7z;#v7$WxP^}O3b7kGI06XkNMxlQNLA&Q<3*j^VO{=7N)$Wi}~*>r_Pj~E>3@$ z)=2x^T--F^veKndsE&%lXxB)6N~kGZO|vwz-?fs)P$P51HZO=0u|6wE-61}Vpiqfj zs(VparMBb+^VQ`Ry0PTgID4`z^V3@H{_trHk8nt^Q{U35#Gat38**lE3x2SOLH>Rt#b5ei*srFQ~6dab$X?UURk;nXUFW=jvl4d^mE;-5~Uvmhu zm?dbwBhM#DH{Ct)$3q(ag65H51;yI$MSrDRLqQeAKk-AY@@L|A96EJiF-hk;ge;LO zv}YG~Ku3j(`fH+IF_zj&gsb~Oi#In*coO}$-l&H{OPPJae4XAn`v01qjw* zop{U$vOT|+58;vKy^>5^T?sKo(o-_A=@=0dj%BreY&)eXcif|q&$bjJYC3-C{G*8= zR`k!#ib$Y@L2B*!))QgRM4dU&Dji>@BPgzwzHLD;F<`uI-xFQ6ciPysVG=%>hSTg> z4&ULZX_>2cqJqL~*I~sORUqlY$rn{YBPp|9y&0)$%qHt~I?<Un39*`XJhGx{Oz8z!}RKlewP8xXjW?%#9gmqdkH=nq9l9 za07@vM#ADN{Ks`X>iZAPcgWeQ1g1q1O*}s1?%`Z;amPBlKS| zEr~=)(Y&S8gSGaJw&Za^!KEqZc9W^2v;kCB`|)fDQu|L}$PUr6I7 zUukGVZMglE-+7)|wa3T^MW38M8#sX8a@)2kB(IOIx?Nk_Zs+TPVbF!OS3r~iZ_4Ok zV}mx~jr87c^HXPT>dJ&(h~c8ZRb8}A6+wL;VlT&&It`M&m&0uJwOEdTK4#Utt5Jx# zzd4vt$K5U8k6UR}XD_UCKf|M?b$IL{_>-CsOijjJgZc>ecW`{3>r2@a+DFY$sqU|cF+Imw@k^JEnlGEy#~LlJir%@AW@|; zPvJ9U5bdNY)u7k0ZV1wyz^dJ92&qpoS53DP^o6C*KU*c`0h40N)ZN5Un5(t?U&+`$ z7bl~Eke}h5%eKFySSniFr%T@L5qj6C50QIQF4DfTtbP;HR62?Wng?Oz)l1 zMz{_g8Z-EfB9U308kZRo{~90g#@4|A+$v*E7S;&a@HY6>N3P5otBoar5r(ICi15El^?ka^-hqZs%o zv|W+hEEm60#Jgsx;Cpk~zvO#E0J+nVO~43?3%leoD=PYgh>Ek|CtcAwY%=i$VEOOxWV5cC|9)nCyhCry+}rc3=9hQsr>^s zm(#|(HDA!CA z6PcjUOj@n`n#;{!D96l1+_N@j>OcGjt@&ZPy&SZr7UIA9w?2=2Wz>+FvH91hmzTTZ z_MCv}pL`U_-7c!?AI5^mjiH_~bDj&11+^tAW%OKK&C06JiMCS3KAWUZC;W(^;!`x+ zSJ2)V=3sRMq;$st;;SUzn$>r5noa&1t3@ZOjE}K~3qk+YN+18TK$_Zu%+IgK-hO~p z?UwJ#)^yqpbJD8ZHNW2w0}uRR>sO4=GAJh9-%xekQ*png@ARl8X_DHF*gI#LR7BC)&pjO3~+Ns!*hrCKV*~SdYn?I2(!m}C(Wx+i+W<2R6ed7hO%}g zRFygxT^aW+9@vTji$|Fkuh zj07wHmVxhp7Aq!#KQ)~D=qZyNR9OG2sf5JdSIXvEG$L!Ya)w%@hMWYl$H>{pUKVg{ zHW3mfM?r`CZ;Fcq^Y;7Rzqs<@O}gP?Q__Ih3eKVAw1A`p^4pe4>$FmDy#x_M|HzZO zun%^WM=n|jL`_I6w#55YN*6rmkXhBnle@E(4DweAQbPYk@7`BWc&-eekR{~1Nj?i& zAzjZ~nQoSF@~H4+j{MmCA~}&c62km}5erkn56LKA<9%*?moI#bVPugE-jMXpI9%}R zvUo^+yfhJJ7tw}8!Q0VgF8HmMW%rv6xtnbBfmPYc7{Aj(M! z32$qxencm9p&>FUh*Y`9c9v^3Upn&1vs!E?Y|Js?KW|D0czE#Ey++V=$@0=%>DT23 zPwff`$#-(v$jMF@hqMG&i>3CfPJ(!vFRG&36;2{2!*gmVr)1jy1_C^z)G7!)iR6%P z?op$v63aM*NZ)6>`A4SPjY!+_DF5;Ji{gj4Re%ip#O0$w3g_};N8+yT_wZSGj>64! z9#;F9XBD#cLcHff7CNIK9kCb3-DS;z>BhI_%ZmIwh2QwUsAny#x!9+P9@t|ZtIhD6 z+;6t@{8Usw$*2G-fdTbb6CO+ljs@%_ClyNq!2O0HM`IWZAF3W0rVO$PfH-7f2E=Z> zsC16@NB#~#mOeNKY+|(&Py&sCzt;~n(b|JEPe#)%Y7?vU!Y3GznW~ri@*Sc`nWd6` z1<#M}0RS0zx@?c!biD|&ulJ6v$e zf3CR1KW)ii^=m?Z*}I|j z`|x(txJk;=E5Z{$DoDytGHxLFPian2jHErvwVH;22AX{zg4V_>&)=lvLd4XnXAHEQ zJc`1mK_yPFno%2d*sLANe> z@;X%IaZa9n#BIG3W7mC(o>Kt3_3>;iJlqW1)$QpY;hgRlU6*FWAjYPwHPs49%7oO1g+kR=Qv@6kNkDk^<#h0g1 zQK>ewv{-BX~1!Vmvc2kS7rroVfX>SHhU-C zoO!2yj>*s*E{s)3{Qt9F{=Wqz4s6%KFZeLk18D`yLtVzbB7SNArcQfNY568_RyO2E zwnMXvJqcR#@myhv%uI5a9R0fJBk9*O3ubIG8$JT_><=u0w@l+dll8{|$_?*t3U=)` zHk|R_9gy}ph~C-SP=*t*F_Te&d-z)odIln*$DDcPaPmb@`P*x|jTRo*9VDU_Tz;SZ zi5?zVCQ2@8$8y-0WduH8jGU16x#X9_swG(ztF$PgK|z?r0aJ?8?|XyUb>{+08LKQG za^BV}`pxs&kfvcM1efOCN|*KyH|&+oGjrct#*uC&>B0hibbo}_w$BWJllcwgJWk`f z`Yk~~T617P1~;O%gnZFEd6jFCz&2;4cAm!OdgJfayYGbUtxG_UZi$pPY{Og2SIjD{ zQdU%dCJKfXR0zWOfC%l=SNaeCalT7Bpci#HzT{25w$@Wp+`IQy-cacIzm30_ZbtJY z$eb=gC@H|U=A3HhBK1l9n|@(io1*LLY>pe&ku-pJ4s;GF+2!vM^1K>Io_3UzI-|%y z&iOkxP`|GT?EDJF+d!GOp@q-pe|ori+-AUIGGX3jgFo7J8J4ln>!hCyO*`!8wEzC~u%}Mt&V2C<>v~=L z4H@Jh_oZ=~(NYtNBqlDd1kvj_+IsLu;+-%V9ZF=1w<-qY4edAc2@B+n^ zjMLh%{a$&3AWRE;>-KOz>WrxP7^U-sHLtS%Vom*_5Di)|l& z^oPumIPl_W&1G&cpY8-N@X*g}X1o(cuxIq|R;*E9On(Q1jY&ggvFAch1P?KXY=a~A zVZWR7x&#|aZNQhG^6}1-977P36Cx}eGa$Vfa^MI$0^dEqhYLR=!k<0#ugDv2*lcNK zQgRG|W5D3sIGN)z%y$_#1Pavhs9@kUqE*OC7D$ zxY$hgA0;FpkJHabc(QrNHRg?QE2HR|+##)dJt9K5b4Qs$o8UA4Ck3$*U4n*|kS`Ge_w5|uHt8a>M zJx)w*D}#;2F)QZ%2Kh{rtORliqb(%*v~YqmGQB1We~k(5=CkHTfZ8Jnh0^PbDs4K` z4aeJOV#X)RXXj_ujuIu>AO2{85+db)Z98$WZ?eetU%i5dGzDD2eWtUVGycZ*iQUtF zq^yVf9B%<$H?!d|=o-jdvt~!cxVk@5PAP2^Bd<0Tm;JY&YmEk5bTsS5^S*Z<)yE=;Bjc!-Z(I&c-!(XBXhO!A>-}(3!3kP=Aa-T&uT zM6ZQdB{FrH9)uyFj({-ujkAHA4#j;FYl;`zd0TKoBX8JEgx z-)p*6(NhYI>vt)qdC;@yL+0Sy`98EI2N}%u{hCxu--aD}Ko7ZQft;_aXZ_==)k*#+ zgckLoV9GgXQjkUX9Y=;Wg5Up!KkhBDpEuPPilrU@`0bL`qEvyT5Ek*4l@D&=33Fc& z^xLY3bLu~C^28x!KV;Ng8KAER1_=-wSiQ0{1rV;6jJ7#eF9ZbK`Tj~^Ck0|?jLUV| z=2~!;B==%{wg%9?dxyGr^@k-0Hals5bnFPBC@FIoX0j98HMr_W?D>L#ZHXWLpq)r; zy&)fNo&*qO4~A8yI79yKKulzhf7#CD_|A}l*G^zH{2fXi0Y#J6=q%2UaxVt8bJf1z zxpZUMtH!8{tB!wl1OZW$DrV$7h+F-e-Ae@N(6aZN37pj9aZNL4k(Gk(mr~-|>2Gm0 za*pIq3ElC1vHNuH&KuB>wRPD{io&naXY=#d&kHscEba6=6DoBfh zk>Ajq22i~iuy3$gGo7??M)s|gCS5`Kn?hc4X;(tFaieJE3Yoqt#Rc{5@mx}%-=bd6SFLL@CRt9f3!M7US}BZ$-1fS%%8?oAAHN% zE8OJnIy?Vh9#mrS(7*F)N3o!Fwq(c&Hncy9O#faPEWQwGNs~r)Kvn+D1byv~K(ymf zY3Nqr6A^dJD0s3TA4ntHoW{FHL#yA;qU>_LmnD%z6`izjK@1`*s>wQ_f9W33b){Y* zMK26}P_2l~HlB*yhw>rDIY-<=Z|4PPX#)0z<=V{jGi zFSdTJ+c<2gc-D{f_bEdC&j zIY)4w)vOI&==@Ot4;dMhp0$V&6C5zfaQ$IdIYa#|i@Src(G(~1?2tO|%%m}6zIY8l>? ztmWKFDDe)gRbcxIjnBbQQ^B`G&{-v`039a{q6sD3=#;_g=o_UYdv`*)Ln@lks9*(V z;f3!@-CQVkgDTqS)GMUETVFbisW3ei43y@hg>^Nh?cXo2!rxT^sRUIH%{bX-JvWTf zT49npg+XRYHHW?$6T-gt6E+ugQ;_a)bWe6 zW@)(0uqdu{pO+qegw`z1fog6Z+8&0ZMk-i`s*Kc~NLi~ty9eZXccrBW1i1VT{Uj|r zC@b&y^{%E(u=hsMUl*ce83(E5drh@8TN`Tf784v_xGFAt*`4|OU@{e-;yiyvT^0)b zeIDS%O2Q7E5cVV3iK&(||D&tKIXjx8u31;{W~=AUnq!i|Oypv#L>rNvtW+Bl%L61` z+SQ*XpXrMTUBFxOXYSb)1wj&>FIUaVZKo*!@_}C?Bu9^}<41D-6hsyfkH>op{~mIn z_@{*)otpDcr5*m6s$aIT9OStl2|B-1fQ@se9N4h=`6{h$xSce{7Y84@r5u!9f9Ns1cbt zUzHF_9S^4WO{b~=S34>alKzz4C+7kEA_!OVVORmv;`OH7!K9SoH!{{;c}>B)5TZ?A z(g-&Fw%nMm`Mm<7BjD9TGQ>s9km*dc+ijnEDds`&EUo%i6|L+7dBAUGS>$8?Oj{1E zx~u6|?8MR^7>DI^efiwX{9x6U?lE5*p>y~1&KrHMoab=uheTVAWfvX-ilUcRsjt#7 z0lYMttm4J|0t8^ReZ20$EHtF!gG8jmyT_Jk526%8dTHkjt;I!h-f*oq+b+s5*YlrG zPJXzX)1VE6n&)%09eCQQ_T{4PmYaTB@cc9ole;Jz?Qab9sz+$MT|V)!{}8&ohXz9yI^8cZQYP%m^S+p{mvST1C7cO94y9jY0Sba>id{!eh+%oZ$kXp&+pJ~ zm?Bx91f6!VLP=UkLJ?!knc=^SRHaIe)5vNI!}-RBpMRO18KZ0bzXJL5AzjHc4CiN- z=<|Vth~*R1yzTNeW-}6uN40McyW%DpTtFy)tYzso_5dFutAxlsX+N$+EaAF++s{z1 zz-W_35FT5lDLl2N=zy|)F`Rct`^HB5?W*{Ovst(L>>CF~(m;8w4%s8OE#oR274>je zW-!iJm4vk*AG*6LkyR`^@*;FlSLtqMq_YDV#Q1uW*u-e^&c-lE0GibB>|IJ?5q;{o zfNmb(h&lydl!OOcw`1`nxf39admACa!&8k7#`zHl^Nd;*z-Hae!B1qR$J+_Dy@x>j zJf60qt`3e3N|{r6KnahfaHW)`9yVrur%>^9*`Bxx=zn6RkycU+TQ9%6(n=xu2{0^w z?fZJA5Nc3m#!R(%eK&0WTw;J zFam(?IX+ca*9$708D*|%(<8J(l8(le9JKCS$^48|o?Bfq&d7AIeM&#lQs##vXLs#3 zyVM)1Wf87ZW$p@W2Pz`H^3I(hXixuZ+wBv3b9*u>63GbF;2J7LFR^(^IC0D6CbzQ5 z>Zkh&4N~n` z#iZN)T41j6b?MTS>ofj*GrbI=f4^H33$nRb3$U-tf$iR|ZI+OjXl;{ett*+UuDwiY z=Dr{Pn;JM0o?p?=1(01s>9PUX`-7HJ)ysE|Pke8MGIcR(&&R*`KoX=sL&BMIo!=cF z%aUE3k5TcqE7y$hBd%w_*ezfnPeQxi=Yh;`5nh*K{iFzn>p)(nf>+pZ`Tw!_1ugzij8>D!AGWG)Z!X-QX(G&^{47^MC~5)+|6BQui(y`MTUR=YNUL>IQ%s8 zvq;*W0d(@)?|ZDMe~gXj=R;Er5&b)-@RyF-O;G}0(-Z7(>B1_!Y?j)feG&~w^oIZb z8AjTacPs6E&Xo6WW$YnDf)@SWX)6chc0x+4Xst;~k_~=)*1QT!s9=wEdDAnNp>)j) zT5tldcH|TDUe(kdj(PVhJfMrVvWZyKqiaaNVBZU97<%+?P1e)Aw$C=~_sWmN_?1dY z4Xh?b$o{z_eO4>#0~ypQshx-4!EF5bDi=06;P9@=we9Y)-eUf>=TkW@f63`9X{W#6 zw>30aw#Rc%$;*WWlqYPGH-3j84+&fQe>f)i>0r&2#)0Dh3M7AA|CovX5jJ8+v7giH zCe8Kr6K#(95k%T7AXmtGJ!hGpFLsOGg5H?wrkQYB=F|xkI%_KwoPDv)A}#j2;z|JO z?WK=#PY$_MxgHQ_?BA*P!B5f-d#Mmjsp2>jao7;^lfF;@xvqa{i2I&;Zi#fTs%E9x zX2)nzLq73e=l{s6XBKJcjwzI2D~ zwz{rXt+m1vPmgW?C=plpj36kFf(H_}v<#Wdi?z|}G#u7Sl>hOzy!oBP=%)aFjYN3Bs5}Xu!$j2Z)`*%RF z0zXp`D5E7r#yC&`o0a?IvA;sMBG37HRZ2PH%QLY9xg9yizjIe!Sb zjGPZt!~l8|rHLq~MR1mTv)T_jaP_W!-3QS)+))#@2NZmBAnv+2e|WKew$}VHE09MU zA<=!)sX8k&7rsJ%Uy_OVvn^R)581HTRmK^CHKFI=a1Kt=(Aa|YX8$7M^G7OGsF}y- z<+;pkh_vP7`lrt!*c9NsrJOpnrRczi7I)Liwx9#SAmWZH%<#QN2H*giB&)@zszkar zQ70S^2k9<_{=7bD%@aX55ElycL(-$y48^2pW*JYq)!8zflWs*00n^)h$w8(BjJO&_SLSUavT$oq@FczYP5G;q zXlJ%Rg=Jkcv=7RR)CGe*tAs8|k@Dp#g2+clAKXk$zr=`Kk63bC*@&Rh4;El%3Ev@8 z!3vcxum=90#X#k9Y#yd=`(7u-+I2oYXFBL>FN%Y9>_85-A;j;X3avUa&UA4;%V_&0 zZ91Ey?KN_n9Vx3MfOSKS@JH;K7?AY`RI;3ED2)BJ0_-jY+AThwW!O8cLQ+=*n-1JQ zPHL;}1;t)oXYQA`HD30sN7?D44c9ZHSu4YuN7-!l1jQX<_E_`-&3@Z7a-VJ9FaTfG zjVXfNp9Q3q;?Grvny2_F`CgX6K9gx*-mfeQyqjK324;W!TEyKddKl~3TdnEW=Yf|` z^h(@a7Sen)Dhr=JuQ;HJtJLKS`Tp zz!j18K=PG9+|EI2D>=c}n?2HJq#l%OGrgQ^HG=xt8UOmGe>4Rd3kX3csz$Fz@XP)Y zdp=k}er!=rNhfaRqopHtgsSkHE(z@acVAK=Gi|#KyE%i2lw3n>U{nn*dRu*w-iI+6 zo}L3#ywVvawrQ@_Z8XoRpZmVb9rG3rnjr@)AJ_0>e`X3}esbRfMfeZeN?K)3_1OxM z^^kYe>G0iTT@%yAYIJ&44IkHmd6ZqZwx`JCNcM%G6^YCHY@DFejLrQE&Sm|NogY}r z6pZ1yNp|iBIzIG3AMBV@LP@tVn~Ou+cM{(s9Nku__-$=w~G77`v62TH|;=PQ|Qg0Oz=G@~iuD1GL{4?s3R(ec{>};{v z2YU3{e9yAzW+izLu@?`lxoo1BvCUjmuTtt&@vs!=+E1wO#$AV3gMxO+pNZFN`)qx0!X4fQY=R70#*>BZOmDoScyJn4NUJE_b4M*k4FcM{WReSX@@{) zQkO&>s+)P%wQ6X(`K;0BQuVXzJjo0*b~1r1jS2Q>_=yJYo8qo8P0QYC>d&R^I}98* z85-0!3Dh@hm{ePoowkKXB_oE`QGp+JK`aHBA=Gw17}9WD#GkPI_#5cJA*7T!^1V=y zap%~i+?@iZky!I!Iuy8rY)l~hSG-I;;>y9VWwO!={=31!5oQ-J<36-)md)gLiLxdh z99t&k%TYvLlTWvO^9!QaJQc`q%O;}Z&LMi34UH&<5qt_oaz=@y|nny$Q0Si@XrQrlt~so1S}bBNPCNbNh=ou9f>@ffP~*n*N^hPSY{5 z;HSriC^5P3o=>FfSWzQ6=a(1RQ?iZ3nE?Hu_?{X64_+LJ>sn95Su1`$Ub`ciIuFeZ zljIL5$6B;d;(Sc%s-d)qc z1g=kCx&3Ee3E7aI*ww!E^YDAn^Ku|sPPXT_MOE8zo>s9F=>lgn=*#KkwydY*gih8z z#_fU!a}Is9eX^x18^|9;^DNfQjL-}^soomW^>VYH?}5LB89NC%OoBE5GM1VM_5^d=xhDFH$+ ziHd?q?^1)(L^?<>L0W)7BE5G)fB+%%kdPeaJTuRnb7n5~{l3`$+G~C5`@c6W=HNl2 zx<`t1Yry0O<=-k8*5sr|*4@tW8Pg-_Un-WAZ^k>cpR1ZbZgv?~UD}0b_;2Iv259W+ zAyWyWJY+->x7R1eZ?_t5*Np*x30r`jvXmNY5$HbUW2Lh4F5U5<`1=Yct@`84RsM7@}&X-ra#A)Sn&nZF6M6 z#>`=8--R~sr4iyldQIW>zEs;$2Wm$ZXPQkcWq(FJ$!UtWp^}>DIN%a3+{iKM-8H#_ zl~O9;;2|WCYJ?X_6Ev%;o0bh>g{P-gbmnc!M#i}CL5HQG00H%)+0!WGL;WSVDREpC(MzN#u&z_$23=oY|A&jDb;bb>TKB8Me zCaqpIBkM(e-_iN4_~}G7%LfGWufOtiDuT^F@M)jZ(r05n(+*Wi)LrS3=^UVJs?*|T zdFeBGptDVPs(M?eEA-_D1>mln8ZRWa<0D+?j98l2oEhE~TV1kW&8A_BCu#~AW8Zb| z7hYzW_xwD@C3KvgP%cvMUti#Yx6^*$koW(dwH<%IEW$0eTCit0%OURjT%h7#R?%sc z0y!xK(0No+Gv(C2==W$;XoOp{{l}5ZsWaMHt?Hsho)t0b0x6l~nR}xh? zw(vIoBSMp1@P5SO+gFMli~c45lzei7^#NVk%^MuAA3f82*~#*P#p+(ZS?b@?U(&a4 zblv5U{H*!wbK>v96u)94WcTh|xCjJ!*oL%n#{xl(Trulabs*@WEjDBc9lq#L5e`~f zS|seqlo??3^CjQjsex7S3f0JNT={gyJNjdfVZDBl@vl!VDrt55C6H(GONH?>`Hw!= zJ;uJ-f4W^6Y!ZS^(?%pb`#eJude-AF#&qMcFG!frqyF^Gbj?Nk##r{pk0j(c|t6pYxAbX-r3jBS(G247ncHnWmz^^ffM*Xbm7a%)5^+D{(6yMxO+ zbeF4f9Kv6poHt`~y$jl@P%LOY3Dj>MH+s+WQ%0a+)>R!@yi!1$VTGc52A=A0a3=}( z9eS%~^dBstVLe*%^Zr*``^-YfJ&z6k?A#V{>pm)op;MCU|93 zhFEg_kR6(Qm`I@2%#tDRS;rXZMe}6mRNhV-rb+(b9l#`agy{OjI{cvF&HkI+!`A%3 zHkfbVLvt}(`(YCc1ae)N=esHSo*RSnug7)nuUXF+UD1BrUCU*B4fj!yLxDse)WBMx zQiRvplOp|~Rg6Rc^4cXM%t49PsdLjMJM0e8q_^9oz2-;kTusz|L`+O2F;~5u%>(6Z z$1$w*=;MGT82)DLjBV#%2SxbG!8c>j6v|KoJ0}4ktpZYrMwnTXjsBj&s=N19>a>)e z-P7@7-C8O#y*l5YM$v*uq7oWshjwX@d2=7k)6jvoL~^aGT~pY`68YD0 z8-m!hSa`G@r~$@*f*y>cO2F{3j0}zAFwm;K#iFD)hDp~S*|Ca)FI^m0wGxZS=Y|=L zWE=ICRN|J~!Q@0OU0r3!2dQ1m{o(}wOBGjz@zXx7Hu?2pc!WkCFSgKo8bKyEio)_^g!N@?f#gn-6 zGjN|b+V#UrSqiCpgxHT`vl^L?j?+AC_U%Zh8Y9zJ3HTjVX=gKVQ)SLh4$BvTSm+T= z1PNhHG(Q^%JY|fsh?4${PCMiIBrc9=khpKA^f>e5Yp9%>hR-y8e*OFSTvw`DB;xOC z3a^imuX^%hAGMicnw$^MLYuU0&4PSnN#hWqka-q&+&V!?5))YvfL+qI5-(5qqGeF< zipu8ZOY0i{P1V9YMUCa^tr%#ECW0w{Q!QeGQ?^^}Hf5HZzuHC2JfqLLa?4Tk`&2na z3;NaAlYe^M->O3V`>roKSREdu|B$cdO$iKnS>#=S4RhRjxvHhe!%qCB5wa5v)-J|} zeXOx}efqfSQA`7eAuAPbjYSA7r+{n+i_p~&r{)=xB%_@evsu(FDk>xIns;+gehz|V zj4p4s-%XzwX%1!7%B86y{%sVAacw)L?q+#&lY7O7B)|nmUPbPh{1l17WjLc=8^QFi z%@y;Sz$#XTW7P>le!Dd2C)gY{`4g}Gp-Cz(wL?aQw=onJez|mZa`Us%{NRoqtsMM4 zj}x%sOFw$!j4O61_DXj!B~1rk%7ind?~%n;)$y9fC0l|`!Z_Ehfjn6KWAEkqQIDil z%T#x3Zq@Etj|#e{Jw*awR$9Sp#-1QpLEf&t@l~8=072=5WN6zof0Z08^TxNcM}%_P z1Q)UX#oeUy-tQbfEK>*rbdyO4a&H-`VyE?Gc<)4ySNoZK-Gwhwg!Qw1O_<5m!8`U# z7fz6L1s&?iwR;2>uW`S!d%e3AgQGsiYoQfXGRjL=7iO*EB+XCl>iXK|W0XAL3(8&)O=Nf; zwzvTiDX5_E;SED=gnNpHX;sMb@5;mQ;{-8WxQc6D&rUr~xoT54c9XL%Z|JxM=`!zG zdLQ7oSMwFY;Rvj1pWuwW@L!gt19M+I6?2J{&8=r>xrOIYSzC&SMTrHZq%vwUS16Fc$xAAyX?0h2?b(;Bh8&g8b7#5AJ$S`#yP)_$X8EMHkhzIW_lP}2kTm# zn#-;hTK)1;G24|GGCaYE({!zN!V3nc1Y{Db0g_-2+wE=?c$jGoI6dmZ;zAbE!EgXXyFeg{v z)8HcJ+Xazua9#ENba(<7jf94slFtD)i^pmZcld7b%DcApK-Rat`gW-cv!i3-pk(7Q zA=gH2`dmYKlx3jx!w=RA<)Pz50FC9>yRN^3C7CF7;(9jMmUJ*qEP3|0TR+?SC9a%y z&If-yYi7%nSyys^fCuO@st9WkQ1Fs*Xl66>my-8#+DsF!VT7>^1u#;EK`MmV3S_5o zLcUBMtA(p9p4Y*% z$1nfBw^8QIM15*6=Hkg~sJAC?*zZ;qkvMH^hiQgt|5&|dHz(?GUQB6h< z?2}S$)wi>itpwO7gJY9I!L!f=6>NqiN8;RHhe4AvbSsxQTVQ_a_4K?&bV9sw-DVTh zVU0(jis${*@+v=D8CUI;8}4z&lGcH%3rsS!sM*(5hb|h&unBlrk!WNbq(K@@^so)D zq`UbKlv^iQby7C>uO67Ecsl!P+*DlD<++Na!U{t#_uk}!+?{97@>{lUX_ryLoBUHe zUYLB?4=!KlrfcgnZ695%q@qU_cx)`jCVL?PWtr`^(`EYQo_)G_+H;W41%dzY1e?j3 zd){z>jr^36gH<_DmHK>TO502RAN;Ri$ASXH(+3cX_^zDp^+lhzK9twA=8L2Ig9-m| zj4?+-!?D5RUlL+rkc|rWthjLM+5?$R`CojmiS~s+Dr;h??m1n({`a>fHHLTtH~~$RSV$8qhs(od zJ{DyOdIBGfHsb)UdkG^)=$hKh-r&R^5dYuvnpF#BS8Js9Ue@CPUK7MU`QFPx`G^ZFdVL@yjQkHl(lyK_%(&z4jI&|`a9sh#oSN7vcWW-BNM zq-AMf=kvhj>OWJiL;a~-jOK0{DuuX8>yv{CaX#3mumv~KZ_l!-CiX`5%_x)9O zqI)v+R4~}1m`l@LnlU$af)#D4Dr$z2(tWAr_AOk!@y>(k18ad%%%K+dO24%LS|RLg z_miXT@NcS_HFZ+H^z7I1m#yx}Tc6F%jW>2Ho{nj<1d(a!)_%^m!gSZ04@k z+L32F#j=ytl1T+*C@2tfc0&BpDcdp>8_GWHp?fjtDx55xK&+Y2xyyMY-OmkKvSLxJ2P+NI< z!j@nR*?ieh6OJTxea{n|@Vn)yc;w0Diq|DuMU=ymiRwdChHzWV!>9R>p zw*(L0GU&6h&DfWlT%^lA-b-VKSv7T>3~2Kp1`OkCYCDmE+WH&|u32iL7#g)Bv4p>n zP&@{TJ+)ImDgY#jzYKWUdCsiUUoU{|vR=*P;U6QrmoHSdF-__+YbKLCUttjNV3$O_ z{N@Srv%$)Wu9ILYid-hPW)#!K5H<^zp0G@guL>GQWs`P|1L)Q4Th0>o4pG=p(!tZE z{c%)HoA@qUE~S!)uX~ED#^G<6xCZg5vE3r!odl|Rs&GKH7X8_~nink`F! z_Yb~+Nf#LzszTM%fy2qJkMDC|T#<964VZh;qcNIee<$Jxb2Wgaulr)K_NAycroAhT zKcS{j)N*>Am*LkjMoCa4LD0yKcSD5lIkaW~5HP7Xh>X8pvn!m%{&|;E zB&eVc^Y{(wiKHUd!MQR}3qE{;8 z;$h1X*K@zfOp#uJa3%ej3x=a@W%0=hJHD^m-&D{(v&7S0tCo;-Rm?#_TTyT=6!2vq(!PE2fHj3@$9VqA;dhJ9 zTC~rmSEw9&imZ3^?(`?+jF@XHS~tL!J8pzh+CX*Ta1hL#T7>6C+`(7#lLkU+#N5ef zPMwr#b&%Aj+lxbiNMxm2YD#_+5F||K+vfJ3woWvg8T)1HhRYLi9y-8f{+Z?;cizT) zZ%|4Qji9JyaK7E6+u<6j5Bx(OB(0)dgO{$UJV9s!nLIG^jL(ldG>*3T!4B&kNT$xs zthvf-9a6vok*Xb`SyjZ}+1$lVB*Gw&(1uH@$-3hcF$g(}{MJpy$Dr5^W^<=tr|g4| z4^u(gN;RJ#V}QO?JEU`kix-!2(=6n^Z8fuo{&b-8q)_Ptw^s4e0O{_FJX`}7|K+lI zi6E|%;cO~sL^oi%tzF^=dZ6dN?fHgPSbCMzU#lt_wR=~GnAZMR!~S2(JaG)$$#j9_ zYY)Tng}?V&Z}QK~zPHr54k}Zyz?eC|c?s_Wn4X)T0$#v{=){%jKZwwM#m4TdS4x7Nq){Rcg&9)*(2m#&}rE#R^J!y zx|$9Qauo-?z;QmXhu4b11+Ee>$$3vL7AGK!iq|M2eHPF@Umxfwy#J7_B!P|tAdxe5 zCV4$w-v!0EBK){N=vDMq*9YkSssPeA6*Tjjp8uB(XoFn;wG+@RXO@tzx}$a zeNMf&c|A04Ci;l@r_sVUT|mvM&kM`7?T;v<4RS4{JhrzMINkzWY^mgwg_m=9#ozHV zcx^7k6uH~-X_BIO<(o0+#q4 zwd^7>8oALtIcn}Dd#V{z$*g++d)0A``nJCRqRhlr2yN4m9g~Z6=1zTIL}ll(paAh@n&b?qV?xSO=nET6Pqm_gfe>gcC5~7LPVZw^Caz>`G}F~ z`>KejlzF~vNayivkD-ujIp3VeEif5l-E0Gan6bj<^#3U<%NZbs=*-(M-2fFfD7T_UmC*RkrK8}jTStMgYc!vZ zFThuM<|~-qI0WbqIN<3Lh9xIngu}l*HZMt5Z$4d%SU?M1ReWL6S0eDU^16mpoU9i8 z!o)Uan0rAyLvF1GjwGCtv*E}ybJCyLLVNNbx^_{RgFP+0{4eR_t^5l2xH$6u|t!pW*gExgcu9gwLkv+W24vbiG4YF9(p{EsweuX zS8XAHf5LO{z2pZj1oZ&?vWOZ8p9DEvM{P}QcaufpoY{Es#D^Ob8pI(K+XWl8t?ht^ zctbLDGb^|&X#2EjlSPyLz4V=?*Y3GRmg#$)pPg7-vS3vV){wBTy_(1mK96p1TKkLu z#0~JQ9Cud%0Lm%jy3(!bqh|WjkA~mXXtFO14emuJHd23;lwWnaXanyuOORKw!FBw6 zm;--%Tzkf8haseTrLJ3dHLJ&qR0;;){@_Ps6^5{ArXPmu1d$B+E9-B1@2!QeC-858nd=^VV|!;!^`JDuBA-XZAl*J8c)2Ll=VU zDOIe1dd0Y3^Z1@r8LpS`QINrkD)KZJ;_{s{IR}?`f%$=6meZ zn(x*+LYq%aU9gn*HDg&>PIrOZRVbddz6(VSy&`^YS8=14z8;ky(mHZ%dMZcawUQ9M zqyb1sF|#f)r~dACX7F*Bl(sDCHHuq4d-76XWGucDCM(>75ZWeG>2|{;2=ycA^C4dC z1B3p)@FRRux84iauPi;qGl$31skh;HMQikv=~p|40*3Oyus0LaabDJqyrsBXPR$1z z3$UFB=*JwBTZ6xP!_TehtBc>U-TCdA=9>o@!?%=E!|`*uk5!g1JDhv&wvrBc`B}>r z5`C>>Vmf`M?9ycyWSjT=f$T$%o=)PP%o&R)O9jaq9Ja3Z<{il~_w2Y;z+lSlxU~6D z31{(YX^6Ci@5+v*ieRQgqSWcT{U?&&74az)9r_UJ{r8t2#Q^0z4}w*MVVx1ki8sn`jL{!}#PH|JI6zm4xGSsu)XXEp6-`9l$E>L4 zoM6d#4UF6TWA|4p%RTm61~Jp)!E!ga)2Dw@hpzhglV!2IH&k*?IMt1{UU-}?4VVsu z(I_Qb<35)HP5_@26Z+q@W=y8??Iq#-%V%Y$O3tgdIR6$=0>q;sf;h2>iVl(vBby-N zqm9(&725ghpYuO1ehTzhKieQuv(TIW36(8ztEOhQnZ&8Ba+!+pCNTrx1NQD@RIO)0 zP7t2SupvOws>%3nc^1i#>N3yzaaGl1%C43azwC?~_zvu5RVyB(o%RKf+hB2AWJ(%)NQDxepe7)V8KrW74K)Zjks=aJ(+gs-^NJ)g{3} z)(JT8qZ?{fOdDnYUPa2J+q)U$8uJ?La1eO>VE>`zF|m^eagyM#pF>h=JEupyC_GCf z%{VD~aL#`^7U9Tw7LMZWd62&s2iqss2fjG8x85|21hE8 zMxQYuz%~45gSs*sy+x+vbt9&E@cySp#EA~|MxukZ_ddcZgp{Az^@$5q=KoHD$9@yn z(BXSf5n68vF^^I}ze$T&gXGVamesnfuP6A{`g-d6RXMx%JidZ23?SMbFVENMb;hQI zxED+GHi2$*PAP8qG!3REmWp~iteb&tUPb+kRbhP{88&c+w~1qFmM`4cX&$Jkx=x>i z`EuD6C{cH_N>}PI?EVhhQOO6Nhqdc%;NcQvE$HsSq&??~aHAb3+p?zvf0SVl6k{G9|_EzpY&gcC5GkZ31U5Tuk7XjD#=0V5;d| zhx+gGeZR06yVCtB)8FkbXdHhXp;p(JU*H&RU~3NL)U?_8+Zc}G5=V9%M8lbXqMwVk zZ3+?K%rekDT}XS|o^IZ0$|n*vgYfQ|8xX2J z+EKWm$-jDFrIPk0?s-WUD(mVrg8^Hg1}-PsNv~qXh*sfNMOxMYcQ+~7GLSP^^byC} zKCPHft?_qMzkLe4#3xeqz04y6jPVoP(tzBL%%?Z8IT{Gxi!o#GXAkZMKNSu*enNS~ zYH+?@bj%gyX{NWB@3xl4J(%A7Z`E60wsomlkk+9uiDOCbx9-ZtHr^pP4vO zNSN-ue8~nbaLMBi>>E=zq7C1hYY|o93W4>85c@;lLMfva{wP;t zH_@_o@^oNWBCIDels8*a5wU5T5%}oc{WDYYFBrHqrX&60H$y{j@?wNqqV`0KlbP95 zz9V(``U}2|30GWRh|Fr3TylvibNU_ozdC?edRN>2Xo)g!O&-2>o+eqk^$3a&*Y-<( z3};(fb@Inj_jKcO-iBckMiMErei+Fk)~;wtxf1`%GWl9d%NY#voUgY}n`1E8G+=@5?j&{_97+Y6iQ$i`SPiZ z=C1Itx3qb@5XO2wx`I3uj)Opm8nmI)+!x`#v5X>0VisRf`W0_dpS^4-a zi_@+aU}AGexLL9q&bS+=!os+rt%DHzF4kBRLS}PH-eKU8=~jB~vH@^1TkLqOqTcru z1c{ALVo&?#VQ@6@bffP=S>niCz**aW&^#aWw9fmHSO8)AwE1NkPB}v$lzH3-`77K6 z>^1A}Ruxh<2OOK}^Z)gA=}=3UbAcWdL(-H6vt7oAhCUj?q)3q3b_uoqGj6GY1SM!_0LL#QHbe7o{cLrpyNX z$^_0%n$oH6=u*n0xFh-I6F9e=YC`2n&j$av8m6`0>e>j+O&p!ES$L>9tJi0-6(M-h zZ;n1SXlc$@K~dGc;#~OiX>*UM)N1nfPE0~=yW)+q&;_Ea&QjLB-S5M6Lur%O<0n>P zRO>p@7c{otSGh(8*XxO^WVi>*IX+3NS~-O(rTq5p{p!aXm6P2+)YgP;DHpsIzT!OE zA0NZZ!{!iud?cdo6O1l_t{)(fVWk~*0l{e3_M?N33T^8LLvX&FXo$^WwJ zV&{t((%1Y^{a<1rRa02;~UEg-Te+hp33Vm z`-2^ndDt$XqiqG)5&lf-{U5fH*u4OjK&MbxAQ_keJy0P}qYiRFO6{;);{zV|EZl7m z+rCJ1*u$n89E@~@9vxhfD39d}_+Tr89;VKKqe%d4EAa@rPbr&!&?8ky z|N1OxOe)0XrRg5G?aYq4tU{rX0+u?9yJ2cThdL+$roo904B2ne8hrbBxP1MXfT&cm4{fKf0sX={#52(;@!xgYy9cord_@OFc4 zX-Wn8W>PG2o!Y!XO<=1eX;oTMZ$e80(HU$zMC{K9#wOnn;&W<6@>gPcajAedxZ`xN zDvsWK?nSfAKf+tTP}LhRC*$T{aqOvRD9MEPRAWkVJW$x`ooH$-vLfDXog&ev zzwzG>so%95d%ba|wu2ENUmnBm661E(K3bjYg2)0byNN7Zc%v&+2KPT1zK97#1q)W3 zBa~AfsrL+#f@*HSe@{7_*7~AT=roUq&~AMtduwUtWbgg8lM|vKT{c^(w72xwGJ!J= zQD9leZt1fM%2}EjpO9&8t=a^p^v(&oEN`sEy(GdNOJhPG zNZl&XKm}dRre-W5Tublf@9&j+IIRq=D^=4Nik%g$GSnT3!-j1e1viDH+Z_@6k?oS< z2XqtZmP-oz?o}SHHT?}?6@!^Eds!=f3QH40)4C8ynZb_bNsg@Vt|ffOWTDmv>Aov$!Zls#tZ`X5ULQ=YS8`{R%BF^$Otid-&* ztJsTM!8>H`prUNZq8mylvL0X+PDQIz5U3|`%8QI#4Pz>diMztM8vwBu*D~VJ?i&R5 z(lNRp-eV(2(KvXQ#5MixiNRd4%Hs0;c$HldekYT# z^Evke@T(MN!S!A5MCd=!V4H#OBZ)%^0m}VGBI{0t$XEBP$xaSFZ@0`cxc#bZ+4KU2 z)PpmNVZK5Ix2t>KiFX$)1lpZ=<&|jNtLUiqYYF&%ReG&Yf+PQJk7#02ebd83m+-ul z)`N|OA?+=&OHteky+rUQw~!C?$0|}6{>f&=0;$MXqNFis zu|8?+`1u!f%?PnoR&k{~_Elos=mcf_+>rYVD*m^me`@SI%X}l5ouBz*= zTvbTXkNBnBLwPOftrS=593`c!SH_9(+W{fOgGyw`sKf!3Aamph zwL2m&W9%HEGHR*@e|L!D8AxKNu|24l4}?V(8DrU|9F-9#AwMZ$b0fTZOO7`z-OYVj zXPcLQRteE9Vc{?4FF+sU1tyl#MsgbN3P&P`Sk!CRAig|%nTLw7MAZiXc(*76A!V!y zh|8;Z!k~}y>%=95m{TGUQbP|fKL3fK_fnD|L7MYvH%Za0bBRDFOowdG*`w9^^t<%+ zFpV_R0J||<%8k6fUHZwl-jD-kq+JJ*i4>J#jQ<3vM{Pd=*vR#&B#9nQ{In3M#bFF7 zklTh7)3P6)uvyAkHmoICPVN72~tYh%)qEtAAk;Mcy0cGAZ?l)4K{!wS`d^kU; zD{ZKG)uIOqppZ0S$9ME(%bsnXppVL_m8Ucwouqwf3HTcFr=9E^458i_kotgodelO#rj<7f0eGqkNQ6I zSxPO}ehhlLl6M^4I5yn7%Sld)nQHM+hUwAHJ9BLHRm3{=2sdw3hng2{a5!USSTzvyN*Sy;_c4sV%d7U znJ;ISs$Y=6w%t|w-rcMqtQKLvwuiq?Jjnvy<~zN_A4#>T@Xo~T-qqt~nR4Aw?obvz z^>3I!Pe4Os%wDSq{sbCagO$eZ>YK4M1-CMf+t8WM4dHhDU(_nmO*PwX z$)oPCKgi#7++j<|No*%ACZQiO|$rgdp`5hL#5 zFZe|tmKiYMPCPfaJ!i8$4Eb=c5iLTmu*a`Ac?uWJka^YAR7^FV+mb))O8w5saVz9e z2a>&m^{3hsdz#qTa+TIEEygtg#3VxGdhT;#t6e*mxBp$yJ*Cib8%yR8Uv|FYHlJ6F z(^qQSw3`{ij`e@jbDU{)jMuFz2>^orbCrBb)VWZmXpg>~Tpw&C$$e@!aM(GH?d;eM z1+Abkq~$5QvjK7sOo)(X6O>Z%D1}bhTP>k~n0pok(4h&9ubutbm%Q-*St<+h1U-i6 z;Nzg{;UHi4g??{fVG>sdh70MwFuyE6Hc#n;j%XxXoy2k8-O}A_w{~cljBVAC8lrb= zG-|Z!xYaGK5csv9CPa$ASuCaQ0y7mHCi@Y`fIc%v>}Hm)0e-RqlYxqq=^bq_Lk~Q_ zrFFZuU7+aqS;RX~AD>X8$Y#}B!u;keFXaMM`PPDiar^7hX3%Fxp;K;cA->OqBR;K+ z#ntl1v1M1xY6s%(JK5vvi&D}tZy_u!@G;?jyGBx zJC302E;`L#u3X6HOpZCP`ujIh=>;S|UpkzIV;zOV;01=YMXorxQS~)B-(p8gQ@eW0 z2jHX))yUI3&-eS}f{tHzh!PFSSq0UVru3qf{#I+TP@TE-iQh4w|K`T=QPd@m7`3uj#*O8`LA!xBn8^nc^zj(j7ikx~t z735B@A?iDy(xhp(wsGhul_4Dr&q-VPJj!gyDJ|gjlA~*X_qBx#P zbz=`b@n5U_4+}qhAFvPM7#s*eH~OsCMP2|m%Im?^ec$g0we0Z?sn8PLm;}aaid+8{ z#}h-M9akSO9FDCiTvshdeka#f;de6>$U9ITH!42~3yAMaYDMOU#Xuh!v>^qUc+dq@ zHPzt6B_Cl4lRdY%jW$9Okcvc>@D?1t#Jk_;x;tTgT zujxGQ1=}sNO{U#fhyK3%&P~MbU-tWv>jWz3rfCKgKex1l)_#CQW)F_k677E`?2?I9 zgr9U&J?RMwd5NMfA)n$DI0ZWSTXR@w8XXen&e&-z5fHE?x#ZK{Xw)sG+| zQZoINd>s_vnJU5$_!{yZiefXVM(7IPm`&!d8GD-=T5uWd7`>q!sCQzD`npSTIdh|h zUs|j2Bz40pPjXP#9B!ffav;M;Z$*yG9!Fnq4+%eZS4s5?dgYX-&BwPg0>bkJ9io6_ zl(Aqt8xP-kw5vFH15T=$E#tXcEI%l529H_PuHtB)T<NZ-^4a?aQ5onE#A9b}4&MZw%wqB2g^M;gBuPB&{A&tC3D+;U!}^K?L_ zbQ~KpAqI1+{MV@)>sx-Q<0{)|xQE{VyC=r@iPfHauRfZ30&?COiqi1j-|@M#L7keO zOH;cWYRt^n*+7%mCS2m+R=FEpV6OCCWz36YCzzSPu=s>6OY_L66&hzR z(wkY4yXjH+wKa+=8pr0~1~EGuuDbz~u2-mC6Nk>U+=P$Zj4#%uTdYG5MG}6<>aOqW ztQ4kj+AK0R8@zv$=)8)pSKkiZRUyUP5`0$ko}L#OXwg#t_DMgqzopnov7j zhHp^Cr&j{FW)WpF`LBr3LeJ-!W=ZSLP?WL`te=bKjRrxNc%~#wTo>WF%m-{Fr7Zd3 zd#1?W{Y0g%?Nt`EcgXW?a4enLLeCDM#2*^TY~;+xb0B^xx6f;{%Vhy>N2)fJ=wN1vPP<=4ViMdAtIi2Byf zP>GUXRE?|Uojv2`7>y&7-*V|+fO=F_*68lzwVTEPU9Jq~u;9LLE{JJ#BW7q==kN$T z*SNcQk<#ose#jD9I)ppg3mK`G&PPlIol4g=lv>we$gdHXE5A zRZ_1OB=F%axd-}ti@74KD)^*G!iF@;M>v9;0LEPp%U)P5ur1-9lKwymM<|9R@*`uK z1`dnb^oU~`+61>s6NS*tkix*6V6XIf&}K%*!NJIs`U>yz999+aG(!R(2s%4RX42}< zZ_lzh%a?g|wLAG#kE%26M>+<>|n zmmE5gGhyjVbgH4t`CY*Y$b{pm?5o8>&1Ag*#(NQ`{{oIUPcq7z$!0mqr`pw@3;4L) zPiI|prfSyA4_E7)=nD^aZD@`Hbw>ilO#V9D?>;g~KU`uDNVBW3^l#-|8CA#6O_aG! zaVYuiaj$DOkcg*RcM{(1^1B+}mfRa|`BQH@EUCDdXY7?7wK)x%GJZLw{EuE~`tFFc zEb|?X-HFHUmDnoX$KVtabC%W!5LN7-KU<1zcj7}+IB%7F zTv$aEm(LAtsxGU;Igj)Df|&Mtk;d?^;Q55}s&5{D9xPW2(VVni&l#FNwKUXoZqI`Q zE5gUO=U2CSyfRq!YI26HI`sl>=Y*_tWg}?~3||6~2Fto+7a%r_Of?;6Uzetmw-(SG zfhR7lfebT&u?VNunCd~c%ow)y23vm#LEww$A|H=r_M9l1VG|s=Unl&Tl-sgG7D z+&tp$zmw5?>#B@A45maOG7o$b-x2t?awLZUI1&k44Hbu;HO0;VyNxPMXL|2JV{R3Hg%a&Ze&=LGve5>;}W$2znk?9zWLwp z2V7QcV;5R=V!+~KWd${0N)N+LsP1nCrx3G;56%|9JO{vhwZ^zwzMLAyhxIX_7k3^t z%a7cWKXr`I{~FEoCO9qFua-jvgn+gXU9ZR>hZwtprslY$C|m6C*>wur%s2AREdpMp zf0|ZUGKqEE*q96W3$zbf-U;vV5%_xB7H+v>GxWL5)t3i&mzG>MdW6Rt(lk@EZvFR66R15-`aJx-U;@{9~U2DDx!?W|F zx{f`K?txf&K`Fx$I19Bpf6p=u`g36ZSFR5Vzdc**F_s9yz!q6{pS3w?YTOHono=g{ zo@knCMN>+pBWFr+)UL4@|Z?o(wHyY^FFZQT&dm|xFtvnieR zJ)`>vuvn?|BpLcVB9tNCeK_S+k>bdCN>}ja_RMHV#l%@4A8{-TZbC+EeM#d3W8mT% zXT4SbU}w;s1K#lPb=Gi>M>(B`z*;MX_>B$qQf2M;^a%e5K0ZBBa9NYvrGOcBa1ah% zMr9yL8)4%LfH%)XXQA)D@6RC5#H_X_KP?Pzsu%Dr2%2dVsPmM6Cy+a`roPZzMLfSd z7i9X=Faj9Xdx>GeH7h>ucfODJUc;(?b5J9FxxSW%@p?GT2=)_S())9HV-!bGPq!Ny zbcJ6X{jLe7mJ;phv>*u*7`&08ro=UD-28{}@S6KlG&AqDE(oSvuka~tKT}ZX*=hK! z`UMS#tKPR#HZt_c9RxczCc)BH?+phJIQl($wEgMg2J<>apQpD~JMORpb$}w{!QS}D zrBVe-Rj9ppz`K@p8!e-s4tkc}`;8Zej-%7WfLi+wK)sxj#)?5p^hbl#32^B`!N|Ot z#~I}uaX`?V zOa|;vsgb|q*ww0D{-%U-EajgD-rUdEOO-+-6L7I&MsH*_E+R$5k)T!P;M$synezp# z-1#w80{Bd+S#{6&%?BA*`L8>cKUaB6F-P*2j)J8#T4HexCIN4{=8~VY*MY6W>lYu7 z#oQ?|NahN^`Rqq@mxLpG{%&?!4nN(b5|aX8=k9T0|2_5W@)R=}%!GF|0KaMuvXLOI zom?!Pfr{lOv!OYs_cC&Cyk-kw*!{XHtcS5gQ6NcWd!b`l}P)#8B&_LJpzKhWPO zmA3&(GQV3@rr}&(gD8GXQ{FerP@LvQ?u`!PyX)HX3M(E%9CTqexT`D?XLq_j0XeFi zxdO+dC6>179UaQVlaCeL{VYZHj-D$MtB_1avCDepYQ4$l+Y+g%c+xbl&|6Cbf63Hg zyh_hF^foKgYvJYE;DQ{vV_tTNc45f+Q;&aieIXvv8jM*jH1-nZ%UA(7K2H{TUnyu$cA+3%9F!rQG^9q=>0W>rrFi%L-KU-qoiFXi!x1a5IQ0rk8l_aGhv zmpYTbQ9<>#`?;j(ST*xl!4^Ci?KVRLTWgKTl_l5070--Bxo8#i>sS1x(cH0*O3>mynuy>f63W3 z{&Sak8}lQdABqE+Wa;o)w~V~LHQ?hPv0(=FBI5y(%>&=k5ALr=BQJ z^<@d43okfcv(bMX(VP(!W<(yG+C$^@>VNpt7|lx6{Xmqo=W{J?dVO1n(h8cARSvti zt!xuGPYYjUeIi~IxcEj`uBthwMawQ!)OPiGH8)Z-6r>Y4&3uiedqTUd#cWBb@3nE$ zS)(f&UplY!CDkS@Mj9=F7O|8_l>`y#a-P+!eFGzN2oJ{U110~1tFw%XGJMxPrHFJW z&4?hVNJ-ZWiV{*PD9r#vgVfM9lp@k04Wobp(kb0Abj#2=Fm%TN6NmrV>+E&*{`Rc- zFrVJ{UC(`8*ZsTJ^!pXo#L4!-eUc9YzT<;t({Yil5G|6oQ7p-_o)&)Cc6Cei69Dq>7LP=ff9rVl#(>U`IXC{PBcd{j2bEP#OY*)4S?dWdz>@Nl7PW@Y8E(S)#hWl&CkKS8D4XS4^ynlvi^uo;2nFMx# zqc(ysKM%wPwkM`I z-{$wRJkTAwTFAa^GW|*)zr~=wTe_sR1wS)HI9!}+!CYJS>V1Ic>wm17DJPy<^<8WY z0)f3Vt=6A*6sM8T9UF`ENYHC3LC6}_F_tX#n-%~5T-e@O*td-AAXzY-u3pOZ3ZUgv z;{*|ezm$(xHy~tjp^C)Fg_3ltZ7)Rv_oSsi-d2W zFISENL^p9pGzolk(JkdBQX_nSOFIjW;pP6f49Du34sQCq{0>$)UXhXyyu1S8SyRxM zGj2uhi9uQ)FWd}ltusZhSqX%TExFpN@yJEV7~%dgCM=J)wgfrftfS{nL@;f`X6lyIHp%BL0zK2>=7v?j${Inbl zV#K~v_N4WZcYzI`+Ov&I_lmU+a{YHI#GKy89Iw^wH-F&x*W@eHvJwsaXQJm;^F)t* zviP-b0Q!5%)BBFyrzH4{Dqh@nAwy->_DEO{0w+To#3ZmA&+z1j4GL>|b94Q)>R#Kq z8P_Nm1I-4olaFEhOdxd(K()P-HO9wNVl(|&112}>0;3%X%M|pV4?mF+V&>!~q9y#i zZ1L_|_LEbO(@m45!_4z$8Ku!7X^3R+!m-W?26a7h>g>;~DXU8+gw+m@t7qb?iH*El+Kr7bG~RisXD*aE?>ahsdYq zfk8t{^Lc14TNq)6z&vA2qDgY*^-OwseLS_ppnJBX>-(ap;TFSY5ZS4+&@%P31V{3Q4%NOjHEpqwL&<*P}O@Q5#-F7hDqFgs_{G!V8Vc zcI%QIRL?6%Jz>}dZJdJ;%%MFle)2CTIU?3xkyO%$lTr34M@b8pPD|)HobkLtc?23keSmHa4tMl?Oh{mhF{ znI`Qs4Lx=?UEX0FB~b*%FzOUpL@co2RM99#<^g(VPn)CxSeXEQi4FIM-`m@5++IWS zunEpzd-EIy3hlv>W<}(unY<2))gggVtzk}@?iH*u_~;`ZI=aaWL=#SEkfL`YT2@pU7XsE|qUC$yk+>@qQHzU4 zI%Ve-0(4-Nf_@~w&%*Fgr1(*h`>D2LL>ZSbz=bbC`1)i0iQST4wX54iYJo$`zY4xa z9wl7|O=^WX-mOiiHWZ2oRd%+yay%-#G2JF|`+n2Z)POEb1UNzz&-^z98ZT%~G?wO_ zwB8AZE#K~@tmjk!yE@~KE&@hZ5f!Fl+D@hsEKcxuYdJ(6b{<&w5VEj5;SSZ>JhF5i z(9fh&Vu!cW@t=<)352nALC}t~U$ck}t)+plGtdsR>YNJnFyV9H1nw%5lrPK zHl888^y6kuxj|G=w1EnD|0F>FJQ$`4Z!Kv+0ijIk>F+yKU;H__%v&G?1p4wtA72Kw z`N;~M{ZN)Z|sUW7ZkUk~GJGWO&$-NJBH&)49WZJH)QxDoygjLvOi_rtHk ze#ojDkKW-*!fg2FVR^e!__|W}yI!mwsYPNUuI=B_Qy)3B*L!Q&fr20Z9c6hVsx z0VW}eTud%B$(;v=Oi}zlL#3S+4p@1$=GG#}y&_P=4dhu>DD=Xh3{=#SXP56uQJ z{q|Q(VDCU#KJ^h3Ba;@*<$aseq3N8ZhrJKn-?+nE@ge)^P)1bt)m-G&++O9pz@z1Dw-{Wt%mnTQC@2y^ZrALO?^DJ-b`V-=3xpEQn zzg4V1*VrVP?5SRqHUBMnzgv7*EfvN|JzBF75ZL76h)DVC!0LF7oS#>5T#Pz5a=6MD zUTbEKY`gsNW^glOybl)19cxuarTtX=-Ja6}X0*ihE81$$;`H=n>lSS@i1>Q5*H}qS zeMt0#t{I7mhRBPXfEKC@w7-Xu9-uI5mM+ML2feJWn#$Tkt=Mgc&aC8n&M`2KHEXOI z$^;h`t<8}D&X&95sG81Vv#Uq4xxENQe<@q)99G_^y`u{Dh*7~;Ej?n%?2M(3`giQA z$zAS@?B)$*kX~1NBENP(#=rO{OTQA_{a4Sv_mUOAacgPyRi>@hvJ2NymoM!ucr0>x$d9- zNccb2E0W_2N+q0KX{ARCth( zl_K`!uUO`M&l|12OpXcAMXhJ?8hB*TP4B{ca*c!$K>vh3C6wv z#*Ds|%+~t8HZqh<7#?~km4H*rKq07Il3Px& zD37&+kKe6O<9(m~I*I?THSZS@4ZZ1KlrT4$I<3WcF$###Y8xxTs2)ukKq$M#RPWSi zGcKcDw@F*brtqALYMA!ex_ma>j3)2hv_rjLV2oJqkH(~P*+_eB zE9VFCZEpna<>Sk8+Lg(Je?m`vs0=K$>;=+-^avb!vN#i2`{p-h32CF<=@F6TGjQFT z9HLXaQc$M;nBIP7N9R3S#yB&IT{uRTHW%?t{z(Zde+t;EWWe+pi?WjC`knhSkx|1k z0)J(9+ohRHK62PgDv6YSFgu)rQ^ZUuu$T4nUHrmZ>!bPU=fRgAe7jHPZ0@}=Z8GGe z+t;IQv!)`wS2euL|FY`{2R`l}@Y=p{iLuXrJrMfkFy!?G9$lAP(;tgY)np@awAW@E6sy+I}>iz`ChhYnoncbk?tOUK1HrLp8FlBRWfgqcth z8czJPaFto60mWI*U7~*9Q_F+yt15eTT_!~#%gy9x%f~0XevyC{0-yi$JtEk^blS`~ zs9vn`e(ON)3^4ipay0)I>b)eA7jeuNbn_~>HB$s>lPqfzVX58?+q}Q~+|S$qADQ!9 zLKELDEv~4HhK!xqRP9ZGq`O~J4vRq_4Qy?@j!$2`x^od<(?ZY7zda_B4^uXNzJV4# zz;9`r24cY8XIGmruExw;hyDuqdCD83KQteg+5>CF2s8k}}cgy=wg<%TTt$7!VqNcFik#HmjiV-DHUD22qKr+><*I8FoX4 zzo)k1cGp_UJqvwy^T6{@v`NiO@b`O`JmjeLD>Ccq>S14F=recL{C?u|rZ$IO;MM`x zwOUm6VAmN6I@gBp7kG*Ly|!M`axc(CUPo zTE0&+r!Cc>h>&8gSdAnifA~A(Jp2*d z^t%*s9C@hm)0@!MQ%Q3{r5ZBhX_b9&$8zibnX&$u4=D$D zxtq{=HsK;gt+nk~>Zk$3c%e)Y9?rP(g-t@W=uz5{(Ya z5B|?}L2Q!yav@+fLc^)fw^O{*ef|eV`7O~L6rF37Z{~2J5Q`nVI#+p~8HEvpb|$kf zrw-lY%JrykDVz%=4<;~^nfhO?u|G-Eo{>dlWazks7{M?*RH`9FF?Q?R{GF%WZJ6o$ z>9^G5$^B`JWv&AWS`k{V6D;0cX}S-?6;r$H0pHp)#&9xL6N9%W%cQMk+rhEK(r?;X z&Tkt6aeECIFW6dg)j0dkL>c*yv(B|Th6H5ZFZq|P^&O-%{CbKB$FWh(xz9QD0x93V z@Vq8%N)8Al3-vtGXzF{O2<6t6uGjr7i_I+(6icp=AZDO;yx?|>^ntwM4QPU@ zw=Loc+Pds_A#W?@o!&#Q9$KG&t<(HUBs%=QIb*XnI6Ea$v0vbYPB~x zwV17y|9ovqs@m;JWNGR>V7@+kNf5w{-voRlX{Twoa$8Rr@n@6%lURAe4m_xj=N{`S z_9z1{x-&9d#v01Xb~ls$_qcPw9y)5y@oZc4{Fl-c5(v_d6(x&t>sN9iT(&QL7cv!( ze!+j>hei8!>M~!5n^Y7(qS$$ISJ@;zapNjJ-B`veOL%p2L|5Hqy4tVmix( z;S*}+{4aJlwKAEyi6L$8G|>7}XVK2Mseu#%aWloT*MCC4z!iS(Yh0m!Y0Py4#g6fp zMcLNnY-V`}9>wd>!7@j0tgE>=@ci=KgB}$8W8VFNNjIyq=-Y?gy%%ig-04O2y&0&l zC)33NmKt6x#q}9cM%*8L@WS@%QO|+T#xaV#^PkjZo9`oZ+EgK9(HG<8$FTxh#1WF7 z_YZKazKjWhxHd)#Mv!H|$_2&J^~%6b>zR`ETA%qrB+i_FWYajKSmAR7jpm;6PUT41 ziIHcBGHGRKb(Nk)Wz-`aCGrLkoBjqUFEpjdRC2;5(;CA4b(wgXKTFh@WnC#7Ce>z( zdF(K(y||K{`NKSa<*Ha1hY7qQ$TZileuAmP%a_Fq$VJhUxC}E6SYSsCi_c4r@V?jm zh_f&mAG2^`E~KC^G9sNj2#%6`KsF3;!pV#<>jtNtn);kAptSnNzh^gnp(NJ2UC%e7 zkPG%a9)rK4RYIA-_xNPf%!1*Dou2*bdieHwZE7x(M~N-c6f?$s?GXx}2dP}7KN@=f ztj*4RU?ZFe-WaWGsX#pOSSA*hUkA&4XV0J@;?cs58+d9Qy98xm`q0>|t+=1GMhuF{ zASRuplkg1h=mX;#Wk85)#BkL30o39pR5}C~e@Ewi*`N|h5#MS^XK}D&)rFYlwI{{t;_B!sSNgnDa1FnNiQ3>((I}4?k-ueexm6}=c68$GCN1m9+ znYd(`oGwDEHzN3`o0GRQCi$cP$8~_IS;4m!C)hA~M6rV8{nM?#BlHYB{;0|kaJ4Z4 zT&#y~y9e-ml#GLtJVzCaroi9;JL5Z|VomM^C)lBptxi#a-Lhz0%hv(kOYuZg>5WrmDO;G-qaDSZpE zM2QC@2nd~R;a_R3dlb7Kzjh8l9hZ(_Y*A}$QG_sKc~r_^G9t6&e1z&)eMHfYo2s7v zItKQTuY8RPw89C_R*AucvnyVvo>_)WIbSCrjk96@7_UELepBkL^Bzo&{^Yy=s~Kg7 z6DM55Tjl#G@xDLd@Lkvpc@pSBdFL9M^^hIBSapckhDEHUtNYSo#ZB>e^r-};pV||% zVcKT~iLYK-w)7Ne*~lGkZRPRW4!agNPtAJR?|n07wUk^nY<%K%`ZD3~yHkkTcm+cG z2jy`2=XlTUs_cQfiR)X5LVog(S-*&03D`WGHAi#@c2PL949ek81+?9wEnZjny^D*; zkj^)a0Ro7h;nhp`ZrUU0V$Sm!59>`Kj(_?EWQua z^kLm1=j;#(Jsz*H-(-Dp1mFm~y)VH~U=a$M7|{yrYh&qN4`_d}wvBxC^%UiYGy(@+ zwxOHk0XX4jThfov#Rr1g3b4yO*eQJq+Bk8vcj`sj4`Pmusd})#fpmE%U{;Blpu5(*(RD z3^>)_$0Yk!EpMNQDAtF1I~QRnHogep++`r@TZYLASP-; zkCAQIDMUlw6r6=C6fT-o#kEBdcPiJWt+6(-ChxqG5VGP`Zt}SIgTQUBy4e*7`2TrHmE*b0`%qZ`m!B|T;%=m&OCYqU)w~Lhv0jF;67@KQ9Ny&e2;AT!bB z{HPhJ(v-FA9BTi4b=|Uf2YKq6oRdKt#4#L_~FaCWIICl`dzKiH&C-Q`I<^3<4 zCqb?)lF&raCiSqMIW40M2PfWlt%I#jSuMF-#oYZRIRDirh?9%#TFq+_$@X_;qd>0q zN=3?&@7vG}Mj4ibdJu0r9B-f|rRR>NkOH!a)&J>}>E~u_!9Q`csNqwI{B{0fdR+c% z)d78XL`bXnE123&msWb>YLC8XN);%>$UVfbOg1!Syg6>O|Et=4^74C2D$Cg+S&DmV z0q3yWcWSN!|G_Rxo4NZemu1ereL5{32&EA>4kY2oUbW_KVaELv_@2QE6+>GbxKhLBsJE=C-CvAumjPMkN#N?MnS&HnIXgWTpVsQ6pC;__JCMbikE?du{TM z=o@c7(kg&|9;*3ieYw}^{D2VE@XYl$X8awHuPtHD6){@dMHRS?=4cbR*igN16p2?3 zlVF}jJAb_C$e#fXM>0HGUXk?ydp(I<(MvONomIDU8p*t#=^q^N)G6^vRve zoo)iyvjs!D|5S!Q%#*gm=_!MZV|bI|b9Ns7YwFtzABulIv37L!-}#HVK?l9K@qj{r z6hZ7t0a{=DehzFfEe@`K`uKhvj^{m%gu_wWh;U58H-mq`k}q?*~GJATv+G?!GN zP$w+&>A*r2(x-wY1#o$*?05~JC&sbFqu;s(2<(EhS=t(Jc^@G=OPlMS~e@w$4@dEL-@6g(gRdkZkJAe;Ajw$5Ma(w9~ZVv2?> z^M5D~Ck#Q}-~ZCcJl)28;;6Fb4D)UOQ~!F>*V|%YXY+5Xj)yx#FFw8s^r&aWV}%-$ zqhE7)@byWRa9~|TU98T_)_pOso6nxjaGCcL0?)<)q2~g;X9wNLKaKZ!7d3drXeYB2 zH>8cDoQTEouh&qA1Ai7;F~7`KP-jBo)&gfGGqswN&kUxwQ`uSGBJ2&BBK1NX+&)99 z!1OXk`o-B%+l&RJha)aio}lew&H8r&G7Z)_b6GStjYu4fK#amiH@WNZ2H7{3j#^Tk^^N}Q-N2eun{H+joLTSBN1+3BRSOrFpUOfiklR~- znC-U_X~YX;ic&e6ExIXhsGOg7^Tkfaj11r7WOFkKP7WX;x8&!^0+^CHWba&a_W$hg zTr!A=**W)OQ%cAFVSPSYG*x000JULA-i%fQ1j2Ot73`By;i_< ziPWiN;KGHB$-IkZDW)tw&ofd~Uj^3%znoN;iYugmj7&~*gc(a!u76TiDR<^A_YcMp zrv3ifs8{XuJLrA<_+9sDAG5(f&zXiVb9+W%87`yZoZA&k6KCwPCc%SmD@6Y=WQ;!59kJuqGHB-Q}M_a+i z6Q=wZe>c*hQKIPdB`?oFpL3wxy502R6=QQlAo&iC+U`U`V5~p4!0kOVROMdk6*EyyLunQ4h-}_m3du7WanA!B)QX53=3ZD-yis@c zw^2%r#d~xp;!}8lL2mp3=;1cS1ZH@8kD5q)L(++}&SQBh*ogf99%6ry(zbNbwzws( zvP(PJU^{6R{-B1HJ$mW*q`VC`XzY;r(-B#7nVf*T@=Ib_{xiS%yBnBE6GWv_MKyauI?^#0^#RQQUsghC`Tqw|M@BDX7nj zqg`uhCa@HKB*;nP`^@oLIznYwU_}Em7EoSxq@s+gaz+x1WB025wdMV>6ej#w{|68k zec3n2R(A57QR@EWf~cBu=%(_gy@>;@L5e$btnOT5JmqBo!JY%yp%r2)<<&$+LG_tT z$~zZ91r4p_61GlcrKoP9du4>S!|usXmLa^UIG+T+7tx-DeW(vzqa!iNjN^Ny(2M#) zz#>~0k6Eq8fe*jCG*Y{i9i|;eIT-cJ4a4E4wbBDms4hadP_A<3WcDW#c|)J|^)<(5 z{A=+Ls@_o$IN*H~`*s4jUS-txR?}v!3mo$fDu^O^n8>sXvF2=n#(=chGMz2NETuTJ6X-nbAS0S1*#D)Bt$HthM$8@kL6Mhu2(z#GYLgk zcHb87s4%F*cdl5!AEiL;{bJ+#Ytl4y z9lF&r(Z8CRcM4P%6EP0?&yQ+qi|Hggp~An6EnW)LcIuCN5auc{#pQ#mVf!9m9C|Wa z@|>GqSmnCul|h?%@4N@Tng&zDy_k>t}$Q zwFg|RSkjsd%0xl#UEZI;CXMIS35`nt$^Z;qptb~f_Q-lQxMHThYg(eHi3 zRFKw>#2JUqLd9@f65+>eT0fQQANSRgTq6!7@C90PVSN|Ew%5Dn5|`m4Y!uU62#XiJ zV(hAa!}yykI9Rf(`r}Wi3}_k5wkh{p0(X-jA}><4Vy8bsS2czY*Q6d?p*G_f$5y;jyyqb`Lzf>Lg`eX#9DBc(=4#?_zWJ=B~$L%s*})&lyJkA zZjp`_Y6F}oH3oCqli5@5S#Io_UNg)YJv+}#tadzTSos?5*6O!LrQT*rDeZ_vP$dV2 z&W^}HyinK7Ef@0pO$KqylljPGrjOE9V<|6&iV(xB!M1%X8(K1VFQdQM$}+tKpVHd2 z@@jE8P)=R<=qknRwqFM1K4o_H?kWi-MDol`c|Na~kQ;`6?b+q6UFVaMUj3uscXBs) zMJYl#L$c_o0}$h0Avh9!W=z*DCsQ9a@@ENBtOeTHw0NhbTRbGI6(jH^#blwUg!C`X zysXPk+kYJn5#zzgv)e?3Tr($<`n2OAIHOX% znmpZj%=s*sBMQo0Tq5?0tOv>7J=LFn!%7zWwk|~j@_Q*D)$bP_8?V31^*6+)Cx|1< zJXni!r3UsRBzmd(;xKp_I6ikv%&G)Gg8(wj?J?42WA8oqNPKZOo*|Yc_4GMOi}F{8 zWf0){Dh*#a{Y$|cowA3eSL0;T^T#bZZaX#CJ$K99Z`KLV{Nk5b_zBWU)Yvl~pC5SX zD-?Am3tYxbNtg$YDzJ%J?9S1Zsm1-vE+hl(4t809M~-S@w%df+@spAn#WAE51G<_y za~ZL_gqW5W`>nr<4z`(UJwB3~FE ztc!a+_}pwSV<=(dS@#vKsQ6=<`WL+S1F`&5-VPAE9}Dk5XE7tPRXyZv(-zSyY+vu? zrn!DL`SYqctm1Z!*CY@k~okC$~EKWqZz zh@Oz%-T;h75&$?DmuWWA83#IZxxRIhfBS9nkuUvY;mN)wLmzWhHY&nefcsHJ;CkYP z9@k<}&`6c{Nb~vT@woFAHPONy9D9W^s5o}&j?`WT2}3C9Fb+A`mWcjS+&V$;6s|s& z14P4{hFv{y8hGyd+KNWnomGJ{{y2`FyM;1H%`*6)3p-?OablA-pu)bh+lZp6cC1T1iXkZz(+EeW1CRg zB)$J$g1zT;guJP;!w)afg~lXo*jf+})N6CFe!K?{a8f{vOSRf{kv7NTkV|#)xTgoc z7S4;`rF=|_YSR3kwucO7qBFcF$ph+JUgSL;JxUPZ*>(50IG7x(9jfGWPkF3VHA5tB z47ur-o^ouOxT^_`rT}oA`d8niCmGTtyxTAMZ%Ly#TtGO5KrBIzfDauAbw)8hw0-D< z4Oe^F99WRy0h?HQ;GdVZfu?3z@gsc|@s2Lkz@c%qVq~`X9?=ZmT<(So{Xsi<0BO|{ z+c0}#sp3uTFw&oI?uhlNW2~M&qXWvAtmu4a?2h4wvf%KM59tHOj4p%~7R6OK$tijQ zlzgNy(OxT+dP?oTZh+`UhOEf>;nrE>K*j46-m_uJn>)~5G0FHJL|h}dKP*rZWGeznW9%sEN) zXNs*#emZDr5B~^!^1!JWTDj3qR~vUO%trHwuUNp!lT+`M>`_fEcjk^#>nlgM$|=

v<>%CzPs+=S^blw(1#n%AeI0fc^R-@BDF6 z0lRY^jUUGM&SdB(_FF4c=4-NRts^VDM)W+wH`$_9BD==Vr}C4=pN4GloS#-;DQyZm zh`=OGO9dYKABxWLQ?JXg2M{>N0{VFOzc2IuIw1LiR&OC-qNji~WHA?1H2h)TG0|hd z6mlJ*3TQlem|0dVABbBm{L9Sr38frx^${*SG)DkzBAr+qXkT&I$$PaBr`99C_xGa{ zoAgEk)RoSfRiC~0)y~$UgD;`NX;9BJG$|qIDkldfg4^9!jZ;V5VmvSw4Bd5n5Mt7p zvb*pjBwWU+@QPBv-D=?2b_TVf%`$v)-ab3s8RqNwyE)6dnNPI5;JPQSF2`6+t-|kL zi9ph8sO^O6Z-4lv1Ryk6qSWqSG41)6Cz&CRF4_uWbw`_yDU=rzE_3?br0h+<+eeUj z{I*Z~0aQoHu19n{E)lt41!f}3mYCc;Nm(#4&TJao*+!nOHq77aKgx#RIM?3$^l8M! z+o{suJN^pIc6nt*IPo=sJc^Y^%5h)Wtqp82p5>o4ZS00cbV8-Y~tVbNl-DX zifs^tzfCY9-blKn89E40(Sh^bzJ2riTQ!7kZbiXO==R%0SMwN)qKq`iC3j24WMfmj zbl2a=^5q$v{3Fgxo9IRZF5EzKvesJB$tuNF^3aOeq~jXQ#A#66*Y~p~(8GH~&s*HW z>{{sVK=77#M^QZcMPF@d&N1!+Q;`L`#A$G@;m7Mf2LHc*N3C=8pTTLP2;t9ar5Sfz zFx6sN`*k%5=|ZjU-kO1?jqj@QDC_+793e&EdrbH|DMo81-<9>Cthi8ad(#E}6A~*B z*K)mCB$S;<8YCk>tr_Y4!5O=coc?`?hzu z{rY0(?u&rP&kWLV@owfm2thYjO~51^7%cjTRjAeEbO2j(|L+g7yeCw6szXmopKlX# z#Y;Jl6Xg*;Oa#^Nd(hm3^j&nd6bY{}1f%GGVu(b-s_SH;ns_f($!>{9x|&Lq7Yj+OiV_R|`&oGMdhO1tL+BMwI*fwH9R*yPAkSog_yZe40~iGs&fDxof>VsS<EyPFPjTax@FGYP;+g z<>V2;1&OoOp761!YVLQZu)7A<7Orjt{_09e(h~EG7D`if8MFqt69Z$W!82eWihcu( zzDD1Gk{^Cho-|v8^E3CTc(Jw^s)SX4JW1g@kp0Wttf<4rj+GO^BGuG!Bg!{&dp4l% z!TEu-UK6y`%6zl?EUH(2`|76$`D}@x9S1Fzvi8^T;WsHgpLJLIz`DrNNr+onN+nIj zHj}d22kvd8UjQ3XlC_ZLo%urRDA92anSuO1^;R-e-(J82nDGkdC4t8?1z+m>R$dT% z^B(F=B=8q@86k%YMY(!46rCgNz|T`(Uo!TjER(!@JveJM(`xe6y1)-UXHMup@iIaN zK;r;Q0I&SrOx%cEEouI$z>GJkh!7ZTGS^88FJ%$+1VkoUtmEw{H0Ivti9K5bX=&bd z42KfaT|u{&Uo}^Gy zu7a&tuSQnp%M|)|uiPGvHU^57BRsx-`X_&3&z1S;MLsaFw!gWn{mAZ_udjWQj?X^6 zNt-zi)p3#IL;G<5%k@#yFa^LbgQe5s28EROADx27TsvS_S>QMR;=*Cb(V(J9J=T7r zIX3;~uTw0Fgj9X=_PxAncBiF9wtHfV&#Duh*tUN%DJL}-Y6gm6~OoCvA=FEXoSz*7Mgq@?kXJ7T94y{?NZV-Ea zeCg+Z$3>tX2a~XjR7v~T9ed-rc&|*g;~!IW$ekQ@|L1_dkUNQi!?3lpD#Vm8#-PK! zlmfty#NChM&%XBcjXo9nSYuDQ0W{$_x|V-aKNrJug%S0e{P9BIeVPXF)-1j=@`=Cx zs)_oeWzFcoAD=U@FK&b z4%bf`UsgNaRxk%NAHCX=g}QtroQ`_KG;EyY6=#w9;p@r+;b#mP9V6-IG%HAB)T9-D z2g)Y=mJSLa8Aja3_>w;>b@$pgbZiblv~B)Klh(tz)YW!|*F5|do z@YNajadkHTk;RUf(^V~l#&y*$uL5U`$?7h52@A8*TESl&4G94IK&fbKJZ1MdKeu=b1Iy6xn(qEWOKQufM-}WufzZ>3OuB28Jkzv1`m1gip-JI57 zg)nLv5S!q692?$?-E5(%_Wg8iajQKKkz2f}opcaBin%+J>Su1FzUZSM!Dagz zK zjowD?OvxT5y4}#g9a?Z#IG4^kiO#}1QAhWoO%G*f;Vehq!94+K_(#g+=yPO~@y7ee ze`?|AX96HibP~nKWU*G>$&+O7>QK~mqU_s@fV1P5{O zLT=$K`>y*UspKIAay~cCSsTwvc?B%vw`rPdUT9as1eBQ1>m*GL5lVPL6ma|X8pVe$ zi#2c7FG~Bu+A497mp^zDl83aBY)GpcB0}p1DpC+C+fK74B3cmCL}|?i`P-ENgWNqh zCov&A=D#*Ayb|3)L30$CLxLOu~v5X zy?&qLey}3w>72>>N=Y~lWkzccix7C|+8ItHBJ&Q0rhQ{>_>e=EAR8x!xb}5PV*^vT z?8Y|wnG<8hC>zl(GQEjO;PLd#c4c+(wP@c$t2n5i>WQSTfulr9FH_C^ms%fFwi1Lm zAef1HTC%4qfoe4Ja}IiBlF-t;!l}q9AG}DEtvCtZ44t6tq}9exf*RpWe`Ats0?628ei4yh2&rq&8p!3} zm`7D4V0{RC)jA&Q=mBLc6ALZgTe=ptYU6YdMG6R2b(hTGTQ7Ey2Gkr(6Q=q~-dmK|#R#*#^<{)HqaNzUwlmrilLgZu?_;TV` zdE5-IBDKv~9Mw->J4!kSQQqs4)sPH%nIAvKU%48OZ^v+yHp0a+df3l(=mbbrMRxTP zyMJWgiv{i1A%`)aX(WaH14T0l26bLM{A!hiks(^#d=wAA=sA!YpT;(T_NL0Ps{rhM z+XpO+!Jb%ONqu~x4V?bs-+6%-Z-vh8d%RWvyR23c9n*tb^17{`F3i;|Ei*0CaCZ{! z=kd~8cUYK)!}H4O@~U>s9un^FZ;7=BR(17d1Hxq(3;6FeybJmoE2uwBIB3sgkiG;zXmKx>!v?12{jOe zn2}e3*V9K|Axd>`=f3$=T82OHr~zFWay6dJT2#h7v@3-5)Qxc&)cs{oosX!4to|Re z-ZCo6z}wrVk(O2w21G!lrEA7O5Rp)jhM^lNX_z5Yq)|j_U{s`}ySux)b7&Zb8m3;( z|D5Mt&soox``diE*Q|Z-wfApd*PDybvFO5KCCI#!Qna%#E50xbrIC!YFB&(fg}W4Q{{t^m#h_wIC=(tk)+o|6 z5DL9i^Z2^_+2D(jeI~c!3o{Pw9^}*K}sRF#l#RtnQ~gEMKWDM)=b2d6^%9DQi7EtAz-M|a{D`=Kex$v1WJ_9y@RCm zj3D}?V@l3n9cz?-p9#lntpS}aV`#op{wX`fo zWaqzrpsgv(B?20B)QTN!&mnsMJVfJ0kwBMD2|~9H-sDgRgGBvMC$$mXXYQA@n=Yjl zx@t7PzidArpsV$amxLPD$9-6G@i+&4^oG_t!>0@3_i|stO*>5gej}>FJfVjKd7jGD zpy20T6k(EW$x|#0dymA`;?JeDAz9nOxBCDsb7!}!SL&3?(8@HWKK4Zio+n|9#+Vrj z!+dsaL4U!20=eW5+n@Ggg-522wn@bX`$py;j54eIF;VZlwUP%YWm)tPG3)jAh)8g-jCHO)zISZkk@2oM1Gn~@?*+Kso4)@DhG!?6?p~6e^ zFJS>{K3nDP1St@%tvaEs1oDyl<*<;8O7Y?vs8-k4<|P7UAJB-4=vXen_Ev|yVf__y z-PeTY5CXY9ztZkObp<2bf~&XYWXbM4Dr`w171%M~+PNimUYOIhs4b$;>2V6ZAE#SF z(qWYgfeo!Uk=xUixMp8!eSLmGzv9h~xHb-9O?L_WW#3UqILh^?hXwg&=Zl?_Flt33 zn_SGYD#GUu{HiY((p**?n^U-m&`ldb9{L(H?S*1k9{anfT@aWysCxaH>x=at*!9qP z365}*NZ^0G*OYoPd#jQ5-{`Dr#alH9Xd;SYnSKUcRnBfz1% zL|v4F=mFbnLjpUB6gI2ful=TW3v~JGBckPR0#>*sXrRg%Hom%UKx2sG4*`$6k*tmo zV-LJ!W`**ySA({(?Y-RR<0~t2;$TbrYvhdn-G%2tur==oFOTA%!5Yc4k}fK|zqLgp z6soKiXI|b9Ib2qV{x*VuKO!^m?jLt{u$Kj?zbhyYbtYHOq&}#(nE{FKGotwF&X!)F zcxQ}FTegDpZ>y7y!B2n9(;B4XWKvsxtM$!#IYIY+eIe{5L)RuoaJz1oEmqKEFk!?k zVNUgSsc7OPYt}u3zg4bgc~I8nme6jz6IyooBm3oM(+d6EglAY$dR$gL*8Pxrg)i1^ zwSv;ByZYx(@Q<9=AbOJv-LcpnAKWIm=#X^RfSJ0ih+9#8H3u@yCU|?TcD0`0qkY&v z8?*smqLNhf=4061uE`|V4P@%#(32BtEtsZpvMpi@5T`)>>S!~%kJ&iEZ<%U)LPYh* zi^d?XVqzHf;X5a*{J*nt1?}V;jDG@HGNcA~Q56%nike6Jh;hx(O&+82y0H0TZkBh& zzfNCB?Ef|)jQ&=c?iy4bz$tFh_?>b)rM(_r=+MUPn!1-E0rR%MB-h;G-kzTT9P6*s zU(Jpf<={P1wBbpJ3lqlEfmazm-th;A3D1>aBkb4A! zmzOO1jwJFfBHwCr@)%h@qzn|Lnq=_Bddz^F6ss{&uexnI;0BTp)Zr9^=D^Pll8NTm z5o%Z7(S|!d(_e6pYA-6d($H<4(SD8dWnSW#*kEAlaOT_E|0oO$Z}FkP1@Wp zC)MLF|L-)=e^q=u)MquKW#q-HSN@q}e;6bot#5lh#35;Yq_4%5m{G2 zH4`EVRso8JkKG|Eg?;xGy$2b-zvW!8v6gd2*^@suzq6(y=woJwVftMd&)G5Jm`&Vz zMhf44HunO)RuApkX(HfkeF3jmE%n30N3D^J@6^oK?cEz@Jb}n7q#g zVYRGV6Yr4~#=zhfPsdxAbx%=Lsc2P$E`k2-a{A{mE{B9(ov z(ds#WYH=8x5U8XKN15Q=g`8-N!Ii#nkN9J$o0VS|40l}XIxB|W{VjG#h7Xi zbpKmo0Pg3B{#WRJ1kzEs6Eys4y6szn=`NuII&2{K^TW3v-%Nj4HH%*5@drl%^dRrO zPSy^i3HdK>)2)|uC|oX=oGi{YX~?nKiXorLpId8NlNg(HC_7i;balfh0#E)K$%yS~ zFl0X?oH%OX=QlqU_)gjlgiLO-@GJn|99(yXb&RjhKW&+2e=ga3S3$irL;DLOKFs_# z<3C6+|L5=s_@1p{4@u~Tq#5yJ1yGF;Elk%IJrQbK#GCNoDhY`YATa!joZ}YrQm{Wa zUAt|?1x1BN4PzaKWpd_g7;X;SCS~-inWsVY9~PdJDi^1jZ7ljiLYvh5BJRZA6u<12 z?Gom_(}mCBe+xok^qta}1I@TZ0OrrUsy%*yzxw{kdFD;a?|hv|5BhEcVyk2~_)}XW zWbyv?SE;f>>;mb*&v-_y15&3!^Eud=7ygk-2S6=tBmTPh>U7KltovRmI;*muYXQ*n zzBLfI9iNd_n;Gwa;Ar-JSdFl~&@|gv@$>w~CN?$(dfgIqc`tW*1>?MOG(&(A;vr|daJ)95T|N=iU+0F#My^1C-Q&A_ zj#t}d`Ur)&hzZ?i`^&Jv&#kiYS$w?*&X|bW`+5QH+b-mwi)|UKLv4C9<7$*Ge41sy zoJSdvdl~xRW{$n1|J%^{L1ZqDH)`c`Pkhtamp>{u8Um1yPbtWzh9J2}2da&bRJb*10Z-sE$TjIuP}Ccf_zX7+7APQwly{K5xfEE4GRHmw9_ zvUIhHqgQ44($(1!--pD>S6rPX z2(fL|uQvhjNYKmtbx>C)2Y&FiNe#}Zn*B?a^J*)REFX&0F zLB~P!Gs=l5Ti1}FQNND12-fM3KIUzj15GmY$EV51_4y1Li|pY+>gE?J!Y^KV{1FtB zdAt7zF-3$hxSibb-JMO8f9lxp9Eq};tma>Qo|2ntoS9O_`f7J=)rA`<(Qh639%(v-ID5Tt- zO_aP4!r7E>>o$Dl7~0ycj!Xu!R>G+hY(^N69pkMnBG~wkPl4CKMcAl~M;j&5gX*tj(em z3Ijw0X)o<>CEqDMFQHy{8kzg#I-NhT!&f%YKW?Hvcw~s~gF_z`<<8yM2b$;2f?jJb zGx*%`ET`fJ8v)TCp^96+%EHKT3FUIg?SjPBjmWO%4EJ1j@o!!xa)PdwB(ZAZ5-MV zEf-mIt^&geH(+uHRV`N1Ho1JNB`XC4()Z!7noezx-(ERXbll`VY~IiS(CGu!1#gMq zzbT|8n$INLTEBd@5_x;I4sz^;Zk9A<^%J%DefR?NeGUCRq7!;vTy=bZ-V=%oN(HYS zd~UqDTlSJ=-T+$B#$*G;_>zp@+PxWS3~3YaV7%+T;UoRxuW#k3hABRT956Feq?gGT zAQTF#K4>yI{=k>}^?{xuxAh`MPwBTms0AuAKNreCGUuET;XQ zuj!EmpB!_$cg5_S26n$nLKo}Dbpj%%eOVn7?^k4&`Dakif4{~F!{|5K7N;?|(H}hH zv9Rg`SOdvi`p;FwZ-KSHn2nj2$&?lQmqU5+!Du4 zB=ET(3c`I-h5)#W+;(uO*=*^Eoq2R}rmk!z_S8^A7p2Vc2C_#~VQJ2uZ~Kh~#4c@_ zoQb8nJ}P2=orc|aJ8~Qc+J`s@GWi!;*9_+x*BVJE+WSuqbByIta41G?1Fd{Sk1|c7 zG2fM4vjlnVQ3uZyR<(v1WIiihDg>B|fh7IY2ISoquu~HFY^o&X4o08q{SHSUac!Ei z#LVcF^s{dxOD_sNJ_3&@)l2VATItNNFK2eblr_oR&x+pt*PEzli5hT=y*~0Y z19_a@y-h-QS-3NY+Msa8O@Bi%lS3qR116|V0}swR6}h8pQl-|buUs+|M}_p<-9poKo*yjlaC{qEiyA$`N;viZ?4S$U{8DdHyCf7Frv`vk?E z6j5k#YSG!jqOH=_+glOueJ=OVK~-FUfLup(c{4;S=?oQ{&nQ{g+T;|M>O#X2Z39iV2Wy7atPp}ncG4uns&v-IhB_VTRk@AH^vmSpNu80c27KU zNVzRp5FWa6kU4g4{@DalE#9CgP4Ns-)ArJOs0V8yz(9TLo-6*)7yl_u@|>^5C42&E z(MNc+dBlqku=9k3p&)uh{keD{gw|*iVop=+qs+;P?t*)-W$yCA&#+}(%l&vE{6$wv zsBlhnV)8@^3JgIQ9MsuU<@_WaY#Q^#Y5cVxmOVPha<=!M@Te31?Va{+m@a{`6Fa=i zc4n{7jvXhtr4DB&Y^;Z8ZezD7V*(4uB1h;`D!zG~21Y^|KYFU(TB^R}1=RPoP?wK5 zd>o;(Z7G@xCc71tMH)^BK5PbHT-o1KRE=r; zZ?|&`UOwbx$Sd*^9XkYk>jxBi+s4UzqZESe#)Gy)oELpwYh_FVs*3|CYd9@7NIe#= z@_I=nN~*>WT$xIPq4;kFa@()r3#>((vUNcV)cjEAs;8c{1l9{U`e{n}R`|xs_1i$j zElF|-ap-Ofw&FSxchvPV2({&lSHxXIoBTO8#|#P0*AmVzw*cMJ&RtwEv0G*}BPWOA zaZmM||4b=ma6g1v8fQv-^92UY#-JI#L*&9D9*KR~7I^EdC4AoFGm=dtixC5uIaLR^ zJd6wgRC&-^ixAObhfDUHDnM+*;QP%*AOv$m)heiYqRHwHfcA74e%AMGG&&=|^v@;u zYtGT#!#S6S?H7FObbcA;6fayC2-Y1tklZQh_BDaep+`+LJ2}YukWY!PeZ)^9pL}`1 z)SzGt(kH8K#zcIPSryDVh{8am%hQaSZ?ONhk1E-VMuLr=xT|^-Y6vj+3A-m=G^N@{ zr0AP*1|W7`(7y_HXajF=Ja}m_Gsh+uA?v?-Fe~CnjZEf2_1oKu(2CQS<~{dc>r@si6H9PcevtNoZm{x6B%d!WEPP~E?+Pm_FayPC*@ z%zSlK86}7PtvOnPRMm6jwi6rr*C-u0B*_%>Thm-y*9QFCoJur&MHv4Enfx2_DrrCn zCxSeRHr2oD-430Uq&qKkyVAxv#KxDdn!vC3eZjGx|K9%zIZC#?kS5d#^nWduE3Wj> z&=Q$?4f*kqp%20q@T|Hui7PqCHA&v20}dcYfUtLdityxr6ye|WUyv-F@+7MbI{VS) zy+6_N=^)-uoJZ;Mk9Zi}R0r^1v<&h%NDZtbCWz(44T9Ex-YG<^X0mGyKz z7^yT<%c{|&!xB9W68WZ(KXk6&*1RcGU1d+b-31tH)LpZA+b?hjfmS|Et2^ zL~y9QZ!(%ax@z#2GYc;+EVec4FNBNuDREnXr>S!T(+FuCSM?joGOP}cyE=k9YZIx< zY{<0eg+8^r4HX}@)jnmU2}EmDBtLQ+2uWgeV>jq`h4;FEdg&euJ3Cu(BvUrJZw@w) z!^%ji8Jo!ISH@7c11fDs3lM8kmrl)rK5Zh#MhgEw?|=KpnFN&eQ{c`dqtOazu5%Rm zCJ!m8R$W)@H_`Agv6c8z;?KE|tGERLXcA~OsRU^l4$*Knis`G8;_y3K=y zHb_pN>fa?gr638|JL>&VFY>g;otDuK#t}Um!OmavWQH?pv+@m)(=1EYE$9)4$Mhsi zpk&vQXT}%(B8E*_W(O{>$JRaub zai$L3{?Log;3`^$`Bi%vO?sSVFacSbWb70sKksf*ih}K?etTaLA4Mtt`p19w^ZO90 z=5N(A1~mOR7~E>E>SVP&(9Y}eVT>S=w&xSc{vPzsNjlN#B@A6PboZm&zkx{5^6T{k zVN5Ts2f6j^;y^0xS0i+L{z_@*=JRSj(w2E}lua^t2tPdXs47%*P)IJFu57*-S%jp# z;Gwli9g|@L!&n?;Km8vTz;q{tB|wrN*nRZp3F|xQk_?9Y7XZ+K*%lq0@WrO)n;00@ z%q_x})M(^{(L=!6&&=Qe?L~C0Nd(=WIbYy9(GN_T;w&_oSKZ#6TJan9^gis^_ybChw=3vlad~q3tyKYjsZ=m~ zRZC~^A$9nnoVTT7aTSvNOo|AOtCu=jp8X;w8YEQ~IzzenH<=E8bv4UtMA}YCyeCPY zxBL#;+zO}5*N-M~3z-y^uu^Fn+vZ zX7jYUG9CsX8h=2z=x!buD3p`9gbTzOt* zY3r^8>IJ)D3vl`4|Iqu}{e!g{fR|?ekD}}I7J|W|O6}=0v)9R(LPktxsktfq^`AM~Ba;`WF9F8=8?5i5fFT2QjPz}%lgiB zo)97j?I>F_T!GIiZFC0K%7|HEeq>R~^FXWhk||-pqVD^V(NU6rwZ#W?d|Y-2Z|WQR z_TwDs!@=4QEN$fm%b!NjRKu8Wi~lld^EHJ5D$^pbjmM~%8dyL2R0o8|K9G6MGL_oe zd#5@}qt{>C6gxk-gh$?8mXmn%WAK~hdq1MBMLgZ3A4a>Cs4mi!(Rh zl`ZOLN_p;FYB_XFj#F&;1~qa?kXMeiY&?{?6s)-QAVCnQgUJw6I<7nQ7k~=-yH4;)qc+uu9F# zU$Mgw|MOe(-`OnQ!zy-m=RMo;zLpYplP^o|y9?F&24V;W?-;~mJ1_Z;eTqMLAv z@)2G{`*ZGx9Q`N-66{l~>1hea6RW_g?@ry%>=Xt&1y>fGf68C)s zzT^ej^34Bpe>EElz&7J4XV3heTYt7@_?}MJPx^pCF_=NO47I99HLY}g7}}jy$aB4C zQ!a9!v&U(ki_6emJ9F~3SZ$!v{#GtqcXi_D5)ksnZ1FmTuxS-PQVOOI+HjRQ3U58p zcd(q0)b`uX@+d->fJY783Pa72oz;X2;*V5*QbH`#TaF5K$&^NZgB-R3Ac0UWGIf_e0jJUgHm= zXUEKl6aGy#>II*&SKs*GuV3kLQ;LnTrjfe8vk=Z0NYl5s>Ww=h-xq40QeT->RyJ$H zz(CdyWsZdCx6XtyLDx0sSMg!WBjcZQp|Mvl#BtW_bA6{3rgT8WQZ1@Zi-#ECG{*dO z@m;oC6i>zIhv;CRy(hqNas|3-v5nuMq2%|O!sCj40IoY=;KG!)Gy~B94j>)qvDmeBAUP z)Sa)Smphs!sp4uOR+n5B2D#|xn<9B7n`9l@1SYl6ngpl7F|y|e9Mt?UIF?`?j3l@z zwOoKs>r@TXmI|A+rf*#shHY;QyTfPvY=`)8`>Eda*=ubqv(M$Nq-8$CznD4ZNj z!)woxQzL36MgDt)YsU55!$5~n-$MgZu8MaZ%WD6ro5k<_rPZ1;cl=VbIHC!rEr6M#kBaqL1i+ zQ&yZ~+x6LJ3K;(#9#cCqu>0_dX(2`!ENqq6xSU&<0r)73wdtsPKQ+VhJSsc0lZhI? zDad&rBX=GFxuSG4GZW5_M%PP~pyT@NYuGy8y+w-IK8Tn+S>+B~GM#pRnk+`U&JOtW zvv{S>n6x=|^4A-7Hw-vqF1gpA{k=uBq4@UN4SfGj&iV2YU3&bcR9IHA0Q6axl7mjP zGTUpv+`3!%CjRqMR;=8S0;`E~tN8(P{80~#ur0(ktjp>xPl%1KE$+${G5!$jGm3g4 z!e14&`p8xqh){dFoIKJOESOAXmAhsvpwaM^lIg|FvqagWtu};20vddqM|L;bTBiTQ zp|e}|J(t7WT;U3*mP#$W%2)cewBhU#@M8-n0m8+~*9~7fHPR09t_s|=@6V{_*=K;q z5(a_cn{vStKytZ-9^-yVh=erHzWl@ScQrSg#SbG3SF{aR1=fBex%%vn$0wjHqapT& zW$N(#oj#7OEqQ{B(QbO^XRhZnG>YKhVdxQH_;+cIQ%0;Z`k9JluUJJ}DEE#2$!(Zb zq6bVqNRov7*1{G0@N??4$dLGH^*rgjr^n`xee(XKdMYMZxnjxjwG=j|MeLNp8`ei> z44R=$s!X_KWLi&%7vy_{A}OdT`stDWXa0aw8F>56p~AZ5?{_=Oy$k1il%&)ID_QbD z{Mvf-r8RZW(LHyELZ;)l`v)^TUDbqbdRZa>mj@C zSDdjM)najSD=S1NA2(c^{!cvqKVul}I#SRmoM`riF<1F%$f?rgZvN+pdt5;-`-LUa{ihS<%wRkJup22G1>uafYi2Ey~gHJ+IjF@A;&ubSs z4gg&6ay5|qhmp7h;Z8-!Ka)s1#(-gUM*c*+@f5dol^}!{;hxa zhWp_&Sf$?#ZPEUcz>0Ng|GH@uBIc8YWY76*}TGv~s;%gXD^XOV^KH9<27j?4i;QMzX7Y(A zrMm2mohSZ;n_T~fl2VWn1X`U^wZ!vRhDN~_MXe^f%(B1*0LZr{Xj8@V{zDpv+;5+f zeJ|5%vf3bPl%+2G&rSe}bnljiM|U4at2L_|ix_JcqKAqMyhX*l_Wu6y6mr<^Y=ExH zNPI!T@Iy@sUXbyYGbXY+AIOg+m2ty(y1X1Oos>Y0hsxHj$~)Vnee^znNJTpZztZKT ztt*qI<&QQU+9^^2McsdWXErb2{QEv9(Ef zy*}~f)h10}ylG|i=hyPbKzbZf)#*hQQ%cG}c~Zrd-g~>ieMz^)J%+^VQwj14C$_Z* zv21lgqEAaFC*p0N>1sHQw|B5kLWV={|Fxu@LF4b3xTS2K-y3>b=ct*jQuOeHwKcIBl1`8i$6ZT zbW5*P^Z0l2YQ96>lc7B=+$8;D$yqY1#K-T!G6|b}&G)<@|J1~k|1AfrSi(B#;ke>^ zW5JNlisH*u9EY`2L0a`OT*&EOq|~;0G7NyE&N6oS$7ct1ZdG#~^a=Hfm6NIjDzJTx zPmpKpwQ9=g>;*{+_nhWZ3^QM|^m7}X#)DSG7t%d+=t05RCf$19rA?P<-8|H^Nh;{> zv|OPd3rM9~SK3!IZS@aa>PcERyCN-xYCnGq$wCRk&z*wmWS40wms$=^EedBc3>2IE zKV}S+T@VM>ljV9Kbv2|K4Z7y1C;xO^Ym&xL4nv63=F^&fZg{{kl!d#>fO--U0ncgX z**@duV7kR>8oJ5L?~SZkcE3i@kr5{s8+Qs`>*^XYPCdROqD-V3VLPlH&?WgYi083 zG1jbVFa3q9y}z|P^>*w9()C>c5vSIC8c9Dy&A?7!t_bMCTE$N7`d?HY*B_b+uwHCg z&~&Hu+ZSZ*a~U#*gM-5@56_!Uqb0Y;a*wwEJ>m2M=7+8)kF;&D+FBGE@+GpDm@qnY**o8zRm%pC2^5LPE>iBC)m*$4hRZ zouyQ{OWnBy<<1wxfEY6a&q69AWg(*0ubteRv^x8o|WGa0+P62x!Ns@V?q|KDpc6Unz$~u$q75*5aK*B19l&FN19r%{KjkAt_i{RF|57fw*R19ZSd5YC>~6b556F4gzrs#Fv|R@gzgYXfW1`6 zb)jD5ws%E2D}sFF#pyZIQ@Xd~FD5uThHdAbT7%dI zpItcP1pi799+n;?#S^fVphwn>wko?qxU(AQDdFa)-Wtc3xdfG#h{l416czMPmv(Zs1aaP$lAZ z%rYGR7q-#mcd9eI?w(<=I<)GV97eyd7|%|xWEfN%MK}_}U*v+(Ltw=gDx%OCle>_2 znn98~jXVvgzMh;z%4zURfSUUbkQcZf^hpLmWgqWIkBUQhCb?Z=PwDwmHmCMaPrG?LRmGHV@@#wZB_40}|?? zmQBzikz4}mI+}3aBA*SHBY;~l1juz0VT*E2tun=lO)GH1=#?-;t;r> zP$ULciA&SH-;i2QZ&iCMTQsOhM_Q+A&rE?wOZit*xGwL`6b1%&2ahm3S&xqE7rih7 z?{J2YC2ExYMYPai?xc&Qb(z@ij%#`Ks4L!2=Fuftw7AjX}4$O{er}+7- zVykt-N8I{)*a*9~Y;SP{I7wDr3cj?*oUk}wU;VmBLZJ!;kAvj=en(fy`mU+7e_G<0 zqkERsJT))~WQzAij@I=f*r)SjOBfAbFbKsNmYvh_9U%+z{Qli(kzza3Ub zXziK@hH*lgiN2&-CDsGtRV0~CP!wAI$;y6ai=HND`KrdHJSd+>zN6{TFHB-4h~}g9 z%QGTBJ`Q08TFggv{H71YYDa>s`B3cqZAkd}e<2zY??3bNxmnD}#6hv@X>Lci2E`Od z0|ai+3#xBiq_7!3RNfiP%Fpxx^u#xvLLIyF>=(8hENp$_LkrD~7Pyzien5LNpu0b* zw6;D#%yt1ZN!ObUbu~A~X6oeahg0W$q68P($b`iXmlgm)fAI6Q|F;G7Gd1HMFnJB- zE*Nf=;Z7J$>HaM_>|*?%u-z%Nt*+ClfhTf!#jYPM$n=cPvp8&!ZZbN)W(zu+qh?8m zypK2So`GX#wo{k!bMGVCf5<@`q`z8tnNO&w9IR6V_c6IScoRBZZL&2~mdH z1=ZQkHJcQPkU2WPd#~?*k}d=Xy3fc1?#zjcn1BK=Mn4{?5$SJGe1$D`_e11lK|js} zt4sQmD0fdsJ>Mp8uXe@t9K2hT5-Yrlxh`b;71Pi?%DPiM?D9)=YjuTGR>s|&J~GBM*ZBGLDw{xiQ#&cG&Mj~OWgVt5 z6*Ecw_gjtr4N`w5)p6*n$y976iB@B24(9Cb@C8dp!C8w8a7Vsr!wl8|ef;s>-#5c7 zaPgfdMu5SBp|n#l1$qlr-S77Hi}Iz>Gi%1LLkG?44CAV@_nU1i=+|PGb z9u_I7oc7$MnX?RMG2m!@A(&1YSZR*63-6t+TMm$P>9)HR6vc3zTfkPlDOAKxik77n z0_qLPl?xXaZ~s-4?&5FqD|}(6pN7qDY!p@7&k`r=Nq5_9+?ZCx{0^f zJmdC-ZuExhZ=T5nps}d7FGPB7f|?!-o>P;bWC8g?cSqFRShyY_V`1k%HsfQWgM;zR ztDC7JsX@Z(&NAakvdtGk-QEP6x-PTZ>z_y7ZzNlSHI@+|D5UlB!LM_g6uIWX$!PyC zZ0H;!|NAKh*XNjt{wRE&J7Y4OtkK^%BVTXsg0 zRrM9>@==(AhVUsh+F6P5DCs%ZnK(;OpGNRG9pC7q>DfO>nXX+sS=(|y35hdCZjT$h zzyL??jdh}FWI)}IL;Ody`P@@#gQ_#{jWLomyn+um65V{CtL>pC0ZwA)N~)$R9pfGJ zS1HXh25NmWbUc4FKu4yQdGX`+MeSxg5ZLu4oA%_!1Vv7~5vzK5wK;tUz(T#7$e!Jk zj0)$}VjTj>uvX4aB>&A7-(+5SqdM~=C@0xX*yGVDpPRdmp=5Qoa4pkqqCb=tcYS*5 z=2JieD|CN_PtHu;)*}pXUt3P2U3({Px~GdGR9)}|-`N+GJ*k&6>e`@oKPc~rfpvoD zQghnwT?~DDCH3s~yHaV2<-s^74zVkohiXjn$lq+Mg4tR@b{rcHwj*EjsIa4-D9 z?E}x$h-ULE)8w+b?+bI-ik@!`+$Kz;2UsKcJh1guchhO@Q@~DXSeuik*QXXa0Sd*m z3dsnhlkRq@?g6?=wF-DP_$qf1*T!u7D_;Zdn*h-?;vnt1|^(*KIL7F zJZe8cO>Br7EU=anucH0*UAcC4z^e+8fbCA~?HQ$SB|w_WpUDx8RB|eXIC0UZh(bcO z|F2DHaAnswTA(V6)oMDRFi#t}&yw4hmiG23mBZDQXz;kE&~MYkH8X>n7X3omcb#ow16sWq$k z5bIll3sQ4ufWRi8ge6xTae`1FnM&q=vGPZ8+yd+O%ohM0XiL&NA*30VUL503+KtxOP+Plr93A?29aO2-z4BwOGF%i%i7iG)D6~T)A zzm$dE0`9^a3Xo(cv#m$nXfcfFukZijc-F^?O3ggySFYUk6o@OlrceACmLxY3SSf}u zne^NN*4xcQSYe#STcPJTl_&M{6q6cw=YgMwdY1m8@LN6;$E zS=!=C2&Y||C=)`pZnP-0*nC#aYd)EQ%Dj6Jbf4HNfUW{9M?8D?K7MT(KKNpwtB1=P;0$aj#B5v46g>oG zi<+}wkOl9PK5>=HuPwwt>w4P{iQ&d5kMt4B{LnnL?3jkbhpsqd;VrvF4Eope;%uc; z>*6HDh7OhkL4La9nTmU60ctx|*3$bCZ2k)?}K0uqWk zgj^GPt`o^xP?rRq`D;fgG7q%~7MT+W1qgvJTqcnMVsgA$#PP~cHj?cOJ$t#I2bq|~ zq#C5m$^(#;NzTrW*juS0p>c>oo%S0b{*M;FOKqc6M1_j{MYUm1Q_ZT`VWpYF<4<5} zeHS-jge*o|b5%Is|J@kt)FH39VnzDdSguaZr=+HYiTcBA7th2IOtYQjs1k4V0V#+0 zvmwSjA&E=7bQvjo$KWI(`7VSA`Y@Is`S2B}(k>)W_2SvOMXF?qE|v3{S*C|9{}@dJ zcc}BCzndZgkw1XB9glwbdjC)qJH3~#8T>LZ$I^Jjph@a^{nbz+e}%c4t_0>y2|uQ_ zQaE%VCl5L1^k#WhMqdbcYSND!-{9c1|0Pl0&x-Tzu5MiwsxS8UF_ria1AmzI_db?8 zScd2^>_>PLu#1AGf&8I4@GH``SP7HY1}y#4z&1DS6r-6i+M?C0adE355q~R#wsLs2fU&|%AO`S^k!6&mMhA^wKNbXm+sUlQ%Pks|| z=DvI|mJ_N@N$F0C1l<0?MQ6hkdOI@VS16f`V~EWsi8AK#uL&Coa$AoZ`n_ACZb*S~ zRnw5=%SDq`*0-bP$Cv}@8JKm9{LEq?$R3V@+@HRenL9ke5SJqKV<>1oRwOpE1V*OM z<}w?o!l_c!S&k4lsd3gD8Ww9zGOZAv@z>J@)kkEQXG15)?<7=^Ob=Pp3Z8{}ox@-1 zK1sG&!f+5>7&R9)kor;{(Jyk=D!TiwN*)rm5Qk7EDW%3#a;Y3_{4(H5y&!#)X?=RK zF>B#h8ahr{JSuU|gXznI2t~3Jh4132l|Z(_h67>1 zh^3Db9Goi3cR@uP#}paOr!6Fv`~r7sQVv1J}j8t;LP>FW(=XCE8m|ul$&BQWmsy zen_~@98?Cr?3&SbFI+&qZ+U(`G;L~s>WN=Un9QWeQ~E~z%aAd>t;*!lj0j?+tgV(J zbQp#0^il3}s*-=$(dAWZjFBAKry@Bnn0Y@_@r>sJ#|CG4d?c^Ft5N9eZ*M|W3nh<& zo40u4j3`JbKF#%g6WC=X^?CRlWg6kuwjuR9zfBvT4z~@m=Jdf}$Bx1d;cE@hY+IlcH zFsEC0_M%zTaJV|ooX@QoZfPQLgJFlX3V!%X|N4&9p8$_P`xfSr0hx!U3BhKcW|Y_% ze*oJ{q3`tGX)vri-`~}IQ!ftiHIn>_1B@Fa* zCguI>IAP8DeF=aTBY&e6zOXWEDT?>_!(Wi3LsW6vQ)ZReHc=dS{99>4k8*!K;HbA| zL}xU|W?s#~m4 z+>^bl7?43W=S-P;0q-5y&kY*dzrG81&JzU+-anTQWJ(!T>JH^PI0bxUmP-K@T#){M zT-}9VQ}Nq3a6&){b6y-anV9VhO^DCEgdmXjzy{7g}*F2^H>HIkS2$z$gTrbIc$bquK zdNyEh7KWEK+BHUCMY+S+NPx#JBJW}jhmH(fd6 zJnUkFx>m?fxN_Ln%NT%o-qMFdgzrm-t|(~osYww6mdBpeXMRhKRVz(n0CD+ zKYr-f@DiqZxy-#MsT9wZ)xLr)%5{DT|GiY7bl!KA^gjj8?T%+grpd1Vj%=1a+*uhkf{=9+dT02CSQI0%yS`ehgI*=~={E9jckC#y10P!q# zs5>(^@Ikbt&B3ln>+wtO57b2MZaYs8edrl9x`wRg ze<&h!vRda@W(NRS_C;nliI4(l=`0Eg8S`GB8B_dk?B3;dMtt^3s$!8(4*u^i7XvW* zT2-;uAH(JL+zbRy5uJJTV2e*8@T^2mS#PbjV1>gl&EGv7*g^W|tmS6x`#Ou4-4?N2 z0K>2rC3_XnBSbSK=}-DRJbBK%tiL_e1BLT#)vsJpsb&^dAcWWB-YIZaiT_@^k0&Gn zPc&r_KXW z%#dRW+!~bHW(pTolK-IV@(iB!x4dcY!->XQsN36#v_%xrh`(nL`Y`T$OqSdgLh_kk&_P_8SvDcM(uy3yz#wNh{g`}xJ$@=#$aPx z$=p%_C^a&;R3OiT^{rZ)>RstPL4&#Z;M?189E6|HXQ6$Bn#=3!?xkO z%h0G`heZ(4aP`VhHkl{(Gc)oCj(8S_tAKMLA-yQQB`XO#t(S}uZZrX0V;lO=Gv+)bMqYLixq@BZ8gPNF#?sf?N z(~elYJuiQkkF?lTisVqT=n1M8wrn^&$g zH~wzky%iQ(PW^divS?O$uNc-!K_cA-QcHq{owaF1oE7&p6DhS!>K{6Gi_t&t7kVSC zS$Q51Z#Z@A!PVh$(CHXYmg9CuC8e~z75gORfVS@hm)(4|XE$fH-L105 zWqi$R;bcy~kZ;ZaIt#%H8Ibyr3-iPNYSWM_>(I*{2qhtf8UqnacFwAI_n@9{M`7P?0 z2vNL|*=TPUJo=*mWwq4pv|HqU2{>M?ITab)Jy{e93xMR-wM4vl?q?!KptTw0qR&`E5}s_}fcg<)^1v(HH~BFg=S{h9P+ zSxnOJ!fo(!m)lenUbaE}s#P>OkY&;Zvgapwtz7YW{>eb%+x@lWAnGZ&%g&uCv5A{AdIC6myg6Kxssu70RX5xDdeJ&d z_y9`B>=eo-O`7$AEayA&JNwl*?{;=JC(>BK= z^Y)#C_VRPd4z`a=9!c6{Q*Cuhl_@5?BdH)qGa&R2-T|BD6`$`bg*DnMpxo3N%I-UgiSmMQ@O(jf=Jp3=pegyZ`W0v!Ed4OzV2bQuIIMzCA z=o{tz-~f*nzUb_O^ccv130^eqbVBc5=`c(m{*{p+-1YlF)ZuPWD8IAdSlK|VhTwbg zn+lK9z?$kG zGQfju2b?x^c(OQCQVUl1!QyBnV?KRCZPAaGYW}Z&jKC>xVJI{Uq93! z#(!Tm4ZI+)-Q1FnD3b!Gxvtflnz`%g*fp9mYri2g~Ff^|a8j>$o~?x2{j>bgw<>%0-&b@q zUz|sD@5diFAFi3uMp{Ty=B1a2jYpig;kbS*3D}q26{A*drNHJtMAk?EYqvBdR)}Bo z%?1=}#+L3()6;T2#gB2vr#kBe<3N4z?crJ&HeYEH{BP+db(`vv`-`fZ(Ka@~H*&Rj z^I8XT0(^L8+oerb=_|^uY;!KCpz4)&<)2Him>+g$()&awlT)k4Q*^>+0Cx1GVIX&^ zv8}z2NG-UHX)3h&ME6z%B8PAdQR$TXC;rLLg2K&=4}vNluNAfhOKae2a37zb;2om- zd9p$G2LL(rKKR1R1*f-lh3V=*BC^Tg?Hrw@cxo_q1sYc(i-3#YJ2h6+V04yWO%|Ci zp%GTCcSo7Onj`k=sdK0gbJY!ihaav?^dI+&k;Xn?s?oyNAHuoQzO%unR7Di+El!MIW7H&s}n5}NS zEaolG*)teoj1m1PdNXJ0};mGxLv|k$WaZxsN## z#F)<8YLdybRT77)Bjlbsqplg5Ix@GWTuZmSZ%imy!eQtT7X#e+gMPZRu93R!OSvqZsZJSAlw5CVe0=*H{~F1 z2I@pNmRXae*=FvZ2{Y>kwwI@G2h$T&RQ)*qasdbDr!M)^+*#DS;xjh?wA}*5m8B6c{cd_oluh1TYBp-oSaBUAD)3uhUE@yy zla(bzQ^soD{z3@t~Y1m+)iYy^lbj=F*IVjqfvp zXD@eV?#{5$ONG*7xBphMcbL~Ya11orgIL#V-jj3qwQkT`SD`u!*ZeyRe)wgv(TvI> z^F5%_&_lKw!if8rsO%B+{Z#|)1Fr~8_jVQLZi*8)(KHbL*p|f zQcA3g35fw>88N#YDgr8`ZR8VMTB-d*LI-M9(Au5i8c!=3FeD0}r#%?<)Aei;nkv** zANbeWS4Rrg7a?T*U0ymXLQ(surDnc1sHivn!lwI8+4|O!bMTnglYo8@ehOV*UyqH; zt#H3auBimE{}a$s&Ae4$3Q75^6Bak;K3?|uzsfuF33z?#0)ZP_b>|zZ@UIGg&fu*? zDF@tdkaj*APVR{@ND;<20{J5M`_XFp_)Lmo}u> zZMR4;aDwAd+UBVCNaV|@ut|6t$tEk3AanOYE9H2AR*>?MNBl@V$4H&CA96iNDy!$8 zc08}~Jx!n7`-Y~k-=Rb>fH?E$u)hkS$kA9mv7o`u6Pbj~weW(#XQc2v$p*^@PzVU0 z=ma%(WuElZNH+G&n*CpT8z=Z~m+4JW+x5xHn}Pd0lL|UB@n-J+Lja44XzW{Z(V$YQU@bzIoVNx(hE>fTd+6NOFD^Md!AUAeK}3@J0X+@S!Mck z4xM{c4D|gfi6># zTx~?Hr^LQi$-L0Men-THTKJF34 zFT(2$6B=lU@zUR|DR_Fvd0hhV&KC2h!|lz}PjAOoNpWHiV0a=a_~6PeBv(kY%Twy; zcXYq&g*kB#iEZ+ET=n{FVvf3XV1orvU zcY6eTNZC0Z9hO4OxylAlcnE1r4cDesSN7QPkhC~7#H&s7k=%R8_|*$UKY7qq3_pB| ztmBe47Mz+-hb=701Z}i)uq3^z7%A86 zH2wg)cKno;am$agC#oIa9*ng5zgPqZb8sXUc4r>+qPV6Hl+921O$cd25IKb|3@DG6 z$mwwAb}@bYF7BOM^Q>P?RmzkB#py-M(jU5o_}+yIfcTU|<(1)q3WUG9Df(^7=j%(9 zO$X9}9aKJu7O=tnLi|p1JjVi!7){>AU-`p>EB!+oYZulS&RKo$o&2Cd(GWR;(=h#NpW}4jyBo>xI74GsH9lN5Fn(4u5a@f$}R@&3)u{D_3&NLHW|R zdTu)|Ao`;Bsypkc2K9KKDVU2CFHrtD4~p!(Grp*vont^anK-#`CHNiF+0}=p0L<|yislsQHRmxHPA z#Ie=_O*?|Wl+f8uEfLO9x@;bH1`&bcXB%45_wu&AUGyac%5QcJ31^nvW|iLwtmO^rQEf++Yb686NfIzv12UWtQT#RuL!e zhu<|iXY1$_JSGU)e>2NSwFdRax>Z8Sz~9^OF770?U-{2wJS z%F(xWAt}rrSsRjUaMr^G{4qaEm*4D($n(s3`~xogXZHL6No3jKtxYMI@u^9`r1TF8 zw07_xp2?6h^S{pBQs8)h?83YPcA+V;v1{FJ$Gu_e98SRq#OqA(RkPWbH-8!k^c>)9 zJ8cY<5d6B(X`3^ujQyRA$3^ z|KMy3I_|)WBGOe^B}(!{7URh2r0%dshmylB#;x*i`ou$2(Bc&=6 z4eQBN?oPKg%sv%$;R@Zfo}agTPzAh#^U?v$Vx7m*Pyf*xgf@atTv<{(;SOcn9I(SF zQi|uq&eh+7mBSDlKp+Afcm`k<5Z79?^0bkh?G@StI~gQ&_QcdVONmHu4=s!}>F8Cu zy#z8Ig`r5R`QZRCh==8+Ky?FjCX_6ccpa#;tQul~5N7Py0<>F7vl`AXY`H9*5>xv+ ze1D+i9q_Q|&!_?@V79;$uR*!+EE5~Z$7r-a!bz_Jx&^8m>8&8nj+xn+0h#(QDn$MX zJj1SY>b8sZ>&tk4k4|s7aS8lg+9$Od)vr%q6i_9tP9`Jw*q(pnVA7s`r(ct_>|zw* zapk=M=zLFx{n|H6vO}yVpmzK^T%FsNyc>6@r8RBTiTQk}TjJq55(VBM8vC7RhuHw5 z#rh`-pYFcRHUzvI>&!zBlE-I>bqeXZ7^)3(Mbf8|u#X;o3;Hnwi+V^lHahX!n~cQ7 z@8beL-D&37!jW!UWw+Of??F93-3`OYe!`gj*M_`DkN2gh{%BN2wU7mt*9bL_L3g*_ZQ`_g;+IHaLgh*=P{T4wdZ?^EG}Q>0rP?TVnFn1xjNuK z68+47B>I`KxBP^G@ucZTnbI5TkX@FZ(J9*N^`-G&VgZl9?y~oPyqT{=5?rEcNFzNT)Kt(wo@jy~0nyRCog01kB^_q{WL= zfHl%80M~;zK4!r0-O2|57EnhCIQ%`?GrQxAiC-bEzs7^r(oTC4h&|Xx_>P34AXh|E zdtxItPR$)PvlCKEmD_xIq$fX`Gq7QoL}dKqCs$s0>jPt@aQscJeeNCDdU#`1UJtdm z`tU^R3NNif!0TbZ$1Xl|9|>zL^dCnSS?aobdE-t>Ry!t$bq6t8n()B1$;!XZ{Y$7? z(|%X%CEQ;b=~W51+>aADFa_GS3ZGRV-?PMfE=;vi7XL&Kp`WUNe~eF^+`ofTW0OJU z-Q}d?e=Wtd;-hjv+Y!o?qn9}=uoJH z;kTo|5l4^pxBvOb5my{_!xpMw=j1f?=GE5*0jZ!`P1hIP=Z^f^la2ayNaA-rW~I$4(C~b zuEil*pS~vf6}|uDH=f0yTh0mn;`IL6)8s;_Dx1V;me0>Ca^z}FrRwL}PRZP#;5-_N z#hIdTz}rh*rISk2l!TiQunM`2%<=U#u}AW{7IewN%)#}ny(NUI8&4vn4I)RMF4e%B z4vF44#);zqHO6oggH866+@D;3uEwfT>-%&^>y($~K?{;IdD}zMwodM9OaQ=2q2Yx1 zY_oQOI0BW4_;F&B7>=8lZrnd15O9>1Y%`py8&gNy)2azicx@e}PRZ3NZPZIuTa~93 znDc~cob#sD=5x-$l?byH3BOSkauBMb{0sKtZ}&b`KDiL;#7+ed+IfV zKl=cG@BMU+$Ru2dNEA`-cR^W4{w#0Q<8X+0TZ?2vWdl{`+2tlfuJI>l`T8FZc=QAI zMK=@z$>97fmChcMGUNC1?oz6Sc_!b2a5o4wmm2t!QO%ps)gh0;2pB9eIKATx{t1)E z=5RS}k)?5Apbr~caFm%T+*X5+w-i}f9E{ruzkEg!%&~(Jru~mWFXvUuBF}PANth^c zmMGr;we|yq76@JSaQHhLxW#>6Bl^(pGSK`UgVT@0mw00inNRS!#57?|N;nLSZ(&s@ zaOCU$CtqzR8s;p-&7!_h?tRGfw|%r_9K;tVqFJ7s(@}3{dPV!iMW-bKI%{b57TO>> z=Jg=~X(`es)?q>Yy2~JtVJCLVs8){T4eASBju3;7`MITK*e~>a2l0o}KkmbMZ?E)& z5knrq;VHJsm8%Z~G0Y0VpttWdio3B6f;;8<{*dyep2^BLA}l_yH)X*qDX-!W&d6~z)HF0VaqQeSD=~wh=hvT)s_o>ZV3T1!fwnUY>u)+gT`4KXN5n^t z9hU#PD()C4PFE&`zW_iy9;Ro?W^c+>n3PkQnM{|_nqYsP`})c64kfR`pT;fi#>ya4 zR%+d~{>|k2-bm~fv*iN|T|Vue-^kMA^*u^iyg&V0pQ6Ri_~1~Qz1>5yqcIO1<@EBy z;a1OUa&zQh4iogrP?m}1V53w`*NITOC$5I6^p3~enU6MPEdXr#5YBSww{3;l?;Z3? zodUR;HeOHIkIn1)t9&j~C`?G8Fe0Q+bv!TMQHPPgX$6_M<#vJe6JYR9d(8Pk=i=vC3%m`_Z2mfl! zX$zgqgEqpOO*%$-tVeD=;(ExIa9lo{0X;wWxk9oZi_v<&vAzHIN-fyKmdyH?o=;rP zi^4W>vBuDc{L$U6=jDLqq~&6N=w;T+0{m3-mY4Tq7gbH6#NX!r8pL%~8*=kHw9#k` zUtis+m?pcBr7@-0=?!{0vvS-U=bf0z+G08jnmBX`KpkmhJh~k`mJ4ZJy%L~XarW=Y z6#=HeUb{5;+9DzSNIQirq}_%|{o1#&!>8s6fy1TGQz%d73OI@6l`8Z6FjIfgkNjW% zS@hxCrttdYkyEQjYHeyKkev|$W3ury{zL@Ep)#)@?Zr9D{#jNbD^eO^YF24S@tLt( zyZsPEWn-2}p^TX9s3nNzVAuo5{*rlhcjEr&PiQS|pFH!EFd5mgTI@EejFceF|8}^y zT?{2}7s9x583M@=eqV?ra^D@Qy+)>F8L;G7jo_=#`lXfU5M@>0RZ~SN`rf82KUxp> z0dW!39m{NCa`^yZ^@?4uV4E>Y26A>S+utS1c#*CSEKr1wRjU$-9^x#gn}qLZZVye>D(9X)Rd%K9dBIzWqi z8^9cO3VoaZhvoZ-BMl%_J+$7yg8{!TS4+*7V0x(T~Wz>2RQGm7|O9*iq zhka%9T3?qBVubS5zMRHa;Q3MVCnlEaS7V|ek)k%rRfX}AMy7_~iFftjn zk4@=3U*U2zh8*M*$8n7~#Ba@(X*gAnJPnC2+^i>ajbO>{jj~^1^Y!anPf+j**}&gH zc3b;bVrGyyyw@s-s7Em50Tbymf}DrLY%9I0*(gSrLH2eQPw!QK4Sm%%Z9Y|XeddVV z113hCsjk?ut9Uu60N4xTgR|s=?C~emXTx4AyQ;R|Dr&P#h{v>7J~9>d)cFn9h_;s_ zKe^|{z^j3v42-bak2~# zB@KpYW2WmpcwLXlaTD6$*6PCt+eLSW6V28hxfB{ZJ1@vCOVU4TR=%<oSbwdN zhf3_Izs5#>gX5Yi66K73U4_>S;PCMCGc&(tJv0Gda$k9%lkwG@ZoC{m|6KJCCrWv9 zMkr>a8=_x`|I@mj=Eh^!oP;l4i<-zgQwP5_-yOx2c<08GdE+(RG22yP1pWAWR6D*O zOU+wcE;S~8Qf`8ic?T7cIQsAJm3)Fu9}xF>6BH!Y68H)5*-q;JyNe;~4RI_GH@R_1 zB47JgxaL|Ol`sN(|Lni4d4Yw`i5*?*$5+#{R;JgG>UU2+pMd<}Lvqh4gTACh0# z?_@}~Wyrne?q}G%F$(oCJIZ5|7CgDhd-40woe7U4N#U;JVDw6cnyGm#ms`1MJB82d zi`Ca;CI~S7(H~`7H1rR6y20^=T0zNruwqPZDa25EY;L4<`%z@}g+5b2#vOG`v88-u z8+GeVv4QACUk_tY>(4o<3=~w}r=;Gtx^(refq2r3k_eiNi;P^-Q35q;_os!-Zx(@# zwj5YcvAPy7g4IIC^8`8D+>fg`A4ZNGHuv7gxFfyMVb@& z*CtVY@_Vi0xpEVd2j{h^pdQP7?Aiju;e^@ZL?~3kkTRC42#V|78o=PAGgh+FpeOdm6lO$*j<#PX!HQBR&Yq^N*jZmg( zdS@Q~IsPaTvYozY>FFpyP>=;Q(*EfnsU3Ipp-@sMfMA@RaLndDl>cKb`H!!)k$w@` zC|)jr+lk-lD4Abx$2AP#*)bz18v#}RUMS1sI(UAiWi^`1^K3p3ZJWuEm7;G zX)4LBMrvZ-F@er`#hWvGv$%P(P}vNS3%Qsz_3YphO3miPXaRmj380t{s)Q{ZuUdIA zaI;71l|D9OoWr8?2}>0&t#sK%6C-OqW*+DBZF0|F+|v0+i}nN{Ipg-Vnu0MFyLul&*%LrfuvcyG$sCc6~>m^~bdC?q=E`_SWuRmvKB3y`zca z*P*c|J7iC&O732p+PgK@t=z4N$uuR+~S z(DYSAPfOMEw?F(D6Y@cGqX`3Zvxwi_dE(Fdfnmvu z1d_muMQdEcUWdw7vB(>TU|dxqn}By?;s-md9WccoXh+sMOKD$>Io)r|Py0lmU{>fr zGt#oIvU6(;JD%0O>q}1H*pvD2Z5G>Y**=y`nCI@0!`WJrlOfvsZLJs?XK*8Hx*bPB zu!DZgcM~_i?DMg#L*7vdZc1{tGx;RVm2KGh=r)Zn-uMx^8lUAA*CStv9d;T3TgPg> zBx0|071N_ql}{e&^OYw8A=9c{P|U{LYLEcF)C?R%Ysv&(qWcp%kY>A#IEj-siJPkE zUB5(4%Sr6E?@e*;vu6gM`X`fHt~UVVFSL5QGN-7Kb2++(ncs@RSY($oroorrLcx97B{_aM2EDis+`OU5G3H29?qhyuf;I~~@tflKw-F6GwjE#fP^oxU|(oO1`kAg!i4g|8_O#eWJvL zsE(RQB0puw?l2KvV%*_ojNM~jj|zv3Rw_zLZ;W+$FWQC93Yy$Ja0bo9j=_dMb9dBP zFo+OZWy@Qngd+yqFU>M|*qW6>TT4Jr0Xy$FG4|QB_ykSgBs=|LL!GI%n6qCHcQ-*g zq7;ZksFkObr+?C=LO_8ApRLJ&48~Y&p1;;SJZbws+B_sZUy@58;JsJoRL9}oAwc^E z{LhPQ{@80Pg_G0ReNvP8;qZ_}O$E>BpE(aP-J$qxWNFCsGTsviKieMyvg|-*+*(vY zrtJ5TxqD3vwv4Hrm*y^XXO%Om#GT68M5KIcwXAb?7Ek!3hN`Fv232++n076H^s?!< ziQpu^Z?ug+oT9eEe9&dS(Yz%cnKPB>KF+HPSlt6K-8k-!hE}Bimo~4IB8Kc^U#kxv zjVr<9l|$YhyWr%1{vTbQ3$j}YoXfp#&1W)iS*|ZVyYTCBh@A;CU^VYC-C04AlF+f+*nvRjn7#JKj<_5ruBfUY&|zwWh{+> z`$b|px70N6cWBIdVkX!!0QPk}yId&Wr4DO=w|a*zOooGtUwn zanbw7qe35-m~3v!-k5c(Yhs03!FmijO(s5?>f)Vvr6bZo@PEX471m$PDM^WSHqDN1 z5w)ipQMwUMfRgLMJ^Mx0GFWbB3fS@BIUQlWiBo@!`d1ZAO0mFPyOoDqcaNSdwmAn! z;es$quS|{rk0a`>DF0|GCC^#M&aRWG{oLjTqhDvDxy_EIMIAk5vhuFxbhXciK8aqz z!~=C(fhS3wu_BKve>c7cv0rDk)qU;0+t6)`xv|o{>Z<%MoHpWJF4?l|y+RwZ9mwOX z;m;W0Nwt8eYH+I(HE-sqnM^pknp^Xom-rab;=OIYNmxtmMl*=l^yECkqOgM8$K`=T zBt?N2<~Q;iX!wiWT||n_mq!1MFoXyDSrE#KJU{4D#F2mJhHVk1rfnsv(c`zf!K|q@ zS;SSj%CQ9~TSU$fDJuV>Ud;AH+qYqU{h!!tQvvy}EGQ2?yGLrl>g!d+Zm0CaozY)6 z7`EUsn6A0Zu+%q_s=1A(}M7`ukkkGYC z6)Kkbkr;o%FAD{<*{Z`VdxpBZC~8A?L@+PMkP330)V~l#u)gN=O)I;~N6d>CbbSd& z_U`6Y1z(pVL&j2ZRwzZxUAxUxHpSQSOFP_6&H+ev40bH*@n2)v%gvD%lNPv3mH7&KViPeq{!aygM@V1jI;uKjwM9?Q^2@%1Ll$jykm!D@W)`%%}ET3bm^hs72by@M&}GJoCuU(Pvd& zCZHdrF24RoEilbLYog!)9aD+5D?2y$WbWUz;sIjbFgoQH{NWLkN7h^FQ4xx5+BoexQu6{ume7q1>PH`BEO)1<&t1^Vkf4c+{9RPTn! z3A~foJN(7mK)p4#)T)~dDr0_I^WsTzW`;&)_kuF?h;e$M*X{S%rtETi7?e7ClHW zh3$HjpX10%3qe<7MweZ4z%qvkNS{bKqKZCydJ>O92E-g{<&$)s=s1@}wwOwszWcFC zrZb=~{BEnT3is8x>lmSFOYo9;1<)&lR|etb*`^EqT*{sQJI!N5b|d0YO3I_kk#Sio z?;c){kQNLFjpaIRqzqH>Vf!&!l>Z}tbIp9aE8%yX5ve+Ok2?>_{b;bK@->p0xpUj? zg?H^dJ5bvejxYV<+{R4u^FOTPtIgBWENCkf?~?&f&n01Vw>q&EhS)`> zgU8s;W9~Da02qZR9cUz1=}qUY6pgNo+Rs;lO*z0|xTc+Z3D&}PO1cDO+;k+vrK5Zg zcZRQ$Q*R3Kw8+2|4)4)aKF7`1MMU=R)gXlQT`TSe^k3#pkvb z+xSrL;NDi{Je=A;X>$)4-=jRkw1a!b+FpifOS7^v-xluE$KN7Vzrg?Oif}grRYkdrO0z*_Tx{y9Dl#rV1@vXyz8m-JhwBcRHI(Lb07UCr zri}vl(V?NDn9#;`p4YoeO5iI4d?6XgjZ<;{l+n13=yCOkREq8F3da2RP+!QuMt{BA zwI}Xs2iF1x(|boLo}pw|c3y$Sku$5(*Jf;`(Szy>l{ZO-tYB*1ju zCs^=SYHZ{?WRO7sIX&(LQeMYqQZe=^bq6_StjM1+blr$;k5AJw-XOtu?H}GX1w}~* zMk>chvLig47WEUmM)yocT>7SkGj$Sa*NMW_Znx-K5PE!xjn_XPLFC^p6V4GH28xB@ zr{l9DL3AcLnm?UIN;I;6b-=Ae{=v#{m;H~S-*U*;ky-zToP z=lM^gT+UA?GOCwn_#>L#;0JhMrx7ttS@FWA(c^{Nb-v@wKq;TVv!~Rv2Tvu}jL9Jp zZoQisvWmTRDYA>^%1k+`xlfy>>(`(Ai5?@KlwqC`Z+5=vR6f}xP3;J*t4ax9zFoUt z#XVKW5xk8^H62v2giCx>SP}a1^kSyPIlq-wG;Wnd;f0w_Nu?Jizd+NqV(un(d4iau zDX9Ig27PmtL*5B+D=jb4#`Wb9Bj%qbZeMJHwL|8;E{Ac~Ez0uC8GU3!;9Ph0vI}0c zuiy@?7*pt{&JEtN6HGc-tNp|o*)Q660J1=u-@FaKtgPbY_YU#x@gt7DeTcsB9?C9#Cr~#q3 zCFxMD>Jx*n+!@I-0q!pO! z0>>Y#Dp{hvWV2w`iCj~)pkr0Pwb(3FUNAfzkIr3Va?Wt=U;$dH{W4Q_ zqaL%CDCCp1$wW!lqzxrly)$|}6lqhj4hr2~7ZD#y%`?JEAq|BPBhuu)P!C+a*wvu7 zCUfkiG-n@wpnUYcQlv@%td?zc5SKNClXa$7l%ji`M2Sk9sY1|PCFfA8fc@Mec0(fQ#oWbvQ3U0np-S?lDBhf5srYT+ zn(;Q>hkBo3{g4SA6O>y<3f&Xalc*&!tHKV z>K$)rRzfRIAa503N&=+b!4PLd-oa{z!`?NsyWw_WQ7(V|nGq1+e2G^B4pAJm7`KkA zcfD~>I37*CW{#9=&s1 z($U5G|E4DggtXxOdhvGyw(-cjOX!F2Ft3oSThcm(Q(IIs?735(#K}jHL-aDevLnbn zF`y!~bsIdjnIg@rcI)@`shczNoFYeFzgr0nk>37@TUF%c?4ud?EH=1MY9p9N z>#_OZN7IdzHnG1Fg$`!lf6cHI?3pY?id6_W?aXIO{i-hiC^VWXk}uGmHTUw+GG5-# z;Ehryp|FFg3_vHwGqZQ}A5``28+eW!|ho|GtrHwqZL4uVf$$U;`d*KeM0&+GfV3sfX#s=RU4 z*QSZ>5PH(<%ohUXSplg@%Ab{fT9@LN+RTn_4(MtyBO0Tu9SKmM#gh8+@~pgVhg++G z)wr-59oDPD2XY=Opy~_LeoYK4UAhTVaST~^-;yAx245L`rT>A50iKR-Dr1^Y$k%k^ zJFYvx_h(>aLI;m@Jr_^~VrH^41SS&nU;Bi4!HY~iKDD)tG8dVQoKr{#^4~0bRol31 zJ~|ik4BX?1ZVS%$0Y=x3#S7KxyFX9`xTA0qeQryjRbOm-?OVO3fN8T3$%4wqF^LIb z{QmA6-^ToK@^!OB@ZDn0`Y(yhN6hUxLWmASn8JjB0id@sRm zd6F8G6zh-)$v_a;hr{Hg zN#@|J0)Oc(y zD`9NO5~HTThnGfWX`4F8_YN(O~Y<2dxx6L<-v&#`xr{Gqo7Esi!GE8Zxpu~%Q~sNX;wO@!nybH4~#8G82l8ssmQ7R%ik z%;TKRe|j?ides&ze1ohK{74GUdA8qK`e6_>)zomI(~5w?$X5;QKO7vvH1E<6xSOx9 z*gwU1*1f@xg`6&uPWp*u1N(%#JuKyw)5;6W>WikFe8EgaT;_nt$l8&uYbX> zzfyCkMuFHcu2=yUUg+pa-9rF2jsP-S#!R9r+PQnlfPz(W||K8KXAeS3)~E0D}9{2tcn+l z$z8rzB@F+EV8Y38IN8pN2!;M@!l$iIFFX}z1;6A(G84}Q|B06ke%3{q2gu4w_N+JV znp%n!Ukd6Bn_`&FrS`d^yl8*BOPXtTlo{C<0?Ea(%w4(`CXYG-kjDlqToJy;E<~l5 zVlS`oqXl2*A)mxwz?aJyf{dK@HJVpu7Lf0O&fnL34OiVot6!~@q&;yTeJ~3@r<_vw zC#*5B0=;Y%2JJ4Itlk$Su;gKg;m92cyIMpH6jLfG_z_g&3DTlIWnIgPeZlRo{!->#A12 zz*7nNn_B}A@$OM$rFF8sXU=^h(xfg3i1QRp(b=0%7vb`4E!%QAp^IuZ)9AJyP72Rr zbXdkblVSO$;DOP{0Xt=;tayl0>n%01laVJGL1yFFEEjJdE-Hr+cJ6)!D)KI`nldUi zmYCr{kOm~#1@x3PWL1SLDB6?@inV_Nveqg=RMqG0H3(elq+~Js4Cm{4;Wa@tU89bNnOAM+H>78J9!(Hj(G#7c%p@4IbOT_TV?Q$%2&1>SqQwp zwY)pQL2q=R0P^h@6D_ak(m*oAh2cGRhxdSljXPNZp3-@{bj+xXORT!zliO(&{9fW< zNnfL=Tbq|lQE*A7gK7uOy~H3*s~Nj4PPRHuZrq$jw@*$@7hB zjL2${*WVt(rqi?{We=3~<5!h0e>2MX^U1&-==|JnLWjLJH`MRGDq6W_w5zHa_a{^2 zEEVA~FtN?E;9m<7{gs=q8;(k`zpeB;otK9kwxo#Y#xBKWN`%ydAN8=H^9wX^hq~T5 z8P{dhK4uv&YCPx-y-T1}e2m^8lF~2+!G!1fOgs?F;US*#>~bw@57kT$stM(hThL}z zlGYa0s&}AIu6G6}V53GD4}Pz^^~N9b+fiDA79uFs-wLfmMrrSJ-hiN8qt%Hy4uidV zL2=m5Ah;j4goCn)Ryw7c%~j&}n?+Y-K75JAlY4y?@(sl?`Ghjl*<$}+Q(x-A@YGIF>1PIGpkslOBu;zN}O>59b z%OH^V>e_3jwcT;&Zm7zJu28Yf7p(B7j9zdF@XyJK4{@H`_DTRM;2m5Wic6uBv??JJybZiN3Iwy3{SN2j!RC6KhS z73fi%pLLmlZKTuEnQxnYtSNJZRja@b^<=PS|=frzROt+?Rg zs=XKTk1& zc9ai4&NJ=8LzsJH0OQ|YKH?v90Y3@qna6Cl%z`DDnBc{3czakIQ)3~rjVX`UM;xFR zA|r^R3*h5AeGrq?eCww>*sBK>tQRVgLF$QN)5P;NBWL=Jo$%BJCl=|cG+Z0>tHT1u zph{9Ku@bs4p@Tec^20^jmhIOCk2^Y_?GscQ>-jCbUTjmDf1&ChX;BqlNO#fbpF})c zYS0v1xH>}cRm}%d;z#Ujrcg&P>)73yy&A|Ers=2yGW#Lq!B&d))38AF&M89u{ENeq z8n}=m+L=1)T?a1x8_@%&rnzp~1bqRgS^z0%2a}K&l(#JquLowA3-~RQjUyM3QaX+5 z5@zanm5T*OpPYm~hb?%VbbHPucjezZx3$b;%tw2?d#QTrw_2HWFD8um6+&Qcpc#Ir zIgP$c$QTRC=|v?qflOXxtwm}~r#^*9-YXc>6LNWwao{tphKkl-e1eOUGAq4jrXa%A z(Mk0sD2|-b`*(H6G|i1T$M{V9Ctlh;jyQR#ngYM3NZQUUoeSDF z_1gN32FlxS&o;GOnLHXs&sLRr9@TXYC_$@UD@KXWBw1-c&*`)$a#`>z{gTVCpNRT( zb^jv$+0<_7H<8ACBTA?`9!6Iay`p+Oaiac9ikjYrRA6Vy!SepgRzD^%I3Z1mN&@0f1DX;^N6e$DYIGWyB= z2kII;3Hp*))#DInB!6X2)Z+WM^Ce69|0CO3FKNrE+Hsi&C^e&y&B`4bBt zwxP*&z5zQMw(DA?A-oIBO(bVTorYv{Oo-nw4Ibp6~xsIP$+ z{;FvnW>c{I=_@SV@96MrXLk24{F2MLDIUz8i?9uP$lIwhrmVe6`1K7Q3-6xDj_Ogm z1lYOZ#GmY}@@F9tu{8fE$gC!u8w)(N@>Q;MrMlI~1=wMxlkm;MsHA<$9{=CEVk_qU z89#XW(Z6>=&u)jyYNzlJKxi1?cC7}dGEo$ zYU?oNd}`RT=G~3acL|D_-j?mqSBgJA6_xGh#+e6Z@zy8 zj36*pz)(zViXvly1aLh1B(M*?5gPA)iP_oC4xM!tZwBc;1+JsL@0-y2~b z=pi91qQ}keE_(l7WOF0-2Wd@DBPy~nSi|42LWg}W^zKevbB0>jk^Ww2s>e3fQ5oqd zsqp{@^ zs;5{?DsOExV>)ZqQ{yDJUCY`>H+lEj3M30eruT5mih7ispfrg zdkNNuibMQf12wALxjEyt+LbFOv2Vpug909@*D0MWhrHCT7oXb!}Y=!L6@?Rr;e8ZW6-k#lLN5387|qfX*;E7A(Cq#82l(lx~E zS9F^(A>1>-%(DiE{&z)uv^uIQpL9&iEHaZTOe;k9n?)z=ttq|dB6*$zEAxT*D7qG+ zaDbXZTf$ST5Jv)(3}(3_G=hqwBt4#S3MqIV7V638Qtk2}941*|i>USKE#mBOS0;3EP%pBOKt`R&(-WIX8;! zeVR)N>y{(n#tS_I9|+0JG)?tdk>Ad$m)X7*q+T>2(Ae2$1`ArqxbDxcC{Z5rw*@4xEx ziZ=Zt;;Bomi`pbeeb#d%;MFye{KJXq*N@JXd8DU0IJs*6%;dPPM0RY2e0Kyi_x&C= zlX!jxsX7gU+@A9-atY9lw?(~TpP$qLhw5r6&kyycpu%3+cYSrgbBMcewqplM`@F3n z|F{*4gjl9N_e@B(H*^VP`!wj-#XrJ0JKFGxZ8scrMybi`mDm7`?LOG-rn@6>>A4EO zTl6>=X71Q~geJg`w;d)4>0dcfDXIV|7<3Rez=^0!B5qGC@Q+US|| zZ+mR_<)j__wiooek!1(0!6nebD#v7u&mNLv^1LQpL|D}62hDLPmwPS;8EmKe#laiL z?>*$L{NEm36o$lYcyT%dO(_gsX{9IZcjz zGRmt@ow6gg+z!f0#6s?Mp00usJb?cSd$LDnmEnx12|?99N+9{A-U~ zPzYft>}c-X;xvX>1ki`f0S_wsN%T%X-~vru_gHt|CAo7U$jElmF@&B$Oo21MjRFxw z1-gwJ=57#toqwV)Jc(5DZ#ci^*1vWGz$i`r(cZEuF^dXp6d_ntEv%mL%l@4DIdbSO z#LIpoU7N?6Fp7}r_aY&M{IB@A<9iD~AI!o4ZqnfJhAaLv286VGrX`})rUQH9K;39w z*}d~kBa~LDVk3g24zk?Nhef4Q>F?pmT!tmi)6WfW8wW>^{&Q5tY8N?HeTnp}_jiA< zp{$-pDmD!0R;*IRYDA(_IX-cOLiRA*a*jco-}p_~H9e$Pa4ly&Z{BA9%%HK&@+&M) zyA67F-m?Vi(V9~LKn9+^x)KZB`r=6SqfCBsw-z9|iQUxn63X7t!}w5*_kOOOjgpZpalD@C>(*J8ous$caNsydXldN)taUa9=hn>QGq{+550e zsI$X_esp{j|6pLUNBUwdmk`FQ z?+-kp=%&m|Yb~e^?mlQqCZ9U~<=*8_YHze#@H0Yb|K^e{?~TJPZ>Gu~+*E$_llTbi z3|lO*o4whG3KMh^%mdN|K9GW$ub>#A;T8HVjM!JP$Yu5x=mM;P_xa^&C1w|lX`ce! z1uz$$?!^(I1UTbQKZepvs^ryxRvCOvyE=~Px#itMDagANh6AyZM!^r$KZ~dn z3Ky4IP+^;)EN^~>z#n&e>aY;g3q2}#^}MVw zrC)50{A>>9y;J6dkd0||P{AHdVEatR8{o2b5T(Z9Kf9fLe)K3*;=U*_6gwEcQXp;myhlk zct+vgYO4@0%}oDys9v_s;C{UxHTb%)U&HpCS_s=*O=LCYdQ+r}7qSh4s%X%WnXwx? zAlG@hhV=c#SsD9hFoxDh@gWf2Ed}R1MvWs9QZoABU65Zav+J-Sa38al^m^MPH5jZI zec5CIiHf|A=~3s$9pC4$Jz%X8pq)Z@&CF@VRoK;9eu{|Yd%riX0k$|2N|CD#se;+P z8Oh<0yta30RH(bRu^6E#Gzz z?xS}6G5LC)_JF#4%d-yTrKj7F$bI-G$!%Nc(L(%^QwmvCPT-};MOX~P(t^u{$Jj$Lmt4tB8JqoLT zk^)~!^7;bRzFVyQ#}OZdx|b}zjXi?Z@}9LPnTmg>IC;$<|Lv==-2+$2Z z>kSbmY%infc1Pxe>fOd=DlhoXJ0~gDT6moe+JR$HF%r77M-CkP*PZ)#B~fG0sdlGMW&V-n zeme6yu-T*_9NTuNs#FO*$T+ZI0UiKGG*}<#oon7{MwCUvHtV0A3y9p;C&4MCX6^#W zy`@Kd__mimGRrNi^6+5ozqC$$SV-H!HYvqvVB?2q#|y22%Q@#=m)EFB;ehjO2i;4I zgZ#62(9uDp404S{OZzrk``tA)W5goTg@?dr2HgKbl4cH$(mtp_W|yoWjGPqaz8vG+ z4BtrDQtofLHu67Hg6Q^DH(I6>`8!&_Ql-B&W$PkVBU|E$`N|eiZFm!QvXl=NK&TUV zC0K+?*ttxP$|mK0)sck2XKoitKkynfPZAP_Vl(i&bNTxX86g3mFyM6P_LCZWOGbnq z?ge|tYo^cLG>f@YlnCeO<5*TT1fm%m4O z=X>R{EYAXhmF~|accaCEawO(A{5YOgM8x%lqB!zu4{To+)NoaMwyXm7{vaRyXg&PV zkwxkepQG7)sC!WaN)n}1SWV;7f@g1Q!6HCtQw*RGMg_K;7Nx$DxYPtDse zWC_GbEJfEkO04eB*Y3&S*rx%(If@bPlaA>C1FZHYRs~ zz+*A^;BhVGZL@R!ePT^{drMj?7dZNBuwQI0O*|5H>LmrQ6S({%TL` z(wqLdJmFVtGOfezUibCGwY5Clx;qogXGN9w%KZ zehk32<1ET{RU$GX7Acs{k0OP`B?P(d+NdQ zLV88j;tcJ3Ihnn>WBUCi!~_g2@N@Eu3`g%+nwxey@<<>(@(^7hstj(55?~zr078#_ z*rWvJR;-nJ-i-RyZkcEk!L%Lih4fXv8kgYt^cCOR;MF=?dqpdWr*R-A|TsyAH&jn z`mOdIzY31s7Ma+C8qc!GVE~SawierKE8$n7_}{6GP5>f0{gF5Hvc`*y-(y&m{LYRK81hyHAf9!XN05zcZHzPGMF}#2BkHLuIFh`VQvk=DQ)<{$4T(d zSuH=5sLp{SzaLBBxMxOxK<2s?1z-~bp>?eJ=#+~xxk3BT8j`+plg~^rI*jz>%l5TW z#)Bu2C!bws?rRyJzI;MQkVop$^Jpn^_RD9=tWP@rHxS^`l`{caW-l&Ceq1@`NsSf5 zSa=F=v5(!B{e3(B^E97KQGu$`75>|&jRfbOtWj2egp>69{1UaMY_Na9nAS!|MQ|kP z|Iqb4@U0jf3~B!49j;?r*O$;ls-ngjEB6ol^(y;fss;S(Up^2AtAlQhD@H7-r33_q zBK4T=L7IK@guB49>kY&YFW&Np8gY zMZ3+8`62wA4*hNA8(BH0dcC=1P3`L+ zeQLZ0&WO5jt4j0YC=&W0w`KuYcPRTK0mNexxd8qDLb)5o|2LGIS5j;^SpWUj0K=%` zZ_59Ha#Pu=BHupFX};F0)yRKS6WSj>BP;mdOzu%~@W1Q&nS(z;D3z$$X!(Hu0&qMel;LeqaeXzCtW17>$r*AYo}SeZ9*lcb?=Q$uh2c(4FTs7XY=(_6v=Pf(F)Mo zdT9mw6mp!fIMj;ke08fUcrM6937@bV`509(j@%TrO3ZoAdg1nOv%ja~W>ZaH(tZys`hJgU_F{g)g2^{T){T{UvRS|%%oD*Z4CL&Yw|Vdefw&xM*1 zI@Y)x5j+5HdKZ5LD&*K8>b( zW*YreXpv z%yQ@yHKp9~8%A%=`-}wpbIKw86oxe9%ghQ~{$2`S+0DfPNiYKvUG9=6UT>(m{+}LE zT7q#_sWt0mp!-}mtZ>sX$A|%5&d;MaD1VtewX$t|R-+IXRN{b#I!(0!$1KZO1R$21 zUgs(+;d&D=o$Y66zv2!Oc2xK$c0zCshA=v+N?!M5ejn2x{F5+cYYu^o9OlNW>0C>^ zJw$rVKggQHYMn0Y+TRz;e+`LSCqUS<9C<8)KjQEYIw5$czrZ=h*jLN3}og zP$YEs{(lw&)xnJ~o8(E~P1Q<0DoYqIN1->SJf zjSZ=TuPD)YB97L6@ia08z9GT+*vk92j`1BO(uZtZi1%h{KCTf`|0~7!{&V5_5a%vn z≦t@@DuObAFF2n1lv_&>gLLmz3E{N0Q#2zFH%udZ#j6HT%fYDD4B~(dMVuxrfvDrMy6<8?*K>4&xE<9<`JTqgO^g zn$ikkJ$xEFYx{7iV)WCLIWw6B;tJsG*mD1ympk8tfJXVwJ$_uNWnsCklfhP(VF%9c{37gR(Z_kEJTC1rce__tNz(G$*F`m^KxDepxu zo_1p8Av3kNVVeX(Ww}}g)nK=1%dP4PALa$FzAit2pSb>tV6yZ{AiFD{lmd@S$}x=0 zYX@F^F)yvGvN?3kE96W;TUWy}r^r=2Oq9Ers~tgD_z;dM$C|I65!#o0@||dTW#we`Y+zfu^nnF?DUaJr|+wwsu}K=?9!RMC;iQ(YfA;xNQ8&^DwMzdU)xR zW;Z@9e&EYaOmmQ0X%uCJo+tbn)7+dW?56qARf9T)+~Azt0u^scX}j+bqC2l*+7BJj zqo+_MfcS(T=InPkz14+ewkd%+RBw~?fZH4~vWsW8GI(fq7n*#64pj6O+&qYGXUKS|vfUEzVa&H2nV^5Wz< z9RYCQg@|k3tSi?10c&srPITM1zcRwC{cWgJ9crk%uQc^@_s?&Yw>{x<#viv065=n) zA3bP^v4_&!Q`YT~7dyFs0!}LT;n)7Hfbnwq3;JYN$Dfg#SjY-x7ns+Q%zPKJ*bayc zq4vPYq-gqssWZN5kj~m(2Gh^L( z5u(p@;ILzUS71=6GIvf@F)b^e$eiX08Yz|oQaV)yTFT$|YQE}=eGmO1LLPH!RQGxh zeXAvF65i*3LXjZdg{6N2(?sqFM8w%VRK%!$?1W^zjK=WqW*@KOxul`nz=s_onc|pz zKu}|Pv-PrEUx#dr;a}8>!6&YgPo9Fc>t*yPjS&AS>;rR;W#V}KiCK9jtG~ln-4*m} zU%vn@l|3`-x>?0#0K#RI4Nm~&A1+O&YBU@==B|5&guDpk_ih#`2^jhFJm@F&?S3Kc z$O8RlCc8J?+aNDn?f&%y&X=iq%p?pD$-Sr-2Ew+FL^|Jln47UubgJs>L{pXHMYi2u zSk$s@{E@hzb(nE0IAY&po^70m`pU_HT&}QJ5X&z6%-+$HJ&h$|a~;Ovf3SVv60;ro z#wjJFb2MQx;s~j6=XO|W37#CPPcZ{9x+$&95jZAa&jNMGfn->4g1|ZRrSrbSga=bU zRosMqA4u+{8(#k&{<2{ashTv-c4`Ia3L~o@pevH{~ZKEmIt8EOZs=}exfFxJ=--Qo5u~G`%28e2)yjg(1(`B ztFkvVT3+JY8T%DM;0_i;$GCgFmRf3Hj?Hrm_m?i+54#%6sBTP|_TGJn*6v;qviH4s z4VTcesX>Y1I;{m7fJ{9+uKnqDAw97MTxH^U_8I98_ngV>D|h3nQpK=0(mbfFNwBa| ziJHqS*AXbrrbCL3%r*(Gx+OE(c1}jlwRWaTkyomWRXUl_@QYeHjG|^&c%ml0b05!2 z08&VwvzpZ3l$T~I-jIQ83A-xoDRDi6xSGmD7k~$W-32t!YF)BMR}oaX^GN$kZM0$J zu*YfpUwK8Ro5|E@nj!mU(D$%4IdzJ=ts;-5epK5q&}FWD&{MB~z_=h+J~>UwpjrW) zJWAkB>-lHSgmw8A;M{{impZ z=;vGi|2fZe{R{tqt;{VM-+ECik4!Nb(7aVc}qjq_q_E^h3VzS-6`nzG*Y!8E*4)>(#Vk% zkJL45`@mO~JZ6%~B`f_|44cTiJ(-t@=IrX0W_1zXjaGCybH3KaNm4@~98mb?($tJH zZWnNkW@6^9deM~M!y(c?QS;+6JAdQXJw7S_@OyT&uNq$>C3wU91`<9yt0aB8>PWqB z3XklzZAzilD9$4efaHTYD)Tq`ZF};6I@`YsMCVAE4kY#4TqtdA6oc5C!|Vrl>y4n> zDQQ^;cA-H&2ig1dl!U1O{@P|)wC;(oYeGHRU97#p07rPw32;+mUCpJXf6jbH^)~^A z-E3LSa`g+rO!lD+|7NBnsr9fkC;08B+)EWGHaka`7dLQhb4#C6

MwGHE5K2W-lS$!UKbnQMUmWF`zsMnG>y`<)8Fza+?I zu=f4?nEyH%BmB(P>tt;xg}z|U-^(ukVpQ&aY-(w6&zH=c^RYpvKeA&gi1@Jnyr8q4 z<421N(vUyU>-1u{{%|b5ldG7#fr%H%u&X%QWzK9*M`)JSdMWe%FAr z6|V3_fM9xR#_q4OhO@L!V4dFO4!w5mOi6gwjmsL%Bud;;(hPhyG+V2dA#|!xGx&4I zy!2O|t#G+My|;cR7DHJz*Zn9nB%|@PYXM8S!^<~`795ABDby}7l02{tqq+jrSMvBl z$iuC}Q05%Qx&aaFJ*{?sorr%!(@Tq=-UwH8+T?Xqs+9O>soAH+LF_rOan^j#cT@Y} zNm(8zYvQb4{6&YzGGLhu>6M{H&}6{JsMSAo9;O7W7B6W=j4yOsit_Y&M^ zRg-%p{gPw&dYX-o*~%cbDo%aH{^uWE;0@JxJ%_@0WuI4HvSvH&|49EmvaR|sm&*@I z65#c5uj`P;QH&>**^>lftrf5!*28Z;l@jjNi&O$aCfxr-b?L3P*Jg@^++DK^q28pF z1v#aiyS3hdTO)NddqYD{KeUkrdhStWkt)mXas33dx4Qph*w^N${tpAqo_)o0R@g55#W zr`9VoAN@L0{^2?QP(xT+nUAx{`1d=G#*Z$1SKfaTD?jlyG8AK+A}A3X>vAY2<#FXd zVCB2CJxSKNE?=o9K6`B$I~ZWx7bv1>=!{nHt02^9SD6%h&e^o+Ov!&)zON#mRcP~* zS0=5Syl&mBy+ca0rjOi8h)B-tykY)P>qPI~1M3j7$0^4J-YhEz51DMZC=&V~sPgZK z{n7gY5?HB4M6{ZT*W5g>Uc*QJ)~0f1^q=Pl(hJt^0K+*~m-{i5nZ$7ZL@|BRqY#vY z)B8icfW*mk>)=znH;nhEf%Y;xlp5ins>3%25n2*j?(Fy6k8bp%Rznw9llq&d5$LJp zJjs`Q%C5Oy)gs8I&bHST-tt?Ks2_Nl^pQC|bwAg#C*eP0epC$SKi5RklLXwW*ED&- z%1K%gfdwmn;|+%n;*)9qzq(RIOKus7o19{HnZKy!zbd=G8r5pDvU_!#aw2LzXQ<`> z?n@WG@$X8oyq0_>pjk@=$QT{|>h_olzqz!*kq>*dYs{6vb-8eFrdm$xoWOf7=@Z&Z zm!#pz!6(j=mWV-rD(nT%R%%=l(Fay*El}#kSTmH_7NEVUV})UhLQOSe`!?Fcky4!2 ztk9#oNhh>Xz=oPB0Bg3|%@rM-hB4!-EqFo$dE4TP%g!T?T9Bh>M^1?*V}waV(>j?Z z`|?ajFz5<;?>{Z{F-&wN6cI*EMiR(#a?IfjKR6QV>-$zWl#Ux*zqUr{-HkjO>)<3c z8OWz}Ji{EGPPD(-{B*m2gd%o*FOQVsVjm?^*&QbE=CYf4y!}Cvtd6OaHRZ?A0wQt% zcGPtw>w4kGFzy$|r+^oDQYxm#&pPQ%%He)JTQ&*v#8~PRI8D-P_-&ci4@bbXR#J%? z#M=?_b^iJAnV5_|skS;`2t1Qmho5OB0VA07xSgK)?-otKW~BkZmYHIAO9;-Oqt)j3 zckR9IhQohby|0|BTkmtO;WXHz-j+a#zk`qL_!=b9@a#uS4z2P`d$SnW2~;c- zy20p%Mzu{F_@wpX{VNh&Lq?N>EpRmj;U!s>Iw7tjajl0kRc8~PDNPaT#%@fHvfu(4 zdrj%fodh;72|KBOr@xBm@{hs;Bs0tjG_!fra z_KmHTA*zz2lH6UXO7#97RsZuv`x~-|CyJAMHLPx^1^*L?GIjt~Je~Ol$oMoz)h~d$ zFA4X-X-UWLEdd9zx1f@YfMiTi)VtB{vNi4H(u;j@WdguIbtN|IZTH{huJ|#&_rfAY zpeR>(86NN?a1zaEP2O-^X^j?q=)DGz44%eH-nOy|8aBL@xyoj&@pkW}wu@>3*&{aV zR{-YHxT1v%>LtR^FgDW~7s}}D?bkoC%AM@c8o_%ON4YMakC^6Vt1Gu>F3Z&tqP=U< zif7GoU3^yCoh@_QCd#}wEj!%6{OV^!MQ0`V_EXOv+@1`J)fcH!dF}ZQO%$>qzcZy4 zW;1%4K6iW^8pyE^ioBwU-Y+@L+k>SMitzAnaps!^9aCt?9hbnG7kn#$HpI9mn2KN) z!?MIX8KV*&f$Se-eY;;9oLe_JPmcp5p;5b>n0}Vq!98?|&lim40$lHZE+7v`w;#IJ zT5FMKPGB29Rkt-O$6YenRJCo;?dH>DyV2 z)Oxj2HJg^l=f$-wE36=&DxD3^)}m`e-iF`JBngBc^koENfF5?-r;_~EJn;Nievx%H ztDED!67@#31dl)BHVBD9rpn~4+_m-Qw{Yt?!}2agS-BMM_x9*JtQlLXpIa8~w6gF1 zK0-DeenL!i;jEJndu2*+@(utH;;1E8sZcT11oleDDZ>6HHbfG4t^11&lb^f0*KeUpaNrW+%w}YT2 zK%e5$M1Ax1tFkFly4SZ&P6Id0ce)QJ_;#+ScG)QahsB&rVJQ@+wEn8R`456SAD0kY zFZ84c)xt#$)yOCAoaaw|)PACe@xS9qs|CIZXmIXL>l%>pzmj?x56b zA`#@vT!cq19`-U1+7Z=L^it8C;bx{38gGZa&k-k2Up;-L1byR*(z#~0cS=nu-F`vD zgnl2$>vl#?KW@grH7}^>BJ=En)CR{ryZ}}a>eoaXe*DFvKR-~;#HOD7OZlHdFk;hs zc9xffN?rq)%#GGw@%YN+)3P2@j-gprdLPOlH>gnc3JMM|jQXT^v6X^Mef0Nw?xT>= zvCNr^nbDxji)tt&u%(hiT^|aKQ<7W`^E{h=RJ_>3@bjkp= zel90@uk#7yOY4O~XTI|}G^_JSfT$FHKQyD3ry_gzJ zc{*aftcVn;$?LV=^vaM{Ejzs(|9JUi=mvE~rwvx{z3x!u%4|K&3X>!Y zYl53m<$_0&nw;KAU-t8lZ@jio|JpMMrL2iognW#St@@N1+F_>1d9fW`s~xXujG{BN zsz$!l;k~Ba+#TAhVXrYcHJt+Ef59QjcWS1@PPg;v?1%!;vZ5&t`z^J9YxIdi(IXw0 zwxBMl1m#l2YROC0Q4gbLNLd5v9 z(2w21>60u$w@a~MVD;am_3v42LHT$XI4-FZbS9FSSlvDWI`0=9kXcASVXzUwEUt~2 zv5!v(9w+S&0b4&|d{RBmEB07_f2j(mU1t40KT~|PEr{R70LyymA;~9;nZhG&;PM7h zCoh5Y@I4f_o!U?+f_eYgIxEwe8?mJp!a8)2s~miwjTsam-zi@1-zz+eSg>>bT{oe# zS)@3-azK?sujgTS+}sxqJblo1%pI@7PZGB0c4~4b^Br~=@TqH!s5_Qy@cCxy=Y`@? z@Wi-a*e<|#n2vbgX50hEuvDK56#pM(uJz9w4dizwAD-(oJ!;hOp>#WKtMDQ>`puQE;kyvSAy&o@3V09~Ri z0@1%XBK2t?TllfOfO*QbK>X^_+US3)ocI`qR=OG)EWFV zMTz~C|C@)4hj}lE;kSP+v|ki?d+K9XL1_j~I+u#{6hsx8yGC)zo0DJaa(4)z20Vq# z9PdDr{j}Jgi}UDwkHj{yG^a9ejPOptM^0wL#AG=gkVnEy*EB^sc80^2mG8f4xNIu| zOaO#{G1^mio?HH#A~O?dARnkQVyD9ifGiiWzh^B~olD7F=hNM{WM`awT-wqxo_k?5 z9PW?`Fz8*l0j!ZhYMCgYpm)y{<_C#6B)hw^Bs$Z2MueF6+3v3lw{d*u_1@;5=hjqb zDTxus*fY5GGaPkO3=7oqsP?nM1*pJFPL{EC>$m0DJ2epHOi30bL)vEN%~gX!iADvuUgy;zM@FtWL3pdETyNUv*mjz z!+KgvyL<)_dmt90ltIqL(cPJ;yw4*3j}i_^Qxh~I%cQf9X!X&gMruBi8VlS%7Bq_p zP{xQNr5mch=N}kgm;10Tu>jYCR!j)b9sGWvyXj3^uH2xRm#Pn2bA1T{um|I@_|(BragIC0m z8K4x20W(#D31WYWd)}{Qzm01ueM=S=Qt*#A&nt+w%qVmE%#~ zAH^;WyYopxD4Znw7T<4`RRFg}=dE4w-{H;CtJihM_9F@PJd&|2ECCZt`_Khow|*c@ z50vabWTN+9SX|QOH+$U*$iIgvv+3K2i>VK1c5#0a?~a$UHspYoX0lApmS{1ZK20Bb z{jk&3O>ey%afMkLvJRznRyra4?$DaiyqDYJF%x*t>p6FYEe$|9)qZB??>Fa1GF=a%5>C4q>{^P3eQW-8^Aw1AQJ4=~&vDer{kQ#< zv2qNj;YGC5jm}lWIRmoFa(_wV)Vpnc0ThGV;rOV%vbE&Dm*W4cQ=G?jPT40WR9Ldd|H@PN{q|2j!`xbM~ zHfvq)hCREQi}^X7c?`zAx3^v^tTgp3r%%}k#GanSj0Wzm&6PqZK}{rxE|VxuQv1&a z|7bgOu?R@}GS|dh^;>XYeqi{xN0KS%HTN9(jC(1fXcn5J=p_xKjb<3H5dTU?VgYBb{LVLU=X z>U?a1J_p-}E);{}@3V=3#Zm)v)fpc?f5rE4}Ykt|njBx~mD z2IA?3&VLt&@Da=N=rN#=t1)%;nH40qM8tLMg+lF6r;h~e4VUjQ1y2~-Xz!F~QP507 zHvIY$unrJCT5lR+tBwC-7iQO>oIj)p*n8w7urcOtf1cdlC)eF#Q8H7rhgs_I$~_R$ z000{u#D;+CxTX|duk zjCmP#tgC^KR&WPt*_Y&@&^yRQOMX&TaW58}45jw{g+330?rQLSS3=ykot(3cr%GS= z+LW*N#h)V&6Qcjm1lAt*UBnTa-Hage@dnXbK`#g+oa7Ct=f0lbC70+<<-+X6qf+Mf z)7ybyUSpJWvVNT+UAn?-JocN^j zd2x3K{yATOY+c}5J`c9uSxhHx4ovZi6uu=juX1#Dfi6FY80He6vyDk8*AjNwrZv_@ zuWLx;A%&Ik`Ub;h*`iG0gwPK-Usev&^#KF;Jg-t3i~i;4 z@+7&|@*ar#Rah2$74YUtji#}G@M8^a?=S-IqITw0zmqqZAMzM)bTziK1uu%uPT7Qf zPPAA_1=uR0H}r0wox1a~Po(x>4%78e$)4+{sq^(P>sFDujeA~hPv&AyH3#>gZQM%) zU+NWOzFk8Z46eZ%z2cZXPGBKRs;Yvo6dECyPutR{&mBcT?{>iu&{~iE^18#VQ}f)! zOVw)2PvfN^uQcSJ9@;z-b!Vo&V7}(BjV&THc@kbsF75|bc_R)v(!GeFCi&}N8>v5wjV^+^TiEs2seoTNh3Xz;1 ziJIbtIrs+S*%GE7fBGJAQ`4$~rFraicW12d(_jjO(@KGa)@&OAMxZSs z|E=1Itr`+)GC<52L)HFJ(uIoAT%&#dm>rnX4eZh5_>(^XvhjTBG0ICw-5R z>6)_d&7D4nhfVs`qbZ``&S0xQFe%%M*TbffdO^=&RY0nT;-3KKyV2i?+rcW;^uvwC zR=F8wy{y*9@uA36jxg_{fpZQkmxA?A(Rg-E6w}3bS6mlDSo-(_XKr>V>jr#WCxWuy z+r|EmQoGrKZ)104-i8ovq)3IG*2#aq@6??(A{}PD@ktAGZEtrtaG83V3rb@nM6K;P zajE^hEaN(}tp2GZMP13^{i%LS(&FNv@0-imQdN%k)5SJ$>0c;A7wc(N|f2W^I?!3(#j~#&)LYrtpOopg0 zfNJSD4zhe7E(QNjm7Nb>%t7FAO?cWC)(=DDLhJ}=N8oq4u8|+~0P_EJZ5?cDl0-{K zBHs%Gy3XPRo?E8?t@fOH>;b=xCP_(6`5Q9nkmIZs1&qW`0p)e~APW5r>(ngH0V!Q-Jvzdi5`5ADd-FZOq`{?KcJ zmn-w^B>E|n`(auBK0zhW1WaUfWu;d8y+)H98>^}_gz&v@-*lIfwg)+7ktMsW5)m(2 zPWIccJ7raT)5LT8?%~wnS42*J`^P2# ztvC65%D=2;Yy(v8e3A=emnpZu#8gbp>QW({oTsKkeF{3WmNZM6X()jQ{hcC6Rny{t z42XymO7aB%LhgV-TUZ9_jmp#5b)cG+RFrhzU<$xlRbajab&Q0)U$Ny9fbO#<2i#Oe z>((s5B>UL^AFj?joa+Do|3;|HC}bTXQd!xXgvzRvotaHm_HmFRGD2lLL?nCfbL_p> zv5$RljKkq@ob~g5f4=Mb{rCFwbzQIPdOV-6`{RDU-Tw&k#(6hYWN1{Tn+6#SksZx_ ziTi3Jg1ttsOz8HPGX@NX52ae@te~>6rE$w$z4O>xt|Hk~;y_k^EbV3Q0xE+HgwZ}# zD)69SA{K#mv%-gi;jomma9}OnxVkHWytj51%JQWQO4Ak61E-p?-@4l(Jv;-RoZZDR^pegFfmjS9F+~h1dyWWg*Eb$EtDTs=J@=b6AwXR%&?CM5r~{@l z{qupzGELn>cR=a+ZeCFi&}Z0AX|g&;CKY(S^uTgjI%o#l{i_pOqUxf;@%% zLx_Fy_L2}QkhG}{xobR7-N<59hg>6QKxV!q)_xwQ&MgxoRC*a0JhXOu>$4TR8X{Ol zW$P$bx!`KYy7UBA_s*YOQ+n#7tR-j6V?XtsLKWAwr3tNaZg=+*{xbzeKVv>rwsuYZ zaNv8teA{Lf?zY-~uaXnIk;=lN?Xl07gx$kBV zFNx`5U^j#SEMmVS=6?aPWl&k!e-5qq5&qrg2)*h>U6_Pk*D-@Jo!Fu8&(ionz$;IG-V2B<$=x`7y1W zlAC{dMn0LqaLU{0qHu9C*PHyK9R?QhFKE^$(&5aQ2KxLkKmygz(osT~N+hnJ?_zEztpF3l8Kf`vpm0_FI-HNqWO&W<{Wc>bP zbW$HMR0lJVw=9dQ4g7NdM`Pt5N`vn-f6=Rbk5>@w{pZ))=c)Fie!q;EKsm4Lo_3~W z-#s$m;i|LZUCA`e-*30h;E%H(r9P-(*hdMenjAOJRu0Ryv(ms6*v~DIeY)9t28rJh zc%!Qvbe&lD0O6IP^qBSt!bZgCdoccJbZMC+2K0>(MgFrlg1?~w(j)JL5Hi4*%lux5 zCvFTdemdw$L<^hPZP`h@kM!Vo`LX;D|KVS%cKo9-M+-99pg3{O)m&EQ8S) zpFGn`SZ|@+Bqoy*D-YzE6P74~!1iM6u6>{58r)s3Ei-W|84R`hH2RPxw`?MuK?|*w zdJv+>e@AYq$ZHi}a#)R0Tf+y_`4u(m=qtE)j&2pt?G!Rbtgfpy zMO}I7P<&te;&J4=7(c8y4N_jF8`TZ~#1h*au_&v{HA!U<>z06>hGxs6UwDM#k+>G*;GS6wcfdX@48RpD1q8mh@26cy$HR+7KGhP$$ny;V6K2o8(^3~BkUW@ZuH*y9}n z8<~d-ye?uRp1+TiyPg7v~9EFyYtex4CYr~ z!&dF+dY|Pq-dns7qVKD(1BikLL*ZbYT$eEi6b}m>Za@esC3?~O>J2)O>6rG>^S|n!1Pd)NyF7!0=(53f%AJ(ybsum|(HMNU3toLc!n5n9x z6fbr9_@M_sr{>*O|Gsg@-`p@rr!Dk2w>gR-;P>5+b^wZVb97za9-#w$+?EDTzgkfK zCD|@XZu6hb!OwKCd$H+WqZuUacUGNW0Ln<)-WOwF8odu%wkT~P9U zm+MnxpUO?)Ld+8(s~VrJ< zvO9*rtq#|>ltOcptwQQwpO+S!4HY?FAh;C7{{^zX^OtJ1TVII;2UYP+vZ+D_s$#O^ zBN`#(yvj}gx`_VA8`?bekD5wT6*$osv8LpE*`pu{@j-oA(`Fq7rB;1r<*x?(t(o7` zLW}ph@F01Y=4gaRgS9s124@3RIxvzsGi6VIrQyW2EJpAWsR7x8Ln5KztAO zg-M1yV_INCciHItMii2tX6KhXX(+!+OfnaNPWb4Vp)V>$pW>-^R@DM5=1g^gt@-mA^eQng{ z037qTBvNTr_>r3mryHRdAj;0WN!&;Y-9Lf{%`l~?XPqnCO6VrdusbD<%}t_ zvZ^sy4VQ6=7@ub+b1!ySGH_b)Mxj!7uS3A8MaVRD-u* zdt~k777f?PkBGNSD%m#0K;b=ndvmJDTZ6W!?uSiuZm*7P<@`k7v4z%?Y=veoXhmmU zaiT@QMDvTwROqk6Dd2qp(z_mDj%eng!tm%r`p_^@-GiszyNrGZx4!rQWM7-O3`cEh zRo=8EJ%I)wWT|5JL-pGlzvNA)F|MXueO_idzPSES6ntGg3dyZ^gp}0wIy9th_}lSO@>9ov86Y6hkxs&_LCt^1AVR|dB#f&ss~Zj?l;Y@MN~n+611Z(O>+Bd$&CtS z+*2}%?pImdT~!WH`%f_-$&39`}ENeH*tnnACS+REBz-p3v6wCzd? zQk_h->4)00AGCP+k*MiBvSPCZGzyKGJaRJ+Xy{^b41Cdz^9DWpICMaN4~H5|Jy+0-nEnoo2^JcXc^t8C z19@m`m*-Ie9NCm7*oBaY&qy=!S`JrAY!*h|hG}kg>b=@QwDgYP9HE83l(9D7#pL)y zo>l5NV%^Eiu~A#Yb4Izgj<~9$O26ewz^NI1M$`RdOIG$ zwq1L0j(yE^c6nYV0W))_e{dG>dgY=k+&bD~$! z2!Q^@pG$tLMWTuuHqX(a&G~YU113wB&-fqf(0@w;0VxWoDb+6u1{_G?YeyF@2%COq zM6_Un8w*>eBU`)>+5$&D_=T6yW*5(JmLGJub?kMq`Ycm#vJ)0wXT<>A^p!bK&k4}c zwV9SQ2-y1VRf1FmpUiW*=Ew$|;F$J=RG9OSUD5NO*6fc97S$`q)L0pPv|TMf%5fYj z<#Z>LTH%<}1y#Z%xViO=1v_0e-MsbByIHnUB9zy%Og!-YV({hjddQtw3sP%9a8`U+ zxnXxu>-q@68rXw;p%Rl9?uuTg+hh73yzKzpqze=Yo zS^I)w>R$Tn9yrG~vG`BG#mD0Su*jOVY6?$(e6zylL--MQ%cY_a0Oh+ZAt#t1EFTIx zg56*2GFFfx)*u)@E;G-IVTx>Q(c3Bc7u86fjscpSJBEd}#i4i32$NRi4E+3ee*Uog zJx=4Zc?gAG;ib3Vrfl#Dt4%^P9~!?X7d~iR^)HH!lJct(3Xdm-F<)FwMoW|CNzj^0 zi~Ui2ZM1L)5u-^9Q$fn)XCf*tOA*NDHbwE*({DGao3gJZl6fBt}#jcg$Su`fMO8i&Xh054%5U`bT`(Ni4>u|)Y+0ceH zl4{g#y5D@kYKJENyPy1WPbO=?AV!3_*I^sFioF?sgmFb zi}Tf^NfI2F2Uy7QuK;18_+G9249fRO)Az9UvIciyghX-NiLS`4s}sHhHU2?iKS@zF ze8Va&?Vps-PRDico&Rv$KB*!wqzDYSzA83JWPLY8#x1q{`-=rA#$U-jw@gDv(ABn| zrWW`S{qfEjElp|!BlW$YYAPfDlc^kC8jnqX9-5&%>Q^Sym9+}T1@QRGPn5p=rk;67 znWlR#K@7H1}OX`!jDs$W}>;=6MU3-&>!!(H2UiZ#3$Weu4kg@z?be)0RG4EFr(R-!pM`;1Bk5=q$ z_u%fDF=-N=(t|fZLcd1`QM)chEem+O9<(|;JNPYG@#T{^GIDi+m74v*Of=gq7bBd~ z`V!Vub9H}iC5Z-zJ=zNS!SQ`xrPZ|EOCaF5y1!KDN4K_rqz$TIp6ZoaXv=H2)hx}Z z$?%)5>x`&%j&HzNy@Uvb#w|0CmTG{2EFZdU6}AQvywV_Cmf6-Y5rNC3c4&Tl46BkxB*f|(P$u}HA=ZUy zk4W?M#z=qDxx=!xfCUIg!kM{ywuUx;+imcU9E(aW#;WqdI&B8u=AHLAQ z!d%uwVFf2cjg7em{%;_ui~)b3fI6u^251MGtrbP2WGl=VE|+YMM(6;#Mta}Obwss# z$puK6_XQqDi#h*UK8iNIQmDlfYwNQYAr`1~ui63q_0uS5t_%{Kh6OT}wM_^*dqv3z zvLB-Fm8hWmW$_1djNt7#kHpWFEnnkAktiBAZH%6&7pLUirl~2ifU}Y#Dc(xo4~7NW z-k?r@5aIIbiO26N15`-b$B(Ug{z(ZOj**v{TQwhs1=EF|B!D(C{i-;7tKO~#Jatdn4OppqI`MwToEqWDRvPQ{k-352Kr?_-6 zPPnOlEv+s2R~%&1!@Te99Gn<45yy;$MD2kzxNq&qxcfl;uoZ(nx8H~*5Cce`YG;Sl z4XRf7?Tnd?5S6cgf8YL0?L97~EkRfg!B~Q&W^Tz}mqF|E(qTL3rTbD3Py7wt(qO z+>P3S@)miqD&gm!FF45^3>aRu1k>=mo^jA+gy5`5EBl>rjEgFP^qGWkt+&ErM|D02 zSM?iAkcCmtqmx&@} z-YrX~twCjKI~QOPn{#5OwtC@C(*cT)&4@E#1Rz}?3hY-EefO51oxU_Bo@$N1Yl0@f z2E{WBNduyKcc)nELcRcLT1?{8e( zQB``O@{Zc7fzWGKp!Kx$?sYG*h4yoxXuqQEhnNpLiFD<2!4H+59;WBTM zS-KM#ab9Xf@6fnf4}W9L{Z^vKPoK<8+h0jkUq+60`(DPcICe;2Zi3cdUl1U7rpo3WQ) z6vM_mZt1NefS3aH#+?I5Rqv@L(vXCf2rm&?%DVR~{+&lhihe73G#0zSu}6T7jrd1u z*EWa|7(65OXQdfJ)Rjh9*BAN{Ws@^i?;lWFrlby`9AP8x!t6!WeK^IR#+&E01A-On zk9B?Yt;7>&@ugwqM5Ap`A6%NVO4;`|)UCAVfB<$|QNCHsgZ}H4R7Q+eA429H%l>Wb zuvHvorWSBldACj}gBf|yt=azFkFs=XlW|5+`#6P1_jceY-M1D)bigY{70a%`gc~R7 zW<*=(sAIG`uhh&@8F=rOYN3b97pbaQQ#yn+;rhuTspK*R%1GG1GFH8H$33)YXsYkt zPx)u{qah4#Hm&|H*>{G^*@I|!s=Y?({ZvpR9vz9KFZ>pCC%*Buo=Z`JkGQ{T0L9Df z$!fp4@^tjp4JjMSsU~@IXjgoqoRt$rFc(M$EObSVT;u@4)O<4!4zde!Udi~kku0Sm09(^baIlJ|;3naP?k!&`@CgWRm!-b6<6oNVpI$mDb zXCws!v=4sth!JW-KLlT#3X@S!=tFiaaThvD+pv>XibeFJ8Z)E&bCp+SpWUfUcQl&U z@mdD6i8GrZUf-`Job~?Y4KiY(|LOI}Vx4O*FLWl~9N%OA7eI(@1U~Qa-2$?FgmtNdf zLKgnadi|#M0wxGf1Cw)Jgx2~iahSnw5gQ~;Cqed}poly@0~R|EyW($4iAC2MI9GU| zwVs6IH|_{fvUjR*qvp!h;KY*KZyj^j&)L$#LKJxSmit8GE4s|YBysm>OxAOKZtiZ- zJXBr3+GS&PQW)BEvoIS=>$x|^jF^@4ZLB+b=@9wi2a;}!%5TIf&^g+xBgoP7U8({_ zwD#WSA-IcRnR;f0(dDjUN<09O@*_96++j)z&0U_u^=)ns8zAH@uPl#q`YQ~gHVob) zgd%w~Rwh9&0aPX?hv4Z3w~Xwp`OIR$!&q2@p_tPjg0;q_~^5V2WU zR)L1-6LUJK6{!ktd#z_B4V^unTe9P2kt)NlN`+wE!zxCgt5-E$Y-)Lk4HK%Y$A@?( z)B2IjvrL_!uGBpAAP;e#oylAHAl}5aj8vsLh|>n$^#P3~vML|S>+IX6bJU-%dy+?$ z7gPs_KfIfDSwGhX#`DYP2yf=MOkD~E9m!Wg5Be6bSFQCKqdh)MKFy^+;sU+xNl--` zmIPcl!e$ji?neZp-ozlC{d({BE8#bp{kM0lDAhjux;fRdJ&6pF`}7-hjP~Z>zPKrT z_^)T_|7@n9I0hx$eFIK99@&6zX+k$tKX;}40cdZ{MbWGb^FMOK;g}lcx>ny=2a~rA zT?@GX{6=rYpSKOj%!W5w6VoZiNi(2|D&iHG%I1|`*X)sFrk^z4hIF@=*X*Sk^E&{TMtg)FI3Gk~U!H=VUniG1{CHfE z7TCxfeR>!(5>91f{zbUk1js!C@0L(ZnaL_@l#wiVsp2y}RN$Wo_C}r-6#7-$OO{B; zm@w+?J9Bj`-O9WuX@@SH*+E% z2YS>9WA5hqbeGGmNwx@C3>J3Nf$fFfj2+6`R`O4r8QdN^nv+b=OoJ_VMv+vrt#I&n zL$$CiUi$Gn2zBD;V(2U`M0)pj-`YN5>9;eNn`;wGyH(cKR7*ty_G=nYZ$ZhwzgY2F zii5O+L)FNttP%3JB1e|dvX@d6XQ^TR@igio8OZa2XdWi(U`JJRL$*x7)(#A8j@hBs zqFKCcRly?UDB;H@5Ld=2`{FC&*g)kf%@W01Nm!Yvuu+^gL_mgM4uZp*2rHw+FXh+D z=tIxna*u8dwF335DsGJo~wvoImUtUP+**IPXHs3ey3M z4)a1$2A~a0uuASBMZo7HED7gYPuhp#xNcGHyFM;(Y&k|UzLE4ykY%6>D(CsU!aLk% zYhaUYY4PN%^45$5DqHC1NO^!%wf-o|{^XD%zm+D)Dnn`}YLotZexN6df#zZgWhI9~ z(5lYzEavhcwsDT@7E_Z{u_Ti+crH>gT&1^oIO=BIods{P9#%JKa1V|S3mn;u&=gVy zwuUlG9b`j;TltQ#Ee{<(Fg+zC8y=ZWZ8an){3)wqezsD^Y8{~}alQ*iW$W|G9qSrg zvq{kr-P<%QF^Qo(Bqo&dTDOd|E2=a~572yme6i6zcA5I3QOtZP6*~7?yt@n{p!}H+ z9N_qWko!t_*cD=cn z#vSM0vV!o{icNth|BP`5&%|ms3)Kbnm+vj5>dMg~@N;~#TaOq+T2YOncGY+5eU4$G z+6UxwNns9%(V%Gz8UJm>z&e@omT5)RW2W_|U@ z#}_EPT;puU1>}*1Wtehl2ZO(sE!GQB{r5#&t4nXbSe>Ivt{5(U<1z>YgMFks&DvKK zaj&lW)Yf?jyTMGlw}yHe_f6(PTgCqfABL&-y}8?AH~L*g?{U<%0Gb2F=fwusvvAs~ z*#75CpN<>lYwic9M}FLMYYdz5aD5 z{m)GGFQUY=kOfZc#8!acWvmzx=b7@0hsE$`yJ!y_-@}rD!4C=^6Yz`26doii)s9tGaYepD2F44^`c$_wXcwZ%&w|9|s4Y+>YS-nJyn!51EXh+yc-3AkTWnCFPzcKt~(0lYuzf*n>qbXkQIl{(^&-Oq&NhU^YtENNJB+Zpte$GniqwCWbcFo0M?tht#bQ zTQ>DE%CAdk#;zJ`_{yc1>N)&MPAGE((87mXba28T#3LdlSosXu$VxR}uwrQG7MdfL zueuGR!Ec{~dBP1Crjx)U1~PD2?m=lis=%FX#^WQ^Hy2&|=u@!Ay_M`ug!3kFK$c=# z$GhaiO&zb8mBVUaUVEaIns@m6!K!U71p&gS(ij3y01mx8o17VBgq|3a#)nC};k*!l zq~SIC)T4BnWs{}XgKYOK2}0yK6^v_B$>F_!F_rTd-B$u%Ip2a;=Yhp2}UO}EXGd#{p>rJr#rVH z2tErLBFlnO@UvRc^4@!OER`8EA^)>4> z&hWz|;EAPuxS~YP+rgm+PgmF-mnWAG;eVPE)+A&T>}%dli@8eWJF=fV ze)nWSdX&18a2aE?r=uXz%6;&g?SW z=(E*K&zo0?Epd{!bCyZis-k@gsvwtFq1dcX$Yu=pPND@dBM6e|W&DQ#)XwzF965|U zX?A-mLAi2f@Ag}|{1Q$UPB!Tr1H$xSQ$(&m@VB6|zAi(Yk@$NH-e!-vnnmni;p?J5 zogBvCM;RW^*C=S9I2M{a8oi4Y{umJH3NqyRx7!08o%J3R*|Tjc#;eQU`^Zi11WSy~ zA2hEWWTW~OLv#)I%(1;F6$iV@TVw{JA7bqMh+W9uD3Qq1G=pY|#uV10vR~Cx8wOKM zc`>t&38`m@05_c69|wf7%!5V;(=zm*0?=yJVFi%bRpK%Fx&`@ZS*hpS$A&FmLY33= zt)voz(o3CVi$FU(k{iHn9(%jrem4BHkrQ~TYs@%XXiP2M9v~j%;_L6q`7KHE4UPEov7azIM zmmQ3VEs`SsgF9uM?Kp4{7aO#)K5aU9NK%L6M6+|;#E^;&es5OVu&wvFf*%Z{m+m|+ z0LTS@<^MDO8*$X175sk2W2fM#$Dh!#9|gM5CS;J!nyB1^pBd+)u$`oVbFOQ}z7VX= zXvC#Q_Kb$({0$l4FM^mK%Af`qLFWQ%zhH^dJjkc(X%J^J=z15*c?9HbrK{&r%7`Zz z(A+CJd^0cBXjTuMYXfpfoPGch9m(^HzAfZOFddAag>2c?dz|O+1UT+Ni+AVH2%;F_ zgfxmQBq6wrRK5^PrOx}iX$ULnY-R4)j?urpJ*k{$4|zzywtLPFV_!|UT&wHjxAPs_ z^Y!DGi^*PcNBr16R}z;S_Z2UHk{J@2MN6RsL8bSqs4qldF1~;2|MGqhvHMIRrS_ZP zwx@RNM41q>t`b{_7my6aAVd0wgBiY&JjtX8w1dG4S7Mh=Ox(@kyL`c-=+$|?MD{c5-iEI7Ag^BEpPt=S`dEU~M12#8$O#3yH4A{IM{&&s` zMZ|*-@s2!dW$GOJfT0;e;e7~kXU zw+Wq`K3nAuug1zv*c-Fw>^@c3U&xmIM07h&pBd=fmBSkv`qfCDsjM|twky(bo+uO_ zv@c|nsm#PlXsp&=$hxYXAHJi%vhs9G;>MqArIfETSIZ$y{9S;9VypvJZgX46XKmsKE-1Z9c+au z>6}BfgyxIIZE2UC{w6;u?o?x1AIsEB^$@%CWX&`!v~8Kj^za<2BDpWfj((#~0)hQ( zd#&%W$-hsXc7lcsO8U;570AMuxEB_(6+Z@AeLBqZcKAVj18uk@Y0_T3@zH2)#*)f_ z^LvrR)|BUohtks~ior{x0|Y0fM1JRb>Y13N-Sjf(ZbxNd`>uBb^>Bz)__L5JH_Q!L zmq)LVS?_AToeCyUht=#TSpHuG-{C8o>|^snWqemVe=9Pvj9>n;9jNBsDV=P zxjK~#{v&38wCuM=yIMlMQNQl3_0C_ccj|GmOG;Q|vvG$4+bT3@ifp_ckgFL? z1?yYEn`7FfE;f%#8_g--`oF?Oz$U}_e2D#ru*RRGw8zV&%q^A>mbQOb0;i0-g?9-y zu_zyc_mb**uh^#b7NzB0qw8!6nAk(Ff8~G?5{@Fj_ISwK%upAr_R**G&yBDC_-HJo ze5DC?TZ5u?i)gDq%K zP+`z$*F?l_VckXPJ$;N##aq*22Nl$D)Lfn(IPmuKvc>gkA=FX0v#$Q(G9c0m@&u75 ziJwt$(8aY}3v*JK`>2?*{J;Qw3{tTFm~|{Tv*@(_d$mEjI=;dU8(W~&nhe^AEUaj=@ZGW=NtQibB^hiBkr17vXbJl-l!qHe4#V2`uEwf?u*7}a zsH=5x9I1ucLjzXfEDt&B(J`}F@<$>8&xl36TrM1XGb76AWwIM_tEKq$-R!X=rZ!(+ z(`*O3hhr56L5ZM`oySWZQzphqokp(C0S8p9&ck$LeJ9oTz8CZ(Z zam5L4U3QGiEq={@4o)v=r@=c>Z~=m5E}6XgMah$A8ZrvN(JoI3b493pTL4z|Jo;>r zxB?~Iu(RAm>4csF4npUwua>uB&Y@OCZ^Q=HauSORSQ7T%AFu zfsw;HP1PgVuPz}QvXL>L(3gw09jI}SN9oa_#aen9<>Jksw^f5hRGAuQT`NAbQ>Cd+ zCrXCGOcesh0NfQL?l%f0>N)&;*!Ak)&Zi~!Zt~gbU2$Zb>NwzTQ|?dIZd0xZ>+7sH zV23O!_tqwrx9$=9KPRlF`ZQ4Bn0d3COziZkD)&)*rk!9HA;-Y9yn9c&eukwOYG9fl z?-c)>)5g!n?vXX_v6S1*2V<06zn!RqDrR{O5}&Qc#p8e{3AN}^3(me>u)QJ8&OCBT zgQ1lbfD0(%Ns+47_+n5bWADhonlaA4;`a5)k)mVfoFtbNxA>6ni@XpPpEJSmv%j{{ z{^ggnf&~;$9Ivbx-!L3`Aw1DI6sx72)^GRulcU z1f^!Q@Cqc!|H>i_R6?wzhp_#H785#T{1F&^sDfW+B<>Bg+{ZA^>N=WV!wx5^;xDMoA@7<(0e0IAI<{K zi?7VAKY&!0$pZ97?#dtE*&>YUwqapG*AwAEtjVLF1+~Ce%@jF3_1+30_TJ29gEwx# z9t~A;8`#9p8MJS(8x(ZPN(BB?ahmZ|0%VlZgjwAJs%!0Jg}oWX2jHisb8^Cx+z^*zZ# z0VVOx(IPX~A8WvPAJ2n1K_xQ$%OOQW{L!`7+y8P%{x2F8!5x4x-`p+YPvDX~>)#k> zRAEd;w)gXRawySBU{~FFoPI*n<)j>TqH+U{-L(Hy9#SuF4$6@j@T^wf`mXfD7wVIjc zi7eM{wH({<*F~RqtkmU~uNru&LDt(L)PVQV}A%dVeJqoh8X!FOiv)XUp6jNZDe z^oFf_G$ua%p#JVfXJ4=%_jxy*h?xBuFrJ&)(*(&t@aQq9@cQVgZ26YIr8sJqKXqPi zoy=Z|cW_+eNtPoXINJ{F`!LFC#*W|(uE}Rb@dE~OP47wbc9H{tqwG82qq=H8UYoRT zVZUt0#URt>*&dOc+4LXnw3u5Jj`B!@m#bYgrUBkVvh-o5mHqvfu{Req;QS#JLpn#n zKVV|phRzqs=;Fpv7Ia4}cGmtBQ4LwW>hW)8S1-*cuG#ZZf;a7G977noKM1Ob>AB{# z9s|e_w+19ZafnMYv^Y!oC+T9s9pdT(%tMqYX~P*1FA`|zO6qnlb8w6jM6~^Mwc&tS z=*dJii#-(^NPvIfPAxTc>!+S7GF|VgGWjNm-QS2(;-Fay1a3=1m50H>Pqv>l)*E=G zd++}fzCsnA>ydf zz4`~ALX&uT&a7>93AlWp3hF;yClb>7^oAtT=yG$fS&F@JNHfpdGSKVOyrvyL+4s$h zv+pUNY5ZdUM)m0mCt9jY@X7Tn!uJHc?i?AY)x8W5FnLCH^z{3a8{uD~x&VnxOkX~V zlaueWK4FSdqiFAu0M!B9FHD!FPy5c}BzotOnZeNV;{B?1)sd#Nz1o>fyI6VHB5to5 z>H+o<&9*I7I<^^My())&oZQoW;U8S#t8tu5&b>eWC$#)jbK8B5xm@ao+5^IO)s9a+ zfrZXLw$^FOv5FAk$^}LvxeRIVI05k=Up-jA;b{VynVxc*@3wFvJuBK}wj2y!J1AN2 zF+SanpV(zHkH2VZszvRm$oI|I_iml1#eAWuYPc1;x3|#+zhemGu|BCt3Z}2NGs>2( z7fKjI$nz?2Jb?JBn@UqYB9k?W;w_plNyIjiq7>dX6b^G_Yi-1e<+WD^KYo~DH+U2w zq>34)DEHMKa`PP5vSGERBV_Dv z7dJ2=G?=pOKFr;-xUH0;{`%tme;>;AsVwmVr05yiL>KSqjX?pN!t+pK6qS>k{n>FJ z%&@9lrgL`|(%5Kn{FynZ`>*2{8MewD$9OWefLLuZT`J(JV(L6*8HCO`yQ5HvI<*1& zetHSrn&paD;tHH@_d-#s2UpY?=r-SZp> zkT_6KD$vpc-V$%pdS$mu<$*K+|LW@p4a#RJ^l8P7&2-wi(jXh3EgiCSD!jY<`MI1* zU7{D5up|59e2Wj_R9F`|cr}2>lFaYZ^l;|-C%(Ep{!F3aUH~9;=k z{-CR;UKTj=Qp<0#E2F^^20CPU+>g8ywBGjus(y+@I9Y z?CDK&A(iWvsXZx2>6UsLJ*Mw99x_Bq%b&8<3$FfMRrj@*^7A~8O|JA?5RXq-optZ?^M=cSU|PPpulbMLIfBbu z&eS`c7pO>__Hk0n`JdFTDkY!>tOHk3(DS5*pw^0e7Rqb{A$G+{FX)#&86Q$oxy*EYy$%2q;v_=k z<5%VMkLbY86P)ygT6DlF`?6@wB%ShSNz_j&=Edc%vBT1f5`|_Q0K>2ONqr-X^CvYW zr=QmRJmfbRx^&H{&sQ9I64P((0Rro-TOqiB(Oa}1h^fhUt%YLP)~lrH&Zw4&|6_( z0!v($5Zm^Oi5k_DL-gi9>FMIqO}Hjzr8PP}(ucHlYYLh)E*s+C@{M;|gTX*Gc{%$< zsjsUN_IRc@R$@P8Uo6zyBmx#b!5+q}d-fL8ezASjyJa?T*rJ_aFVW=@+w0{AA)~LS zO}%<{6J;_xbw9+-)I6JX{Rs;rn6P_h*UTjjq9ZOIJ+gADsEfAQ*-m57r`IbiKN_%0 zhU@I6Ry*`oh6QYkJH(y1#NDtenf)SNz0yJ-gfOCIs7 zc)l@a7?=EdOu2&bn(5QN3U0EJUS`jdnQ$y#jzhwMFaB1Z{7+qqmj+clvgY1iaTR76 zw*qb*Abp^ArObPDLSIKPAWd_va(4&i_|%cVh2X`$U|_$t&w}^Elbjy5U;^ru>fy$! z+;!I*;Q@j18b%QV3HUY~zLu7u_=(I!PZlj4_>D~~z=Ab@RHGm|{9fQA`c2z~S1 zh2mkL9W+DdWSZ)=70%8~M|%|91(S7aiFbU_D;1Z>qBgScR*Aq*`#g2?Sx!^|f?-S= z34IGY6ad*M&oVSXErOTKp{zGEGc)<2)W~eSgq?U@AVWwn;a;eLT0@C8rL64|TvSOi z*Ol(LuyPpuN=?yc!5HY^{`f)fOqEf2Wl-YjF=w9KR($#LDS8)|{>xHzD;AC$H%(0A z=@i;=3SP-@YV4H3m4gl$8(hK_Acg6ZEgb7DHKk;ib*3)gNNI&F6FV8?YJ7unO65N? zqs-!6@7f&$gktCvf5aTtVz*Smc=&rFpv<){#t`hj&&lZ2 z3u{oc`Kv=WUp5$I>wdMIKF{V>22aNRq-<33Lv4AodLuM*n@}toRskvp;NDX{Ad}&# ziC@iVzOrW3mNx&EnI+Dcn7*tHt#E#IF<>thJ6X`GK>?||yBAZt<{{@A#sXc(G>fhu zBmGAsXJPJY$v<0Bad945I=V2et=YfbKEEk;r7>{?J&v;lc-|%0bssth&$fxp{vD-q zI!f>F=fU80l82DJ9yYGQiftTMkzGSjE187mg?$*B#A|}if0E-W9{fJ47Jc74iCRZz zP@GVcgZVe4BRPp2*tlybzJ@48ti&B5Z=3M=2>K`RPdS#Uy*$C#^Uv^ehS!!aaR;RT zN7j2qH5IViqJR`>BBIhkrKvROJwa3uX(}q608v`#p%Vg%f=G#o(yJ(_^xi{HKp;pB zJwSlaA=Cg#IQ)B`yYD&ozU5(!k%u+Lx8^tJ{N~)mqXWp*h+AKEy#wo(lw8Fl=Yqb{ z*Cg%PYy{fbs7Or&1S-?7Tab3Y(^bgu>|_ou*1Dwyv{;0YZN5BeRlS}zDxBW&9NX!n z#p}W1qlOGV?dhypG#5TzXc@le_dAwQ9>^}M;XCcZEB0#F1zr&6cTvlm3)IxAm%lEt z&G^{}IKoLAd=`u8K{Ov|$So$_Aj+9Z;wI(FZ#hg9dz-CPDH#Zre-E1xa2cx{Vj2kz zHd=xCFlQ@$vE5HLf)bu-P{!}#)yh%ajb7EccE}19N4aQct0N`&*{^^Zsl4e(EZI_4 za(>-1P6Vx`35%+@)X_X+z@(^Dz5luB!UU2p`kL1sngK^KM^$?;_zuNwEAFI*X8u&0je>LI3$q1Z2M?) zAIu6}#?r~_`HHxvoW!%o^3@0c|4tugD_{A8C_i3!?U~A^T7E0(c;{Y%UeGA+>c-Sj zi(LAT&_o|U4E>K5d;Km3F}El}iO(OAH=gs7$nLSvwJa78i#J90#(IbySwL?skAKll zN9oJ#W7j}!$MxnT^;c30TMk?QWLuchpa7zZUP5chIAz+&lv?xfNmsDP?t4%Q+eLlq z{tU3%-cU$&J-Jx!wL&?wxoFMELmCLbbEs~J$nqnKVy*jk(b}@K>_p33$uNQl&JsXW zI=Zmg)f*m!;HelT}uYrlNU04*lTgJd7qD#QtS=IX=Lb$Gx%#Mm9IARjdu-^!4=Ww^8_m1xBB%;xLW(4< zD5^BeJ5kOfCLu=u%C%+nC=2bX8;`h)#N;kM5R#aY{3wj%Lylgo9I&F<2%l!6p~SW9 zbDvuE@P>eJU;U-I$Dkx%pJ_tHM z*UxM&`D;9Nm1JL`Lt#T?o!m6UodonzdyPuHqUY;9e25~oLX&kRu@l^2Xl&;vt7?(> zdvzzwiUmgB#G%q5XVNlaw-q6jm863ZTiyAo< z84XMu=PtP6Mq;mD*X261Niy>aIyWIk1N$cNitGL=$ki*{z&Gz^|KlLGm2Vx21J#6 zyZ^O-P=(l?Zr`D(fa+eC~9IR_Te$LUtOe5nd&|N>EzPC)X zu@eNQ_2iqYmcU)Pp&a(5by7+jybjHp>u1;>{|e0Qw%$W|Uwd!w4U=p;g?A{R(*bA9 z;T-N3=w39A6pE9*OXsw1@LSr4$kN7t`I8UdIQ_3{pp9YEUSj%yTMSpx*!~I?)HK1= zDF(DWXol|%N}rBc%L$nIKNu$@@&-!+jPI$5e_UXip8py3<)wm?bAD#Tx47}c31-wS z+6Tgo9llZuhb0`s6}Bo`KvHc=hzzSndFFCfazusHm8Xfar_*Kq8-8uy>mjdYwS7k-pAhPmSDS4zm{?w1 zm1gKEZ@Z^6bJhoqjUDi^@02(UB9}F|ba=b%^To*BCTo|UFOt)%Z!NeL%_9^XFJ%qqHP=3q8~(3=nr+M5WYBIbOnbTzmwo>BSfD z91H~jgr}D%!tVblyj=32j*rOjG9xRb zjtte}!Z(7r2)5N##TSHB<=c4n?1%ZE^_j#Ce zC?qRe^;vQu@a@6ae_`-zFLDNcn$g${Gzy0F;|Q@D+jV<35k$Oa5HYZ~6lQF)oRK}T z+|%9d(0i3K}6!xESY$e=iV>S(su_Uv_lIiyo4r7$*t( zu49VKJ+oK@?3?fAVwt=g$|9i=&iEz-JwEjh_Ef~kl2hxfE7)T*poxpsZ}S2n{&Kg% zNmq02WnIN;DCJ`bs8UA-6$F;hKVxa@S5R`Bp8MNhvBODZmy^`Tbx+)u-52z9xVJT} z(o64mva((P_SIlCDN)=z=&^=RKL*2;gJ37E3D+Ep;Lhy1qPlA)?#9xJTq07is^tMi z&}rB~PZ-yd7BgX-#iP@oFFZBcK)YGECX zqi-!ZnYmh2`lvHIt$C$%b2|gd4Zf&WOWeG0+Z&3*S%crqUe38Vy~qs;6KREJG9!{B zWxr)`C)_gG8DfZ#t*4Jb@y}98L|Mvm?RyLHitVQ22{+g`jIQB40J zc)=rYi{ro&z_=)FwisuuMfl(CC8rQA=)oAlT5jLDI~{rZ~%4J7xxk=)|KiS#bx zS5Fpstvdw5qQu#Y_&M^e$k4$W+IdNVEw%I4go2EbUtc=aOu|z6xBgUq?s@b3y|v3x z&+r5E`l> z_ORr+$gR7+2XA=w%GL&bp5im@VOrE-e|5n$10P#JRGgXjYR+Q$I29Tx`&=2rbNG91 z8r$T2!o>xld!LDa$9Ed#mz6M<*0$yE1fB@|lOpgXk9Q;pt@gG@$G_CT^oEy)1jAFA zYpN7B$kKeuWpDEve0_~!K4c!=>0g~DnuiclwCqi$v`|gs#V9^G@Z4L3_Hm~Gb3LQ8 zx&BjiaX9L{)Nee-%DWr9^WH>xHmzlpdHPekdd$p*(jeEu^8~}|tc0#UbZ=+G+VLkY z$FWGlqRgYjwI1Z-D>`f!;k!@vErLfLzUfC@2H`RDiEr@{&@9eo^Tdu`V<6dUAh3=t zC8J0a>;o~5<-)xmM@MtajB27jY8UkbiEkFM`|T3}#A+X_!xW!WYqgPVR(MX0%yQ%~s}vebA1hnM7()YadfpbE zS4RK!KpCZ9WNnuTMl-3n+dTdI3K{Z98v9S?2lHg0Pf8@PSw|J=&8slII+yv0JJ~Oy z9Al{%d9#7P3^hIv4qC>BZ3HedhyOPwFLh+_0o1*ib`KIF)F0&##WV(pf~QHPu&uy; z4Zvo)Fl7;F;+A=Hx5J1NUgkZ!)1NRKI4_Wz-iz{j{;#9JAUga=|JFOW2+d#W0lN+6 zhJz)y>)6m9h-CMfd5p`z3xiQhOE)@9Ysm&iFyri_jB5g>C}VTMd@=|mZ-Ns#C%pyj z=6vnnKR(R0>+4zkc9qmSIia>eENT3v5$CH&qi2o&$f=x65cOi@A+!zz8Y%9HgoWxp9>1T8HOP5b}r({1f?m%#8lws^ixtu@D zL|*yTp%l%(-_a8=H%5;--Z3~QNO!sMx^Gz=&bqA82)P`~48u>orj7gb5)rLDFP}g( zhD|(SS|olhLHF@Tkg_;>8ra83bapMRZ_TFm(4GK)RPa6XLtce2XY%~Dh}KU)zA;@P zIabGMvYgg!?*HV{Mn#VPk`YJOLSumchUyDj_y+C@1Z$g;^HuKF>`nhXt}m4tDwV7*-1vtu}<7)F;Ptkj;Qz?nyF!fb;=KWlK*?WO3bhg@M@6N1>lK>$F&2@y56P+)?j12IQl?P_0P{m5+A_*rU zt}`PD7Evlqqew~#xEvE3Fna?Y{5bYoBm}-)d~fHHbC~`pX5PTp^30( zM`Id4&;vQ6UUleGlG77%rKCq#u%VswXkCa=hb8vLJkF;88BRverz z@T&1wf4Hy7D_z_3avMiEt*tLixod;t-lc|}W{;mfoJFTa0Es` zHHc@?XrV$J<}&}#^c69)=W6=_hcslcu91aV&mMe*9Gi$9kMfK?o@`|()CC!#(OSrj zvx}mhtSJMiGK059h6~~!vhjM~zQn0=wd0GzTyr08a*Gqw@hhSb&&*$mah}Cf%IyK$ zV%$$P`S=0&yVzN>EB9;2krl1)%h8*`3KtC&#yqPhDvX^zA0!(2(K~W-g`l!j=&D^Z zm8msw1A{iX&qE!4U+BFxbraQ^PNLUHY-PP|r9y_ob7UpqdysFgL_+Dz0MTDSDQxV`x!7{D#n{J70m z>C#$LnZ3tsO3J~lRixZKA>^08yk;|{Z+Xy`nV3x`cm`@h~V7<8B^EYP% z)V;;0BNb4(iE)*2e!=Rgv$Zy{cqz2eRqwj`yzDGZ*adxs%Ngm@BZQ`3?sz+*QF>w6 zbcX^nHRI@_2tRK-2;XMBtcE)u#sgXDF6_N+|GXDuKH`g@w^h4jYQRuOqZlBoO2eb4 z+0~|n&YTlKThsADqx1N__#U?EjVq6`?XTC=#vH!T?tXE6e7fNvk$3(%wA*R2%O_`HL>yFo6D z^Q4C1&+mp0XzfQV_xfVFzf3 zzQQPZhT2X6l#Q$i5X{@cP-!necRSZ}`z>vHdnG<6CE$AR<;=(9)MGQv;;(GOPvyRF zjP%kw{;q%=bg1xHvoiG~CzA8G$(H3Mt|S*T2YU@ z;IRt%!h;_#f8b+A8y&PM;^ib27B773ryNK*ZayVI$={(XE2iGi_RA$LYG-nn<=SFE zQ4hzCP{{Kq9z^De4VY-aFuJe9aScU@879Q{j3mq?YEmGG&LSG1x|wc}^aLe`0v4j@CSn z$KpDiEdO4er(lefRMz$820htas%*bzhnt!sgv?~ih=M5Z#19^-k3{&9dpf2|Xc-6q zUJv|EGu?>!q2iss6o6a^xlHAG0Moa#26$FFVt6R=fobZ=;C!}Seqb;PJF=?bPP-D6 zawRoJj@13qDDaA45w?$~ST5^$Dlp^%&7-F3|4Tm$Jh;2_Ws99)Da!o}YU5xfyBKVL z&hOrC&QOzmRrfF2uch_ouq}_{H0$?Y_laF!GfsI#To;F9LG;9U?#RisXNYqI2WG0KHThz5F8ERvJ?WrR55%MUWGO_UeBedNV02$6jm@0aQ6 zWy$Q8!fLVNTBSl|S~89sZy9FHQY$taCton_0mKOyoAli>NpV0L7I?e~UekrTA)Gt_ zSs z!>F{- zJ0Ux7G^-2oPuqhp86()?a<;@6^gmLrLr@vbIHxBP1@_p`A~DNu_)z%$i=8S{_rs5y ziARBzC6KtkN?G=kif1L;mzo*rKk30XQciy{ZVmq;?&LJRBYk)wGcaM%>Ju-eLOMQh zxtXG^%8`*9l$g@&vnw868`{Pc58AaldqC+w=5G4JO^`g=E4uFEvw2+Ld2iP!i2g?h z_Mr46A^cV+Dn(qmRArCx!kGo_d@E`CHhZ>HsE;aG{eF2U7(|8{&>rtO(hdkDPy1wb zJosxnPi&|K1e4$44(mm|3J%D%8h~A`0pTzLg8G@>G5e3xidp1iK1_y!t(5~nU4_gf zE8$cXVGMx<*t!3gq!DP+kbr6R(E}K0N8E?|OZE z zS?7lt2l3xKdfxJPuxxvSG|;V{wZD%aSOSIonc^t79AiYY_X6y?4Cp#crVU$jGnbWE zSex*3-4dHVXC@S{yC1=6GbCoVg5!IDqx&1tN|sy&HQySrx<0)=%XfswI&skG@hz+J zTFpjP^!qFCdN!o>GU%j`vHWhR;-M@9dVO484=&BYuVul29H^KmcK^$L`Y$FE^8`}; zAJFloPnP?ys9>|Fw-iL)N_}ejwff@=fQKa6z&N)P?tRXr1WYR#zTXI;QM@o}MPqDO zrzs>Lrx8Hjl`w%htK~B$3F_piM)Z7l%}k4CY{g=1vPFn6O(Y!9DT{7t*WY=#fF@zRiGG7*uWLg8ZVyryG z-N=*xD4|M97K+O^e($Y3$x%!5o%-Ltu>av`fk`anW=|4{*w*r=H2Lt`vyzxUDp>6- zM@??Y3n}aA?Z83+w~xe6ZtGEBAhY%Olc1DVyE?bsuIqb}=Z#40LTl( z9^qhO;MN0KAz7G?({)P89*@LTcs;%dl%2RNoQc>~`4oEV);-Q}%|G_B@20*$od-bW z_v^?$4HrAFBhNTB_>P&}F%bxLA`K3VM@wU>H7t;C{{{(R>2GjN(0*tw2cMPR^q(XMrN4%{cTl{UC;OTeaR0etP zOFD^LO)1HNR{GVQj``Q`!f6vvOI);$-%7cg$SjU^UP-4B=mmMZB^RGGw(5eYk_{gn zrsYu9*)wy_X5&o%q@N0BlpKG8t59k9JU&=ERJdW%Ad?4H{ED{EVBLz*#76JkYI4EZ zQWO4egL*!BQ`X_c@obS!SYUXTq+)VdA0V7f7A7BN2atc_j-uYLvqQRk_$HlKpcaUk zWig>*PsQMVej&9i7#@%2GSLdw{EhvN&VntH-rGh1eq(bGg<;1ZM3?t?3=%LR2+Vri zyFkDAo5J%%uGUh0zCuF(6Ica6d3NpxR=j1kmA*gkK@faGIQWRTAshHt`L*-uvAZz- zbPsfti4LF|QCy_p-5r)|Gj5}|Pe{(kU&D$!_^%cUR_RUtDi?Q!fqMB&Ox8X;Nr%Xn zt3`cp30@NeE#$*<+l3`hF+S=2NFC!4L<=+Fs-cQ-s6J-k{_nv&cVUhgJ z^S>S>>5@@K#v?(s41{if?V&t6i?aL0qq}C0BbP3?P(;0+;eU@-MB~)ewBL*TYe3Dr z_qK}SQJZA?fnAf1!h5%{LPz~?4)9Y1TVv(uS;6@U9oL%8&pnlX`b~CR!rE*8Mft0$VE%oUkB zv;*wq3VtX_qyRl2=C3D@och$VUO!N=O>H)OmC$x@wH(UfpKD`RtAN}+Hou>9=TD0& z`~wgntf7$n_0Gy*L!y}{o_D}oLn|T^?HRf%D^`p5eT|h* zW;my}2}HX%Arn6sZEkh?J#{#^q;Z_{@E7&u4krJ_Y|$bYq*mtO$H+HPk1=8@B0E9% z9^E&jLiS8>!r>ATD#WKB5?{caKq-CQQ(JDmG5Ol9J@P$hBZ$1nvs%99)FPT@;BDKj zuFGDwnw!2L2>gBBT+E<-P0@17 zyAp17uUiSMO+!6@ke&S>l=R<)9Y3Lg?V?k=ibfQ-8S0yawxMnw2H`%c5uJQmgqwEQ zFxvx$%s`CH!NV767Ah`}hNE4lSKmKjndDRYCu)aP{m0hrGJi$+)bJ9;A#A@KA2=*~ zMnC)i0!}jQ;vrw<0H}v&bzu_Nci72gB4DC*@Kw03mDZf^hV@f#O(GX0g~IY0br*K?nQ^d6Z`-#I1B?K7Ot8#I1`RuUzjIl4W$)%_i|Ewl- z>Gl}|%GNz{U_|N0JtKeIiy5;1-7OEZK51$N`$gv0W@Oa3s&)(*CV?#bSJb?;n5%4{ z@#5+&Rl(^lr+e;8u1>{HG6#7GZNejej}s}opDGb@r2=g=-?A4`cXiZ~{y8GHDbIh= zR@O|e$kHpC{aaosjYjm8X^dwgS9>=OaQvVJh%}>X<5TL##XfsS-+z!vKlYLKSNHWWHHAQJuGxGI{@np%mJfdY(~u2w zTf)%sTn6-bO+f;f*Y86vR4pOQ<*_P~l@R(?t7`qw;vV)8w~|$XFqBECgv-@?CZ_bP zk=ucE!Q1RoH5Pki;$M45y%%CMzKn_e@*8)K9cRg|-;?fh=-gf}&gWw+psro?gJU@1PkpaOF9iP;}!eqNbmD zhJMF5RgrJwV{N=LNB~&i_|^P$yr|%Kj;MiBHi2ncL9g_EKzEhAcNxppr_rQa%hi`W2p}P##r<#X0Lc`*laK8URjcpG^F3p{ zuel2F=|Bq?do_XQrLlR9c9z1LFmCeZLBx8zvLuKg4_$vMs~v3J*Q3I$3cXS6zA$j| zs1wb(3|ontQK?Y86Oor0*!?7ea3&yX`Dx0++X$^!cC8?g=q{PBb@$HKgC<_Lp&RRV zLYxIbQ~vUrlc9o9xl)}U+;48KmuEdb4RiHcsz%En-f#E$vWMBOlUs>#0cB%*f5=7S zS1nj&ONcZ4_5!SjX-!lw`4Rsr^FD^qvI?2U4q0Ct8E)Ls`ZC*MyPR(Q_>5+;`t1JR|%2Oe%C)QQ8Un{yFi zghVv(WLQ`YX{Pf1l*0u;F}Vb2JY;8p0_O8kUBJK(n>{_*I)u(jH+4?pd9?%P*hGJM zIBjLvS7tw`hig2Ze}75!06TbjBPfe%`=w03L?FIe-=a8DrDQ^qlHrs?=GM3{|SY^s< z$uz%{Bd10P9JJTE$nidO37JM*0#>7y&e|6655`>+Y}RzPQ*oc)N#D&AyR_~(qyg&t zkyCo>?9+NFMXw@`#x_LJ-SP2Oh{3IZa&8`@rsctgv6*tgQW6heVDFoG$FhB`@i=~p zIyJs{ZlC+6Qhj$2Ug>94S7{YQY);q2hejsW2~+n0YN6UDW;23P$ms#es@K)zLchTnS8lMS*9t1UPy0r zB{dIc?TrqSi$iZ z;f$Pk5EdW9DEg;gpQ}wsu*K|PGO%BQD8apzCIT&oCP+fy!U2Na|Ak&y3)PAI8-WZY z{{|hnqb1-ez=(TlD+jV590xZ9{)@I0e7{S1E&h>iV{#Cmxl+NjUwp5PZ-4=M<7{~Y zeBXDZ!Yt3~yrN1g04u>hT=|oAx0e8J zfAbjERU_=y^H|hz4J!wMDCou)?p%nbGk8pP550D8=x^`PeFXdRX&rS2zUd^i+Pr-4 z<0ymgG!ht6ahS z|8*Dee@I=x6BhDj*y;I#e%i9j7;gQKUQAIQPT>#G9!8izOQ*(N!@oVCs z_UtPjR6^Fq??F0*k8pp z84|q(CVNI#F~H@*#fJ zD{aKC2ylzXr!KAR_G|%c*!w=CO7S^<-0~h{_`n`N&EvNyep)0&7Pe0Uo~=af#nCYH zN(iLk<#QbL<0g*t!+@D8|)AB`f|#}*qDol!s}Yb;C@AsrE} zF8Eh4Y;!ZFZy{uxM?%+tfoM&pr zgoRG1BsaNm#Fg?iQYmyp^{BWSQ}=&NT^tlDg-kP(V4`xuyOjH=BTJZ85Op91jC(=RS*}9p;FyaZSC)PvhB{VfLYR zc3$i=7`*#6OfYe*1=4bOO1f#C=mO$z#w%;NxWYNZ%0e>1>Uf2K4#oAB+La4d;~Uy0 zf_p;2-yfd$<>qnh0rqXI9J*$~zT5gMnn{G?>_0_pV6oDkrc*?{(NOl}_oPr>ZusFf z_X&4ahSSNH@7_MVd!fm-MlWE3J(hp!iGF^3@dd%6NtbQno5H0>3TN^VFU%lx!v?yB&RXn#h?ZII&ycuTYAZ3OumM&IHSR zV>8~)C$@S2)a7gS*R7NzCxDLKVL@cW;@X3vlX}BSOml2|@EQ-t?SDU(ucRC6urWUfet@_phWOdBdlEk>ff~5u|jk$($%{fpObA`)lRcNZR{#$AP9}|}CHx}3& zj=VxF_uN*YdH5wJ-WujL@8be?43n);)OgkgaEq~(`QqdK!at-=uomZT+#UbSVR|_O zRTekEY9uq~GdK~mxcB{elf`g7vRoghx)599mjWGCZK^aUJQ7uQS}QboIocZ!+=uo} z$BFgr8uypedUab1lsLG5J=dE|1c6KI0J`1(F}V^VnC_QSPMh%SNK5SD>9Qvb&yNT| z?q#AOpwr1A`1A>4jcY}iGz0V{x8f*^4R8C@1|$SArooGlRR_OY4fosYFJ6U@we}M- z&SK3Aq&(pJ!lnDU4;2cOh>&Cl^s}HhQ)=v>@Q}Zq1D`raw-5Mf(ssJeC!<6dU+b4UWp%eqL9r(XfF7wU<0E4#(&2(r!KUGW ziAk7y#Esaqyf$<3ae=F))71=2!oN5LAr*j`ZBLeaqi(uZcO~HqIi;S`f#jcfN%#O( zc>Bac_%^Y^Y15;>aF5+_cwF$a9O<;I;@U7gu|dHNR#t^M7yWBkhs(CMV`QI%#v?l8 z3tJzn%swJJOnP2Xs&4rwWF5LGdr!$2HJP1hV<{_SB21jck zvZ@HdO6SDb4sYCPi^Evs9a@}S`~@6?mxN*?S>JOEqf1e2LV zre&!zy%asvM@6sqOlAzGzubou6l6YA2>UrD0PM-ha8=k2L~w<~|LnyR>{&kQe>fR* z+#vP2n^dtH&08zT%Y_2rme3W2S=K@CQ)y$<+|mhUBh=zoq4%uJ_naBV!Q;GpR~jp3 z!pK*z_CJnC+L*FR@SM)zolJhEH-77#RG1*>Y zcb3<){x^$yHlUR%O^DxW81i(wLIJ5^TZeyK%x?hYo+z_#Iv2Q%)!O)*V+LExQM80&8HXB4e7e#SBqn zY?D}BAn|3&#vd-IZmeTvj8M+yDVL7e-C8zMBd$uifui0(@Za`q}7koI*3~@cu6d{H4!B_XEw*UXYga1X9lF~tY z3HbW$`Rk0_Bh6PoHOOK@yW|IbLVY|}Y{y9sjJYn&cHl{(jOpyI{f$KOvQ96z%k|Hp zT!>%p8n};boBng_?~VaLWi(TegH?)_=Tz0iK|nCH3}oq5YDL^ErF34zxmF_NWyaLp zRS)rv@Y5)SM9XWByVnBOJ^yoHJIk^o5MthVxV;x&db(yamAb9$QKfkvs(~Ih0owdE zc|2gIe})U&?LgO3vA{3D@{KEt!u!VB5w9r-Sknz zb9$!=LD1=JB}5fCbm%QLZ>49PJ+=N6blSlnuH7}0`0`yasF>7W6YBAvE17>G$h}9; zt#V5*zLeq^dZE=y2&T~QN&hdKku(N8|6>WHS!qX69^|vkp5KG8jUOu3Ej$7`I?IW;hF zYaU{C`Aj7=!h^b=c;;?gk+^En=iwx1AX`6qcEftf(dNj3JF-nErykr`AZ>J{>k#Sn`$UQ5c6}Ny_9;J`6z-UGf2JrRZ3DNtSCtVI zi)#_Ed>{Q&S!?pmK$ejLL*LdF^i z%->77x|TErO7ImA^spLL`gcBAQ9=+M9`T%*z2tv=bd&gZ4^T#U1*B9uITijz1$D4uDN84!V|zsg6xo@=Rm^uu2Ui0#x(08XNlPi)`dPZCKOAwA5EQRKQNWC z!6|gvmotpcx25DexFrYT!wI5Z|2K|82y*X_maHn2;{5c&$`6St639L767(;nqGTud zkUF|QFYpBF?Pwq!oa~>{^{$unynr`*J%F4k?s%}RX_B6C`M0dMV;wBHCR9Z`Z?Ks1 zDfb4-z5h2LI3@2HU?;R`rTs|NML7GF7`v(hPi0)W{RHJEJ^IyNCp`g|f30sfTeU!V z`!6IvKx0g`*N=~&INp;@d7yDbylb+W?n(avK~@8`6(#lmo&a-cPDlUlv^KkCare(7 zDe5D^Ja)%XlYE^uEsDgYzW4r@mNW|cqaqa&+&63TUlp9}EM3Ob^J%_5?FAz8#4pb< zYWo_5n^(!WZf{-=FRLg>dWfd?_FZdHk2hq}IK*u4>tCMhwD|kh!=J4mNeNYkx%cb? zd^w$3;v?L@1zLrz*XTYd1Srwg`iow|_Ry6ZsC+J41D%Z2AIJ-L`di}LZT#=K$(Hyv5eFI*O3bQr3 zv_1C!+lZ4`ye>GjtZ2uuUYD_V!-mTt+<52{pVe3w)m39VxlMa-K0r@Bx}KIbR)Bl} zda-q10~zvdIYw^*%4zX-r#xP(quQOXOU-XM?^)ycSS-%!>cQN*c)xr!N>i<~MTsWUklDkb&1K++`g5BUT;Q%(78iyPaDJ^`v)7D6 zn*fd%iL*z@BMI^{@R%6=H=D|j^Cb@f4>0&u*}%Agwv4c`dh-h&hD)ROt&T|q7k+4- z-|lX|XMV(d#)ou%}d4i+E^NVGzh9L{fdEgzokUPksjjPUTLW;_dDeuZ=od~CDn~x{WGxvej;Z$Q5Meh z&}M}RoJHOnT>Q$-rhJEldOdqt8-M^DE-dwj?Jn4V58UUBws}%`(*Tk^5#fy~&RMmI z>VL(S7O$oC86s7q;lA6F_%(cVHndk+=af84vT-{VzqdE$*|npy#fcWp#@j%Qt|-;E z1W-cSzxa}w0}?LONV?f`Yo#!C$(Awu&DtKu!G(Cb@FU~HlgcGV*T%h0iDqf1G5YTf zvH3Dq8g0MFexH_i<+&4l)ICD1(@Xle8}p!8+<=$lcT|T8Nw0mcsil?gpxBc}RR}n{ zBNnzsS|~lC0CQE&^iv=U1=&F}#C2-72@p=)CTlKX>UGxbL-`0z?V1FB)uKbe?T}5P zY*>fJ64p)95RKJpYN3K)*`8Ddf4tE%*V80s=0)s?hk4TaGG2ABXS)3TI@~(Vz=`e;bWc4mQ=Rkmn#$*~0I_f?iLU_C zw^mEyW|q3oZizdzm!a0=b$|3f6ku}MTKeVLw}ok1%BJtV5FQs4y1%lcdIVXP3||+c zVK?$`b#6RT_4gfW_|ppciNjy+PeTiB&vmJ31Q=?gYXPAtHLCc0m(nn!$EPXHN zIPrv36-u$VRJ?6TD=d+*Mh%mnA=X{Lnk8% zoJR-jfcuA$9c~!S?O}P)~eG-?I@ihVi)|I(%y}b4b{?# z^1v-2;B8}m>jKOpIwyfUZpY=e15p8QD<$itPIX&8+TXOWRF%_@?Jga5zZUIno^_mo)Bk{&0uctu4s4WzNh3LC_wBeJwH<^Ix+fRT)lTZ z)q(#%ii}FA6lI-CQCZoJbu>^}No9{xly&TR1}PGbP&TI$l5y9?H^6v4$^Y7k!Q)cnrRb!MVg)_O#uUY-pI z`!HNVCM#hi&MKYf%ynMXDH}7ibrcF4b=_g>Q%iXVd{I4*(=9!3=P1z}ldmW~JFe)? zh!K?IchtyG68IJWYI992_VjPCd;O;8V$DfR(3>PkfxV5q)H#2{lTrQT#}*!Aee;q# z3njz2v5#w-GTmf;DE^TLHS~?MS(8jdqcnGt)!v!%_S4Hf+1TM*QR4k83Z)J*;imd_ z&c-_PuG5cxkwnB|x-eAcJ`c;So&S|L{%bBmJ>_5=p$@jl`G7gl^wRs!(U)zb59ZqN z*Uk5}JWA7h@sPPnRKd>heE)~&%)c`}4zi(~qtDbqAzx-&e-?2|bOi6-`=gC@>0wVl zsC^;@Xb^6`)#0E~QS2tg2^%rB8I_%H+&A(@RdPhu*WC(r>`F^&Q)wzE-VCL7(T9jZ!aAoNP&L#S)wU6UY!kv|lVH8!$-c$2%i3@(BNnq;! z^cRXdb4VY-oX0Tx$)%h0ieG_Dj7Ow$k}oxu<(amDQJfAX!oj0mAqvO#u#649I!ukU zB?b6>Sb+jdFA7NttFD$|R<7t>rRlL8u?|)y#bE*=i>lE1MM)<4#0KLPTGcnhoN61$ zC2&1G+|^?!0`3sQ)lN_n{_E|wTE7tmnz;zS!xv*;YbzM*5+^pLOS|`avQp|;3pc+6 zaTmTWamJ5Q2*Bv^V{>Yv@7jvIeqKg0fj$Dscr<>}J)_w-96BZ0)iQ&~JWo87nPYd(Q?)T(8OXYSUD6LS8#ev2;y#Blk9BWw5L39rR}f@b4*id80;F5m~DIXu<^1&5&y7 zr8wxZ2~!o*0aOJaam8ZR(?JlL9CLuuGpCmQ7(SAI(`}Y$QxJfCmju=h`-%rX{R|?w zW#4MAGIo``UaR2@l#EcWKx=`XjhR$lZk;aAb=pW2CC>FlUTAUF-ug8@g;5`#)1;9;cDF*~7s1D7tx~i|eSP+!(bIaVXm`V-cZEgNBCMf1 zceumnGT%N6?_=J_f9-sVdem3w;6Yh>)_iV|j)5%i?KAX|2LVu5utH*_B@e4n#LY~o zkE}}2bB<`u;5i8+a?sdFnMR!t* ze@@QkDN#g0j-;pNnmjJ9Ans9;o^i#vLiZ$_8Q^!XN0{zkvJaAFtseXCmF>8BQF_ec z!(i8KAk4ooVW994sA=R)wH$Uw7w2X8%WS*C{qpOg*yq>_Z`w<~s3`m!L36A@Ht!NG zCRQOi{j`nS#FK^}6H;V&u9!hn`Yd8^6~OSdGk2p9P`MD~PNk(?&BoB<0cU8`b84-G zeEu8j^OfsQt@G9K-P5l3+=MR4xo|JoJ`Xuj4{*btU|;C1LB>j>MufQ>?GPf>4Ag>aixv`M|+pcUY3j+l-UOMN-LG4fjc<%u=TmsS+EF?j=15nm*O1v?*Jo1jXl)&Q zk^1PxR-wv)fSx(^rT0DRMz??Vc)v`~xCi*Pb9$pM?KSV|Fo%&UL}|#MSn9{vFlgi{ zf|)%d|Av?F|Cl^mr93GBTfPoLWKogU8e)aw1;uIZ^pLYC4MfTIUbuJgTs{^7-@^o9 z$vwEh_wS5#)uRrTS`Xz;5c-`GOk8-MN{VU|ae4oM%)rKs9a^i123sjlbe{~dxPGDy zxPDCYv&N=?Z#zV|Z<0567Ex1M4ohf$0SqFLDI;=8WTi|rYi?%+BEE*#!({QfJ8QZ1 zsIo!GsG#}dOK^i5A;+`@gX}1M`q_<$8!vuY)KR~JEp&`jXhMg=tYWiHKb;&(sK(!( z3~?8pdOM|-0WcXTJuN2Cl;=4HesE`!9$l74PV0VHI1r66tm458@@$r(eHCytGmTvdkLW|$+F zGPNG4PMw^#|4`+RYNyg0!cVe;D@D6s-xXRYkKzkbQmLB{G$RjrpMx*&7pI+t2d)>$ ze1F;Q&-{&3b?XEHNRezk{g;VOOoul+!Y3}QF3$TPRGEc*$EL0w#fwK-86W9UZVOvO zXqr0~LzYA@1nw&TH6h-HZ5K%b37X_xN30z6#HO|#H5Y5{0^EEZOgP9so_;teV6IS3 z>%^9mpjoOP{fKwhH3yAgjMlw|L8R&#X#>07HGr0@IjYjl#Aa7%vz7DbxhJs=hfxv} z4(o~_i`GcTSE{`7B;o$?JfAz)MSZjD2F(h^6sx*S?3s3EX2L${YHb(3OwwJ?jYzyN zy-|UBvVDpdDMmA9Lx3Nz`3E;5UY~Q(zam}gQonQVmk}|cqs(pOcW)D`Myc0B#TSxK zvKQ+NX;79<7?1A-+?K*Wfe%%QlvV7&UPX0~wd0()+Qr`{10s%V2Z?lnROM|JN4pSR z@=^T;b%;CDm31y0ct~Wl4yUwj%W)f@O!(6)l)4GAd{OX}$9O35Q-yINS~Fd()GbN| z%lC;kN>uOJ=8FB`r*3a{!HJcVRmsA&VCvU#6{&Z|uX`b4mG@&*Ex3Wu<5IZeF4FlP z?_Xak&a8A$P57x5tSu?9Hz0oz=bCfYY+J8f?LB=^jatAb;$l_joW=IeC8`W)7R&Iv zcd?2^Y%6z>&77z~#wjA!`-wcfN>^I}JD-6Zcg%!M0<53jiLQ9zdY};@q9rf*m9bzy zPI39ro0jW;*-{pZJFTXo{@)%_549CJL0tqwQR(}1)qNFP2adOeA89%T&l>- zoAP!{*}UY4L~HOUt_x8FlVDvtCJx=&>v;Z$tNX7j2Wxi>k(x~TuiRg3x(}`uY}-u! zo^o#OtNd%@Y`g1Yq$H@?>^bWQJXtGX#fH8qbk+WVcj?~O(6Wimrv8v~u~O*$ealGZ z+kUHN1>(zF+n%on9~A%|k^@V^pC6ABM(~dA_nXPIvKHKcbxauxr53ZZ@U_e;$g9jQ z_Q8A}_t6&TyX1mr1A8az3wMh!|B3Vf?sGu0E-|3<g$X2!~_~@ZeX;noGEr%lIWFD zV|NQ-b-6~`Px(n5=70+3+)M!>5VDR8*+1AO9PZEO2WX+agC7NuX;HIXi#MjWBn9oD z4SFAyJLGu(WP4BLx+?R+g8o;QPUj{%f4eU(n-%X?8kF6y;}x(Pp(f_gwby!wmw* zlhV;%ymK#xzIa)^NPi{3)taW$=ji1sRh?!zYk5ZlR4 z7q~-&Bk))ueC>l2YR4%0FaSa!Pe%GMw)1xIkLiTMtbCS;P)i9HJ&0xn^#bEv8$@%kLT+Qb2Y)w3UdQf@?S~q9+gvbf zB+uPTnufAGwgUKxnWdg-V^O8U_B5u|*havRFR zPW;j`!roc%aCPvZ%f=5kpZSgm6?YlO19=zjcs^fFJxynQhJ+DhYbA?__v&?kh}|&RbRfn+y^}WnG0i zY9h*aINna$Ha)1x3&pnNzF2YWF7*wfz15u?N5Mc<-SLWDw^ZZI0-Y@Px5Anu_5W;W z0Vd0u&y0i{p%)RNcjNlD5sxyV8_K?)1Z@lnY&Z#;~zZ84#i2s~@ z_5XB?_S{@#+45C6F8QV-a%vP zX)ZNw?hN&j-i{Pj%lDIXDcHqU!p2JpK z?RZO8Yw76&sJ^#*tIe>@IOLpSik;yAvLdEruO)@Mei0C6bLV0K`jzePrP@#DtI-2J zy02v=ief=e-=q&km+(8XIu^Lw?bSc45F*^)4Jwfc=qq|@4wDL=K^M2G?Dnp6W51Qt zJZ^oCOzDiDK6>l00}ELQq$f{l(>L!;sZ^h)sXcEZo_uFd38|T?jzb2{Ma_>nBYS-U zBxyH0*(9<%u zsEPHQACq-coQaTUUYs!r;o~}M$Xw3Q6%AZisx@(W`a2=Qe7!}HUtMWA1XjeO{^x`( zL$3vlI=C#5Dr{(xEvjKHR?cR2ConebZCV&U_Xpu-Da3s8CS=5V`sCIP%#sln&p4FR zgfWi8%H)Uut=x&U`^BUrXQe35m;(Np<*c=o-~|0x1VcMEZINp? zLo)Fd&g(wl=5hhb;R)LhD-t?0RkPgiRmbIju^+DADG)-x zjRxR8^OebSK6B?v*F5`B&w^hnyUT<>Z(Vyd&{!Z)D9KXW0O;qcw3^ksaGudtQ}r%u z`$jQdr7EX0!@@JDCLhJaF+n*>5*4QPo0-f#;J*xcE6z{PNELEte zABVL20BdY7`l`_Zc{oL+bwu&I#Q)m`knG+Ao0flh$hZq2vN(Ofxr#n}6?!#n$a(tl z_uB)mTK%8(HR%sNqQ#_@Bo_xR+Z(QMUH-({CoV4dHey}GaUpHG?A^?BLklW)jt zl)aCP@vzVA@%9uUHy-P__yvHCk_kX)DcZo;W4NBk(y4v!F?#zC=GLfrAsykEcK>=@ zMEayTTUmESq_eTllvDpj4cm~h*Cw;phjvun!I8u5inL%Ul!Gz)w9-634UlLv4Jr z)Y!=mH0_^LnqTERHi4^lBfr9+uC`_O$E@*jv0ebEalOhif^Y)6bFzSh?eXHQPr{AI z2th-wk2AWLlAmy!0wN6XKx-=e{sJx0s?^05H!^o0%g-omj5iD1gs-kFm#bWns&kWK z%>3z6!s6Pn4%XpUlpyTNDhXcP%bHv5aLy5kVdAQ8T4iOVexQ}h=ezu3p>GobRU_;r zl!7VC$kOs=b2mh0d}6(lxQWQD=jc zN-uhfOnlNT5yi^OzZ>@#sV)F~^9Ts=GxyV~BQ^i;NCb7G_IdTxaOoqo-$pgw#s?w4 zWaG10jzd#4h?A~d#iBL-GemsYCY6X((_*gB+QYD!K@CxtxW$6E7x)QMBE6LGe$7iO zcRO%KTdM?RiO3-qpx{i@st*5Ju$x%yNNd8OKnW_&2pgWvvX!{dqY_~l`;rZ-DuVLr zd|Oy9|3O9jS%)Q~#slP^?mX^e=h6AjRc$XT z(HD!EazP$Slf6X$uhjA1lXFb{joxKLU<~ZdDe4)|3AWUQWqghfFMOmZ{Gy8ZjkV6~ z=?4L?FRF*14OrHW3>Fvtcu=5Ctg;te>J20k^VWcrgI!_(gpiCBJNk(v1Z_pg^2%v5 z2UjGSbNqQ2dL}?a>+lEew*LNoW}+f#f2`bQEPT2xt;k98lVIwDhP$}|*Vn<~PU+jt zpS9moK4ec;vzJMP;IZUHCS3G))8}hS`&vhk-=dBh0^L1oryYLa52E}gBN|WeYVLYu zH>|FCvn6FGTuTV zl1ALPA3uNL=&#;g+jLc!liOCy^I1X81sH-Ca3)Mea{jpL{$WCsFvCGZTvsz?XeBIw zHanD#*`Bx_#UN@Q@UX{WC}w$lwB*O2#y8kuMWX z6P^wXCZYoAD@K^L_#qjBCrm7;B9%g;ZfemN><`;kRB1%};9xAiaYVV=V~MUC0i{#W zOtU=9E>&#k7Wc-8K^;gav6=#;(8}Ntx)2fZJ^Ir0*+SPLnAG_89{+PPsJ7;Tww)BbA+&pjfevm{)l&#l#jh$|Ha=-pS+);NO~hrFD>rPj%I&5i^bg zCuwpr0h&6ll@t0dF(m12qDygVX8arWK@gr-PaLTstc%{C4!tkk4diV7IbM1#oh|pd z)4z?$7_N|C4|paj>eYAaR&1W)drQqf_HK;@m~Qu+vOjcQ&$M-D(VLk&x;m4X=<2w+ zsE&I4g~WCAtUBQyj`-fkjZxm=2F!RGS!v>xwB}?D=FM%D?@AZuIQOFOh;L~-bl@#L zpaFJc>4Nr)1Da6WQKxoR$#nXzWRqG?70(fb@sv{>iB{6HI_ z;fD00#;ISsH%~gQ1Bqx^z0giZP*pMaOQ``yz328jX&ZsDPwt{@K$UTt^N;zXY=C%l zi_n73TJES9UHV|X!|glGlz)RZ-dWoa278gL@ld%$@BjjJHasc*`xekV`vN+V$E@@r zWw%?OXC-#x!n1~!jsS-Xvh6#6L3IfHhFc!5)x_eqGc!K-{rb@(JBqc}m6%=3&(t`d z;z~ii>6`r|@UZkUjK1z)mLPs^V0;Py4Dem=alTalRMF2*H6wj5$Z7M26Um-K8RawZ_2J0Iq?FF1wez^c zCSxCe=2C~!2OyqLKzz=*(cP9+M4xuXbexj^Yelrjj*y!&z*L_mroGla^#`DByRb>x<@Z zYW!+#M-P1&I>yD?&md<67T2w8)8pwSutRe;;LgvkoBg@69EHZ)B3VM>M{G7PBkHCsNVEN zd&Xj(YQro~@;f^(`tFbkQY>Um9&-riKbR-%%&Y)tK>DYJm`Ub#M9*=M5syUgQyNxw zx2$)Ox8aC+ea0x(7*4@Ze{DX3g+EZey`eTqIC%b-Zcw}l@E!W#q{dT4Xwc*}yV~X}Bk_Ml^_oXvsj#xCnQ`NmxKbFV^Vf?|7rOmiOf4W`4 z+Zy379T-Rdkd~swD%xkc{QPsD-$cF!YFu;T0pe(O*Rz^N6=VPX2oc-=b4kEh74gm4 zJ7d>p5s zlA)>ktjKyJS3=L=)V8BS8n#M65T-3iH>0%~0C>x4aSKLpxIMz5Ar)!igueP6w1NZE zX3{yo1d?^39{h>!H0Uw3kx)UKE6S)@Owi$EM;?egxuVa==c9vPzZK{p8Ody~hE1^pi%BYbEABLQY4wop{x1)#eq zrO4p@U1vCjKq0t(`0$Ny__Q2B>0=z2^-0{;<-Ng`>5u~+DXxN2m@UbzrKH6ut_aQ! ztUp@%4JqgM|Jt1EJVV~Ws+ViG)@t(33Xf;i?{ATDFG{}nWF6Gtb}FUSH5#iJ&z)tlI7;0y)D6kXMjz>q zPVThcc9@ja@$CJpI-Fa0e$m&0q)~z+FZMz*km5R7wytC4L>myBZDDh*9!>kv+v(mt zGbe={i5lwOef0tZb=X<4A!K=-bWZCZT{^c`PFL2VRlrd0m4>0p$-~Mb?_|mE&RbQa z56}cenr*VVESK?q!Kf+OX&&&?d1TgceXoet$93FS42y(Ek@lbx!utc$mT?Qc-wgj& zNlm2EqdH|TZLC}UlFO}HNe>NJ?f59nfb?0CCM942c-#e@z5$BgWmZApMCtVOC(&eA zAdy%|OBf)H?z@@49SY65D8mIfwQd3!l{M4L2~h9TxFzygrp?7V>9sW6mhTFCFVS}O zlN4pg2BtP#*G9;X z84GIzJ+gNG9vqE!w&lyyaVh$?1Fw0UXPueX)V$r^j%0ftH zu4kG9h2^FX^8^Y|yYeS%AGqogG%OE0?@Dwm^IYho4-5l2`JpXWRPb*HdQ_UtM+$PN# zXJFN{bIt@56e!%Qx%8oN;#PK>qe}0q`FcZ5Qa6_r=;0o#D|sx5aqT?-(5g~yJ{{2V zx%(mGL{e-s7oeyd8WS@=TqyUo+(v3M!ppemzB#iqd+(RcjrqU>bFF}*IWYZS2RaSU zYooE{ExOz|cfOnoE+enQ4)%r#%BA{ZK?}Rj?f0Ii1Zdd>&VC%C5}1r3eeLb|fj#>BpQgQGEyXh$AgL315nC}tQ^Y#!<`U>Y)q?;@-RlFQ{X(bRxdVZP}+Io|uE zbimt*y!3NdrypM3JTfSN5^H;EyB8X<>x#mKuy4Zp0@SK_;lRmC4FV^k6*Fk}>agyI z>hWLeFja;I1V&d57tNbE;y$9?hM;*5)>Sar4|EiiV2=KSVg2ss+o#H=ISXbF+zvl7 zwZY6Hca8_D!K0lf4TD;H3CJG5p+Q|lwQuL`OOJXx)7oF2;!Y_AZj#fP@T~<^CdJNv zl)=Mda795|Ai&HmJoBYx208b;n?zv;xOHw+XB7 zuW#bV-*E@RA38l5VEFE!3xd|lS3~(p{d^B;Z8FGHrT?L1iNWZ^eZS>)K_m!DlVmQh zNTN6EO+Z^%X5x?mj)aLc&9X^&n%u09-YAL=@x?xUqh#@}o$H`fF0+T3)?PQ@0OyO=&qiSe@&?^YIrJ6p?f7uQv8?_`Z($Qf+ld6pOOb;?Li};Y9qZ;;Z4ZOi8~O%J2^876|<=Ugzhm3RBI{7e;B6`3I1ac zW+z3bEsJy|Ecn?*GL)uHw~GPu^8Q@WJ{u`eaO6yNHl^-AJ1a0Z=-Cw~Z7j?Od*kVm97<{oNnOZsTkmv~U$rWM?23LjN=Ztx9^> z>(@KS>$v&tsuomQC1j;L)8{YHIYY|rfhqj$fuex`e?*up6y z@n`C*5U4Mw_il_(1@V#4*j7_!+;yQt@d}rC*Ybk0WOKq@?Y{)5oHNC$t_X2;7->^$ zzQ41xPs%f@zvWn91YhRw&3V3V3E8j9`>m#b27%?Qp3Xp)`@iMt)*eKW=C^n2uYWH- z1zXFB%ihjB=P$#qyz10+nI{W2xYT;sH zK<-B=kt0*qgf(D7C4jMtYxB~w)9_qxDwqzN-+@AtibdLlu(haC0vQn?y*70Tr%hd3 z!NO@+dvY(lLhR^#8T- zVVm{-h~()@s`X^_u4~QS0CJ1Z$jh`T7iJI#hV_DmNk%a3Cp+m(+R4VC25JO_TjL-X zfjTk*Ytlz34W!*Y0%K$-8;mz8nO58*_nurcaph#{9^-`IXg)l)hEjMDkntl!-*YU^ zhBg2z<2zE&XfKebl6*Iv_Y#>qOQ6|C=EouazGj-BKn;#lgkt1#n28Iux?tVltYh}& zIzm3W3*&w1PT-mg8+baWd^Tp7wb7vWIoJ2-(vpL7dOkx%t~kDbj@ZAl0s-zZ-vE;L zeR@Sn^sbkhp)PELH}kmbffou=b0}?R&LU$+Yc7o>Ap84=>>=spbbFCA9Sc@$>0lh# zeOE$zB;LMsWX_VM)!8cv6M9a*cs$!=zk^;G5^MUMw@{<$h(F5xY+sWwc$jC2R1=@l3TWv zg+E5_+NQ4+lCly)PyHC}si=?Q6SfVH1O?hGyF;E~59%a+#t1x*Wb56Q4*lurY{)2C7_3uK ze7y;1)(YHHAu)AT+?;$rRLIRm+xpeeM zd33mi6U(UH9W%M`;2t~gr%~5=r+8@?;&PwIj>Glv9h2!Lc3Tb0{=y_DF0RtCDgEYk z;eX@5Lxrm-VeW_LEJo!uhi`qSXtPz1eMXVuUJDf_o2ZEF$hrY-f0vpaPeiUZ=SybM zW>d8f5j-AyzI-hys_*l2R)x{BtJwXQ!FalqsllQR+f}0$VBDh+n-dQrWp`i7gsf)x z8r!HSuHAm30dSZ4qSdSP@F56WiE_v*G3#=Q2kSPsnx+-X|nDI$yHJp`(WFy&%g$70lwA6I5cPfV03VSeLd`1({WlgMM~q)&v!k$ zWNhWs%>s9#>EstJNuo`8@eOFe)7d(EmmhGubd&yL`+CkVf#iFTgw(mkczc6nduc^E zGbe+39&PXE{8{(7NLr3klf`0t6RAh67Vlea6hGOIhPEKt@7Z8jn_}z4{)g!N@1gme zq%$pCVgs<*=MrHHDlzETEBRnACx)Qi@q0Pnlijz)u`kZU&@>%;N#$fE?w&9^47$<+ zMkpm^4$h&HW`?U??1bOIa04bF{BB;JRn1KlD}5(lzTnT-i*_upzP)pXSUsB)s_1%~ z(?q#6^WD6@JdDWoD?URmQ;g<9mm>Mu{0CeG8%~gREK_CIyZ3~TPX;DuXuZs8mn3pG zo%tV&)s*ROb*nyF0kcy}d4DzpIh^@GHII)uGnBV^goiKfE^uu!cv7mFb^6BkyC&LK z7-Y_X&HIySHTrv5!*b$iu$SV$Zt$tA1$zG?7qm#@!{u9wW$^ygJc1QWN7M*HD(qtU>u+N`7 zhixP6H*xxU4HBJqd9MZ53JWYAj63g}WZW&P+);kHZ`>RHH=z{&83;OVse12leWY(RtIe~FQ%}pR`5@7?BDe48MbWfyy9~|^$+O_o4xEYe zi0_FlnjGRFruL4h5ZI+RvFhQL5MZ|JsHs7cl>J~yb+ZwD{$bZ`HY4$tUQQn@=<%;6}Kc$GNK z_+VJolr#;I=hE-}+9gyEtH^|t9d!&C*(1ZeiQ+7*Gm0g+Luu7U@XT+A|K5Xzi_8>{R!gy8;+>l?s@+c5TQ5D2V@i8jJ(dO*K`(i%bhJ6 z5H z8*Mb5ko)H7jzJ(x)*Mkj{>H7%VK^&{DM+B3P@WF{FV3!uZV|U?T z2?Ark&faUuTokhj-PF)xYJ%PbQRc$}w#}vz%>q9D^XX}9);t__HX%?qVKcj9d3fvl zsFa0drZre32K;!$4qSuE(Ajp28VN2nPiKW3k) zfk4tg3=<#Kt2L0j-;CrZI!}4=_;{c9-IOg!92D9*xk>w5wb?d%sepqq7tPV?DZNzc zQNj?o0=kM(>m+2TsiveB?MY)#-jSdAS0&~uQa?I+|GDR#CKcA!DnGL7B6zSor6#xf z`wg9zqCROq&F$ne@bY_DJcG-%Sg*1)d$aGr}b^vsJ4s;o8T1C<<$D{^(}->M#akO7L4yzQY3>=(xX0 zgXU4i0+kT;YTEQRCiJMup02*4NiuxmeGC2Tc((K z01tz|4SQh0Cv3#aCGJ@LP`1}~s;3@<{P@c_o&h$LE!wBFW`~ASd*fb^Ui-5pd{+Uk zRmpj6*QnmTk+D`4>He(5^v1)U!JadMqB|Y)0;p6UmmEjt$mzMoV&npt`7sY}5O~{x zFoa+FyT|s0BndI&!jGGyn$IK|wFYEGAAYCCSTf&g)DD&>Rp1t+G1hmIjat$#izo-y z#Bk2?nVF$3Xh&kDWKJbD~rE8d9jtoc2YvB698V#SQpcl(XCifqf@t>i$Sk|IHz=Wzf4C>aR;6W zf5h@=+9hql^PNGG&WT`5eH%w(_?FrPSD{R(tAL;FG7Sq8qoS^;nVkr=GNB@!@*7zQU>7 zf*}`2{8Etg)_@yH8JSjzjh*jA56ucI4V~SM>TNi0oU``*co-1~7SD>HE!L&C< zk(D)O_+`nI{(w{BC(pQfdElH{Rpnduh;O3G06Dswt22=uMT86K1+V(LN*8GFKa%jjL>!{Eykq@ zT!G*Ak=^D)dIH{Oa$OQ?wYL0mNt4gp%4X@V|8nvgdk_A{T&7ISbiWenbZ7a$S0xdH zv|TY1AgUI9XmbBQnwVT5*AejHPlFJ9emI?E4_{3eEVTDH_GfW}P^!!U$V~EnI^5TB ztMO&`g5SoKf0Q;t$i^<5*35Uv{5<_6Knb&u4$x}c=-!nm+fWH|w6Pj|5Um<>XaU~s z-mr~|3F1f;Hx3g0f>m*KYcx|P9f6U1MI78GG+iM?6j{oYW@!cox~2F*T2{hQ+*O^W zv1`^KQIPWB;LLB!G#FJ=2=OFNy9E9t0xqt@bY-FIh3X&1vP`2~(vaiC22=X#ITgZ; z!{)P1rZ!7V{7Q3O$9sAQXiMK1OdVgBWY(|jm-2D%1GLDhr)^%d>)T3^(w(}giGh04+~bBszR@XeS@?2S6DXp?J0Ig zP8=$ik2*+g_&jQG)S0G^_Qg&4^;)7Hq%*5%vG4ZJ1`H$*IQ(7An)_k2wl_00UYw%G zp#T%`_awZBd%lujENh_KC+mTl%v6&s?Oi;)sAAXXt&uTY`R%#QP39ncF46?EL7>G+ zW{E72wm^ZO(}`;^U6wxjoNw?(zMwI)7tEL)az@tIgMII#FdW}0hfA**1s7p~s_@>E^^N8=55lkh5b2`RxWj=kIKh6{J{V z@J08`XldBvvzKNaD;JG0v5JNy*!9$%h`4(f!^>A^MnIi>OFH4+tRsIup7&RdZYG%L z{4H%-e2L=UsM0R)Hpq_gVepvnw*vqClqC|p-UewMROt2><9U}F&NK)oTnoCHqpWU# z|A|K~6o1#~KjWGE+%!3)9Lg9Gpj{h`jI4vE^>!9>-x z-g0fGb+EI;kH|Zuh)gh~4`i-4r~5H&*ei=HcBuclSQM*PXzDMLjJI#7E&c?AW!Zh1 z3WH9Al&tth_q)~JpP{hX^_)P3GE%Zfv%0=ch4H%1t8Og{ed(&V6IodFDL$Ofq+f|* zjH%%gd3>2&t*LkA8l!dkMovEWU6iqZ^Yl!1O5cG{tCQzchd27@NfTjIXXF{&i`}MR zsrv$AU3sQI<+h+4)xD646iVx#b^62Eya5lrFq=^r4c2?GfXu-W=J?H;d|%SIVi&9A z5MBw+tpG@Sqzhz6^tE+vIa?udqP zzH{wL6=>KA9jpICURIv?kCyWv7PFs~5gRwlMbHl1ZPsV(*}VGdxwBAvW$x<|=51;s z=3rco6{N8jRY^NtE*6$!R9F+;;E<6AX(uTnA+3}wE56|U^pZPC#}YyrFGzdStl@3m zzlVEQWpi>lNA+<{K{c$70YdgycV`OiJbCNb{`vr-|DM=m%iMrl6Ik5d|F0&Ga^iy6 z*WBG2#MPly8&`}}?|Aq_XHEdrwCKB2OqT`QMTQ*A6x_3AmO`G+X4cpEZ-lUW%gu^y zkMd~-9YtYEm=z1f{vJNZwUO`@zX|J>1~SehPSFXKuw;zm0`r$!d7;vv`W)uC-!f== z!%MB;AS&?p(Vs7CX5ob2h$-+BHP8H3@KKz{j)I2uCdJAb6dZ1x{?eJeAk5Xjn`R-P zLemRU0aXegaQlxQrv-$WTN5Uz5TdKG+?HeWG>D&S5IOn@Wnb$<_bguNb}LB)-fZwa zTEx(C8R%U+Y;)j*|LyJ7Q}ugbU;X>E`qa(OCa6ri(Kj-#Oo8a_elR~v8D;V)v|IT~ZKgdb0^Gyr z%Tdu^lDkxwJk+7f7?5PgIr4vhv0~w}+xNOT5nclkk}S@qeXz2l9bsD|F-N;i;+uwl z%+i=hEJt#yUMCL48uvV%mfUEz0RIto-(0_DBKv9OMCq!8{1|R0PIh)5cfmAY z@i6Z%*~szddjBrpPoISL{2u4#x_r*L!II;bW&e+~9~Q1r_a?jj?`XRaO+qFLu4{eH zf);;t=@+>Bt%zoMu2fh0l8n~O^UMDtd@_74x^HqbTAD=sukc6XN_aFBUVXWrGP_nq zUHr}azE)_q=Pc{rmYC2t9ooU+54V-#sTQodMK5@qwjVXni|?T>`?_dIhLYt&YShN8 zG(zypyxPi6a=Dh`!|Iqf*#VY(*JdR%<9drYR_3C`bd?PCp2a?rx8pZqH)d~HNma4v z>FFa}pVuJr^`+cTpC*T`{e+llVzQQ7zRw!m`G`sVPVbhz2+y& zCZ2x6s!DZcB;})Ph0Zk%ocs+hhVF>*E$d2MRb{{>*25F%^i$0+=XbNqXGXP7504+u zstETnq{f3EhJJ}~^)j`L1K;rd5iXuvNr{NAjM%}(#L>$AYs>KdC6X@+ZY50|eD`j@ zF{t@GkM{|;qAR3GKI7%@l(pd7o~EXrob|n8u%l%4Mb%n7pW?Z`9Jkx@7rE2hcRPL* z$|#hI(_egh`P3oTu8~ta*s|VvdDSoCGT|EV=500Zjt;lpjdPmXO5weG;r{z0LJ6)L zZ&>yeIEPwaTdFyo5ZFE4Oj2d}Ws0BwFQ)$Ip+QJ=hCsed3j3mqv?+03E^Xs8lBPly z&a%dK&;!M_Q%>Em3vISi;%YkT*bje3k9v&aOIpC4So{!?RRi!G;It1Vt=uk+xHnRI z)FJ_gAkr0rRR?Zl9+k-)oOvXc?SGHlD$G7Q-WP}AHJs42m~%4y5o)*79zaQacFhj^ zpN}x9%XN_95n)@FvwAygOaDRp?i!!kw85tEDsz%6^aIRJst3~rX;`VF{GTxa7$ z%I7hI4dKbVcIxyZ5My9y2iGGQn#^y$wvJhPDe6P$5+>hl`z!jW%Dcim>V>eFnD);y zoVN_ff5Xe-^8Z8DTZcszwc*}`fP#QZ=ctrHO6MS`sI;gwLr4fH-NOusg0z6rFd#@M zjdbTAH6X~)Lk}?Y5Yrsq^Pca!PW-q3T-VyyzW1}%^SkfIZG^I>;vH!B<(qTjqR;MA zO_jh+tN8-U5Q-KIcD%2Vw4@&@=ZZBs@?Pty?hV2Yc-&M51>66X`p`qDq^5MY7@%-b zCm`BZvi$6ebIfOwWY|eO)hrK6txHgL8nXk3Cy3TB|3j9rkPQA;`81>JS9+ z`OLbZ2gL^QSt#!Ltsfw#c1TYL%@@ZfX{VK}FpTp&t?%rE^Luzh;yIM6s5&_j;LCCG zh7JX=b(Kq(k~MuEAR|$qFs_=|czmqXULI_B$c`(NYL?A@_loy@DES~0)(o%Th=jj+ z8QYXjkX+sEiD`J^dv)WQ2^tlkRW&_eiYi&c?ea=(IUR4NL0W9H7H!{WYMdQ;rCyza`K!fswG6e?WZ?S?uZ|5Eo&E`I(#(jMSl8Y`dq}cX= zl*RVUuuO<5)9n0K z240za{FGj@zjLP+L_NWg{?+Z>hdOtGHS5ofArYNRa>hOwM<+vlma@aKltR4mU9OPN zGRSJe1TeONs-pN_FN=iN1@P_Hq~L7)@rBwO2FOJ+(?2CI5U`JNb)jm?ZRWvM9%@4e z6rK?6G74qHRLlc$-eSSm?6`eNG^(dznm-1 zopdG3cdmKdFDt^^=$*%@vwK5|IOp|&U)1-=L(r#&inKrvIdm-i|e=6h4XnK zVH!QiOtwvKv)NRRVMQ>4$+T)~G6Fcuk!@FNUn_~;r(u&m#o9H^`Ei=WCQc;r2pkQ1AqsU z3QumPx5k|Ge2u_mIy(WWmg;uwmeEwNQe!`d8ESM3fDjVbRkxy+=*qQs6c zbkJQ|?bVvpyC=hd=F1XwwRFDR5-Sxxq|QKPHQybw9c2Ik`rECjbxKB_(}WrPM?XPh zEIViXD7Rp?^s<)y3-fL{^xpY<#^9Z5`1=mn0<)L&*=EPn_Op}bf)YVwdRE5wCR1)F z)V$&wAlV0|PR79q)7Fkb6Q;nx;Dh)x#-S`iGjMx#huIs|)aW1}-^e+I?IOnqf+~Do zKjMy`+ISL$C^+4TApZ9Fctvs!XFsK<#1S`peD{9G+e+yUo=y+pKO4**P=U>WKUcP= zFCUw(gj~r57W5?;=?u@l2|_|0zvLeAIiE#1;K>GSbn9jEje!)()orAh+iw zLJ5lJiN%&@BOb7Er=|yL^9;eA!QfbsHl^#Ik8R58fd{8|Y`{yu)FQ9q4sFVhiN+1T zc&iO5rz81y*lZCLCZ$d8myB$RpF&5qg_O13Y4uS8R$<;{xA_~&?`a%hK4z#Sw5Wv` za2+3iKYDsv6;)y196nCn0OxXt|1pnSpnFz;>1Uo?sVAjW68F481;$(3oB>%EHz05S znUV&j>=96Tl`P@#ij1xYQV=@XeGe_Z2TFsTYA$!NOlI-`jzEx6iSwmEOs`+D_c7J;Nhf zJuezb=Q9_DXGS8SJyvd8Fgd0??q2W=MV*Q&@wo+;plP1jy;2M3-5zF_8^H@iVoAEC zf(n{w1%loQ|2ggR?ynhu6T%;bXp9!SO)jK)qhtsEqk4oB|M=#NUb`SXdM-MVi)tk0 z@8?&*`)J<0zRn_1kD*>%aun|^^FdM_HCFi=S7%Kb-gPDK8JcvgNDc7&j6gdcey6>C z0-&3GE~Cy^!aJx^!v=gEZ<*F}RgQHb*jZ!Ke~l2GQb26TQ#KtcUi<+GEByzPb-4dI z>_dBSssQNG5W^=e!X)=soHyAv(Zm0%MUCp2y+Sh~`FIaz`M6a>519tWjh{Vz7(STR z$~Nm++ZHc-C362w<4!_toeU}!y36$J;MfYV5~WD^C_jpe&=-dHC28(hqy1ZmQk)#< z0BbiBotRS(tq>U1^&dBO`g1=Me(##dth9^j$G(Go z`trSlXDXBaC8Fs--#QH8ISOR7l*A5{a^bDhs!b^0FU$BVS2$JGN2_+2ZkY_rGE$Fz zgU@QNDK>ZOjD_$>6dmxP?{y|P?GE3{nbS&sTEJ+AMkcOssjFUA2O4YAy11@fjM%d% zH+HXtS!4?WIW`kP&)+gn#f@fJry)`ve)zLRn)zE}8MS4?_PxT5@$=%XYYkJ}ochUa zkZsp<3y0If?LMaZ(5J=~j{kI~>e8*H{~%i}!tJGDXhSI5)t@mTAbyy39Sdp=$Uk&% z3hi`=Xq$mv?=87&s@eKCpy0kVDdTVPH}8`;!A4Wr7O|BbqDQ5js_EaBfD5kFHY8=p z{M4f4+tCfr42^&9uiz!>oNP~d0CO~}4SX_(NE@XY*mx)u zdyo-idn-LEPr9alE{fU#%l?vDA}5MLjB)u}v2Z2%rsG0Tp#~ztC-C$(-Pacz)s@@A5_Ok0qAd8RoW#4_n_OX35qy9wW| zn-3tl*ry1LqPF#L83u9egU?xQc^+&iIjOZ#VOw{Ve}m2qzB@YPChD<4iI0%rYg6Cm-dIu4mQ?C z)>pg{YD)MkBTo?IpeLe4UEMQH4<#zQ(B zHPlZRaU0a{EVU>e3}czk9ZBE$F?`g=7b(fn7x*VU)TDZ}1R_fnvOZsv_;$AJMBca~ zgp>weCmMi`5ES|S5f8oh>a`PM-0z8RJW_2hIG>e2vloEUVIi6(OV-CBXIbfd_;U)X zUAN2rW&|d4KA@A+WaRYHmBeMO2KwgUob}36+vR-AcXA^V31Rd@_9{|hRH_lR{f+%? z+vfa7ofA|&2h9}q&mL2H&Y9N~se3vTi3;wtwp9%9`OrD*`OEA>?r9r@r3Yqnin2;) zFm5XPNE#-l&&Du42d=L1O%|t|i7}cmvC()uhC$ZF$-&&DCl{bb(Mwtr4Dg|d(7xkr z0$njIZxB>pIA2;IE6TwrxWrtWz|)BP9r(KH4VzHf@PvRLaYa(LT z7883L70)1%QQMj)9kpF)ZH`4MgzZ03Tz)7F!U4a}zhU^E8Y$cM5?R&xQr3R*8)Xo9 zDEz{pBtm;tx>oUGdX0+wSJng*mX72_=HP)9D}V4*^YPs`{IyS9>+G0|uZbaUjgJ&R zc6~rQB40D0kr|iwRZB0_BpXZDO42YqI!q#M`H_{m3M3rezEB^;+4z`0iMrJFK#>Mj z8d}JXw)zFtP3MoWWiDd7jt&gAyU2}!jif_;one^453w#$A# zJt`IQHaRMN%aSfVRitW$-I8+9O5GIiklORy_Q(El<2rvZcr&8ElzNZbyjPLhkR}2! zp6i2Hw>(>780TMOk-@ab5 z^BTKWQWSS2@XTwd;plS59V!m07%4P#Wn$+?5JR~4ZIN%w>ja*W@qPx4wpm7gU|qJg z>`8&L%+YlHxW%elbg!|82Er!lD{0y!qO1o^*Y#27w>oy7&T*^f-qAl65!23}rAh@X z_?a&EE6bDY{&Eis^y8Z9$%`1=GX-wK0E3yEzMd{KK)U`lfEEqVSu#AE{K#W`p$ZH#wPCu=Q>t4I@WR(H+t!0$Af%O!7-Cw>D$wk`=5&JTo~% z?TfF{i)54}JoIPYj52$rL(k~vR6D*Y^!tO+$HU6%z76>MLfSmmG__{@!>&0Uc~aSb|ROHYYxNn+)oMM(8gGI!1vo-UV9eG z0UWtG!rZFkx1j@GeNS$&B3`R65H~0PTx`sLJgERz2AtY%TV6CEXe}vIN)>q6%huo( z&Tkv#Te{vD>0IMtBd zzM|N^7%(vRVQ8FavTt$!fXSXe08zN#EW1b^eRdKrK=Cmo>BtQ#+w?bz?m>5@_Bz_n zI_LwD9i+$!L&({MZ}UVpRro7Zq^vc>{zs7i&3V_1_GNbF=!`ri)pE6N!HA|S0hSbRIa9V_ z5f<*6R&LuY`oWq?ZZJ-39Uqz0T}wPCo@{ihWhZq`Cgpv92u*|`DG z9vF~(e2&MAoXJ+W4Iq0p&I$28Z#SA=omZAhQ=0FRJIKyJU&4k*sA>J-130pEL%w+b zTnL~PdZ3eg)PCdyZZ8T-`$#sX#UX1w-+}(R=H0S_)E;c&AP2-SA$sVvZz0w$@?IOuOfjzEJNJs zIHf|r-X_}l_S3_6k}7QfHu!KS_-CKfHA)Q3I!EIkw3rAjW>`o$8e;jyG>bW>KFQU};x#VWqv?_rucfcsdP z;sl=d23@;Cy};2Xe)H{c!wjv`Ozy#B+x2|L$o)St@*P0)%Vlbtabvg?tyizCuqzSI zmg{TOa3=j9e*eamtFe)2uCVEfCI!3v>AG*6~c zoIYX>pXhhKe}`D>l^+cHr67NS;dN;D>8ExDuB)XEqCeYDzNAR)K_3o4D*jJ6A9wzY z0r#+Ds7u=fV4JQgNrpJBbUnW54y^4hMHdD&kEFM%X|ot*!Nm_BP*JBFT$jJQ74sazb?(d!%-+;<%PJCB4(ydf~W6dIa`dm}M~06NwPCj)5U$2~Wv_H$!mG7A*;Z#7YvMRi5jUj?)7_x8R5@ z8A&N-iLhy>%1XDBi!s|>f}qRBqjxrnrYp=_O}wv-<0ZyiHd0^h+ItK=)c+ngzZ=Ya zTlITx#J6H# zz_6}Kzj?_lhq330Q;&a7q^TxS;8-8RI4%oH&@T2Mw1Mn8tOEEC1cN5XgSv*t zI_J|vib{o#_%|_>IE$2Ib#(VaPyM?|X1SCJLAS|5i^oU$B zqcSJ8nU(as}45@}5i2{WQu#Q-l!NtS&c@(HV{!Qhz$FsQKLXyfSQMng5 zw(=Y_bh!5JzNuUy`_#Yu*rL{f0DiUG@%rcVFB7V*-K*KRN1iSjAx=_wOJT+!L(8{KTfXimDj1})aL*8lL#*BSPZN)W}D8mx! z6^&64`6k*bdK$z1X*TC@!I!**cxpYlY~_b2N`c0fV*)zvCGbmH@|v{&8{2eg#e^1( z)>5v|pCZkUoz8cAY`45>ignyf7B5%FZEU;$mR?&L)OI*|XAt&7;Fa1nhf^C>ATCF$ zO5Fg)B3#*!mOKajWVt>FlxLIXlZoWYc#ItDLZd(9RhqUiQB{ju+a9>RLp50i=xhLkCTgIedF*DLh(#QjxcRj}kOL>(6od z#waXP3-JWQ5IFfJll7NCnxld=M9S}=waV*YI%=r8RE9NjvJTIDdAmf@s|_C@@IU>R zpDF=RXHRKM_Ap&1-Jtb~B3x zu!5VMN%JAFCK<#(e4;Z00YpoxKLf9C@tqem^z?XB3jeuM zf@1#BZCF+U>!;W@)R!7N3L3bUjx-Nxs01az=&t)E=z6p(-JtzG!=)taFme3CP1{%c zqqa=W`UCoIg|Sog^>${e@&}^`UO01s*~+(c#0VrI)2|;O0q&Em8T+>r7lvOdSBP2` zg2#4Qjf~#6T~*qdwx-HGaq2&{!0O|TeXSUr&=QmY56=pY;2hH7y zv=#FH3XL>;sA+0DE_;23bv|dbtiJd1HK+Bog-jK$BD{O&-AK7swI^(r+!_o>bbc8T z5ENir=}8)v1^n~48mLk7Lw#ri1NprXdKk*rU~pmk!OKH+XLRW=0nhJbH*D6?rL5(4 z1ma3f+lzsxGZ!>Z7U@|Ce3fqzpXZ-yT`%%A)!=}`Xr}N__U)?DsO_Z@LsClDd&WM5 z_$4-nHasjIl_@{VlLKJE^=RX=J!i}&^WO6fwcD&#w(JdD#k)M%K0`sCN{weJW5)SpAV z*0u8+Z7?UY#e~;F(jjYf$jlru(Z25j_3bROTIkH%Q14386!U@6t+ewyUoajDU(}{N zpE}a1mQD!|%uuCXUl!_UrHAkL*;*&g@8wP`$pjL<)bBKx2aiM+gx!fH({)fv=6x?E zVZZK_-u9bht*jGC6F9szc7669tK*Z=EOuTg8(EPL-g*rCnhZ|Ft^}BJjKBBvr7)3) z=ns}5D!Z*99P_rY2Dg`3|R`8Kx z_OMRfXCoo`Ygi^f9-|%BS8h}|D$n%r2(I=+F$9kFZ1PsR7q!n`NxsI04QLN#8!>8} zJa;YV(hDJ?KsK57+mMZS-Po0j6L~`8I*7m=U|b*~ZV9Up|F;bTr4@LP@V9u;8m|M6 z*evB4=~zw(DoEfzmgj8RmrU2lSO10zEq&H3%^Mnxvax_+#6IkVuBX+9EE}y<_^+ua zeMetms1ltG5fGvN5G{lMVa(|BZX&0*=Etxa_32aQ1Mlf05H32!&BPv1*7*;$wpPx{W)zfP4No(YokJGYSN5eNqcPuzi3qcgCu*jr8bCtEHyX zQ49LTQB^bIx&ow6c57ER9`0+)9jod2`46iEaa*{74Ri!XcXW!pidb&CuukE{inXub z5vV$&oyTh{N{o?2uCx^VwJDDK__WhAu||5zZ3{!I)ULKO)0x7%;S#qy*~_bEW50Nx z;`V)i?7yozA5$44PUe0Ay#hC^%EIu&@na_!!AUjk$Gg3jBu?l8|5RJABHtd<{De33 zAoL3{zco7B07m%?Ss?yLj>p3(Pr^{AxdH2Z)Qesn?XR~~>HXr>NvUwWy|5}MUX2)> z@_FNAV&I>6YExyu3i10|p0VBunxOBQpvhN!RcUEhKu-*8%S^4^$uLqIweX4=6CqW9 z6U=w=09YkpB<@p(kdwH^*lKT)SshU=sl^+w_(qaiOyweE^KD7yRC=DH-yJ6}&$7P! zjz&M`vln@II-k$9$u1TSG!<{{dy&d~;u9;3RYyZqDAV5c5~b!Kc(8Xd(`<1aaI}2sCuNiE68`c%oS2$o+DqCwRf~BflT+L=`4z>NV{P6DO%P}5|O92eWZqCmW1-T!pO(BitKvx%)!MPvu z@sxBY3!l>go2;J9cN;5;Y3yUSD($r!5Z{Ji+_iG$+LVK6<@fFLvT3XG8j%~{G<1nS zm(w{5JJU|Ct;Zvb9kl3mKgf1p{-~Sy!Xvo*-g-;OhQlt>@HDfQIXg-1ZRa6at|^`h z*dtG;I%AyP+;z#)UuHevU7eSL6H0)kbbP_=<^JRQZi4!b+NT*pSs2H|wn$-4slYsS zOBD!yP|V44Z1W9sPW-AWfm0dWZ^1hj?k73b%DoYgLAkCCGi}&--cYBI@>NrydKqc2Vb07z!Q80nJD)$EbqJW6;*Z<|IwtLh`dy=-a8Xu zJD9>cmU1*qQ4}hDay+deukSe4+q2p(@`gc_-=?A-@BHpX#N|C2(Qfri?kR3tE@B(S zP&CreeqFWx@Wru9N{FvCPs}s}F#nI;MgN=BF98s)mx-TWOI&2MeW=X^=uxlftl(3v zexs}27l-hEC=x&1`{Oi`s|K_V%sgfMt&coy5Y);H7OO)+w8LYgj+wIQp9NIRrM%WX zUpdms!31yUE=({?VVB+41}a!GmMzC-O|nRI@$jaBy}CLFv8aaqbeU0kvsl<1TvD{L z=-WFifBPiN59^;e!gL+v%8}aU;>a2Db(wUksFB{4>L7Az&+CJ`NX-YtXbWxlJcB5` zd8qI=T3KdCf)EcWs}T@IjssY5%$4!a=N|wRZRBPGHt9=*oV?0 zw|*|a{eH>FY<42bJW=KQ_Y<{rI~$*CEf>`GNZbEIZA$|`r$nV|^tfZw2RUM$(=>(; zZ5vh~jN96J)tTg~+HXJo1i$ybbC<(j%ZPgB#+EpFqZ1WXMf<<9H7(UG*5@9<(qLVB z;lPT5_HXK*K;$wXfpc^sizJvsWWOsWiSEpObh`C$oHblcidWuirpWROt(#g^@)7}a zzBP2AKL?+-!uIb5+-h5WztG&$QPXw-ZbO8YCD%aLy<^WFgMC(5zLVxbl27(z=G_`Y zHt!5i0NPq$t*u|0CC_EH!k|K76t^%GA-D2Ck*4)@w^CW1)SpP4J>(->`CwvK2_Due=ulmg!JT# z?NObhWhqtw11{xd%hE*j>|-~7Yt11h2?}&}*%L2b zvc*ZkBvM~;3Qx#*-h#Kb{d`vDC`0?_^Cv{z;0%EUK=kZnUwN%G*bs=DEN^ry_7DdP zHcK&>c(8v`A~?VF(M$WKP8X@?5?|J8~lP;n{RAa7)PT!$NVdw=&mOqikH?=|=8#Cuz$8T0l3gi8Wc;>6wbDOT}GXgIFJbU<5 z;8NEO55sq_Z!)b!zA?0^YFNe-u6YA+qlDtRP@jz#eBTQPvzblTv!yP+JK|cDD#`fH z45TW~*8XhTZ1sd8=ig5h<7yU0)bIGGi%7TLtw-I6cGJ+etqAC8;nOqd*sdjBKu0E1 z+=skG9Yf##ZonBrwZWU+?c=5FM2%If*Ufx^7%Z!l&6G4;TZ4y-CX~8t_aJkr_JW-0 z+gZVVDw1I$IiJ$U48$v(%f+mHNAZ0dSb)36dDk9(e-D(By!@Yb=l}1R{?CI=JMCPp zQFtREuD8bk_I7(eA|CmLzBA$rAf0~T_s6LoBfwZ9xAMXvkLQ@ku$ zfECJ5qzQU7xn2n`I`ftN?rRE^o#@EI|F+4(cYJSF*S)8W+~+O-daP}n_*I)}h)WlJ zHb->&eVb zeLp1->JA&u&1odgQ0Bp}S2rkC&G+IK+KseKL^*GC(?tMcG_=4F5vX23zwqnq3espCPz)~IHY(Rs(W!$XR(+dTn# z6#H!Gk%a@BbfU`I+~A6~pFSKz%rT``{y5w)>(4c%liHH~WO(H|`vu{OCE{cFAhrJfA|{hyz|FKm0_f4XwzZHlP=JBh;p=vOM# z>@fHmob_d_pJY7W&f4iz5tX4+QVNaSQpzPD)j1E~{c?7#mr$1M^`DM~3RlAZJ+&@~ z*Cs?O4R&Q$Ih=8$eh#bET7zUiOmS21{6LYfBL|w4H@>A@%wA+b21T+;1{M1U7mnw) zIQI_%t9zUa$kxGDuh4&r&Q_GZ&OVzG;AO8^*Pb!P4r z{=4}X6YxNnDqhy0^9b!w@?>UXsW+xLtW^Jfxd~d6QDEdHkF)S?qfr4mPAbWu9_&u` zi>YB16p%2 zCdHzZud#_#TkwB zWl%>Z_Gfaxq24j}equ_&dzyTgS(v3yx5BPfEC;3Tswbkpe7dW!;Np(#^bgHUabw)f zRH9qj_~D1~{?sdC+sNozJbD_Eh~;Erb+Z!sYS2L$UJR@yM!KY0#tz}%d|dq|Fgx(RYW^ai~B=q;eic7IS!r& zOR2+%F8h*AD6jKzaySvRFV}9pmK%PytccppdQ|zcOP-SG&7gtPHq2SXwm=ET3#cQ? zL`ots8-(4*xJpW0OdhJ)aQlnr`t=q8mRIe(^}O$z1VtzDPa>z zvQpIBG?pP+&NKc7A zjwlU*ib-h~!>T^rul)L{GCxSxbj0BKqD&d>7t?G=>O9fTxxOB{V~^0-TG+Nn*>XH( zH7H~8@CgJ;04#(YJ3$SpAnpl!saM_UZGMeJTJm+|FYRo#TuSdI@Mj2pJ>3kwfdw3~ zvK$DY_`G4ALN{e;S zR`R#f(|F6J70sMD8{qKaRnJT1x601y{&h@s^Uw;;k9o}kb?kK#3*ahm)3X4dq?24j z^HU<^7*O0|OmL1zaw_>sp^iO<%1&EVcO=;C;@45`t`CKRzntByx8YYa@z(hHk1)}+ zWM5nPc<$;kd(}t|8E=S#6}Sk4MC*9DK|7n!)V;k1{a!+;Ffv5Fax?-SQ^r}o;F7@ zo~zkf6L7u0!)+VmlY2!Tma57xiP!CNY53gdfu62nr9-w)J(dNe2b$KDe8KD->^Em*29&ktE$KWks3r)hA*JylXy3axVb%_4R4MwOlO89=4%_3u^Hu!*Y#vsJ}Lc#-<$Ea$qUv8GUpVyiPZSlxztc*p zI1&D?=pSFS{?j9nfF{ud!@@{9{~RJFbk6?HJh;Z7eH(dAC7h$?Gl}QW!Nk(7+ko;g z9CowXVYSZdcHR|?I5cLUF8m<*LA&x5_F9~fi(Yu)&s{Ja8OLc$Ile10UTPL_4tO4X z|Nnu1J<%-lJ|2S7nrlsKfws;I4C1*UvoZ!Px_7HnL(>{dm#*5fEnSz+j@jsXHcD_H zJapHa`@^G=sdgu+3gTcYS^hcXKr?9VBNsPoK@`BHt~D`VH8DbEz;s6Ue4J{_j3=3% zUw`U2vo$F1J;k+1vUS;0@0&AY%qXQ?1=m8XG${{N|8ERUJ8b}wnTk|I)qZ6Ok0uuN zqhHTKSVOmFD4&u-A|o&IT@i<5;Q)5XQOy|u(tWtB=z*f+-1rYovfar5Jt&=EB_F~K z6VG>@eHYf;Mr&cX+wCrlvdCGj)#OT0B4(efxgsOhZt~jb2HxZ;-jT%#Ac7P2U8*| zzowG7oLP;+d-v>75D-gO0e0Z9Y@QCjehxlrnN|k|{}T+=H`uVSUYb-tky4vK-1W<3 zdDz>F1d9`kYH}G?#k;xh3ZN{14cU^n%vq?moUlXZJpg!UHw&8># z=ZvUwjv$!4K$b z)iW!T+H*%t)73E%God{SfSK8G+E9(}!j6e9Ne@DwG-O*yzFl^ZdwnuWtD4nXJhEyv z8J*Z#Ut2s)t;+BxJbWWDHfcQLCipZl(e&$;O+(*5LcL?6V*Ej-2))EqVvTQjI9>US zmd)DIS8tY%>1Q72V-wbS-3El7R10#itB&SF`X*Cq7hfoD`KEXT*U9in+QMq_{<5^C zf##VZcKcHvr?i$Uj%Dv;Q+~ z%@gaz?Hn)*J-#enWcpX@MAG0h0(+@>{XTRTAbc1?NgCvkBg;AlGf&ZWv2ZVjCp=?E zEXM)^-Qjflxwu494gFXn(Svh(?I1T*D*ICbbQ94^a=L#GCVL6uy~*NRB`m0|r!zA3 zXN4+An>WH@oi-+i%0SI{Tj380p)*a2p_kb&JGf8tcCTU5HfyPMgDPkFG+f8wF|iT) zcj}a?d!0m=lD>D^XXITm*j;077q_3blX}$@Q3Ckmpwv@6U*`Kreu!bPEjRG@TGI8C zJS$n^T2ICFYpT}Bow_)h{3GK}C=HppT=zXUjqoW-V=lkHaYd(cE7V&V*d)F)BeHbl zVzB*L>_t<8&Q!SL(48rEmd_8IX{+rrKIY%j>wtv)u$am%e_I@qi&Z4T%S{P4N=2Uv zFxFG)xifTw`tC*TLt|282h5I7FDk4?k^f8C{$mPbcyp9@LmoIhup^riZ;lQx@6sr8 zk$53!ZlBfD^9??%wlrBh!)lzut;+i9>9e<0uO81?J$v=-W7oaQ&Vj$KdEZ*+l@5%v zf0HT(MpQ@9Y?gfcw3QMhIzRGhDr1B|lW=NG?Rk3jph`R1=j7)rAtU3FE&VE~?Y5q@ zy*-A6oc;f%$|5Rh+dvD?J}Dl9u9)o6vZ@(jeKHe69=S+u^HBvO)*$elA7|`U)rfs4 zPA~{_qDTcch(Cv4B88u0{!GBm6(QTlT<5zTPy)kT*147JIUrZI$l@`jI$*OEJ{;|i$y!2kZ?#(WN`AZxee-5VyhKW6UPJw@GSGGfe-mm>2&qX@_2-9}hnI`pLqi0@5v3jqzDjL4Xlotm;N zQ$J!eiubJflBHcGUptwbPQ8+1$H%2@u`V|0d&Y%Y(K}~gh!}5*>|C+L>hiTEG{|F3 z#p_%o!J0AyL(as`GILM zOAs$2VL)wxWIGGQ0@{xcyCCALvzQJuJGbuv8o_5E>Z-m-6ahgwIF;_YciZvtoyu2~ zyWo(3yRL^jTxw)eq3+t~+{HUQez^BmgrNly1zqUqkm>w(`y~e~o1x>q%_a!XI(NSI z6XLtKdH+6G!G^&GjSu6nc8H*UC9{k?-V4+1dNOpF@oTE_&YNXZmGxIf_2P=0n`+c7 zANjbW2VQ9-?oNN|qQBR?qSVGo_2F9G>IUu81sXOGpV&Ltbz_WXhgSD#Z8BMl6O=ya zr1ENnv1+8t{<33=16pwiGd-MVO0LS_Q2{9!e%sB-Lj9|*jDFy>FtMQ~)^e6a;_y5@ zu8cj!17b(tmib8fd*v{}qVVRER<{nDdFtKlc(7uj$F&?*PG_1X7jB=I?FWZ`Tg$SF z0z>uE`n)&=*T2eJKbnz7J1%wz416Z6384JzbEom6)9FC`pS2In(qG``gX0nBn4#R8r6uHNFy}!>m8;2_ziH}8Dr+Q2k z_zw--IXHLbhud+?LP+a8-yT(E+&R?J!?REZY~>SC|fN zs}gb7Z9rdYPCfC1bArU1?hjFJ3boz}uiM14N?yh5)3f*G{P`y8bz)_a&E;zAE2)pq ztOAAH=LfH=ReOy>bcfw^Ei%<|bd^ml!B}r$^w>uW;ln|Ir9=-;nVegfQPnPu%l-{% zkbU`&J;xN!BzAxRzhJY|n-{T~SM(fVcjrpkQGmdT6YHIl#R|{r5hRO|!<_o_{C7_1;gg=31Novt4gi^xPas=7Sky1r z-!%gB=DUkB7Wv}kI8*0v@g0|cX1mq?)GmY9pAh#mjViY7ZX}Th zLUpfSOYrht+U(pnXTSxAE`>8x+&TBj#b)2{Ru|k{ehw!WcnIVY>HTNOmHRhsL4=MKw*HRy*{r&PXfu&Nx*w*$d^yzW# zeW$DR&s?7yAAK!AZt!Wp8wAnmwOp3Z?x+in_dH7Jj>x{3=d&a-+kR_Vp5z&E+rC9P zW%nr^TRyoZKXj&`%@@22a;2{u0@*J$KREl2seK(A&i3;Rc003jd)DA7KBVhwo$DXL z*?p`2K(SDpdx9=kT&m}E!~1qO?nEg>1Fgbehk&2G&C5`5}jBY99Iuj-8F z4_pAi5)s%~A+RL6d3cFv{2O}A`o5EL^+|2x|a)A?n_CvlYzfP2p|8Z#W5BklF!O1(} zctN(Q{I2}66+9F0Zkz#t_!=)^=+KY%DBKo)O>5a!0q&9PAi7&)TTWv>qxh;MN>6nq zSnm57dIb}O&)Rb)lI&=I<_jXhqYbl6KK%dHDbN2%#eam$u!NS2&;Z2n7#WJHT^fmE zS8te9VHH)YKlpX!1iT{laITo<6I-$LFgPK~-rZLvQeelG6|{=g#5fnI{Iq#B`FOR& zuxVgU*`E+!IiDg}c6cx|oBrzSkMf06WypiZtH9x!(THsPDJ?JSxTA3rG`@(vcl(~B z?r(9AFW>Nif}wdzNRwlk|11j!-s}uLTWC-xZzZ0a#3MrYd>Sm@H?2QQD?^7Q%bAC`5KJ0RUux0lL$yv~I**TAn_0jMVYgeVn<;(E)cml-+!$X~Y zM`6`B{+HWpFw_hL{Jbf(^{w-4cHYu$6r+!lf~%jrv<$r~z%f(z8<8<0ykemqq7PXN zybWzL7k+1(_#SkQYIkipZAP4*J1rM@wD^#ILj8-drYBfVzIsZ>t{2&ATH~m`a?$3L z5Wr!?JYf?R9~Lae@mg@SU@ff;gX4 zj<2U&U&y~(tVLNUaO`HyrQ^EMngp{I<55zwy(~fVpteF8S9`?uiYDgmIOg`_5XP5R zfwSskP8lTgp&2I8{yTSBvg4oa_?Ewn2l;5~OLPy6dtZ0kEgTYzFby0Z4f;MN;NNw} z89jB0v*7WM==l7{`b?nHnB8d?1Kss_r`;xST#-4lA}Ic)(F;E_8ohU- z8=?~i(R&}g_g=>|Gheqo&%HmKf8d<`T4(RQ*5|!sZ-`*eD~y($=H^1T1Gdshihull z#o*XA&$UbvZ=RwMdsMvJqX*(6?gLtGwLXH)w*n&dz zBjbvy)nH={>XHOeTcT&4Gm-K!DRU2N4he-jcanT{bbgpsSku~79a*^JDxXtKsS9AD)2C0$MClP5M`D6hxa8Ki99vm)74 zYv6Iy4O9)87f7u^cmo_^ML9r-}kGJ8Y`e8*OkkgMIn$8j^&iQn3T=Frqw zONpx3k4U`#eH+0ksCd^*i<7hN-F~2)l&cJ`*qx%*R;`=g7TQJ6ad>;{{aef8lg@> zs+bab!>V$&1vZjatdb13sbvClqmVSW+tp@ zU>s)nBI85ip9DpZXwyV!dsZyTRN5^62$CqFEhj_E*5%QNCdg>ar|<4>@Y>)CR&f3< zVW*%xVM%Or<{+FMXtYd~hA6qV_aJUzU|hA&-N>TTLP#YSks;9vvHdIh*`gU4`N!Wz zg<~8Da;SPGr2aoyRU*%dqq!Y3l!@6SRHT)zh|DGs0rXude3rf2Uldwom8`%(NT#kB zbumHv#jAaLjgMBpbI0F`R`y*|g;9k#a!cniEM(j&A~&#B@RO%<=n7Th+~v$3xcupo zv$WCYs^Ol`0aE!gM~wZS^NLLnY67j~M}+}m6g%J5tf862;;BRA_`cSwnCQ`iYz;&G zP_O^cd##lK(Gz1;=5>!1-|L=qOpJIX42M2S169tkfloVngO1nRiq57_F!P+(7;4(@ z9Bl$4EKClccH81Gg%0uyR4{Dw(cWn5ADBtoH8-Gc2|eP|6ZOeE(Fbd2y=2i6a*n}G zoem^p{epr^K^nAm1vYb(v&k6K4QF$ZMdS)*9!ZOx5O;v$wE*?T*Nf`o8W3kWcMF4SN!La!I(aC1hk4gX!F)H- z?{J9l$(w2$o}R$iI=wixuC$i0uzEDJnSQ(K>d%)GH` zwT(HSH+`DLoP3#YEm)}&aWDGWe$}=fkcd9#nt}a7EoUb2mDoP8@sRmuVGFny;n$>d zl8RE5X(dR;{!_yBXpjdPoP#P@6Uu19#TjT0koq;I0u>}LrDX_7^RmKeD#b?YOyS&bp~raSDBbYrG6x%I@l+8%?S4{mMNLqYUthrLQv9+9 zv03i3^aE7yfkS4CgmC(&Nf}+3*JWd%khd%SxYdSMQ=v}usI17D2;X#ht(XbBC_#6I0Yv^JoOJbmzDj|bBvKXc3k|-yrjiKC z$SLM+976CC6cZRFzEzTVQBjvY@e*dFIE=5R@`cNX^Hv*)ONItE@nkB1N|f(suxnG* z{@|{*A$#~b#sB%2<(ntmd9Cxw>S>5=5J=f8Uzt&T^zjRr=ez<}!3CQfBchj^@S6%b zNA5P&^q63wD}}Ykh{DI_yksa8u=ySsqTl#V@sKwWVen1Ah`r^PmHDRzTI{7ep4iF>&A%zxpoUp}EOhND zo}H7(WO{0>({#NvRGz8bO`IH+}2u(pX`TbQtA$wY2Ioh}= za7FC1bpmBSF&)({Dva|B2gvXHuTvXNCWDrOLFwRkyZ3iU>oJxK&Cb_P8d)J;H~Q>N z1%Dm7ZK7Ov@8_TwD@x#`#m*dazizQ>Wq0)Q_RVffd=j`7pA3rVWRA+F$YA z{ja35dnVI}QmVZ;5N-PC@CnYuC%ds^o~i9VhudH%sqz= z^yo5GRpk$El{-I9K5Tt3xp>1UjIoQ}Q^*nCQi=3s^cxkLUJh<^diF=yqb}hN&8HfO zA8wCMB^_LOPmy~33mLiaXIJkz#JgfbG3qMhF=w0CjW+jvP_Y1F#*j(~<0eFRXR#)D z&`wq|b}yto*_O3$?}BK6r2Ac($jAj&FOi0A@_!$=Zxy%ZsQpJ7R+s`vD<-z{M3I*B zs=YIxLL@5df}6RqTf1F;A`inX&TNpA49ml2DjFMp0XYsa$ zu?6x9yH!0JuO3d=)C303*21+jb8W7+N=YGETnNAyFx&I#h%()!3-c4~TMBMp^x zGVH43Zr@W!D_jX*1U6_v3i;l+hqG|XZH(VTvbPQKCH~ng(W#NpYW}qYt*m1UDfoWEa~_9#x^}3sm?vSXp-t&$V#Z%e4JmofBro(g=j{G+b3t@{~AtIQa>S z&2u-B9CALpW&7FA9ONL6%H(a8qc@Xb$_e}M(RH5G3so(0%9NBtYT$YL3H-h{*T?P( zWopl(I{?X@gNCzbRL|MK0!rOS$63>Sn!?}@E;)x6el6QQ)FnO51_pFO&ra>NzSwGB zNc}FYRlinea%yh=0ZHox0Ym>_BJ7H)PmLqWl=0{|t<1{mvT_yAB)XD^CN4*vJJ4tw z(K*=>_JifO9KZE)1|NZnKg(0Dh1IpN-hRNH&wHeT;XZ{ID`3>Xv0(FS-QPB}!}|qI ze#%1xJoFXdn^~n)JDGVKbM>K4Hq_7qrRSkEhyts1)`M>`28o$KqN*@$9^18)Ifj%slE*}$fpn25X(*LJpK_N65Hj_6;o>O0@YU~kD0w%& z`64zNdyEk!U(THJr)p5vLQlOpnmdE?)K`IzG~#T70(+F0=g2RzLpglCn+)x3F-$W2ehsM%#HFcxCIo3APH)l{#slQm_M>ePBgmnvVgdbHMaJH0eMiqo(553@kD(udE7$#(gP59%8|c?9|7rcHTn z>d^z(^|DWcYO-J^t9h4;^jm-(Q}oM>DeU<r$Sv#RNi--?R`~9@d#w+K?$2W+5`@@fKlpx7`BP;(< z+uj@aleX$*BxEwQ{>!pk3_|H_Zp}vRs-3-V$MRv17x4+E+hNIXrxki2{@85d-TV9I ze?E?;{v6+#?RxaWszf-JT@)hmnQ+!YJG6m8AP8r?(Q1#*HsdE~Vc%g8aVr za^Uq{afVPC@4RY)hrNY=fAp8*UMHz6@Z=k7sRnGX2@q7SrYhPl@(H^J)K>j|Vwy|y zlbL1Crh}S&C8vRPu|&SME7?@FbhlM5Z&iuyR6rPeYMYB)UHCrRu3-5Nlnn8|J{vrb zF9_wKiaAh6p6?xSw8tBuIv6TJsX*Xz2owDz*Kmex104<{cXq8FJZf?te>93G#xL9z zoh>rl) z-j+7EmIh*sT}D5XP8Be+LQzq~Q-v$X6FR$Y0fwj$f)9nEI#i8!msVaJ`#kv-o>*|t z_m{d4Kb=o3D>ZbB@2S2+vS9`(`|CtL$iahd>zi5k_pFhwj>-h&%WMzYEv?Tb4CQdU zHBe3jkmef^U)wpctBCuD9PnK#o@1AvISMo$?zQ{Gse>EH7D!GKk*?2!WRlNra@jCn zB4@J9Ih(SzjreBmFVNn+83lqCrTqu612>#6!x~?7y&aH%zaT+^>dN8J*lcb6WqlY+73=j&b(^b+7_k^lajMwNZq#=wfx{%8Av z&-Xu!^DLZ7CPVZrdVO(ey7BG`<#M6MA*%uguSzEWhXs&Ra&!S@=N_vYg9FidxDKHu zubbOM-z$&0Ba!!M>#8~8GhuB6wR|l6Qg>1NtJskWY?n8{Uk_6*#~|-r0*r7sdpHtj zfZEVsM^3{K(*hagh$}Sh{#>ol@ zjhKLsq*u^n>YAR@#PNCrAo-zq)z<#`!WQli&n-^ZHXCP%{EIP~;C#>S7C7)7H_LR- zSto9Z?7=_m&?xZp5F^ogo;_>%IT;Ty)hn8)JS}BfT;d4+Ua{9k4;G#R0&(YxP&T&MkRENac2&o?PyZ*FYeBF7K7Uvr2pE8lQ(|+$73~QYq#D_Tc8#lY&AO`V+wDzrc^d*9SqgJkA`IDKtIK8^{I&eb=ZPHo`qsatpVR3Y?%10; z(=gvDF|S>z7|?#kkFdhO1&1%-L_d)V) zqn((cxP}Tpl`?31{gToS?TTfB-$^`=;}+j7aAf`HpwuYhg*K#Rb{rIZ_H))9Jg_!o zX-nMxYF@wwmC>NEbyx69+G7&RF>pkZ>UU`^78eA&pGWBzlB_Ja(%CS`_x?Z;k@xs) zc?x+EiJefJ*fL^PFIO~Sg(VC$(!b(3Em<;8PCrSI^DPKmN5dLyBfyca5FeTB@njh1 zR)DTOtZ8iWD*zrCtyEI*q7QOS+==scus`~G1{T+fg(xe8#86bKwT=C%cIv!c{PNnY zX+r6Z=h8B^Wm}Y-k9Iy-5N3{Cl{gm4AToDMHu&MAReyZ&< zLM!-!_$sT>4_x`apZ?21XznHQAP9gik1Oa%i}kABnDBZ~Y`UfG=kRT|MB%cMLUVeW zRNsMe));j6r&PZoz^xEcGVWst&A!aVe8g$88}#ORbZED2R?zd1UC6;O2RWLWMwmQL z_B=7)Oo&tnefh}n>PhP|0j=*1n#R^@ zyo)HEmlX90&}9oA zR37eV$XW#FWw~Nrg|L0O8V6{8Y98@r z&kaOe@+l~4lx<_#<2^Fq7H_)9bylP=$Iaa>agT2QfE&LzlB`dZ+|@aAo#FY5QKC!Ne=4>r4;;#EcDgbvOeshl z2RWBsZn-&32WSA!AbL8Qb$c?pZr%irW?q?Q2lIaL2;;j~uI7>ckP}vMJJ_WjuH|S# z_V0at9D35enuywMa(i*!;w_Dl6`CPhtxtZQNzQRt=R1j7$a%85OF%a%xk%6=c*fAl zm8DEfA~3SY{Aq{vE76A$a#qUt^OpV_Y_~t~%j(_Jtp1+0qX`GvpQc14C7lv)XRvM{klBiU8-~-v6?J zUNK)Z@7YhM$$r(gC)VtthBmrm&?l(8K>ifd>~`!HemSB6fY<@%I_x@c#};aXSDf9p zfFO-!bVxwyhXt(@N+7H=`-7Ii3QrE4ROW{nPwAh0AXRq?A^)r72LNO_Ct#D7UeyFal=3CFEnH`%!M38`#g6=-6oS!uMkQ zFy#-8x2=G~-V0g(aPg(KF{cM?;0gvH`73%RaKvv=+P~yV#`Z9jVPLZnU_?WSf-*EB zF+9g|=U;J^1IbYl z%&VZ8`DZ)5WLqM>b`P~O={zW3WP{v3yFpJ!4zfz0s|c{{ zO4Y_JryNoKiZR+H=`F`b_r}mJ6r$4%kGkINXaq?}OUMq4Yc9+c?ZnmuF4ySjrl%#s zE)$i+k_)AhZP$e|uI-b2>P!IJx6PTxj}A8PXVYB;XaO5YPp`gs66*vVN)26Z(*A}5 zYd7t}XX-OE^Ia(FP2G-}PyQP7c%EM}`E(eAKh%EJ$;1v_iAa^oyk#!;=KC4K!qt3cnV_dTqLX!lNXd{%jm!$bW2Yamv!YuyF(|?P!GBW!0d!aQZ zJZpD`F8#f#Y~!};hs9r=sXUHR*?6L{?-tgxIjB-nqgH{S)wUyxL?v`v&_^T8K6D)f zi*i4|?9MZLxy<-RVUZ^-Cv8Vs+2|?y;{1{{n+?<{Ma95_#9 zz6E_Zm36*G{=uL298IsdZvos;EC59R(Hh23R6M8cp+OD)d?3AF?DQ7LQ5luL?3g4f zHXq6_A|kdxHjuu*k$;p*+7>a&;9KrJKRRU*?>FRpLkiV7tK1lyHMOoE>IPoe_)S4&8(Ia zg}90;!Qh+ATfOXu-~OBrCVJK~GkR=`UPJOqu;UaW7Zk6nmhNu<#S*?3IvCml?z*gW zJmmi}h-9cVy07n;K~CmF_37gKc*?_!za6>8oT|e|E(OsBdKzA$52c0y%34}CfDW#e zrvg^kh`UzDKn2$ZJo-a0BXB4|@|;{xmXfU8oi03F7cPUlYz5(?Q+^bwy@7T zn0B)mn6~eT0+G$t95;ndQTt0AtfusL7a^v9iq#$Y(ffDE?ZzV}L34=EK=Z@Gia7lX zg3r{2B4|o+wE4RVkC!A*ibCq}NU~}Sedypx@$Z5^cCRSvmbPtV7Ebi7I7)!0snLDq zMV{cL4{vTcgX^KgvlJP(Q@XRQ8_+aM>FqhMlAbG`8P6S~1Aet+`MQy>*`+5;OdsWx z@PU;%re)>+1axPM&xu5+L=Nkqo~^H6!fBj4?l)o4Z>oD6{k$tay<-IO@?U+!t8u(N zzeC6wAoxu!>9m$D!FwE__Tk2Vk+>(k|1d`EtBt{>k?b~;u0udSYbBNnCo9sG83aXh zrdCMQC4aLy{6^AalY*JNmXx79w zLjeC(@S5-YFE4oMuYubM7#1?A=hJ_BjcR94Z?w`j`2oC-3N5IG5|#XRit>N}K4 z^1QblC&B&ddFZdky=jB9sM93SVe7_uCu%V&eMJ{=26VvU0V~F^eLVam*Kk_(+uw?l zwVF6Mof+TEmwkgJ5k0mPQ!v|(c)I?@Lw3(4#5HaLxWv|oNj;8YSqwvX*h@)VYAX$ehtsB7+;N%a~K4Zyv$LLCJpNxU;# zp^|*Bd<+S%e*5;*THWmvsM;Q73nI?LzLZj$D>Y;P&_7`;=7OuCEij~UgBvS`#~Z|w zHjF}B#5`-0jW~5sSTXy%xUS0{H?2%qoB0dBm0mwrALJW9OmAY;LDt2Og$Vp^O9K^S z_QnIAYF9zo)5xRDzbHHc$_s;hmV*jWe)SQx8+7cU^XO`-L+j=pAlySduHEclaa*Br4np7r&kz^A$~>VKXe z@W@Ww8;i8RnLJW05h)>vM28bqQx-!FS<2-SfMsDcgcnqTtg&_Yrq>XYhrxTX=LuQo z*O4xen_rDDli7{z&gZ_E&*D0O?T=!l<655-6*SM3!YEU!nBitfKFl!BI#o`~V+Pr_lzyn(P#_T+`v|>jU;&~EY$f?_E%YiAm-+Vd3Z?8V8jC1Eb zh&sfYzfnW|iRbl`9F=GsdF0Q?E{gdylDdMM`u4hb{c|f~P85^y)^$nzh`qLIgfLo6 z&@}f$DYxC%lCJ^wmE(KZDv0Yh=^uM;Io^h})&kW(L|x@mF=hS6nii60 zb)q|pEOckt^F#G6rMh|_vmDKOKep}6)4emzVL11@MGA2GNCuR)dDuan;&&CuwJsK% z&(Cl)S^C&-@jxHm7nGipAQX{h>d6I{uptjm?G=&W9<&{?ydvuIJ@K{mOS4UIy|uvn zvOPGiBPL(V+{YKHCfDC4NN=>)7q4`#AoP$kM#vfBPjc(W>sR=~OQS}jYw#-bQqXp5 zM+4c+DYOmIiEslT5f5*YzH+FqIEhYZ!Yx41FCu!?x&7{c%0wd4FE!sR1e!9MG;3FBuS4 zWkRCM|86GoG+P5V^5oNCdC70j-jv`Y@3hL@U6pR<<(EQRCsmSwp%Orizx89?!!+QJ zjpFKkTd&XZTfzlx%!+$hu`~K1h!gwIz9>ARt*st#({}RDw|fK4(&p&X4{vj5L8FD> zui4AR@%TLsH}*g>szq!Re!c%JG6}82wonS zphCHCL9trh5dDH(Fu!Q2d!j8Pg5sm;arW=I7UaOcaCP$oZo}RBi4^h{qMrfN${V7z z4Y70Z@Is}L7*mfN6ek4pQyL$ax_v?M{_jvCDMaT{ZKvnD%^k6@vIoy0SumX+Mrcm^ zLPzGE*pRo0%d>_@J#i*}-}?SIqMyOq5iede+1luB>0T$0#k4PlF8k#xIT?H@h~~K@ zBYFEzsuX5FJ|fY6>E-OMH;xUDOv@`VQp?ppQJVP8)tYdI0nb+XR?6)A*0ZKBsfdT zsH*SeX8456Mu%KL57_?^S1epI;)vXL%5m8=YB+v&vf(&{aLZe!7r#Nc)fLcXx$V8P zwd0W67VAR^_g?UPkdnK}08IKf)4*r6;o4NyTkmSfXyg>ToZ_5t_r!_;d=xJ9|vDM`YKP>4x^}TUbW3(TBI`BpA1AkF;)MK=@ z3FPfDt<{Nd`N+jX7BL3O$4wi9k0E*s#c5268m;p_oOMb>;dFiUUsJvIn^>FGDE3DW z0hnvaC!39>_FkU~`n);``G0Ds8&SRzh(342P25qme5G+&Pp-#Lb4HiSY@5n#je7{- zaDH>r;nyQqShWIiEEyHhc}@{4MXI07q-*@8h5A|9qr9s(vc|0I`2#D1|B){GufYC) zYbc*|&NbnFM**AmrRM~#ows90&s>|EZU*;L4zZnBGCaB@#T6_3YNkTcl`rbNM%*0T zl^R-%@K8H1G%;eU{O1bzOtIV@3o;)jknS1dRmW}({!6VgTp)j(&5rmQc4zwWwd;9H z?*sD0;MBqC>eG(d_VnLQ z)u{UgH31M^2yB);Fc@XNo~-$WMdL${cQK*gzb`&IueJxCQjgB#DzcG*M^vyaN$c^^ zE8p#Zw00-B6~MUDvGC@u?`?iwb?XJREnv(&JqF3m9F;K;rkH0?u}q9M$M_{D~%e-AM0(!2rL&C|02;al%WKW_&^Q<7c`bg{Mjw;m$7~ zehFnZ;lOgT{d)b))u@99B54p45C#3Mp?*QtLSX(<$)|{y5cHwNe=Ud0&Vr6Z-y)e^ z>4NMx;i>xGI9)+doIUkn$DBY$=;I(3Jr@tu8R)j zB7a9S{Ys1nsbHdeh#nDbv7jRaog+6p!k&AL=|n2fPKUDcGX;28-eZ2DcG_cuAEx-N z(9V!|rA_S5{BgKxl_hnNF(KR2cPX}+rul}?mJ+z$wMwOBc)f&fsK=am>g8A3d2iR4 z)V5*|mfMW+`>?v3c_Ezq?WKWEGrRkb2jdq$gL|N+!$s-9mTd#Z28Wwmp~bcvh~JI- zQcaeVWj}z54uy|m2Tvmcg`SYlp$hKTMwFt9FeSfm)8w#z`CoK{4g|%1AfP4fM^M%F z0@2f`-)a1Q-LKL|OU(O+9HD)4a;sBo52(y=VgER1YFz((|73oeT*xr45&3vvML$5Y zks({$;$vlgoZ{c8t!Y zQ=Mgcbb+E;k+@JHEH+=Wj*8KI>qHpWqUGV8Y*t*|rO04B&tJzHxoy#`5@l5?#nkk? zeIGOwf^9F(rd{n=cd2-*{j9aF_<}nrRn|;2r6|u}vx+`gG<^#Sxj4IPr%EZd`_GY& z1T>~JY)n2lzVJuK!@~cWU}P1Il`Mfu10}(F%=Sx4PHC5exgFdQG<#mt=^qe!dv*J~oIj2-4WOmvGT*$Q4eYwgtDHs_qji>XGyr%`|@7SZfvYS&VK$#HU}i(uCsM z0#Ec$Z<>h<=5%-<^yg2Gmw=HrKgy*WVoBy4tg%AxTmV|l@_gFR9WimEMOf32kB>^U zJ*!iqNa$tBs*%6fEaUh?(`1<7@xLMyhMpa2;e7XJZ8Xbi`&m*%HjDykRPA-?%~8p|36@RF#h!C7r}Tsn>&wzdUD&kk2h2O!;Jg(>6E+>n z3%6X%@2TEBZ+BG=+(p)m{lO$~wCsW(_w>=8fuu34d6PNcq&%0iOsc6_}RlEsoVXrJlLj`4LYt=_p28oliN5T_5 zOL!UA^Fs#SdJVw8zk6}q{E?Ql{QZ3+b*LzHuJbEhXV%fIcRhL?$iPV>Db8f^*K`?8 z$#J{n2Yd5o`7xqChGM72E|dQjUOiyz7Dh#+_~`|Y;E@i`v!ZDWv`t+mRRZAUex+85bUE1oL)f0Xk%6DVHtF#?J`RI zyZFrubu4wV5*yeRgF3+`FL1A1_)m-#V&6UUxnjXB1~eMX?6NHDC#&Keb4=%&o={4o zSdV=SLETM5BYQ|&^1x9j`Hi<0;nhh;52))XBk@)BWDwr{{?vmL$n zK^IDd=wZ(40lYEnyl_GEJ9r-^8Ig^IU{?Ni1CF2ri`h;z$gAl=agJRUe$P(@UAR;A zx@Ik~1&LUM(66gS?xUV+zkd<0Q~D2=nSP9LUOivL)I%;{c&dfT%9e(gQe{?GF;Byd z>+xs5s6UEroL$|?v_uleK;^UqnL-@566^@XEMCSPzf=k);XKNhS zi28a8>+7pj(EQLX0q#174fTD`a_ldG z{MioR$+EQ^q8(uY+4o(z$u@&uraC+;8@L=c+FD~7xm+{gF@{~u8&tPZg%_Pv7T?6c z|2|1|C}00OrT$H91w~|T^=pA)XV6`mkEJbe_u2i6KhPk=i|BV%v$A~v+`xpo+)4Xkp+xv96TQWfk19j268!W9R1ZSiTBZ0B6&}FPqYg8^I1E+4k;3_*$vsf=B zr?-{k*)rX3=#;7b+5Fsiw~i*n-PJyLJ!&mj&*w{=_Lhe9Y6Ego+eW`V{`{!v6fGka z{Yj%tNK7D zu)E{w>JP|oho3v>SFI=X+-Kkp4BE-#FPzVP_~&q6$iSs!A{@6WCf+JJK_~mESg@gh zuGzlSg3-U$mcp3k=1DDkMUV@;&4gmb+o#KtZZWS(u0em>&m3w)+_##iF=5}Hj} zH`)~ZVA;)0pVvi*AeDI$pw=tbazZ>|L|j&3$~tn+^}caka_OLsuJ5l}WW+5+y1wQi zkD;Vi+hsC5#*H&`7M?7b3xPu)1Nv9ALHwnIji+xDxzBZA()EWt|gmw1$f zk++c5CT||gS7wXR=9UY={G6{`qmL)QKC^fc>G@>9-TO$s9T};%)#T?LA9!NV86iex zJW`fFuhd<$RhU30Sqbe5Srn!$#flM2U8BD(QmA7I-b_&>^J_Y4uSzg!W zF_$5bVEXE2RX0G?xznMcV5V7@RO2C|B~P`e>U%$*MSuecznY@-K0yzY2srOQ+TVf0 z$k_i=)O(NQk9A%MxAms4`Su)VApA8tp z>O~UFDX>d@@%GY&%!9dQBAhK|`S`@IrttWy8!^k7->~q@>(-&O8N*t?n_}$^IYxj#I^HND{;{M3 zGWd;qtE9z_*ze&*ivTsb9R>v<_^Q-CjDnZ14MRiyn%`d?) zq9G$zpeqVh;y7yAn?6}-+aiZSZ)s6%UOi7voy)xhBUFoNHnr`=UbKqdmFY2N>$*?da>$S_1aQgpoxR97fYf^egKd{!+{4abI6%x;$p za+J{>B-WUdA5T4^aS4!s5=X>TJ2GfB2B&)bC8G4ndLA4Z_NOOn(x?_$Vr5I_nFie4 zJedpJVQYf!P8>sJ{UZzc69r6HHh|mHf~mSK>)vAdGyZ#KjgmPb0DX^V(K{E-K;ugf2;^?@xuf{ zy+;u1a9N+0HAT2RqtN+_o-E|5$>j$A46q=Fosn(;pg5sRZJX*c)ec0BC{_=90BVVS zUQnj<=6e&dNn`P()k?P%#urk~<{~Az%TlC&L9LA)7bm4tJLvhQO24UnX9n7!(_j=l zu=<+7UlO$Lzb?vd>O@bc$duE?h4y@1#ZWX*`E{E&1~_l8&(S@-NxU$pMG)pq2XL#SKkGoCA> z%JWMK@k-@Z-7D^tO@bP#`x?|+Q2G6E7WN%(y{+8~<>s9smv32discLw(wwibtpYp; z%IT2@dCp1i19l6b)(%Kz z*@b3Cr%GH=c8?0@w)AUR^^dgWd5Cbr=tF{EnoQsH%#ER!#iU{7KLWZJlE1owE)%MCo`vUZfA{SiXFpsQqZ{oEE!vF+41X}h`u=r{4!KW?s zx3$h6@t$O(xNW>{;N}C7T#>rnoSj&h8+}Zs z!HCq9q2Lzu;K$nxwyP~PZ-a2Z8R4~XUKTlxr9gYncYeuJgbI^bvO_CQ*N1K} zhu^eOP_$VP(YGtGP&r#Zc%x}5nUT1D4*J(j^=Z!gz*)KlQ<=df1KKm8{`!=gsRMlg zT<;m5KXcP%-glBLkxjJB=KR*((*$mM(Tp9VT>rSeI3GtxOgUm1Oygg0h22c0B(9P%$%fka(sA}2HNL7&B zZBYLI`1|p@?NIQfbv?Prt!bT(PhQ`&cD0`6=o2-;2gi`D*oHQ9S&O0;s8FOL1! zC&=PsLo39%t21G2M`;hPw_E|Xnd=#_K9we!*sTstLqUjFn5EDX<+y+&dNt`PffQ~o z2YV%DJ7 z1m5xWIU)`I*UAS`lO1(%;S9daUTnPy!XH{K>G3!&$Ll*a?D?o2aRKN{d_>o}tqU^D zO)EG(x)$+Za@CNZGOas`i~x&Pd}bz6)Dww%>%ZTgC1>o|%~ zU&IYNGXv(PNo`83ce9WkRYEy;*X$}?Nu{=E#GR8w4!5C1ocM2fhB4R&DPor|Z6E4o zO*NT^_!`=fx*msorjl>x|2xDWQOHuax>{SqYgpkfK_uAx55_b=8=~3C2|>BL#rWS) zFusSf82$TG(Io+j&R5YtS4eV7VmAJU1HU5a2kq~qzlk|Twe4esR%@g5 z?e6DjviMO<5wa62Ev)eXQ9mm3k4L#BG{;`RPL=E0Eg|eG>#;T6`a(oLZ8eO6G}`nv zGnn zuE{*jcxAor`<5>PkHnUUZ*QV=!^Z*RtyI~7g%9I5vFxEEkKXS^UFh9_!ap1=zAZcz zM1AxgBx4t_U#C=;AIU*iUaf3bG})762mdi=Af!iT598%84pi-Vzy*3zBNud5 zJ6tIRtr~=x{R2&c^Lu{(kE=J0hcfWnzAcrcl9ZBVDn*ek`#MTdgru??ODIeBb<7OO zR-very^!75cgDW&+gN98V=x$uF=oGA|LeJ)&wbtR&ewC!=Qw}M@%tV>>*3R@<|XJ) z(fPuydX5prp~J%oxv82tIKQAV;2W#Bx$y$;n(yV6&BvL+x0`|!aO_g;3Tcj(Ey(z< zr#5H@?-DGZ4qr4o9$K#x=28xc`rnAoHo$70+AYdpMiDUEh6w^HtzAKeQM(m74JhEmoy6N z&LKcj;=(rMj9JvpERG%d4EE05p5J<`RDzpz%U+FV1@b8;CeS54&vd(8^Z&lHhr$9f zp;}S8=QO4d+6Mz~3LHC~N-;~_@v7=?H|+FZ&OrnFv%Uh#X*HjS?SUc+{hi0kA-1-Hu)@HfLFXf=#SsUW5n>+pKdtQm# z8H|ow?H%PF`1-R=8#|JfMn}U8Papb;Ei`0>T73+6;=tuHf_N7cD6#iQ4WIHSt|)2t z^z|6Qy{GO6iadkAdnMN348V2o0D0l3;VP|9vH}l_p>u62eif<2L+(a@Dj2p0_u!tV z4}7?!^=sMI_2cm0twzn|pRqYZ{2Et#whnvSRk{?h-aq8Hr+$q;CoB! zL6>=+PIQ=va65^?DI1yV2Q@!`{RJK)A81XS~Gt0;5I5{OY^&Vbzyz8znnIX9E&b5T%C z4E>5JY<&(?+C(v$e_r5+d?8)O+#9r^lem-h&Y$w%)*WqIj>wvm+?zDbn+f^)K7?ZP z{Pd9djj8yF0MLab(X)I-jy~%~UfThsw4)PS{COLWWp9I3dM7W+!5&n?_RHeg?!b85 zYogD5Shy*&-gJkndCg?sg<$dGNu%Tv0`Zp9h^*zys7fIZNN6 z{j%54nH_x>$IAleu=z1(z5_tiBxS*$*H)#n#<}7^2WQTz`oFnx?<)LSkrs#09bs{W zU~fhj@;mlIK-?`_FERY&HybnCE%U$DU;LM9O@2G%{P0-lEzdcgCrvM^Cm{X4bMIbF z1X?-f!3M+>uZ~(iWY>F{Q1gr@LPA*Mea=AT4(}T$y~OH#I?vWPa!^X6aMd>{CKu$ z9uS)G@~pX$cGXBb&k(d@iB+sQnf~<`N6s=y`y1e5Y;1vW$|5CR?#KAFMcXSBo7ot- z-{1d>`puwIiaxWVo!Ke*Z~l^ky*Ta}^0ou!j&aQ0MWM%WTCLMRt9=d%A{q_%)jI@m zn#GF0Tl_ziCp7fiwHG|V*@32aAf&3f_5h*y&sj!M$2%`he_QCbrtI=ve4~QLiAE+J zkKQ?M#KnFt2Jq8IK}}$44xYSz=t*beL3`A4kZn5V2B3rm*M*eYrTe}q$D|TH`L47Q zRO7~z1?~Pd%^@{Yg;Ul_W6jJTk|7@?vu#Q=cY>CGT&VtZN2WP>o+=gjYhS!@`LE*Z z>dhPcGdSt_0-pZ4aV3G5w;H}hmquWP{!%7Twh~vM(^DcAgRHVb6k` zDL8Z(95_TX7!=V^#DVs)$KA?w{$}PYpOTZN4sP~8dX(qyn!Hkyf*$Z0gqde3o$^2Z zy=<|!)B70n8Lm~Tz#-815F>ajgD!D(_LJk@r@1rT3@#?8zU>*jF`aDgV)ReK-<me|rzJTlaA2TK z@y`C(xl9F~F>(yTsh0n~r7rkgx)qny(SiN(b>jx1Z2WQwxns2djue``rKjn&Kbg`$ zi@y4NsBy+fP#|s3oCsacfNuLUbI}iu2reP(OzP?(uSc-a31fIP_F{vMJJDmrFp93K|0g zUuV`+KC-tRPS={sNSD(_D{>wIjLNJ-6fP~%D-EiiA@x#xe#<4HNCpeVkWTnw?* zZ$5dd`ka9m-*d1>SpU|icwGD&1v75YjAw^hS%3b+h;0iCEtB(l3tm_yqk|zOrP_%^ zjY~R>e7=&#pj|IxVDqlFN`T~9S0E+u3eu!cxdE0ZS9lv#PK647L_>0$JtSM2&|KWT-d+@DgA%vwo{KmL_O=v|8 zC`W-g@j53WF@vV?wz8sF_u`+dh^h*tHI+k5rEUU8)E)Q5f~we ztxuKv-O8V6^}b1!&MSX@1m4*+J=$*{gArc`gO_ zdLZ`ICRCiQA3pgQwb|Q^F5Kr`;vEPvt8`C2%rbkIn_Ij{dyU>Ef8(07_Gqd$?)LpJ zpFrY6X>HQgvq+ zGP<^hNn|g%3Ftnb#|>OsZX_>Ez+R*4O05KkIj>&Dmbxt5P3?B*zh-Bz^8>I zgH3uU2i*~kYG$`LQ%-yo_dIvutVQp7zE5>LA#=2fv(uH&P;MRFjb>hBiiU>phAN-b zb2W!oPi-r2AUZhDg@~*1JPp~6x$+vvcY5t(-&pOUmv8#NW%EzUWv$i9Wd9%wTT|r6 zB+R#?JW>aO_ja|Y`IPe-XsJp1PNB}~izr*at3>(5`@w=8;kpghUeFDtM4q*(Kx0-UJXO-(O2e91QX2a ze2$nvUAHHFK!&Hj$WVn7DaOABRIZFZ{1gVrC~O^d-ALMYToQi{^OVTF2~N2qBSRo^ zU565)&h^=U5_lCS)f3{7XFwCTos~)WAL?k9c>`xjErWQ398E=9ajtMJ_+P zh0SIY77^Rvnp}33Hj(>i&A70HdmF7^@+d@K)|tV;X3Px^4zb#knHqJU;y z2>P+IPbTK>_c%2bMFl{^*MX~)rkNfoV?%~F?75@JB9K5=kAES z`SsE%!;`h5m*!17xEfY{jn``IO)r*QUCv^4O7C6&nHc5^>3POJi|C)x5Y49isNJt) znJ@3YxR9_t6|F6`JnIp9`@#T&7Qj6H;cnU15LuE%jA%RTV~g;q;(I(5Eq(iY)@MMv zdG3C4*4uq^m&NGV`F;O%RH}Cy>l4l2O<7%Mp>}-JJvUwmRf4#ly~BoFPnHddv5xW7krjq=f`AK!`3_>FRhdMy^U`7PjVN$2R~6x3pp z>T%A+1aHCG(AkNf)!?rTaciS z03m83{dyP0TRwX+P7V^Y9%IE~aNAOo<#5og@AFqfQAu1q!p0RsCsk~f03XNBYWlU= z#g(|J%{$y|BHy7Fn%=T=^U4-IrQ+^2fG*9&mi{jlJ%*9~V>d-=M+x7=#e_$lcQa7G zPPx0fA9V{j(E*RjZ2NFL&kY{^exJj8GMA>2sHZtB#VJ;*ewA2c^@sX^J9Sg?^nG>x zccPvT@nVWp0j{%%%w&4#7qEKi-M2t)pL^EjMMGj=&4LzFPMXDLIdpB>SqaMrWo~KS zC&(Uhk6U3q-0YSS)C_g)!~Z@Y@IkUR>mcFd6;m&H&yotbLl)WRifd4mI*I*TF~haE1~f9fpun72|K2o3>s+DEQjiG1QpL3x z97LwYvWBXERdjvMR+Q zs4M4Das^_5$lDj;kSA>JNQ##vq_9A5AUHFRj|84x26(`;1ZuO-T>LiP2oDh6puwd|lG5v_Ibuj?^MJ~0i=I%~U{Oi(U6;C0y z1e%EdYsMl+o=}7}RjkR@Twe3n18Me@mm&8rSzdAEK+M5Pg`Uw_IVAEgSM2v0ogOHu z9;bzF`mE;NW)Ije#_AuadNM>#`c4;%1v|XJ2QTqD_i&tNt<{j6?tGcf)!Z7BXa;+{ zX+XQtn&jPkf6`qmqod2?Or9^n0Cvp737U-1pWF6eip)7fsjz~vgX$XAjFpuv;y)^o zF?uYtq$`>)7xJlmosQ$1S2PGs_;e%nM*0Md(t3Pd%MJ4S0YB<3WO#vRA_X`e;-E3Tf`A$PTIM}SE5U40!rtr;bW($(dxj@{de`{9K={NJvB zLRVavKI@wr{$mF0TK=I*{7!zY{LjKrWN!Cw+f~&XSW`@$>EYx1exZ-C8T9e4L=hhn z2-6y7#LULe;HE$>um5!wAp49st9%ZOoSuGy%bn7?;PKNcFgY^z+3-l4Zt?@GkG48m zcAX*aELNM+RwewC2CRJ;R~@P(;GVUv-h|*r=GsIBi~6O~ORuVr_J3zw)F=#ZYcVl+ z(bA=Dtbw#JbUMrVRifPtKCi!3K{>{?=Pby7pFrO)O+y-{8Ico^P^*<&y_3jm$$DF4 z8jeG?${*ffhH(YEg$C~tOFM}Uny+-l$W#2Y*-9yc6*Cs9&YxGDk2|d<*P>?JYZS5M zxD|bD1%cRmtD4O6X|59XsHS(Ubp|bL07_cWGp-3&3MGp-ra*s4QSH#pia76;wIrV$WRvmEqg@Gx1ERNGx! z;(Dwe!y#)GQ)*aRMf~sIZJ&&pBUgSZ_%6p77(M&^aI+^p{0!EXQ+-C*pB`#kgfsOo zJ6<#07=Ed8&hzqumcu~dgC^+x2Br1f5NExh7sAOt7m=z#?!f}?ShuIwV_gj1`S&`z z>F=d7zNwLJRYN4TX?5er) z?(o+04%a0iEafTFinCedx3VQXKfE?iLu@DR_Apt}UZ_QC%Hm(ezoZUFWVc(!yb$|2 zogwe3pG5|&?aG`T85WlVq_%&=&$=4M4_4q>IM?;We{oP1p!S$O} zYQtTN;I}rHzdFySnOQoWp7@ZPDg@YAU{^fTD(0_#y?jbPqfq+!K-mpf;rl7TG;@0C z`!~`?^jU`_Zh9O_rasn^cDvWH*5gLCZU@an>=CUp~;{Aj~G&P+F-KN4-SGf|D2F@R@yZSeTT=Kn-pqN5>Fn<;PQSPP7 z^>LAdtD1*`L6;HXJ}ufA=q?c32sdlUIy>C(o8iFisv%@1P>eL?Pkw`2`?`twvaU)nUU%F#kB=9hVqcUI z95qSi5Wk_MT*SahpP=wLhjk6gdXzN&2+SPC!059c4UNn+f|%`T8cZHV|CuYr9897& z^$Rfj(S1$tcVOf{qUepuYVvL~psA5=0BEEcG56rmN0*_krp-(Hy&3fV*eq%~B?ESL z@o0$yeU8Y^`Cdw6Eqjn#_lWw@A@zb`hNqTKkBV^%^AgJrza}v}Y6YB!WP2vAjcEu7 zeb>y&;z$1+za!hj*_-6ZmwyEw#y6qY5^@c|ljv}*E0_T`;$uD3g41LvAERaGbq70V zlxkP_Zv>r}&*PacdV@A@UBvfyb$ts8*zyzKBq-%2T032H6yy&$YcNo+7O^VFReI)k zlW>SOMvV`fEkI#YD)5h zy4BW3>&P4bxj-fILc%X=drsU-dPPl3{-SVZH4J`HQ-5Q6y-yk-OZ&X=v0c^o?{Za2 z#AUQapHKNY8=3A@502hZ!p{j63v&I>C4TfT!-rFTZsf*7zHjOwg9;fwzLMJ%?#QB7 zg`Y4k@KT;$Rm->GRY1`A)r!lYOFc8Ugu68rEQ zsX`K?{>F{Iw^pxr&OYPh>yxjP2^GEC@je%_y`t`ZZWR1sA67Y*n`D|_+*qj-U9~50 z6g+t98LH+YN6>~jp<9ivb&)=N$Dxi#tQv zF#vcdxO3~mjbsjZV23y3-qk&!XU&knG`2WgH|FbOz@2}gX~9RnC{dJ(DLVbpwTh?( zOAY$?OHxF@`e3u);#AmwX;$rjKiC9wK$j&@;Gkh?jfT@uvsAJ91sfKAV!-<^RZ&Ok zjlNBcm2o3^)leL}8{`5;_Ye2msculwwghGQbA!gC?eCY^g9LUzq20tiiTk$^XXlnq zsd7(<1oZt7de+gv56;-cr%n^u|5C9B-P+lJH@RIKQ=<1YAkbw1a}i_0D30Gk>n%Kb zzgEo7L~Ll`jgbNiOs{ODSpl?I}K^AHzRl?L)p0fp3DdE_IXcE_@Xz)C@cXz+Udj zh5!=_1xXv5jGFgdO&j+E4g^B2$pBGVzgvpWQEq&<8mR|_ zls_xFp-Ql#e;J00H7*ERlqPQf6LLW#qj8Tp4kPyVTf%nOhhkozioEnU$IEY%-B3@s#OUn}6nR0C zB@}hc48=0WF#3ocV59n;I3z>$sSdvHcaF*Vz-<-3C;L0fPv4a(Ybl|gbot#(^BQqN zsL>6J7q9*(r{5&s?N%0g{Z1_GL@KO%D|>;DBpkfSQIk-rtfMmUL5+OXTJe#rk2(kwLe{v^*Gpb zt7oWw>nB7KUOQ)0x9;|1cNNkzNX0QTIyRaJT@A0&jwHZ6S6Z7UeWG6)NCwh6`{9g< zD^|kb8IdI5o?k`~SsO&jugg76U`_=x>bOA+xCb+>KR#py_~OC)^=I?II@fo3J+vQJ zW^cy_x6-3TegO|(F^@0=#4=I3uA>IAk>4Lc6YywOXBIJD#6VrzNcRVaM7LKb28>=l zL;voX3^TyjVz0$-2a1cB8RB8r!RWJ5g0txni`WpeUynqd%{#F+fT~wk!ksi?Qk!9V zc9;VHm{oYZId1FW->KZ;GSjli+qyg0*r?BES6830ZEh%}3oTv2S1#EK+|U$iYKwfO z=%ah7+?#emV)d~zK4w|L@K7d8jf#diG#Ir5XHdA84HP)rX9bX2HLfS)(1^LZ7E&oi zs?>90gIlK-L9&o^aYdd_P#zvpWY6|DxWK2J-` z=zTK!d_&|xba+2tPK?j8{TF!oDInrWoQ7Z`B${akcwNG8`qk!NGW+$yUqk20-+SFT zz!9e9pXgTCX*%6~a&tQa4oWHq6|SFZm%7^gI?aqLb@>*|O=#Fbrn4lIhB7(xgr28A zkn6m0$dGn|MAu#yiiC+8@VQ1H6z~5DX%gWdt@>%R{c1p5@6B9vZD`&(T|Hi)z1fkP zX+^ZB)3Ctnwa;<%r zj24i&PKX?%z4;!0y~)2vrUlh;RVH=2eLBC9J2Ry`)ykJ-o(yg-%QaY{sy{V~s4TDO za`*dxi_uF$M?mHlSQ<~M3le(^+fC-kUU~48`({e~OQ@Cw_lp=LBE5cOYo)*4t@2>A z-5b!j41Vf6rkWE+uysa~OMyOj$D)cgt$2pm|A}=HWPS&3m)`UJK-);!4{7Pkn4E6gUmD*k(|- zD5@fsDP%kUar|Byb+I+PKNm8aOO9eK1=_4Y5QKqa8KtKsDM9cJ(!;|5fyJFt#DjS% zH;D)Rw6^IeJpnxE#T*v6*)^acM#^pUYCoP?U?dl*mtZgINabrYc%LmF61K~Ko&xmA$&XpH(|&BLbG_oN?}s)x}!OXO&H#G^Ei<%n^V( zo#ohW#T=+<-rmn<48RV(Ll73l>Tl9=k8|7%^6PK-XD%_E{&mGQ+TD(_)kK>3fQ?hJ zql-p%YMQEvc5mY4LLc7)9)z9@lWGGX&dOaJONm=vuL&`SZaOoUF-Fh@m}k)PBp~zm zzOUBUHJ(U!u7#Dkps)-T?$2Bij4_mFYIKwE!{W|mq&k;ELeNHek(RSnxjvz>)6kV% z^Sq<~%81|VywN>rQWF~+XeH9aMuoc{K+*3<*B=HQm}Zy_D`S%2SC!ZXAbvHd(P^q$ z3E|)&Sr^7rQn^#>it$i&XnI@rSkYqpz&wi62`*W=sn@OQp~j)$Pi|nxmzd*z8j?kCE#tK z6nK;SK@JA)hnY-agbepVjAoC_i@~hbF4sQsmG5z`@m{#={}m70lU8+keh1{^>j2ij zzXv{h%I)B3O7a%_8%fIdxX>qqt5;b+n!Zp5vs&PlT@6`RhUr3(gUtTd_wtSsVatzF zZ@MOa*}3Ml{RrIQx*(|waopNkD2XInTspQeeR3a4&D{V{{{pWabIJ9A@$_+BY_5^# zFMbkPZ0DdnaeT3Cg$uH;=J95Z&}FS}JCnzCqreVvzC<6lWA3vLxKXM$;7eF>9-OX8 zGU(25;4Mu!H|<0#j2|)#>Q-==w#gLSDZmx%Xtrws09pQP*Bx==8hn47{pjL>(@_bS zqG&$G+V1_R=vNb(Bej#E??O4C&DwK(xM2ulIUr&W#t|D4F~`a`JE~7{-#pIDlYpEb)w{vP zO6i}#zU=>GlUMyUcuNKcYNZW%;{;nF+1=VTNTYHg@NYPw@XT^fiSc@jt$UIkglviQJS`|G|pca<~lx2nRd^)P_#j9E_I3j!yf{ zd7hv8JO>H%l}$Vc$l@+e;|5I8bRz`3Y-0phzV+i6RoqrKq+Ac!$;I{F!Fs>N_Z&9s zz^TJ&h(9FFxO;~(`@ZqjRxR!-sTSF^-; zCegGK`N?7@o&X^I1;LoRN^GlnjyoyoR-ew}s7XDBz=Fw}?}M97i73~M^O{N`+ZJyK zkrM%r}-4lhP1`^t{1P}5uV7cm7QLkSmL>Rjj_p(QkGV z#-`ZB!)%u#0;dUfph4N~XO&l&yht zgKUUY8-KD0h!NQjq&j-kHf|<@oaS|XY(4OheeI+S@*%p3wiTcr6tr`9=S*Ed?FwC0 zXfK3g#JF|(%+B~v?`Cl<$Vt(DZ?kIQ*53tAwim?6nVp_2u6QW0P`pGNGmyH zBt;jn6t$ff^XcdTOJp2*LLLqKkp!0A;3qr3Zp%VWa9)`ssc5YYXdo4b-kc8nxy#Qt zy+)DG(wCsnMf@Qw+zn+5N}Z41o|L(I>ADvdFlVzpY=7OJ6l{&|Hys_J(sKmZ>(t7e-(H>|Te zEO5t2Ay*S-o!krp>Pnk}#)U6gBNxt{7bd;$u3NSa3mL}r%N;GV7uy9X8X|& z0($1t+Dp}2_DyT{BK{=GOyU&k$IxLu(iOWd*EcNQT>+=h@Qm{`xX8)b%Ju0p>P&Ba z=Y4Jq5#4ysJbkQD70?G;DY&9)!siuShsCy|xLOH-^Ut8x%AJGVQNIU#-6K|?zsqi2 zhM#3qbKVg1Ty-3r?yP)N0}`!T0J4$$E6Q&XQ%1G+?(uESUlFOTq{B?{}`e#d?agb)h%2=Zt zDfoR+<89XjKRkjFr}-C%oEXTC<;D#F&sO)3xxpYvD zaeiO6X4gM(Id79D3d*urFH%GN-*eArLPrS1CL~D=cJO;V{6@T3Q2BCLA@_@*z!|_$ zSlTl5$)@)Ci$Tw~fPm>e#wE4-i%?aj*uum7L!bs+hB_M{QF>VtoLZC>9%{IQ`#>B?uC< zyq5$@Kl;d#)D6mk&CvIBrHtq(pQKzAc^(tqh}zr2XdoDWxIB~*Sfzt->seviTZ{px zbVxLUw6R!=`vSVUxt}szzFqZtC0QUhK2eO)Y6~C}nm+!eMCu(7AbL!hgYI^Ct>sevfd@g{~zF&^>or&si!FAZ*~&v3%wP@|>-Y>r|7n zynJxUAwO(mdZMCN&0h==rt-3|#DwAX8ZiwyH5RB~q2+aiA1_9LURLZtuIsxyHB8-; zqgr~P8Z1)-?jAgJZ&uJ|e*ptEpfyq@FM{MYCG}Pg(USx4|dex!8 z!oXPYAP#^CnL1AT>UV~Yidow*gW%1L`@F&=WO<^MP&#;x+;4&pI^3TEg)lK!V2eUY zAO;$S-=Ap6=zll*jXTmZFWhtjt^we&kU<#05m)VtTzWHhGCq19?3pvi#B3N7AhK8& zd3hX;*lS8c(6P{VEo=(ljR*j25Skj41=^51NMxHgHHoz{$$*{KYFzmqvuGqV5{~fg z7JdJ4xiSOO*835OcRd2XzsLDHYY$@BwvMU4R@&+M`HM=-U{V&zz4Go`(p*kBAw^x` z-1`$@L8;9d$e`pDxKCwRc3&_2qzXK$KdEBw>KNx#^WyyWhs`-`YV_v5pB9AgtK5$t zXhxdThsY|%%jDPH!Yu_G-(el5OuhW~hFS>+ZF~2SsJwK7b!Sp>`2i_2D{e?f!T!*H&>`*>Hg7f6Kx*&Zp6oTeI$huk&Wn+4$Vd~Ssk%#^>v>z`+J(Vd%=pEX$K&!= z*9}LvAY%T2C@sbAS#1`GD&q6T@6gjupW(QBkkf!VLOnwvUee3dkz1+jX+tM0Rsox*rZg3)TT*_) z6pH(HhaqwoH-S{|waZkx0Gld&DOo{ZbwyP>O`8%Yz|6*K;Lf~@Uy4Jr{fTZAcyox={*D)NdDOG(`=1yVr~b-q2vl+HY8~F`g}@EH(0O^ zy({_z&m0}*@!feRb zymPJi*`}1JGU_NcZ-z5? zY?qY?;CsS%QqbwL6_!&_z@qkYT}T1rV#`JpON-zfuV=vXh!00CR`H{Vi^|XS`?ScU zM=hIx3cH8G`k8SJgnX1l*kibt0qhCmwh1Z{%o_9Y_;VH`BzBlwOpHW>7rvKZDlc$| zX)`1!sIk-8a?ZUq+s*{UABata@7+aT49k$ z0Di&<%J}^SBJT+CY1sAHm(IAeXdC=9^_A~p;idCX#uih6IfdL9WJ*^Of-tMNiF}pQ ziGY_6gP<2OBgi^uv;t@15zEHRH99XGLfb#$jknR<9dee!!{(x-hTk(gp1o8ai=#O; zT^b;%&(6P2ME&TQaua)vH_BU$N)vR>Z>6srh0p=DA*c*mwz5sz9zJB!!v?y+fimF3 z;l#LH-lgFk>kxg#i1OvPXQmD#Mr=H1F)6Y?suYhl3rN{|H&*yHZ&8&OaaXO9x?IZ$ z26sVa_KRDx{fb92VWF8WcT~uGgY(oHuq3ECW4P|C)2if$(EXKu(l>9R((6-U)}5zh zx_ww5uQ`@mx5od8(qkTu_wCsr zt){y1swG<6zmBhYK68KNc@6HrIDws6r2OKa3E0b}eJbDa8=t9E5p3Sv8f{N^!90N! zZ)$bakHhMU@3n~o*7f;LkAfV0UL=aJt>}5b$qgkC6GgEU*|$qZS6Z}>)}AV1;X-j8 z!mjUizn4>Odgoa-QIQWUhUf3-hqyUED3OV@vI~Z`v3=7NlGD_on-ixO$P|T53Waq> zymt(Iv6CnHgLRdVYGuz1OKBi>`bT-Z?{Fc8uc^+E&BD#$h}%H=txt z|4K8{Ih-ntYN~$R6jzYmlh%mhx_a}A@w#xg=|aI37>PC*#ES+MPN}^aM#5k6I4L)s zH!&JBs!|)k=4ZDUWb7}Q>sJ`@w6ZtbFOKuip2JFX;}qVq^cB1(GsDLD0ULm zfIyjvvA=BJ{OvWui{`SfG%`6~NtN@9%sPr&6jEi1w+^qcl+5~CqW)(k{~sOdo(cmU z=>uwMQzQ&?x|l=f>Hh902kicl-81ed)Gr9`1gOk$QGnuCC+udLFn>|oP27c>lbO#D z-H4|p*gM|Dn0&T@6%zDRn~(6c<_N39N9e<~-y>laOxx>I-@2QBj&bPz9jqF@^(;Qi z{qR+?re}TaZ9x(4hW_98re10ea@!DS7`bNS(Id6$NnC1ePxxaLFfbK@!ajnGRwXDfdDUS2cc3Q_CEQhkFhnb9!skNX+jl+ zd>-y>4)d)Z#2WeGHgv1u2kQp2D8;bU(uOAUqjR{#n_&{jQAF>Y;M9~o+(GhF+9I)z z98JInPhV8VWcb;+qV@wo+W3645jCnuT+~~96J%P&1$bzY#(XSqqz-Z1V`rILbS?b) zbGu6Bn_rqyNv>DhA>#S+>EPWDQ;%vZN0VaPEeYKpg zq}csE#bHY2V(W5L z@FM__x?f-vG>^KX*2vr*wrbu6LB=r~q(8cl;-5;SDpD_&TKG_kBO0}31nFG_4BQuZ zt`L3vHjeJ_`J~XB{MuxqtFUSPd$WEU>8ixAl0m+ZL9_KImzdF}ZmCk8)yo1f2cy9^ z-Knk*Q`an-V^ru+1GoRjCENg#CCp(CF5V^&q0*r=>kvo zv+sU}t-i25Tux7HoW3msxtNbMdbpngT?Ns#eH34SFqM7~;U=dhZ@pbrjq}tq+HYN? z{5^*Gq}&{IHk2VL>-$W_WeLwkjm{9YrZ`|H?0%a_>v=euSbJwshO z8Aq}f=#e;c5EcOEOo-R@^F6m_Ik?X>2-l_YW-fLy&1bd>2=xmKcK^kJ=j_}DKyP5Hg?dI)1I z*X%Hf6PsS(mU@D}sHL9cnzr-!n}fHI9Ggng?RThWN@E*YWXI?@KrRG&(70!8s zb+~Hmnh>Vuxd)+Wp%Kg9My5RQnro?tcA-1c12Wu@^XacU1$Ntz3gFb#1y^|dP~Ogp z4Rc~tFFb%1OqAO2rJpf7FDFvu5Jys0ga)4ftdUC5eH#M4R~Ls9#mbu@Yi>o%bG^xs zD?sww4tYs5g6SXA)A9AW>DT0+^0;XZVgPlGO-GiS#(!~l(G~V3CFQ#LGh&aweLU(g zL~;&MY0KFY8_eB}!JxeHp1G#m{Lbo$win&+fWf9w{dfO|8JG}OLcdhSN++>J8fyaXM%e{d!R=Y7 z;I+0M-ya-v>iCHC+zd)9(N2xqm*fTU~>%47l+I`QJ&khT`u=`s>!}3QgFm?1Ey1ydcMuXX`EA7EdH!TtO z_>T;Ryb)U0$SuMtFes{Mtm_vtrOFkwQb7D82CzaA5lwBR$dH^QzjPn$lKW?~7-4@O zwIKn?FFXg^kBACCEp}hXA<)1072@l3`DHm!sb1AFLL|60$Ih7TpOhlRa0{!>1dWWk zBo-FqtoZUD0x%F8{1%t`=*rEkFAE*I!hPFygZK_l6VA7Gnmw zzLi7lRcb1|)H@#DGsCnNX&No)ofDMn2e$0M)`RZV$=>Py zm9KvovZ4A4ql)uiZcR2t4sR+kVap8&#(p7iPgk1z)BycdSqL5Y7aTTqt!_>*AhaWb zH(ssXE1)Osl#Y25!4tHh(Ze6&!6g;Id+@=ST{L&9>m9E+E$^P0w|b`2DFa(rL5vCg z0G!@HTSU^TwWTpF+-GP$upMF;#bW8&*cgzO{VsSFF|`(T2QJv|dLN(QW~rS>#5BqsG4AFjTHFe$i#y&Ksm18`nLqABXWb4J zvk`J;&-e0HB$nOomppftJCxnu&QCY(OLq_1hul6pT~ho`O}bi;DA}agOgK@WG34(7 zeg-{}%O0E0hP?{hTSecm(6zB0z!lv?!AR~s>9hXpKHQ$1986`{R+UOG#%RxnUYAEH zS{m_Zq`3$cyo~BUxOsDX{5!lyH2qW$FQ^1?fvmOGf%YvPuL=`KJ`n>L6ax?j*vSC|-lU-R>rDL-v7* z*8YX0ivxd)6p|Tn4r#`Z&-8`t4l~$wp$P-T72%Pnr8&gK*(XmwnU0-5Pn5+!7~-55 zGA{iUGV$b`EsgCi`zJa}4CXp$>Y1=|;Dg0Zd7qa4CRz-~cU*4j#5As-E_aV8sMnh) zA~4dgz%?+>wgtF%<5{Mp@54H%pvE4Y9@&sL`a-xm{nQtu!p#hL|ELlpB)V&+d(#eT zzaWA=Ex1YaD*+l;D8Gqb{M4B7px)zzAdl2#-x=}<@58TFK%O^v3B-q;2<@1L*>9vr zXC9di6oyc{4Lsk1DXUSM57uT;7W6Td_<|tzDXS_eR@ssM8-(u`k|YFG{^9x(9*anL zx3TqjHeq~Gxp~wUf+s4S9bfw@VM}`B;S3`QSmB;RJ$#7n@q;3CDQJbq|Cp2hKbKN` zGds6U2?w`^`@xNm9O-n-FTi<%Oyv}`e5KBKAjrZzUg?PT!ul=ulxFEiPUC8O?HUf) zdXVpZ!Cbmpb@PB`2^&j1dZXNv|0!ICyQ}v{x2D~I5lT3gU-r;08u`}AZ(y~9TTQNP z8mrQLojT2#!lM{6-M7@X0;;>HNLlA;QZ(?n--zV^c?D6BfX@W~#{U|4stK*b?x8pv zqaCo5J7=p7_0v+$(}r51xPa#UeOkpl%;qTTTAh(6tgk`a{01pK>8MHBz?j3WgotoH@mw+on*3-dkUQHhWvrp_fQl%Mbc%FPBQ*F4&-jS zn&#H&vyoaFE3;W3Lb9$c{Dvp|OSrvS-19l^o=EG z(QY+?fkQWwL}3`L)#iLK6$|ZiE=++nF8Jk~A{XwA_)wcN2=|5Q2H?OaV9P5``tS?& zJZPHnemupmvBv7r)1GREuEw4L_k`x;9>M!@_ru7m$vAJzq~==sf!uw#)K2d!0UBWP zzk;!IFGrGw8l-X#7e?gfhvP+ z6Jv+O!?^{tWxaTa#Hq4BJdM#Md=(ZFe+b&~a9w(DLLJ>4ZV=rX^PB3S;^XP6&ee-I^#|j*YC5Yu2)&A3a>quC zcD4G55LX+;c*~&e<(rsJTo>5<1mc>KYyCATdH-4V4{bOr?YWFBO>FkIMnV3BF;@o8 z=Oe#y&3yK3z!6y9>x7ofx=8Q$_fJYIC9^oTgNx1sN#rp8X+r!G8I zyv(k`(OH;lwpWC6j!you+o3B%OPq<6`vsyoHqU6gh~=qinqt2P1j_*!vL5tgIk&wB z!mKOzHr$PvF1Lz6CXml+H4$FW*hW9MOuhZ?m77YyZADomcdjSqyZtMH@{R{ehRRiH zoK#I?KOd4wDpY0De<~t1pw(xR)NIbn+O60%(0o&!OR0Fazr#&KH%WW60^7#@r}Rk(%TdtVq>_jim-I0#{!|&1&pz2= zI)rqR&(3T_t~%%zgB*Wl+zpkza{^l2auxi9>@TVwf&3l##Cw_61jL@+B$(uF(%9n$ zr53pZYupl%N8GK}IbL1IPZRCXfnOZBb?$09Y@~D}24-HiO0{PIXu$K#K#>_>*hgOa2;9hV(Aa! zzj5@F;Qs5Yt(_c_4Fm(GKVp)yBB;qJKL(FWnX$jq@~^$H$y&`2C($QO!=o98%{CIp z2A*%>McR%E0n5c48_pgq)T~|~^DwkTLP_aT|zkht%Res?fc^O-tX~i)0bJm|D7H558 zZ?EXas6)u>m4S@TL?1VFf2{%eFC4)?zEdZ77k77$#LKOT{gId=A4 z0#^>YFGx^&S;Z6UzKiRWt|c*@fc^s)Hi4vQA2kP_2z6Cx3~_3bLC*%HtuqU7 z9|lD%tm^Q(fvrYoccQQqc}MmNVbV*-$9E5w2kNr0v=^}p@EU&cpwVO0QnK{f_*MjA zF7m*$q@it+;CL7~;rM+Pc>3G!B(y-S_j?tf;qVUjXyXvSvD~6?c7SS*V3k+!!+jfM z#bMpYS_`5Iwd~b#nCB0Fe#}jewf;H#&AjAQ z2FXy|%Zez@lCUQ=MGimoD@I7lQM1vYG3V|;NU}cL@08`+t7cx-eUg=!yjK9KE<~1i zbVJaQsy?toor&Fc^`yUK#d$QD4%62yCW7D%t{#k6LFO&|BE9#bH~iVQfRVs9saw|8 z>)cU+`FP1Qz+G!b>bAfLU9w?b`{lE@uP&C$PPm6VXy{WgM5`_7;iB=l_`#Cl%ws6h?%|-=hXw+ZW&xRN_hgYa6~jb&YjuwX_?2k4l*&j5@2m%*-ubS6fuY3tt+8lBN>_~8-vNUls0 z)RsSfyX{ilyOqjdt;1JQ`80>QLL^FZ4pZCFh!sDe8e{to+A=A{aXh$yoqjEu&d&Wu zpQRNDE{<2Mp-<0RteQ3Ys&_dHsQ*YZdM0t{iC~RoS{CfA@w-{%_c^m3C9zllpXhlN zF%L;!S#kJXAXAN$M2&_V*9e4Moap-jy1s%5WEH=w7?|dwYU)75yr50ij1z%KvWb?- zN>nfZw6o-*kQ_SpLrvA%N`0-nu^8s7UbY>rFhSj|^S`s2|FhJz$K`h#rLbq>#9eWf zFbKL^3&?*qKN>cL@n70uiUoY(aoED6??Y{Mu8Q02|4@e3Vg&YVr|44j(uuI4s3MP%U^&%ZNm1e*^5cKW}(;fO2 zyW3>$rhKC#_H(G5!Apl*1eXnS^vceHLsv;taTHDTgYkDH8=rBFP0MZfuRci)i#OIj zyGOAg0$jP$iycVq4BWvn2)ApSQAZL7QsJyEOf%w(Mn_@MGuwaw-# z(h{P&Xo?#RX@0Ib8xN5|C7w_(yC+2Txi9<;{HP}2Uf-=GrMe%(X~P7v1Z>+G9Vu4- zR{Czkc&6jFFOHJc`=c?ZEaV)Fx=M;n%60_^XkbgD}dVYxG+xGhgOKGqkkc z`ZwT3$Pl8YFZnDq>T7c@0f|mEa2q@i(_KIIdvj6UpefgO@l(!pdEsQs;vlc$ul8Dj z8>Db0tnFfNqql9tHy3*+4tB{`-f}ZoumAXG>9iw#<%ncB_%l?KnRNo~R6Y7s|kzL0-Ko)tNj*sfc0iHm(w%N{JA zH%W=Lzmbc>O^?2-OKrh>52)2~i|JLWV$nRc;kRV95&q({lp3OPy_B$bzcNtdxD5_T zHX#{G%FGq{Juq$tx0Tzk+%R+aJ}%~($K1HRwuNpgNQYj)=oxutKEk|e?;*?Cbawhyi3tGFPzg5mnHZ2F?UKcbdPU{i7_oUtA#|*k?r7Bi!Jn>K2i<(3K?kdvPNR{d;$D6qYUNn1_kURcO8(z$F*uuw z5hGhGto>s1&0230fG&BEh%2d{2vM0OB?ufz(cWJ^J5oc;d7P$5(#oGt`AbLdG96gG z?h)&?eq}&N@*B3UBBmMXrtt`?83msyk-oXIR|}lYqkQ`3NjG<0=O@3Kk?wHqi{JOH z&>ru<-Me@3@hXDrd)z-lo)~uEyUaiV{>PJ75Bn4G9aW7?zX_!dlCOS#c|rP*tR8+M zJRisnY$$QpsWkHC+ISQ8)B@mVDJXT0Spa-YrKlA#cEo2IN0nI)@JCeob?atF@&m!| zc&he}?x(u|omBbtnWN$pRa(lB4rJ0MTXD~*@~;rbxikA~7E|ueP{QDksRiq=+pPW)6RY!v}Z^|Z(xV*2sT?2U8XlHu_%cX$Ayq9(kl+b zxH|ZHv@9x1Wg&qdPsY?Bv`yYb&h!zhM;t#i>l;_l-_DHwwD4ob(pQVbK$t>f(1!8p z5w{Q8b*dgxdfmSg8T;=gLb+jx8~mzqRYwn@XJCoH7hf4nO&y$MDIOAhMH&elEnJI;5nNe)v)Oe0)O91e^3 zs$|DzE|=7pg-$v$Ke$(_k!PC1`!!}g<=6Xmz$!hx4|!n~ z=WWEKO?ksuKk{cV6Jm?SdRS(o+z{{FVhC9o5c;staL+r{(N+IbFXF*GPF7q|W2|*r@-Y|ylMQ8O`6}&#W zek+NsJ8rR}TB9UEqH8kCw-*X{wub!)KN&gkPhT8JHvl|R`c0MFs}5QogK$ApCu`cA zaQ+lfBMDa_@m+Tnzv1hf&5kv}uaT`e#!C4==Ewq|gr;SGe>5QI)k{&=pcUibbaG4; zfmu1g^krFQ*}{Gmk6k#d?%k~+Ah~r(gFl^>G7s*(Vegh`GtJ(PY?#H6gF+`EON zdgNb2cMomoR9L#CIuRbvdg7xk{NqjFR!vNGK09BD63@)sKWEKHt zGTnO4KJk(^WNiQ>d@ zDSDb!PWI;^Dqi8Cwv@40tQex-uPO53(xJ=j&8)EK-rTc@o@^L$KyInvvq zf4yz)QF$ynXaCc1#Umc<^%=lntNlj{v0eGcAjd1!81}>A!i*8^^jojVK7MbXjH6AQ zY7hI7V9Hx{5@zOaN*CM5Lo8DNE1A1B7v0_l_lgoGFUsh3OT%G#S`Xg76j8D?QoH#YMM^NVw``fXrIxvv{Fk8S%gLrV2GOadq_GGM=dI9*KOwZ%$KsIeD(kJQb_I8>1j* zr_G`$r*^&6*Cn!-zSon0pn={^Acg7yr>D`2bzBdb`#=Bw1Daf7Ui!Ep2W+8aaS`16 zK0ETzHDt~INOv)p=k|1o7uD~d>cOL}`h++P^lWZ0!fMV+6HHqN|F3{Svj^ol*4lM> z9^Kt=;QH37L;@diyoCLyZ@zTNd&Tqw1hv`Rm3QVq54Dh%gZ?U63KeG%yEikOL@e*U zsJ`b95{Pt6;3Zr(?6T>XJy~vrE%BxuOUxVD_pYCC5CX!Md_|oN(w{XreMqX@hks9c zkV@{M^bT=!>xWw%E)z%qF->gKZ6=^C$)s~PjgkoUOPV)b3HR>a3IoN zj>AQti_XmE>d#Bm^MJBf!ZUZV?!#%pMwynBQGT(h;m&SDyN(l9mY@6503;axn?&n1 z15p%HWNbpjm-o-PStV2iDC=z{S)>0*QTV40r#P7z7Fn}y4%Chitpq+9ns9wO9Jd`Z zeVfwKt{hemTJ4>tw!7@LUsO391~%I=m|SYY=lXc8H>?_p1nGJQxp9W>MDZ;I2{LNWqc}~(h8t>J2)O;QZ|0pig zR2tk}y4hF4U3rjl)pa8P`{Ge4(gXx6don;R@oBrD=*4Jr5x`09^oMYaU2!OY1-Y~d zph$iAy?;jB>SS_2$mc*SN~&|`(FnMnM*P%_uwD#-Fi;H#vB@|1mBSkQt%GO2%O$zH z%oJjiZUIlh?grWpRkkf-e%FA2?hR1uDN|5D-x_dR6du&#IXWa%pbljxs+`S{INF5F zB>jWX;gk5&T}NXwlpN35<}dVDhTd9lEV#~)0B^r=IC(_mt!CtLPC@~bm4!CNYHFo) zeO7!lqtbmqj(?~t;(bVi$o=rf1rw9`AtO5WJ^N5|aWfX)7^v{^<4N1i-9W?6+ff|_wY$`Ghc z&yM&r>6ww!o@3{1aI-hE_T@VL#6)_#PCsxp-AgI(I^nZ^K-teHk(z`N6cr6G0%0?S zf(S#r>5YUBVO`u}?ZaPVKdNa`ASLPWUi}{KspT$W`SG6x=)B~j=~lKPfzsm*(WQy(l*H07AG_xo0V#uCHwEa`;4RQ-N0%6~n1|9L&UJlGt#9&aRRIJhO0 zd;$oad@^q>k+s~-Nx}qM)k!CLk5!fMe>DI2@BF_#LeLY+f2N)NBOj_(+~x)iYD6>L zV2zdjlG5gTwma^@XViaVu`NW6e|CoAhH16A&)r8k->N=l3Os+!bzzF38Ae!2lg=N4 zYmZAwnS*BSoV~bTB=kzjOds8gsKsF54(YTAv2IRG=sSn4bcG>!qWFfoM&>jdaq01_ z{!_~|Bj8<7d@7$0;Y_vo$k4bZl`&!-j@e7tmkoNrJ<++j)jG>A#Q5e<;5m~ZzpWw# zw53=N&1ahNWMBADH(~8|pJlydNr)*F<(rTj5P$=}<667-} z^?P}oG;n_URR3v*kP^L#f7hLbXK{HaKUsmT3JW$)sY+=M#n8@ZHg*4Uq~pc?*aW}| zg}MB9nRwi>Jr_sbDLE#36bhrKsLcgBA$l3UI56wV~H z8^-SyEa4CvTu^67#+|77|KJOzLf3X74F_x&Ha^S2=LdhRgNH6!vi;}72F>t|_|vvq z{$YG|A(x5Cth-m>^JlEM=G(tzq~Vh9M`KB7E^@$!@8;m_-0pMhSaP*Rhal3wku}J2 z&ZL3e&29lbKf4R=h~(9kcz*GV$ei2h*>J?Q<@>863l?;Rsr(%pSq|y;pBS!`@PBe? zF3&*7LWZ+m;|%G)6^70SZT=_GkdWaFiy_A&{vVPnTc9k!>W+9Nr{syoY{}7acVujU+5oPenKNP1`eB5G*3&@nf&=g1!Y2TaARq4%IvhhJ~L5k~QX z$Bx5B9%v%wA8}G^H4UUZn!37AgufHQA=<1R9}zYo-$wiRzR& z(`}bgJ2qggz^8i%XGfb0e&t}{76JQqj7wKfcSSPpbA@8O=Rn)>aOhC`sCnpc9jfkk z=n9dYi8kJLyr^}h>L@!Lx(IC&FfuqTZm_4!sE!`$sqg!P`yxmYzIw2}>^0BHb@;*0 z$F+XIr%DJYh;;O6CHW(J+?dw!wh^>e_Eyi?lCrK;r|&5L-n}_Mz)R>kLB8!6y(tZe zdc3(?ZB?~k$8$6lgyUh{2KjE&i*8%40RO?TacxWLYpw9$$hL>bz#r9eCt>6@9jqsX z-UBPN&_i9s{ zzF6prkX5Dvpkc`~cZ&M5Yi`tfSq*MQLrxB{rG4vBfnYk@ zJC2I3+RQhSL16~UKjGrO4iD@3*E#R_9CjcyzPiUeQ;A>7m&-Iv6fweoK`H2cXCJm$ zmhGY6Q`U!MVzoef?@-VGEb=2xv_|05OI-p2xwX3)+064fEpGbTv7SX&al@9euHpT` zQ$#2E?3FdC8mZ7RMy*Pa&J|JZ>o+MsJ2Nqu5$`{#tb@&a;6xD|TY8Y5{q_MZbCW3o z*#}&4=_fY{-8ub4`rv%dZ_Lo6mBl>gtuwi<2!#ZoP#WbX5G~CRnlMxi|2hA!t{?k2^aid@h1#TmQgZ?N za{8lFL-Pv#oRcYbh$_uE^73t)84#QS-dv;rP>4Cn_ zEe>us#L$Q=`-1kYTJAj;iC5_jnqCDi3oTVFD89Gt*1u!SGo0zE8a9Rn=}bpp@3-5? zg_FQ19FGX=UL%V}LA8LtaV0Znq;DUdte3mejo6kJk;6MG$&Z$vFtm1S3@(xaJ$K9- zgzopRUHxJS%Y3{oWlc6=Fmqqz=Vseqo5WEz+k3;%ymX|t!qq)xZP5!Czna}%+Ud)J zICEgeCubOyw7lXmU0-6Ye0;s30?6w;eZ^({9_V#{`ZW#HcgBtQH}t3 zUoqzh#Ft?crYY}|-`d=M&mGrn;-k{N9{NMr-$mu(rvT6i`%}`zZfNeKSE*({by!>a z=F!%(dS2*b4+ym+${>Yt$&tIFbOX0|t>9v&;KQrHbKWtAO*=cTNdMgrTRm5t$v!2i zlOE;)r*;1dUp(imRYo#LG{D+?uSd)4n+YgOinISx7Qo12QtZt1TgNAd@V!>7OHdP_ zaeGk4tOe!;-a>a6Pf^Jf?%N zjN6{iKMj*E(B29$EohmVdLpe9%5QY0QiWvO}B`M{f^ykg)1 zhuP|hKDY8&6Sku=AK$t%3Y2cAbf5FLG{wb#8qX8cJj>6ZK=Ht*%5g@CmPpgstjuxV zO}v3X!)zGQ6)6$-lHEz#mXY%7AY~p(c&1W!MAnJKWjBbc^M@|3-|A}N#%?3Oi9bx` z#{RU_;cAL4m-Ooq|Ek)3;t@IlUJergc#h?t z(u6iGvtf?Y1*XhTj=E{TzQ(?;u_nMep_Ld;qM=J-fSfO9S|1zfdjW0Q=_ud7om@M)sh-{4}55K#;LC5&Rr-wWcdfsi#eZPcs%g*mz8Aa+6Q zzOH$YnQrLgg#0fiCleXZ%y6mJvWGp`U23|`J9v;Ue3q8vglB4AM0@v zpV8M$GZFfHQoYoxG2F_{z_5l5E{hnyQ}L|@O7(c`R{kEN{EMo7!nhlA>NS)^Ir!f8{f zU<)789aJhAgo003bgpk*3Q*#`=;Q~Ax_N|zGpV(7AN?+mq~5jd>tnOxn}a&ge$qL* zEY$6)>8qodsIokx^c$Jw7u>vJR3Db8HTpaAn&P`Xnp?oK>9_3&3VNmas&hnkryr){ z@s~nF(Xa!P-IL#3L%=(xw z+*03v&qolvBB2%WCF6<`2nwD}`bV5tF*# zlH-hir3tjL2+23DG7u-7utm*TGUn3JqT<_$HmZqm_3g9VoS9{n{Xf3RMfu0uG3eoQ zr#ElOlBmUUaM$w6b%`99l;ioB@p~ht%$osKYoQ-h>0%>-tMzbptkB6jqb}mt9L@Pt zGtL=c&8GHyO|lhzhWnGi%Y1=pYanm(bv%VYXT3o?x2H4XOds1wN~Pg2 zKgdUM*oW-j=yvsAxjb#ZgekQr{VsKOb*vqoLQ_|=E0Rve-jh!F@QNk%HvJWRAE-PMYRY6L zyTc3HMrRbm%?P_Q=Gp$({mR6pg`40mK$kMEyg#f3Tee>&4-jru0?!<=I_)iA#~GVv zU&Z!LXSCu;+!lP<4xaXEF2_V^4ot7na`+?D0^iHEPd0&%7E#9W`1L;U7o@mgTQL*VGqEU6Zezz zMMw@s0!*4Iw;BdhZr2^7+bE)dP`FRV-slTQW$GNRE87COZ4J2fjM_FbYxJ*`Pa30d zJHTa(;t&^)?y>+K9t)`&YL>$!ZY{EVA-oXD71Oe~ResGyt*LYSnysrPT({_$OkaeQ zoo&+29>-A5V0%w+&LQ<|H|!kohRNlcoYlFAtLkK3fGq!vBOnV3MlyoP z-)(OwWyX96<8To#t(zgm&|$|^eku%A#+t1rX*xR};)j=N##;v3grq<0y31nBNZKw( zGYDGh^?yJ$HNrIvxu;A8qOi;~dkJo>rVB@{%)5w~s1E z*iA<#?}eqBviLYqf2#gg>AWNlxNQ_3aUM_M%o#Y0pN-fBi;`I%EFqt1I@sn;nNL^8 zJM#w_Qlh%nH&t=xS!u&^fU9Yx&9DOr7V`8p(=lwYPgH3$pv_tuqtC0DK5t`HZ z-2%@2#`J=B$jz>5jf(LPqc?lyOML8+l)(r?A=`c@0~T=v<+Lz-!c^n>^GAs)pIJN5 zNU3Y)H$%;jrGBrCo+Ar)Zi$fZ&CuVX5XZ&X?n;a*radko*1#e^4tsO`hvQm)mBf!( z2`vAc#RPkpG?QO9?xUAR;`GM(WfgUnV1Hg81ak%gmwo&Ekk}bf3sURl{}vvoQ5r&- zu}g_J*T&Mo)ze&JPx)|pxmq}>813ilnfJNoCs+e#F(&c^#F|FllAvU6`4bN&hcmKZjJmW7;-|3JzoMirRvi-S{P*Kl9HTryE`G|gYDYYaSA%YZX>~p3 zRT*IR$@|Uhs+03^y5x6)7KVFWUK%fUyPV5lAAROCI*L5!Am+#Mx~+xwKKNr<4Slg^ zo7)P}|L+-WB7bC!6(BmNtWiQ>?tc+r1SYIU{iaugsC49E6#h7h$4kC?#JyiHPz-V>%k&%h|yBmt@3n2YKh5|-wxjcb0>g>7r?D{{{4z-He z-J=+HynR{?xZF@f?CxFZDv8R`-(V@aA`6XcFQm|LmF;NT;kQ9|DBM|ew8dBa=kk9l z6NRL^P?KgY=>zz_(%!CQ;tW2&gAfPsyWFq<;=G#b9Zq@KT7UX)#Kt3zFNJ2s%{Fh> z55FFp!LNJ^pVl^J)c6?9%8FT14gd&>5IPi1>aE$eeUtgofNH9Gip$UdTEAPWqh3KI z=TH{T%kNGDU)3ttqazJR25OHxvUa-iX0Gs|WU5L+o=5IKJ|-sIU02O@J`H_0^YB&4 z=`_oi@E@EMJ4ldYs*BU*!m$4hRbb1pwE4yKHI`GB_tD2yEOlni8Y*&`uirArF1}{> zq=#pn@|Is!f&%-vV!%N9b(8mp88(Q}k$FIk<}mn95@D=saEuX{jONHE&wJHIxYKS7 zt-7h&3VmTijtNs#=B^qPNw1bfo;--Upz>$(;QSe0^Lk#!BhD(HTIW62aM6;K`(_p{ z_P*BuusDvjYe*Yhies|VmvRW6Gp=Fg-Me1PIQtxr!?seQZa)=`&E#RXn8`eQS$)}b zQ?C^t=3W)KdU`L@1b-oJ3`mR2jmXrV+0k(Te7IBta6{W*}tU&%l z(|3_eIO~Ys=50i#3G{@J0zHl9OTsD>>TC}0c4Hy!?wh=I!Lb*^e#=a|0i?;%Gx}YR;8uRqo9G8<6Cwts#1*bqGJ~f}}C1*q$L5{7hMNcKx7_ z{w=%D%WDvWIcTp9UY1^cYx594&uN%PuA7x^fx(G)RFlkr-W?dBD6fR4T8Ia|B zP-b%2)wev2(ZzSm z=qI8FZv3>~l1a8qt?4B2tqXdMVfnmL^Vl#E4JBdPDKb*Blr&OWoJc#i+Y(kvO#n z_WbV8VEbbYJqXC#W&S*$5gPDmuM(#eY zI&FnOuR#!0)^FyXaq(oUE^d?R*4{ zVnFE6uUm(@R(Hd6G5)EH-p_{5;pS+EMHG(*cjP2@3M_Tq%x(VNx8-E|vUb@XFBcn) z`wih%$D8O(lYmbalAlWc-HaxeCNdq3_7pEml%_YDw31zkWC}tZtP4)ryp&2;TIsmv zC1nUX9Q2fn4ohgnhHvX7lgKFWN$-D0#)?Q=9kLWIL=WH=*mFsrnWosQ!aU9c`Rw( z7M)l2o?4Z~`Y$ zHU!u&`FtqQMagSh-6-67nnpyjh^V*!_NP!$aFyK7haV?9^&`*(KlO8mk*Yk6(Y6J5 zPg#VhGR6Czha>*0xcRhTcku;T=v!r%KTIW-?i(=DBYNWIukZUwXHBJgikyfmB&ToN z6TcG;IIs&*ilKE*p{uX3pk(VoeoQ$y>&k-em9FLOjXgBU7H3#Iao9$JpEwiD zEL4}JJhn=+2R5#WMN(!*ItJZR(>w>t&%pRtw`O`7hfH+5(l7E^vi7BZt6ypTZS}cp z_&THzt_VL)`PcdTDsC%`qh}qd3RsrhHr}z%!?g-Z?R$#kTBAW}_wg!Vlc;V^h$L;PBr5&YCt#lZ`$Pokj0NK&ylnC^O?COGZvzDqGe`slp z!fdDb%wuC=ra3DukL|yjmwj>m#l^P#jDId)Z|If=;=2hs z>~}dXWcX9-NAv!12)`_LgUH}{U`lLpl>-yO`Xw*6$$co5{~&HC_pLwUEd8xIxl`Y` zo)54lgXY%7I?~?cfoe2ZY6@!NNF~e^B*;{3ZNlHrR>m*!d{el40X863FEygIN54>* zp~pQsO@Cfc3nF0yR7FH5mDW`G#vULI?apn}B@+iPpK!G71~A+PZU?!zJ<(#dI(?L5 z^EBt9&e!8~zXu)<81zP~J8W+zGJf{uG@y(foohfZWpRXU(7u25nzrC1X?iS=Ozq~u zAiMnvgqRdnx*lYzE>bnqa4W`z&T)1r#LSMRY@8%&PoejF*Cp#a`8<~?mc_{+YqE8w zAZeyg*97{&LyoHb^epfqc69G@KJB$*-bZE9?;(X<);S&YB;q@il@kbl` z8;vhqg63|Lg+95+W2zDBx>>kB;dKFy|KiGqzq8@HE?>T_O;zfW%=a2~{@Qqo^R7A}A#N3qRKi|rvvQH=&Py0e#D^}Ix+XB(BAhGuE zfy8K1a&!54BgaGk&xPVH5rK?|{*8a(>T`{F-V@}?LsOsF>sdCOLPjCB{?r}*6H!f#v zJ(^OzHBr_4{9jG`pqo9l$Jn5HBXQDX$A>!ip;N)k&&Gsm7lJV@kHD94MAfw@1U)rh z06`fqE(Q1!bc(m*;kl&obmsEyfg%^N`)wC3i|Ggyq0_kzfC~n2a~<4|X*OtZw}zcK zQKrZMB3$-C8m( z7D|mY-}@7Y%huZboThD4=KAAZLO~6Q$!R6)ZH01n$zfpdEinpf*GnDI?HJN-prky| z@3MzHVEcnO=R)V(X*truefE|PxtJpwkPr{7e18*QS&1^Y_$=C>XEEzga?X?mU%_qE z#6VnAy_5yfHqa&krcdC8n7fk~p1XTBl{D$$S)ch}{n@*Vfc6QnJ9rr`eIw!TNj5N=Lg4XeF=+Pjd*71FyceOZkgQ25FZqyNAvqcs5CnUP_sGvz>1z;BN9^U1N5)g62lg3_`w~ z;orp$^2>fY+QWf~vSjdRA*a>`J~1nwpWt$$2PjF~RW-Q&=%BuZ&GI5aCCl83ERn<`uYjopcXB>}5S}qQq_&NC<53q!ya_4lFy3|AJG3(jpT@!Q2ueW^o9e*0YLq!)!hH%m|YsAYffC28cx#W?($>UF|=~v+Y5^V(bq~zyaH}) zy`U@sc<)KC7io ztVMewe6|u|mmqsk=>GZk^2yu#(&wpwn~#BY8*1r;=((aj(?M{FKHxl_uyL{2dg!|y zHYAGDZ9cf2yfPevk{jJ$`$Xj1aRuiIY9?IrXw+`{)$4EZvMdW99daVLqgDNajQW@F z@-mmL;_3ZYdq$Rde>~uRD|CwIttOZZUOfDT45Ui4lYFvbewUg;$(uk=Vg7J8Mpmqf zuI-=ntzQ3FDoR-R3DcUY$T7&uc(i0N^cqzYxPd%6u}N=IxZL{|Yp=AI_!T&rW4r^f z;;kI9YEFWc5VP&-aHiLRf~(lOx8I^s_X?@x;hV6BJkm7I96wd@L=~~&l-ezsHecNU zsdiyp3J=#3BiwzCwgob92z>kKYB5+T_5F4{GdbqjGTD(X4n!1iSYI(7KPDF6-|f`0 zd9Pc?)h9mqyV-a0qcAg1_8QSkeS(n~qCPP)HWSSwOF%hDhhYZDPDP5^h~(o(^fL=Ry_17 zQl|}rW=5Vc)Kj;$JK(5|k8R7(q`%}&k4D@u9n2uu{iNk%q3=%**_V0M_OWz9-=k17 z_<4utRTRoW2l@e4Z4ZQ1&$4~(RlObgbGi@SeInL_A@1|bV$gw>sGBC0 zAs%5UFt^0Pxk!nVBzcdF@Ai65YT9t?I0H*Kg`OTjsoR0Y%Opo==k?ROQl|5@{3y39 zAUa9Q*EOj2ICMq-B8QyR0`wuIJMVqH&PD6mU~(b(>x$vKIkS&G)AZm@C)k?wAb5zU z3mRUaN4TENNqkf>9>a}@yCux-N;Ln0IVTM?Jub7mPwTMDqIh!qyAX7=w_kilzheC* zN50-vw)1UkuXBZWp)JGs%(lQYg>*ZPc>G?{qhFaoUyr?G-GbLvJ}Ao}4Pz^Y9u&3p z-c=@V+J~1i6?1D(C1>J!%c5)6B3N(_lWgWA`$YryC7*vZzcw42jlR#hB{@US;=H<& z;dT1g1jiN48;U3xF$~<_?fZ6Mbz;;O_;>+)fSwQv^DoyslYq+(O1qM|fY=h7UVAwB zJgYta1Ur2tWg}LIB=CtuV&JRd^qfR-}z1kH&YvPp60*YXbb8XY9ibVm(e`n6`t2YSzQTkifz4z%w>*f>{bJ*n`fP+mc z^h<~DdG`(A(;1uG>9c4P?3P?kb!<;iuUCP|zoD%BSk*N-tDC3KOD7&A&v-SdWSLy%gX(FD-rc}5`TK$M+Ker^(1^4Tdz#-g+pfU*)CH^Izkj!VMv({r_BWd;cVmg}@dzLtTO9dL-O>r`B(Q zCcuoX1WI;$8!UtB!W-^tbOICPw0O;X>ZK!5U?unDL+`m@o_YTyrvHzv_l{;eaNquo zqGsAsn`o)g*4`_jT6CbTw)QA3irRaHDylZ6c8r#)y?0Q1Q!4f*2!bGqNb=wVwX^}0p^zIa^U0AshGMU>x3u)JoC9%3nACw&ls0EMQaUQbmB zynOS6!pr?b!{xT**IQkb+)s>u(mz9)r&46-yi6YrV;2Wj=NJ+1xU~{S!DmFWc7^M> zxVE=K?!MmaCrj*NZ8{0k8djp=l9zv_y#qEL3@>d&5df#mO5h}b=GP6&Wc*|Cc6am} zpPOCBcDe8^J;0C4*>=WsM8F9&b&(WXcK&xT?lz`>c5^)H!6Kvp2x`p0Hm!W_7S~qu zlE>#pHT<;mSqxn)>a0EuYw3U3*OFGlEbnzfH4@1uG%P-Kl1Vz7Fg0aCpJMuVh2)Nw0iM@Eo-Fh`%qRboM zyqlM{?ZE0u+@_*_9zKUN;Z(Xj<}f16Tr}V&xozAfM7 zf6|JmfZ(G@*?@M)wqp1@*Ij!@UA$#W@Ck&tc;Fgz8M6(WTI&XH1UEvCtTr1d97ekQ zMKz&yeQ2bbmr9%_;h_|15<`#dJc+ zT#POR&&G3SwpUfcYI}3?Php_2FJ_DTk+1l_Ph&@m5gPIUkQ7vVmDS3>&XO&Z;kg(r zn-ra(fn%3By8B%J2OE!Nu9dcD-EkO7o<^i)3e2Ibpc3A=-NW9m?GzV(3;X`LBijEw zbG72}7bOXhDE)XzeJ#bP78az}ouPK5y8iU- zz1&YZisb0Xw*(@4)d9mzd(cO>5>QJ?$UMWSn$LS3ch(p7$8^FnYI%p{jyUNRjpp zQow5e=!=+^7R*+o;%~^lk$f z^&bI#MA*OQK#fHxVTeGSY~_D6ZP2OT_*T17HbT&K#@Yiss4j%Od`CLp*dnF?+)l55 zb=reG@vzF0gd`U5Xt;8tyBI!Tg4Ma2;XTkf9h?NFWKPu|PUz?ygOPqbX!WAz+5M&| z{!c#itO(JPecKY%{{(H#S)`vrb)*CLrcZRxw=)dkN$a+xSNtB@{wZ!&a>qm^A zKaw%M%6UxvLZO!A;=gG2CggCGa~}5j{lcaf4cdaG!mntK=-hp1E#m)hcm1I9DOrOy z-C39FCzLj}bMjd!UO5wy$oYQwPU?3?_4xOyi%uE1fz31=8Ds@6VRWgaW)m4DHWumov9K z<)i!tA&7f#x1QfXbtqAer60$6R}74l*B;73f@KRkD+yr8$x8m@YWwD`JQU_`WM%yP zqWaz#Ud)&8Ff0#EHLBtp{%fEgZ!Z65qw(_*Cf=Tiqv*dej?2dXkpFpQd{6hGG*_+9 zbo%Dc`cBOYm_18i8AH*2*N0U6O>Zfo#O$>o1mr~PxFco*eBu<+Quo*RB&7vovV&Fo z*8N=rzAAcEV<$R2FC6hH1BWUbIc9k=)k0dkJC4qQU0J-|D-%_PomgrWOb`&SY2mJT0Mv|4+} zv$3^iMh$NKn7G32&guI z?LQ+$?r+bxOIXjr*(?<$Jr%4Yyc6@8e|%K>Igvh9tIHc=J5p|a=6dqs<+JYH0RC({ zDrzZ*jXaG-e2qQd7zi_;AHPk3CvO;aD$eRdi>j(<_9nCS(p@E^u3pi%3-aX7q*D}x z@3|99#-BWltF~nDrQW|;A)8m~g3GTA=!|oEJg!1a@twc(-o-WW@Myc`YJdN^#`T$h zk}kG?)-FEianh+j_U>t{gq9h0PlB5SH|J{1!IQqw9~+z{S-QC58+gY?m#>}hDQg<# zyjBV76y@YA*5zU`UGJqi^``5cxY>y%S@b`%5o=xP7jT@29Bk9t;;AR*1AREa!Y%Y^ z`W)5nXQcG~>V3bx9@GmW8aXZ7&OI>4UhA#&Iypy;`^MF64L6%jXz`qI$jE;S)SXU) z3Tnv?D-skL?7wqD{XJJ%27PqvW3IE`wd3xAp1vq#kXu;PFuDL8s;Jg~m!8b$P)+HB z(U&*jEKQ)NoWX9TpV6xp(&z7Y{@A5v+7zlXR6sXHWj74Uob34j#a`oA{e{(ax&J7= zz1nBi%Iey=*`sGuGKPWEual@YZ{?~p+X>w;l!B;fxm9-NIZfmS=SHu=v44EqQRmd8 z<$f0{;^Ib=$8$%(3!d(T;j{gbAahbL@Q6df?cwgv(NGWADR zL#r%?Mouj0j4i2B5gBJ;bszJU;*wG_X0Ok;MR!xco$fJT1-SGNseZCFa9ithd!`^O zSr>z1`ghLOcmm86v^VfaEcyj&S+Is!VsP~#gcx8;@B)ftN1BHOd}2eH^}$F3!l4FM zk{xBxaX8&Nan%w=KRAF_`Niw|Sc>2RclW%&XnWk1sJ@L0&8-fK58F(|s5mU6i6XQV zt?8m=Klf_X)k9JEchw_%G*$bo;oytgcG;Yn_=Rh3$(R&~c?ZoZE9$V3BIp!p)f(Il zMoT-Ho$FoEv62mF+wblOq5~O#{y!kV1%`Ihr_8;4Wx7Kv(Qw`$-;7607t9vkRw@R|*lt zweREpY)5Bdf3VL5?fzmX&te2@X1s(0Jp{(dAM3{+t9vx|^a*kHXrtRBl2c_JGO3%R zy7${6@N~}A^YC()akjnqo%`ALc*q>$RigQB7N(Lg&2dgR({k-Cs_b=Swm+MHL{X4F zIVSv)I|P1>UumfJY2?!gkYwHQ8BOkN^BXabK18T9z^+MI^cyIwe%Q&c9BhnW7xlkZ z962I%g42P+uCu1sdn!|seOxOed7gwTJU)92D_jC8A3T0YsP+T1GRHJ?5GrjK={Z){ ztSu_JezRMv+@}kDYh92);>k)=i~sLo&F{1NFJYt`VDOd+oEjIb_GQ2Sr@tAbqA4G3C?tW?DA$CiLX%GdAwodkWK?>=iJ{aM8 zo_H4CDh6eHPuHJ;e;<$jDrqi4z1TMU6E<^wDX?bdPQu%`i*&?UkCoW?Ei4K!q^PGu zYzlGxDAQvwky*%^KCq1fw7uz|i*4}M8I75A3!$Gdgkhyd!N%d5ityj;@MT zJbU%HmZF)xb9KCG>(M!NU|KFgPxz!9y|QveDp>O;@M_U5q4g}bla70q=iU@wHTmAD zZ662jJ@%-^`BkgbmXrSwUSFuh{JhrtwEI8XS%MzLb6Uz`<$WHA;?f+O&8mqP6Xe0U zjZrO{;hQ2l`lH@hzEF?un~#+n+zrCYIf6y-)jiL0S3x(MNt;no(!C+De;HSXNIN$s zGd3rZWvTj~;<@qJn=!j zSoGiCea((?jK|q%nIJfbwJs7Fm*j@C22;{V^waRRi-1QfiHXwhaH7}s*7u_-&xnmy zyb;d_fTOY_$BN9ll#N#N_UMu3LBjse1z%z@ir7eTnQVor|NZe`=5M=EptOA3Pgj<7 zh2b1-zGC+CZPYXCuAS`H@ms7@G2p2V0>)9-FGnX48xtBV2 z=L3wf{yC|=_yl2PK9F5dz7zC{#h+~yTIUy;u?rTxL-XjLeO#FVOwH+43Cs80M-S(V z#jKLFvdzzXz9Z=#!g#admXW6Rvw;uZDrn@M6)2wZ5cVk_R-}0Clof`2iKcbB^}Vut zzZf>G*5$0j@Xc3IbnnQQ)P$j-~U6{wfk?vZphGn z+e*soQGagvF5&msjpZ?=vZ8RjwBCovQArce@Zr}w6}ej8VRJK{M8o^e=W^{a?@h@* z)OYbeJW!_$tK|terUJ%B^xYwlqgQS|<(cv{xt@q8xVBt`f|^c})xC4v8H_ZUSqX4M zT!@LtpI>;8p81?>eYm1tP1!D#$vv4Kdk%Ob5g1nS^~Ug-EU#B21ZAM2plbT(y*HLO zX6CGgH@LPks;Uz7M)HK!OrC*;u;ad2LRQ!!!tL8)TfB!+=i1*wderIB3 zZxfmNyBSN9>$yqwWdA;5gNI@!f2LgndUt9sW z#H2_08+voLdXz+l7vDLo6S1J>b&je^ISWwG}rb2A{iiX8qg+_EG{im7b4ZyMSZv`Dhc}B_l}8H zDFn>dnE>XNGsT1z!x(K7ZsoKbJ2oA{i8_P4s z5W9j42}e=)cN8l8mlk!0Gu4&&Sp$p52>@dcjReWl%^Iec+~w3fv2@k2XKI(VK1)pz zPf>E{l&vN&w~)CKX4jxH*`uEd+t-I;8SpX%kj6dU!6i$vZ-6>A#AQ8;Bl0^Q^?M++ z2=<2gI6rk#BjAYy2kNUn0DsqXY)x5-8k+72KD_8O$ECLc6wHm)9zn6B8 zG(~$iNK>(We(c;XwJG=RQxgSStx~u}80CEz@2FO{f2k|8UGn`yD{Y0UQ!0{W29%ZF z#<=(2rZ~T)$Rd_S?6<%IPc>kUoh1?;vGr*$^iHrpSQY0cQu&jsGx<>WIYS78oG#L1 z;8~kcrhNf@V%KfjqU=;4DN&W$v}sM=XT~`Y8|Tza3&H~kYey-h%Xv})Y0zpL(5HDy zeWGbrv{JW$LEP9@PdiQqiDJGJVVyd2ZI~HFnt@8ie{HiIz#jYaK(DIJzHwKfImwwb z-!}@U!T=O}uj;k*D>}^GEr+CoxDD$scV_WXT}_vI+7#V%NYxUt<^(@*zw1rxCJ=vl zAPWuhB`aH}jy38=DB&r%;8d*dz3xJNi;%~2up@RzE~ z%heTDvLY0khM`Tn0-E=LJ4g6y#<=Xr0LA;pbwUS%+trnJr_Ni5qwZ$)FlD~fA z)>2$S9@nD|7hc>J=Cu^HO9(vpDEDPm%zE98))w};A^x||efZzAi^n7GZ#@VI>Cc!2H~H7>66krpl9{?C#p%af!2ck1 zCFOO-I1%b_z3n)mnvPsDQa6|RQ#PZo$1`Rf>P6qXwUVgGc8-82*ZAAxn=f4XtB=}s zs@iJS)Oo(88#4F#N7N@sDSHV>`i${dNBYRQ$4;jidowvuUcV~u9Mcjab;C^p^>JoX z3bL0Tr}X`4UgTyrRRLr(^Oxr&ZRMc6kF4Bw27!&Ix8ydX&3HoU#|SfUyrs_UXqNxU zsO8a}j??|8?aPJcW3G^mO+6AXUwrLAk=0DBW&m%Aru%C4!g&pXGS=#dS;ml#Q8*Hq zEuC}ybISLT!CM=gaoxpo;VS;joW~hdnRnKo&t^oTX%#gsDz|6}rH%R-hVnne!Xs9>A zDa|rBZ}5Wiza{HVXW(=gW)z&$%3nn$D`;8Vz~;XX>QlN;$4OW-iIl2#|Ip{j*R3CW%3pJsb*BZ8Rxpuw^X~1Y z^D8+gD!{F*dhXTHVp`0&-38(<+saM-5amViXf46o?x}r+7RX;blc;Hm=+E5j{j##n zVbv16=L`9FFx6o|UM7gJ1^$oU%$Uy@1>N!w+(2I-<;D3?QXvBa7y_KcCY{?yR(bJ!38iTE?Jn)e(-+zi-RJ7B@sdua%3SqGtp^NHb=E z2XyBrq^klCjos8!^IG}0SyhHEPMf5VyXGn`w9#b|Y13{*rXK`d{P{d?P_Zxy;w+4t zBfuqu1Q^4HhPxbMlL=CD$xCT{n3NLCAv)lFVZ@Ys}G4g@paF3Q^--x7J=wr!6# zu(bYu{OPiSanzLIy;*5}gRf&>V&Qbi-vgU)B0t3as8zk)bDQY6t_1s-V$z|Mchg?<_wREV$wTeNEmJA?E{xBz zhaOd~dP62RQSIjUh5`0LPow3Vh1omY&L-(>Ub&9gkh`_bR0v*{=;DU8dX|71TInjL zjcY1XwE&yXQ*Uh%NB8+IbxkwtBfX_~OH<4#q4)(jpd>}{3;Q*`t@+|GBCxO9Ja8&$2Iy(D|PI*_pT-%x-XCjkryUA?{;#z*>DV=~46~OWF2>bz& zYPHkBxd0}QldX#vTQ$)$BDTF%qdKON0Njx(M|_2Rqe#zCDKUT5xH>*2@QDifY-P`( zG3FHDs^Nl(%PeY4mjHCzp5G1J;^2Cw%~k_f$#CK*Zr5)RT~CliT7t`1Dn_wyLe5=c zKcRD#e3F@!KK}L)c3&0zPJEbOyn+&>G2;E;G!o|B!2R6ztXhGKP#yR7Iuz|Rho&A2 z^!T`8OF84+rziD1K{&o zToRAiMzW)tYUBp@eCcaa*pdH~iudVnw@8QoLFJYts5krvm5YwxA2}5yXi8^xdJ>+6 z@SZ>F*1=_yVYxK5+&e0DxlM?B{{zcy`mvSuF&z+@6yhZ97f$~y7`wpQsgC+i425?Z zm2C)SA*0eYdDF(&C@eOHe3`MQkNmIx2poJ53}JS*8N3;&vZEB$x2`nDn9N=OOs>Cy z@70MMsO^Jr^}dxm?oR`&PA8_eO)~l$`r5z-_W$??{`ZT^AF4+PV*U6M2yMSIL7mul z{A&#%9i;Ycpd)wuo!m?_Kx$n5_dXrC$5QG-&TBH4PQ``;BG-2i0nMWIv|8#bcNE;w zshWzK-Zzv!PexQD!)<|VD4-}uYqG4QIe`KiE7v*yM{oH3k^KoA;$al81m8s$MLoZ? z4n8@erv?R*txc+Ux>F+btnUCx`ZvC0iN81lq!}GcgH?_UVbtSG=r@L^;Xx4c;5$0s zC0T;c#__0++NgWTk9&B7L&k|Th}9eMGp*Z|TnbQ+5JK*nf z*|&Tw^BY4M@@EI`)@}_B$4b!2_)Y=J=8$d)T1t`P&lGExCVgra)=Z50EC_iv6Y*6rS_bsX3TC>%SjSRk%Il*#KBYlKvQ=j}i z`*!udwsVmZ58N63t5%-6ZS$8#wX8uJhe1jy$AtO>L0K-EW1$_!hX9=yc*~PD;w5R* z_wwsMbn^!7qmVe>_jNQIIXS!Eo_7!(B+@v6=N!}#4u>~3&XzS_Up%CP>b`!lMkr19 zI0o7Igxs!G&_;%!!;YWJ`=Kfdq`VXIDzM`B0}pA!a}F}}JWyfcNFy`?9`!H-+KDk; zQ9W|%I72Lh&M`3URla`6St-~bf9eaF^u{)_2y}mEwMR7+UsEf|Fd=Lx-u%+7r2LSc zla&iI(AkI8j_Qn6Xa5zQL*%6Xq^?r)QpKKN1k3L#J%3*O+`sze8-`gV-vTVo&{m3Kh=UZ5NKz(cQC-b=iO65TXoUE@C%iY4P_w3Vs~>1X}$x z_vxzf{;5xqobUSVkUxRfJmc>10ADV?UZp!^+tPk7M*0Q6rXCzAk}5uO_|m*g@F3t< zXc6a%oPVudd;#T15m0x#oO4TaZc_a&xpTu(Y1T+6j;ra6Cri zcD~<6)Nc(A`;N3nAD34%8dr$)P4_C>J=ZUDK(#cibSkTTUk_;ithiu4Jx6%Y{1*>p zg*hot*2`K+`D~%+_x4Du@L{DmS#TUjbY07s5;>{06Hq#5WNhm1yo&gOoi97w_03fN(SJV^ z^6aW1<8?{*(I!lWg-GCwgM0RbJ3#cGRUXR<=3JKl`*@$AdIU>2N>L6_$)E!aqgQL7 zLo?yAz_4wxfpOWIj5S2qo!+h`FLf+)f2OU7!O@o{T5-M^%KP)6Z{aI!{AYf7BW}d{ zF)gFSU?HXoZ>FcL49j6>#$+0;;_u}+T_VfQPM|{%ah+TmvjG2NbRsuXcx! z7oaY5e$dT!kAp6&42Gn&ViJz@sZr9^xc|cC z3LGz@NP|~(+LGLj>t*ibZZ^>^#kgLBiMinuhuA0*z_AWV8bvUklTzNBd-l~N#Ari87kPws-!rIA!y{U6;=IuYIdiftls$cGn_KMxN zzczoe-m^)l&w%H?m*wT5nEDf&u#TcBqs+Lqs9_r$%9CG(qZJMstc-9M?CiOC=06w_ z&wH-dnLP=1YTg7A@;MH0$yQA#PfT!54xneKcHS$)wE%(2t?8O~ow0pV)&BH`qauEP z3g3QMi+Sxp?w=*br^Z{GEEr&#QGl4SUd|Dmrq@MgHbam3*o-u+>`dk!35Qq$VYyp9XVNBD>m?2`Z z_od1wr`)-4)cYp~cLOUE)65v)%Dug-tubmcS*0i-7ERi+?<0*(N#gn{^<=}6ub5;Y zc^LYZIHjZx!b7{E+-muGgx}ida6+-)fP>pLmS4)US>bpwD9rz=;X-i38zCexPekf5 znzM*IzLOdns9>JM5+rn~LR8fP0PxLjoK@acp+W1}OD5xugG zGC%aG+Jjhrbpvj@G3JfMt_n%7V?6`ntzzHnFO5U1Ei^@8=JSc!q)zifmKcw}uSZXS z3iVBpm>}Bfv-Q=CWc2IuO;>REQ;s=!0UvDugYh*cA9&A~XEmPhjV?8d`zy4$x1=yC z0zMbwbU2xp#TF@P?H1M>irQhGR(;a>NmEEh(RPqgw95We z{%n}BtZ5X-HF{$K?y|s;U(m!Tnu25{oKof2aO^tNh_i#Tz{z6*1$tRjs)XPx~q+>&(xX4M^Em8YtF8(yst#w~IYX6*Jm(Yu!!m z2O?Du*ptA5A3g*w>za5W0&P(qFYT7agz5a+; zfY{ejpoJug#%x^b z!B#eyy%wGgIn(9QAW8ps;%YJsQ%1c)SP0oaCqQ&b62b-|!G9A+4RwGI+|cGWz>G>p zoWJgpmjM5`%1vcLvAUcvB0J+Iz~!uKrM_o*x?n8BfmOQ0;i!o@*?ctG9&hvFMN&QU z0$r4deV%HAW7ofyiOGq#^+x%Dz@yQoc}ie1^{J&$rstDn1f9E#$8xZ~y@Khv6Br%0 z04HQhE`m;DLe~AmqA-(T&~-k)4bR2}E4(Yn55Gp*B0!$ztcuTKeC?N;LJaho*47pyTWX3AK4MnrnJ(y;oM03c*Fi5 z&xqB0rRtY>+6$tH{o8wo?^?gzYsWw|Ub?xl&34~p(zR9f9m9@w7=DTkIS8IPmeaJK zk6)@LSmRkw9v1%@9-&eJ^O>ct56#sZuuxtaUeJ8mA>FLL@_b-`OE{hZ?pT#^+`fCU zavJsapeOYsv!coE+pyk_a0^PY*?w0lfj;j0$K4GuwI;NyONSSJ9*R+Kw8EL4l2806 zIQDxKa>vs8_yR8M*H-qRZrQZ@D~{g*Jx#KQ4`YZaW2A?Wm-?9qba)0#T6Xy#F-F#w zWs2@i@%9}sV;^JHXLe!_J$MWEF83k^O{E7dPNtN#{CuZ~YCa|~yPMStZYo*|lClpT z-=>?EuKyO^+OQpjB`vrD;ZdZZYd|l&XxVA7WN7za=DOXRZ;0R59)3n0W=zUy)0MUH z*y<#SCe;|jw~3Rk!hay(--*1$z$+ERX_t1Gff4}qI^;LRLnU>8HyW}I!Fd7KpaeHl zHr{J#s#(tNK?$tt&{n4d&{po}QT2mhGKJzi4suFXnb?1o%dV?~7o(CL-uQOXX}_x# z_LOJ2KS(j9L-`iwo#QC6h7Pv&SbnBo@w{4|1*=4zjvl3tFL!-)t&{qb<2DcPFO$+! z@i(St(=0N^``HVn!Y3e(!x$qKwr&;M>Goes8B8L@A={qjFYGsS4$fA98n2O4NRih{ zZJV#cV%)>$el@eeeY%GW{&c%kMwsA=4NC0`nkuoV{eRl;Ec!=&CF9A-L58yk zJD=-fdrKdtVjcY2^CE?nSie5$x7GDn4j#9SZ8{iyG+4BRf9>=XjMfgJek1O|=kt2(WN+bJ&EF(naDcda ziLKCHg59B+6X~5yo(cJF3p66Ow8olMg3nuuMRDA5*Vj^?^r=8-?a<#@*wozFB7N$7 z>bZb|@*nXggLle$Wewj=`hCwp=QamRu#pCTu(q)fk2d?r&)FTLCtQ`%>HQ7KCw8TVW}4m3yj*_Q{jOc~&X4m@at9hQLEWXpq`zZo{Bd0CQ=k`2 z$0ziAKa&KX*0=)wGfREeuMc%3sH;t4^{(x9iE^_$UrduG*X!;Xy_wFh%(rPpu$CRT zffMI@+)Tbp=9|l68~7~t2BNIe-2QG_g1g2msh&JygvY)@SUX)aR<2l=Em3-$PyiHIk?y@ie-2rn-i}DVuRt{uu1n-n zpaJbjoIWOoLng{;eCe&jdw){T{`_dYt`hJc@++m$%8^N(f8snz^x?|my=!#sjup5s z@O@{d=0h}xR3;lnsDqK&?O$xz%+dYe)w>I$6_*U@)Px>0filDi$9(fe-_V@OUI#QM zhL^inp~DV>CE+{ffJD6d9ZnRaJDBs(jl2{slW?|B3c7j#NZiUD2-4C#1f5mi++R*< zu)78?bo|inmOGpGQ{(WOiGO*ht(&RlM^ts7Op;|}67&?P*WMMTr%Pk~o~|fnAtXYb zu+WPQ$3wBlims#uAa?D+vQG#u^}7q{sFIlZ4+ycnAtvuZdaQXsQ*xq5NAaq3rdD3r zYkb{|Z3L00FXgXgTlb~_$y0PiiWcUkhwmNU<@igBSJ=>gHDE&hG!4wM!>1$#<#+ zed?XDVUUJQT_1oUb`A^xHuoqjcoR85uzO2)wZ4}V43^ohiHEaSg7U70h&t zf8n>4h23nTHcO~(pqF)4qs#p+9u+ao42$r@`};O9-t%$YHf0 zuF7J*eY>pH6_4Y^w)~=Bh}t$tJgk4Uzv&9`2E_XeA50t6=eskVDFp)(GJLYe{u}CQTW1`sc*dsYP8do>!>%ceA zE;stZN9iPxRAT}Be?nay&B##K$5yiJ#cAx;{e1@6mqjfs?#GIx9On3-zH3tsL_xwG z{^+?Nf!=1KE>m4AkhVH;9PhgZYMXFXY~esLn{Kg#+vb;pr)NmkE)v zEc$O`Q(6eEja_;&hHZiBu!UK4xMKZ|t^0T8?3i3r4mbos_aiClhsF2nV<~jbQiCg-=&BqYWj;)|&Hk!iIx^s2 zLb~=zanojhD^N~EU6(3lB@K#E5HUq|ytqYt;^$ z<&9gR5T^oV8c=%}- zsow>B6bSOdpCJ4;jt}7+C`lqV_`FV80P2sw2%hCcb=de#6+DW4yA%y=SXm6)i~}(s z39bRI@7O7_D`O&v|Xf_YDmqF8!xxA@ySS0N)h|MxWVZ#ptTdd5$g{oRs}dW z3E*ComJ~t3?#YhHvVBLG*t0*Y{YXfSfRAIucqZ{?_!@xLo^H7?sK++JQh|p}(~@Zv zNv$xqUyY!Hd~|z7FMeQHdF0Tg_)=~*SG9-=YYmJCl#TXBE7mK6dxz>Vl4U`i1%pgn zD`t%bkV}q5;=qM4Mcrvl(Fn^T!eJ48y$qbnA4_eED(iygpL|bvpql3C`BgDCIDGf% zHfsQ%^;aFp3ZwXC^K*v1Kmi#3cKbL-B8*F316fzUsmDTmXbEK`11F#W@+)WT{&@P{uDx4O> zOL=tN6qT<+3&-faiqd)(erP;?kGIWA)&rA{ksSDW54yi>;TU+H%UVdZDZ8id5s~l% zU8t%cd&Xa48teH|Jbm-_5BygYm|7NkIR!4~x=f*RIJsaXo!Ps(1|_Yi9gS^p5Pm~_ z0=MK(lVx|s1nLVXf(`B>I>%fUDZ0|tV;Y@tLGkT#RZEp7h|6IVxZB?9--9QG1Uk6< z4{t(Gx!|A$#gF3$+^QurDhSD{0*yWiNHyz=s_Rw^`G_WuWJ}S{axWqKGb4M+P~^*O z2Ls8V;MYz)om}#G*X!NB-nNRHm$lY=^YyX!>s3h8aq2f04BDP6w>9lQvi6MJ=Dlj% zXbvU(^&j?o1s4Ml87fRCG~N87D2Ov{2cpI7bC&!{XhYVn)0^%d&u$cR|A*zecAqN} z=dik9U(>?=wGJm^2ELUNpFL&!pkgKZTP1z|faO!J=f77ipS3BNCVp+sCG9e5O5H#n zCWA9p-!aDq6n#1tfjcO_-P7?*6l1e&{xLmlj)?nsxsztbiyl%RS`#VxIC5?O2Nm)e zHM`XqwSrHp*USyg3umXj#v)^NL{BpKdimz# zGEsr70*L^XpYK>`i9-_9yw{~FtYnYpm%88Sk|?E^rkyF3+^^TDD|z@FTy7cU^h|i@ zbEWY;$h#6gShSau8%GhO6S^SbQfWlGk(vEP5$u27%*m-~t3dk2I&>66eh{r49uHV6 z%hZzLjh7DWGq(92^C;KRwmA9led2zxY4(nzb(XB!e!lUraq~Xowi+Zq1q?S;dQo{$ zr=P;G2uAL9J{!{wlw_G(LK?NoNqA@DCKZB@kDce{&zbCUIy77KZMbI-D^A4Ch^NXe zYmBQ80&^ZNn!aHGk8FMUd&*YX*h{+u)Ik`$n;WCPoj!w78O>ftIdgJNb+mJr;$m)- z7%ZGSfJ5LtOmwq|d_4K*5!lZl4Z#W7WST#)P;jm;<4m1Y#WNNUU0G^9TKA)(V%S|I->qTr0nJHmfl zwSs}ivoG-D3=>jMyl=MIiEAY_x5Mg*YivfA!68@|Fc#ml>i6s-bnCj^%Q%f7PrP0S zfDfS}K(9xsuR(OM^N$mI`E9%B!k3nE!4QH^Z{AYh0v9(2|2kwA;sD*UleLei_H+rC z@wnUmTUeq`EVP1;)jPJk46)K&R6vxahE;62rGA3_Fc5x={l(o}5Gih7cS7C%Rs65O z7=%Tm+OqQDi@jXW_!HlMF(l>C6}LcARL8Zqz|^eM(rlBaNa_ZS67NTCYRYjd^h`Z6 zF|qj?wruVYX$fb|k=RL;NAuTi_bbQ>#emyRQ|t|Hzl_SfQD z`@3Gp+nB%{*fx@vBR#hvp9m1u4n|`MIKBXa04yn`QCDv$9!K zs3w^4L-b|OMbh{(M?U>wdcI|;P4Lx~u0Rh0p+JcXT`?ZKi17?VBTs%7pDL#o9-t$* zy}RCRI^4z0aPYdeur8f6Jz8w6fvU_vSUT${=DLTS-o;eP5uFD zfn@@3km@VH9u`!F39$PN4-4BF3^X3v3&wFdG^Uu4 zJ#>*sa!t(ASajkYGmH)Io1Xuepg)?sNbEV`H?#(=2K(KDzK>bD3G0Ye)aycH1VbvC|n&kAi z7mNKk9;2#rvE8zV#G2nrWdh4pz%9WyZ4R$?JlozB2w4wTO^s1cdfh(uuQ|Y~P9-oq zsJ|qso4_{rn`+c>4#|X4$ps|Coe^V*HjBe|$V+8Z zTJw|h%e8;AUi5uu4gKphEv`np5${+Waqpgo^m#G}V4BPeQ>tNOk815sEq#}GlNPOF zx;=Z#{@nO`tkzrNV>K1$&9MxxzjR7rD7#pi59oPQI{SCR>A$=UB>Hk=l=Uys@C4sh z$Km=1k76ysCgrR$!(}G>eCA^->xEh!%6#p)@t8a69yGGb?JVsSxjmn$zw&GEiu@$E z5^qes7&7vsBHNv&I|M5+1~Pb$_80b%Jc;FZ51Ex#Bg#C5pQ}-|y51aUzFlMMiqJaF z(Uwt9Xi2EH%YGeLsbnX&y`=(WZL=C)LfV600M4b=|9?67|J<>`b1ZErLI2pVV`|kq z(S7WIk^rT_@FlhFs)^MM8h~eiRii+BpDMuNcoWsl{g|;-*lC#Q)-F1aZo5b4;*{-0 zkWKJ&CNmIWa0BeuH*?foQE(de!W>=^+#ScIS-6n5Ufv1nRsK+7@$F)(6Ato!GonQI z>7R5Ywe&$|xc}Fr4%`LMvxk??4ECH+q!F2m)F=%znb>Sx_CuZ*t`La}7^0b#C%&`; zUDzmjiG#abzB;ufr};_!ENw)s%0&=?4(x{qhjf!ABQ_B1g*$?@N94|71E8a-4(qx|d;}fUD2|+3aMv z6a%z=bF1@JcUgVzZt$C>U2sD1J}=y!f&MX-og5SoViTA_JSnfkhR-{_WfVy(7%fSD zT~yKv8MJfcff?_N6wK#r`7o4o9E73`8^ZQfQobNxEgJJ3-Ln3clQICCE!D32lil$l z^iQlu2un%rvp1VRv@L(EwudE<%|hiJXW+KrT}B{ns=yU$>3GWObp+WSP}5|6RPNgk zuKwHx%9$1SqTCPodZ(g#MR7|A9G;qq{oY z((Az7m!h8`PkX;Y8qk`Y#@T@$E;`TcVAQFu$gr?&#$1f9JnWxuy8tY!Zg+HFaC7B& z)bEpr;Y1V(PkkzMR^2u?+?RKgx78Gtu}&W-^cVlky&e5+I8X@Ec=cA68V9s)-GJ%C z%QZp#uw=)Lz@Q+voLOS|t(ftswQg4nAGag1zvRn=-3ly0NtDkRO}Ym z-_|#hiu{`)%C}=x?p+2ccZg{{DCO?D{*h1pe{uCD-cbMX`?n=jM5Q8ODn+F%A^VIz zStC+p-x9K9--nqbAzPyChGfe!vad7tCCk`%CWe`;V+=E9F?0K#^SkeJe}DhMoH_6F ze7#=R^SU0FL`rgh-s2sc$^XuP3odq`%{cy?6hcEDNxi)tQipi)ix#4bKz1GXn6H3;jph^p^dD zKz@~rQNlU*vG?Q=b(-#ku^d^G*CRn6*4~05QDdpNQ`t`0DiDmvG&)OjcnU2VJ{^W4A2AV?=O7k6O^2e6}asE zil&BncdQ49YH%^*u3JI|``Hw7_P{p=uB0cC!+i0f?e%sem=fMk$w8zRjkEuf(mv;8 z7$}PvUV4B>$`XyLJyML?l>Uy@Oo3(;k2QW|l8id3Usy)B65Q4?LwPtkB{pR%u@__C zg7)vWG8lJ?r5B3va1_F81CoXN~5x)()BT3Ij7=KH;|& zoVq@H%=hJHc1nPpyx7fs)YsNwoo?2NC;~wK`vO9#S1*?xN%_n-b%b4bV^x#|Yj1x= zS?<-+ZQNw*eFV*}ZUKPnRnKU~V6m5zPN1k9Vvr95LA)nSR0PDD*Ww`R^;xCTg<|3( z!pNjA=+zmWypp+GvPqVp@HA=Z%&f$7g)i@pNfles{cpRi8@~dOtoB00^#8q>Y1?W? zAIW(wG8W-XVWT^c^bK}PQR{EGF!QkqZj?&EoYJ1NN+ckl>tile=M4Y0F=SpfcIVu9r9LL=9fr z1l|64w7yLb+Obmp6+EP_tUF-K{2dt44b>2FT4J+K7MU--;;3ENJwgy#8`lh8FYsDM zYyxQGI|axC{RTezvDYQS3B2h@wVK_I@jJ~EN<<+7Y1<9RKw4*?T{tP%+tULLFvP1a z;H*^f&{TS*d{dxHc5$2Mi1z^_tc46Uad0_e6tn%ABg2jXV#^}7@!-&kyOMLgjg=^JLYW*qX>YB*A?e9BRce~kR|9dK0m%@iobQL(M zWXE}(hsjc=864(Nc*YVEDQ=b=ayEM|oQZflJ3FBzoNW`ZSW_Audux z(gEypfh@q(!9eDLgDD)q+;nG6?niATj$3ue?>@Tt75zk5-j7lE^x^9x4nv#SF;~W6 zSv`k@%TcliFNA6~-Tbg( zxf(uPx9e{AT*^v&`PuK3QA4I1xRox)n%eOlTM^#`k1q& zbu4_jTU?ZB1$dj@DXP)2|L^95#O!)?|meWG{H0vZDp` zJ{Fj`3WyAdzKmx*hZsJwp_OmBDUGe;0h@!fQ|>$NoT!|(UqHIVqmTK~cqHh}I0g(p zto1oSefZ>9Xw5Qmoh(JD1f_PFr*-}IhU4sxd+Dmw?Xyhu?g?ZMqcz~E+I|6*e15IJp8<|D7d9-WCUAc33)kF z`KwO%aeggG-Kt)RTS3r75b>&_v`1HUaF#PCnyRW;R7dvDhL-6M73=u{Tcq>b6y%KzD3%u8MWVHbaJbt@De2Liqx;fUvr{|Ubv zw}L+Xs;9h(FrKnp$6{Cf6e8KAy(t!4QlouP&SX1{IK(;hSILohw4eeIob@-O6F4jaK{=LS9= z!hme*%)HL&!$i?6qq}M+57Pht06hVM6rhjS7hu!?&}Q^QP1@geE@Aa^gw{?aSeK#d zSoiT?)Bo6W$bR3|!`};0)PkQOG>9@8!8=t#D9rpTU7L=z{9R33fDjpa`Xj9Gk-4e> z5Ttu{m3cmsOAB`xx#%%+cc3R`nUZaG!kU_HB?TQyJE6V2yh>d^JBAmfEk*13{>=yK`o;>gyk@mZw&QKOu%g$=4c^=&Lhc00!4`WBA`|kX6z?&F0JR z|6z?X?RMJJAbZ~y1Q58X1sp;jj@&~m?3_FHUukU!r+{7tqaDfl$A%&Mk3@Q0=&eZy z3_?rc3A{c8M(Opi0!lP8qH&+&QmSgTqp5Cka=Bn8jAl`f#;P=4`DlPFbMIs?gPgpR z!BU>7TYrvkH&(z8{{+mA3Rb%N*A3;?IM;2Gm(CGKEHc+- zXNHK63SF|@4s+x}7T%wrb>L~hxe|Sg&Q}D z%lqgm{pZ$Zo%OW%bFfX#cnQKUl(nO0KLX-UO<*lhAgmShQVs*AwJJAdB4ee^x8bx9 zbb%M!(f{}@KYFp<$!n~9AX@pK`+KDPrLgF3k(qf<-b?<81RHODubq~^0^>nTUTMrB zE7}m~@R9$3v^x0){MrdZ8xd%v9W5mnYZFr{uF}@6$PKqK@eB-Dq>)! zpuY_tOhcr#E+-pTmAMVA4S*}pVLNK1uYA?st z1V&pM%cDESCNrbLhfVZYkjoRtba<1XD!9aa=I`|3N)%Zqc&CM+j9h|JF9GX6<~0Sn z^@jkM-8qP3zx;_oLey^i&Q517j_GL*5+s89pde!oCa zI#l<=7dHJY*sMDI!)Li-^u0mR5zh0x>7%N4pbO?R`0VSImnB`7wuvb_*SfZ{GZ+%Dcl<+wB`uUKm{7#X-i8gqW(>!RF)B#)2Tm%i5yYbY25YFgr zfgLgghU(Jg6Y?}&^X*&Dg()4po^+m8GK9}aY2~ej19>IvMck9P!;8%!S7Y4v!7u9T zxXe}YPx9_=AK-H(4DVa$T4rVVT*rRFb!Sw za;gV;y!mvhInbqLpCOL5c45A0Ny-GESv1)HFFWS)1aH_1ZMij^hCC1p-zB6NiUL!$ zjl^jyntb;lMFU-Dw92FBYkmNq1U!1q^-*x&3V>->GCDtS7i`SwGPHMtIHdXPD(dd} zkWG9SM(R3WS{`k5E`(Nv&7Vw|HNOcK&axaidNFWdREbr(TBj=Zd)u=o>wB7pj$^r< zJ&rzBQ>saSI%Te|p0Zk78C>nhSi93Gmp(72n)0s4He`zw0VDSAJVEXqE^t8^*BZ!7 zbvr~Gbpp#S+L%Q6*N*ZO(YP_sl_4JLYSyp; z;@Q9F!m`DDQo93Q)XKt#6PtrYU|P(yVTfz|qUZxxtl06r^?_r!^{^y!UvK5U2I-Jt zmM0gIjI?t`O{Z3PAA3QM7vHsiKKz|dZ%pLe-k$K)BGkR|`1Fl4>{oqJ-fofux%S6E zG+D|a?>N@dee-2Qy$ACrurraN0yw7&vPf^Q}-m^UYav%EF5pIZeuN0FC!+iHe z4RQS$E=|`re!n$;_$bZdq^`k%S#!7^+_|kts0ng*vZELpz$z!zx^T`9ZYb2e$7X5xs+Wk>-~9w>jM-L-B}fG z`)=dCoOz^^+@d~#@~e%UGA@FP^Y^0?7-~ckWt9-D*oa>#>Nm6^@ z^v}=>P#7_h_fuenZFG!{Emv7s^L?;@ToRtLRcx;7e<^fZvq)e%9<9Rr$igMN&Zw{~ zeB&_g^Rs>BS8{_S+(&E4Wz+W&!*`@9Ei>IxR-$ReaaC9RMusb^>Lw(V5QuiCgdO_;#IumyE;BJNxZ=28l30buuzoaDaVPhe|ay5-$4L$NLRA?g?yrKr%!6d&bx~|H>rg*=!iKtL!X2JUs0}g+6nARfuKlH%Ij@;UH;; zJ{h|m|JKEL;g3oq^rIX5^_C+?PxfKlsqJ0x+@Dokvl97t7(f3zZ*wz-)ce_ZQxlQQ zKHM+ZKVL)R5v3g;n^l4nGXc32cGI0kH5Hk$j_ozO^~Y$Zcm`EExrH<7#MWBVaJE4> z$%HB(w8(%urdWhC@S&>EbA8S0GOl`pK26t)G$J7^Z%wNG!ZT0UO6ueKp)?ZkMi8nv z{K}QwIQD&O)*4o%v=faUAxyJ$qe1WWx=;$C*r#hvj%8x67AW6nLo{Ks7J`I}^5GbD zRzt8}4-YVU$$X@tQz<#L^e6=S^BNk*zJ-{SN{637wvOLSibi5~2}81}^xIi&{g zX)2Zh)ufx_sUvefdd=gU-nsRUj}CmPz&A$78}8-dO%Hlv_HRjP7?orkCq))BzR7cB zHV~DP-E~lq%_{8SXf)Xj7~Il^$A@A_^D|HjxS|)FaUhMhWqg6W-eK?CimX0-GMhwT z8gMCrfH`uC`p4z&K?w4&u^L=r291zv8?J6)~TS+!z&#ZucHEe05O36K*r5!`-vI6?dApU|s z@HF(c|HKDY`4A(>!va}6Gr}V9Wx3B?T6>PUm(!nzrCb-EJyV5#`1rzhH#*-=@ymh@ zJ~n|v`CLE4nx*u|Hy-8bppgXp7LE?%OE84$$U*V`PkOc)E3R;c7iqa@rs07qUZoyW z9V>#=)6LU-{9orqS++BwG1}X@r*8;tjOGoe<+(mlLScSencf@6I3RdfwlCPWH`{&ZW!dgBF55I`!il^= zC+!S_xv<;9fv*&qYn8Ow9ie)^Ix}Plln4VA!u-M*LXd#l&yK*nVKr0(VLrrT_@Y0e zkB_&TvU1WwbE8&?tJPO@3s1M#K(6owGHI{TkDjSs!@<~(LLjH#LwW!5nFzHPSv>N0 zl=8dLlz;dl>+S{UtH!F-t9IRWGHqaBrnAo9$`%Ei-C@zh_r11R)SH#_lYz5YcN08k zk< ziX;piNreGUX^hy;@k8&!_?R!~a5@-7+dwh7m>%&6EY%81fzl2@3>PSx`l;FL*yb$N z8G$m!C6FmAEIrqakpWf_|YHT%)wI$E1DkleI&<5b_FI}DbC$M!$_tA^AM z%bt7Hu=Oa{>B|m`))l-$xeq|nw~;_l3_@OKwJstJ zr;|H7jyw#Mcw4Sg2E*OQ+1uD47?j^E?Ns4)UF(pGCjqiF-^oYg8)>6Y)QCh6PQEms z5rw$zfp3dHy1<^AXWO_g?lJxW9h&d`8^dL{ppB6X%ADVfA58u@guTqY;!$gjgS89P z6`$Lp?iokZ*O)$gHx2qin(e`NDB=o-tw-_{D*P4l%Flamw&r-2d1~Rn7|`D1;OwyP zj_ZkirP@?qUeUM8dhT zk{gI803*m}T8;jOv*G!JVePb2h~NB2%gn=#2|K1DBdIkzTi|=^-s`VH$v7wZFXeb~ z5`!3}_`98Y1(Q~^^={bx+D3I0w$%U#&rW?vsy-;6DuiYr4=lC|C0D_&r>-QO-|q|_ z?Di2U2bkMInih*5(kd$6wp!^N~7C@8Fs0Z08!e+DsKIip%R@mJ` zaTiH8pHg&n=1&I+1P@0z9I@Jy{z$|1BxKQG-iI?pHV=`Yy;OKM_~fE!tXLYQ@$#)I zZnhIzugLF>x#hC<$7LjZJ2(5BC%sSF&F+}4fe`77H{AvFslb6j&B>r6$_A5=QM=K6 z#9C6Qz;P6#9NWI}lQcslX6iQ#+=$L`A~-rR#cfO&G55UuebO|LD!Io&XcSRSO71H? zS2NEDTa)H$r$s*p+}+r?Sf#msUfmA4wyki=Hr_FN-OPH1W8I3Cq+ZQbS62)~GI_!! zrTR$it_S7h#a;THxdQ*}qBTS)5CdhfoOZhYREQLE$#!G$TCNrK4`uFn6>pI6*sD%t zNbGpMfHTN}w=Ik&^c4;}R2&Zldt!`B(6=E9O&*VQFjt$P&nMcIp$bhkkVjXol@|I_ zn7qju>nV|xwE~P+Vx9NA(Z+f+BFOd~lKjl{@;=Q-jb6Nc`>4^3l{M}s7Qj1u zgL|7%;$?Tb$_+z?E$duBr~6+Cgz~er>J|s?N&YoPK(+IR>nG@bEXeYcc`R|D$ofC0 zdBg8vX}tmGFPc^WNUbGI#Z)!L*><6AGU{{AKwog@FV_GY)<}__r`N zsw8S(a)}tB&~#0mS$52ReCHsU$YLi3Gb1;;>|O^_`OH|>;llSaZAZ*j5S`30q8)VK z4jr_+TkXSSMCX2=yjWCk>MRPN*Nt!AwI_&%?bDWAY=_7*o0s0j{Y|Ozjmk;5X(ty} zqbg?iI7xpZlXTcT|3z)k1s=S3O^G|7a_zC;_O}(e;nYXQJW%u=Qj8=Fuj;uNb zPEY3VVmPaaQ>TsSd&N*Dk|qEQ-!fw8wnEwu$&491geu7-HSDA;7(jiU#wj>*?@s1L zS@jG1#mqV=^8t(aPi+xa$A`sFB>e~)(XA*WbN&}@Qb9qBsZX`Tx@>3WL%i1>!b58S zn$&b*qFd0eK0){utr19B#^<~t-4Z|})yTbA@p#hE+Es*XW*nG;hDYWzb1Q<_)aZ+- z%9a5&y-leDjE7BJ z{kqcUvGr;YDl^&lrpT8P6b>V7a&A@67u5XOTJ-!D51EDwzJlc-eRrRKoIpf8IFH82 zMVz;T0Zv*#hQVPJ$_3r#5J+Civ-y04^={i>#ah3H%es!zQFbmJN z12oWlGlFcFx7JL~9#fC;gFB##8+}J_jXqoVh1D;shwUQodG0_U8fHrG>=tmXe}6`( zH)Q4S#IsN2PCn0-efZ8Zp=mDjOG{RghHu3?cONvq!uT+^8-R^sD5WqYM2*oCFYQXz zQDZ+hZZ@{S7T?Oubr{>DRa0{Rl7eMkheMcw^)1kVxHeUD)U<`%m6;wy&bG7$Wb7wC zi{F+bE$kw~=4~v-N;6cnyW(974l8FQ15hyAm2Z&(e8_@3%W?Cz+N9m;LtEYq8e+eP zTs}1lUA7^9@UyL|UF$jLVf&Z*LeGfWZ;#bVn({S${;+X)?WI11DRD~<{CE9f$=dlx zk2ot;CIaI7ilalpSE|EhYf!}fU#I%l3oPn=CN=-SJrdMzaW-EG#wL;54_x13mlN=9 zpJ69yW=EdT4hth?x27-AlXZ>{RIV8rIA&V7*u8y&41rXiG*rH}uqvxLj9Frd_;lFi zs3)oP;f8Z?g)&1*UE%T)B009B@AcWcoN3mR#XR@{Kcj>t(Yku^InuYbFVL#p$=!Q>Vyfq~-zs`Zf98zFXLD2+1zjHksynnzJAoJFE<5myzb7YMJ>|@4TcSMU#{~~K z4}AQ-_hXZgztXEwge0lPA)ZZRr^|iL@#j|aQpJWXWLCeOGzq*PWarql9Jvc7%r&Uv^5cRL;>-wdWNowJh|K-Q>B@GFvdSV2%E_#*0U(fT_ ze{-sIVf?x>f3*!g5VdA^yd+0#qVX=)5!xG+WypEmxZYrLE7iBlQyhiUfmYzX7?{XO zMs1L4^`AjSrcu(yWnNSrlmvKv3L8<)eiVH+pz>M`&+SS0xd^Hg%I4j4{6s~*D6r=F zSb$;L$XY`DPh#0`>7?NbtVj1tQJ`Z}jkak3nZ>RRY{w;eD~!Z2N=}1GAlgHykqG!sD3a6xsJqs6w8mRySzG}@zpzI+JAKa zRsxIM&tv%Ez600Qb>~HaKjDx<9=9!UQK?#!;2K3PeNf2I1!oZUXgM|24W_=GTgj)7 zwI*;$<~gZj@`X==$jwbFW((Anf}XZZZLrDycST=t5)==u>+2myuf0xHW5fEbvTm(T z9nR#qjh)IcA4(A;U41;>Pvn0l(Qh?js7Lv1N=DmS7Cc?1d6c{E@K4X>6JvqM zB9ufD$#-ab#&+#6St+FIAnWn%^tIIDUf}TSGmlWZ`!77Cwv$kNE^#0C!_1{sRH20h zUJ-67{Pp8I`HW5rPI^?Vk<27nZ)OLLa#e&w82O&$klqfY@zzq)nw zF5S7gs^&~xw|+L%clQL7uQk~;l1HT90t8b3gY!C(>9tRLTvc@K{ht{9cfzH-XWg|q5~U}w?@j>g3j=8qrz-vA0uFEUyaEYi|pq&-0=Abipme{ zwy8C*9`f&OP|fMohf+6VAH;H0e|mP~B`RAjF9~yD?>Oa?ojC{5xfd(L_9)j)rqQ1Xk304CKxO7;C4F7GL z1rPC7zq_m4&kT|GeuE0Oc{1q-vs7ZJBlAp!31?lBoZiXBt<5W?Ir&?j|JPwU`}*|1 ziK1x(hHWC!^1$U=L)t!sc#oRs3Z;7A1XA^)NMPJ zzuyzo8C0!tzhAhfT2o*6iuX#6kn2eoo^m)(%~=gI(rKwnHk2tpbD&-fB}qUtzFl)# z+R^z1L`b)%xeV6CxHy~fP-29l9-`*QxagA3T6|N&~OwUhPgR)Ga zxitq403l_rC+vsc?|e;_yL5)Eie5P}(DNUkKY^fo{|Vu>kLS?2C9R5f3PaubUPow_ z0s9R}ev!A=I}118KP6;0^cdyOtIjf zBZ?#vnbQ-!nMr!=XS3Bx=9ZzdfY7sEMP8LT_6FRsmHx8P+0596F3Ly3t=oy`VL(> z3?ZJwNA0UG7V&>s;Tj{E>H&W^Gy@95@kTU4mb9B0uM?k~E#u?+@BDLRBI&yDb6m%-x4*D=R0h^BvRsKA zW`~p46{9Ofa&Xb2#3oB2ebAcPW=)|YYf|@-A=DnmfN?e8<}# zxrkkVsSu~%tIYRYi@JE{;QoBa_bhihx2Shc!- zE?goJqL*(HU!#Am*KBR6D0sDJ7SD*CC#Dof)~nngb%h%SSsxlR!kH2oV&|Gqa&K=h zKb*K`mo>1kW!he96INt(YJ1BaLObW}t0c2+-f!dQW-{D`6!n!i^kjP`jr6m~%uwHd zJPiADPN#wiKP+m+{BPCe@b9qT&V0d8Dc#8FUg3%GUK%y#>J>Zyib&P;lS3~!f7#pJpC-u z>(bYAxpJ#fbru{xOQIPt^=rkXb13nKAwl(szqo z3xM7i-0W)9=>VzE?q(6Uq=16x7p8)vokrW10VO$g5j`oFV#}fx{FT+%&T+q4US5Uy zX}(u$qrLnMdj~!g-n{H{%l!jm={>PDe?aC{*el0mReASfEbt?d@?`otPHtqM%N8RT zVM``gnvz?#L3m2+1hN`Ou~!jQpBc}OBRv7 zZKryY)I}qD0HMD5eS;5!kdG>nZ`uSl>lT)G19r7!aJi#GcWt)eN^Qx{5(Bimm*Rpd z>)h84Lo!X6a^fy04ZPgfGm=UQUy3->uf^$bmbe&1FYYUYWIBEno2OwwLe~?fVr_nz zNTB&6d%>Re^$DDu$6MVZ(l}*?uv8}HSQ@%27_kV>(f`c4WwdD&-Rek)J&xCn_Izex zQ>G3wS=o!^7;`0xYho6;d^@S|Ck=g7_YR_248)$D^{MPc(9dgZz2)c$3(ph`9RFnu zOh4N$y*-)m(l_KR$)WNiRhhtAZ`ffiCBR#$H^liS;R=Riuio!yqC!oRGUucc(~FM3 z`44M7v8zqsaD494(T_ZM50NEFyQF^y3VviqS<8>|{)syb-DDALKz^V0+S#RGjk@Tz zi9t=}gL5!ClY~C%Q9}kk^P{O~IH4zjsNaP|g~!2+Q0T^L^-d1p>~pEzNpcHEQ=XUM zmx&dS>?ev!TEp@5==`5CiQh;D-;(JP=f#fg+%JR6CUO2@$`V9H{U_%7Rc14%^g6db zjjWRaBTr}=nMM_f(bG8c1=4#_m_G(t4Lh1BMly3wR2ndI0^m$gn1M1-%u*u|!H8MX zw(6xbfQ@FYhc2jH+k3{|b=N6b&Q*2fB?hMN5QxsaI`;Fh944IgM^vN{Xt4X6s4D-U z&$0)|%|1fKpQaqwx$ zV_%u&y6I>w{E6FIX>ii#?JWb}jj7Xdc!Sy!rd!q=zicGM_}0xdxT|!$E}ui&BJ!G* zUct><5&YfvzAB5UMs)QuqfF(g8EctEvYKKB;MO-BW)PJ$D(|Q`tjgl@)h0*eXt5)+pboQB zh;wPed7vl)?xut`9qv0R=Rh@&&(Di0Ic#rT)o@!2``)>RV0C_r$I`x5oHXV1vEYCF zm|-X@Z|=g(6~H^f=HxEVgRunRjQyp=l<_mOp}Z--1^Vni*75gsEd&h;bu#{knY-3z#r7efaoGX@3_dQb{{w1a52a8#5c#mfkB26#X}A74Vi4s-+X6 z)L6BaGJ5@2e3>@G-tyk`?WvEIT#GK{ys&AW`85UeZdH!S!hQPJmQ9Gj^PE z+~#K3_GBZ`KZ=MCH-Ky48FxM*!z23-e(Xycp>kJccxwFWG>-l(fV2r_p5f`P2&Lsz zCsC-rsaT=)k_NxsYT4vYv7EzRXQy9cFPmMSD$FHnZ~H0X5)a|_A5>;cHu>M3n4?cH z$*WU~@Aq!_PCb7RT`r^KtExy9M3E(a`rS^WafvVwWc2VA)zdc+(K}Pg&I_u#`nE4s z=vi++yOYcY7(JmzH!JzxxZ7X&er6sN?r6donIyjoftFtY{QUlp=Nu}Mn>dBwH3a%6?sH(sk>22E;+0Np;Im1WPUP?kdh!XL!XX4%NJ_gBmAw$XqJzh78(AQF z-}<8ebbwshwCm2SEYcsdRi7^jYZgqnr;I1^f8rZDiebu0T$^?RFkJ7H9F?xIhI(er znfx*!G}QebC}ea>;ik}RoXpWfMb;w&tdH|yak`Y^2qhW6T>1&c7}x@tJ(mjsmv=%= zYt$W|W3|5_gvUvQZN7c!JZlu^$M~FN27R8dVMNo0Zp?AL3hytE(?+-m!bS6-r~jH! z6}-Wym8`u-w`icTu$Br86s@cd8{;w3NEC z&~$Mc%JH=%BppP>1i0d}nDhZ??!Orvxns3DQ>6TYS7q33S;T=NM>d*i(ue8IGLfRF zG2ciFgYRGi5+w@5+u%CTwpTsMhhPSoeJ8iWaID#Wn?u&-YtYE6|I*Unma6<_$Ju{VH$ed32 zR62QAzo(zjz%hC`fh*HbU(96xagNW?K;PimvG-=9R2i?Zsb4?k)wRyoDQJk_>nPf< zDpxe1HO=E#xG4LJw%a$#4?)=4K)|4!Vvwc3H2&H}w41S*}*#*x`&w(LE=#Eu@-5Oi2{7 zt*ht*_NCvh{CUmFPQk%@pEU_kYP!JYyFX(X>F);x7h+hacm==BtQfZG9F^u|v*BNd zV6nn1E<0IT*4IOD&EhC<6E4b~4y3=bn!|OlTe}R&k=19Wo;3aJzTI<6ZdplRmh2 zHG9Hp`3|<95&UyGb%EyFZLGoEm%lhSwtXzmE)Jv*oU@MdZ@xubJ+p2RyX-d5^O%MN z_I@_F*9U8BxqiaXtV!``XM@3Ds#~n*@g$n^tJTTNY96c>DKhP=P51kL)%_9Bd~usd z1b6SEd@oHzYtVnS6LfCcf9M`wH>my69z2waf4sX+Z~w9-RT>3?{%%_-ZQWnuJ0CvJ z4Z%oL1Idu783#=WuY9s!f{Eo<~Cg=y<_b(mH(Z*7y3ey2%(Y($mLYJ<; z9g36_FVLi!feHBCT0FT+10|wr)3@~&E6zw1W>YdzloIVkg&=X7XPXcnz%t8z}X;A@u}`l*farQ2 z+MiW(dSq`TuQtw}I|u_i@I}P8!2rH@$6;IVRF3_gYJ48^s2?XZk#0W(5KK+I+9mqTSwCR&uQZNvyH38De7lLkBD6ox2YORlp`bf{hsPd_;%s5A zZOCC7)dH@ErS=W!sHGqsFU7BKUj{S12l=N61e0a*Yf5Ng;i3lkMFa7l%1r$pEVsLJpZWg{mqj*ckEpWfjKo$ zsn4)r^yMa!m-yDobbETH)jp&5%C^JhGGW0>24hY&FK|OSYA8NRObBQHdn=3@C=6); z64uqDID|t+Hg1ZvQhvHJ&oFy!X)W7VrWF?{iC{;;>5paRDmV&jfw21te*8ruk~YL4 zu}+L+-;L0uXjuChO0gfISx{GLE;ss#a{%$994|bKeH59X*%5k$d!#ewVTs&U_1x>9 z+5HAFTm`Ouo=?x*b<`g`CyVlnQ@8%GbB~lty0BM?xshI^fnkM$5S*ScGgR1VRk<$~L& z_g&C*<_?<5?e-ESL-G`y3(xW5HmR3p{araj$xK0=pP1*F1lilW)$I`esk9thT~oN* zx^|QqL&P3e@opV_cp)nQkihMfHQ(Uta|vm^^C90*&idd?L+enjOM8CS89t6HXIlqH z#aa-SLDHWeII$80Ka)|n^N2f4EE#lMfM)iUh7TVKFji6h%!hBEF!&iGFDI0aCu$zg z;mE#;zy`YM9k*hr>U&BpIU9zWrmtZ{lCq8K2$zt%@*3ini5Kyin;S!FHMieuZ^kxU zhaR*bpOOts@S?nS?$p*M(p`Xc*aGcn!ez(Y&pp?ySb052>eD~p+_~O008b`;Jla3I z7_nrmZ6`NxuO6e9o2td5clT`3;=%p^o?rcb>$x|#-OgpbxK*70X7{2GFe972z{q+> zO=Ns~a4*`+MD|q`SK9RqYm!2U60srrB-x04ieMC+XI&LY46g(}QTROC)%${Ez1cPG>vz*hp97PzadS6ET2n4HZ0w|PBxqUT`5halw! zqg<4aD!VG#C@wk|SSr`vc#fb;(-}mT@n4( zPnIoz{Fg=(W6bcvW$`Y80;6>gcVbsALrYpG&PKO zcP~0In0y>oz=gs(XeZPPS>*qH4y^DWO{3P<1Eh6Z{U40P>GK>v3`OqT$A*_l0}VH- z1r(QiMy_29(Oj%3Eivb=9tD-7%Ext5R8}{Jo?wOxw!6?3D;9It#kxf~5#+VPXOR|mVH}mKp zrKyK{9}RqSx6I$~=ziR_?Eu)lO@Zn@+qi?s<?zn%U>JUi^I5UT1PImw&1QYq`PZZV+uBBK z7_j5xmgpkO8%Uw^zgLF0@!@y9ZfAHTh%OTBh^4;6C0rgtQ@Yw790T4WmA{@YS+qzx zq)KJ6MiA3aaksXUz1a4?axX5ItAQNID2(01J=)oqJR(kROtZkv=b1ZR*8fS)^(t0^{B;Hj1s@Q%XB_k-;EZz5D>iuhq4Xs@l&X3n7JZ;) zZlUON0NOz@QvsrJdQ-^0M?AgptsPYxIrAVH)j**fC((+&9pUKlky$HYwDPs5nUOWn zz^VBM|Q79+^TRAF4^ zr`V`FXzR4X8<0jaZ!SYq4_?#<0CtJU2XZAWMO?qr>GkCEO2Nz}zn?rn+0=EoU?mEr z&>!Rj9Cp_;3NzSRr(dTD+}zPm<|>t|XO-!;;u>vvez1FHFy>T_T%h8(U~~v7f_C2} zz{*tlCDngXbncp{%VJyEU!tcE&Lu`_h{P3iM(tu63(J``It)RiryifT8&MNoNleOF zX;XeRo8bE!bvw$zlleLjauE0$Ciy;o0Lzdro8ua-3l~Be4eky_r4hx%7`vD2JkSHZ zRe&fQG%fXM^qzfH( z=wWJ6DxAf9`j+7rZb{rbe{MnGD^5r7li%I7D?ibgeCI`|&qgH2E{6ZDCg+o$p423l z+ar`4dupH{x|-P>^U=p>lk$qABYC4=uuQcfv%rcD8-sU*96;LDxRQr1YG%1DYAuPg1G;tzcch%)H;ZO&k>itRsHW8 zDhK3c=-*CzCMzxN4C&B2qiegG8&uTF6O~TBy~+SM+Q!s|c2|6%3jKCXxYh@?o(=JN z14-~XE3n?9H*8VUw&@f0|8Vu5QBD2fwNt30FPcK+kcOsC-|l%~WJL()l0- ztf5>zQ}+W=ny))#1Y1g&UO!$f;UfyOhu-lV!kyWie<-f2c(|=_-HNVz41HYwXLuXh z^yT+XgOMf%sw{o>v^i%H6>h(e4OHo9+X*_j2x15sy~xp6`V|1dyQOIXrc&uZTfH5L z>-=fnC@BhIQXwYThB!qcVCG;)#GHMm18*Fp4p8%dG*U5B}#qMQ4Hp2_NB z-7>?9Dvrs#!&T7)7QVDwqw`VrN0EV^}jxt z5no$u*tZck>C~RP7npACaOFZna%!lQ`JlSUu$up`-Zw$St1nY_L8^}QdIf#jTDG?b z&szKQmWOw8F{zQaw@~d&7oj^`b~J?dr1TLr;(TW`W5L<6@ji$Xa{f>6cL&o>_X;6$MVY(M%fGq$mRVam3k7s;eg9_}jEH#_dQJak- zPo$|PL}g$DmvW!@3)P(mQ$Ln>@ekS#`Mo2|{n_Qt^6yaHL>Tb$TQ7XM zZdcp?O8}+T6L@#Jg!oTDpx>rNW~^^F{6b5t6?FDPQrE!k+P zCU6WG9Ap!5OI)`?HKi)h78X`3sVJ8C`B&r}vwd}<&uwzQ=kJSsLQ81T8HwY56aooS zIjZBzY1JM{7#~Yha2qhW9w`EV_LfslsNKKb!bg;R!OY%)d|+=3Gqo#n54G?4`!$L; z75QncQ}p*~c9;Bic=W%9fPYqPNOa$JieY-+2>1g#L*5c<<*o|lW@M{YG~lY{I} zY;YYBhjdxV_$_{n(_1d%ioQ^35XJUghOYJQ#O7g5hJhqH;&kJnPT{V$C$n7*KzZGaWl(EkzcbirLDuB(E?E3ssMHvD+f%%>=@j&7 zKVazlD0oKy^dwZvl5SF(#Nll_bH48nNhh9)LlQ?L-f>~uBW~Mybmy)0*}QBJ=ydu zN|S8NVOzoiM>F2Xp*k$OaA|haEfllopLN8$wndQ_An8z(kGW{_h?B=iWQzinhbcRROO=bZ&%8gG_%)hHf@uCz~20=XE^gQYNd zHC4U-I~YjHjRKNR-(t33Mg5AsAgiRCE8yHO$0?%gzhKT!24`$*(!@U_z|@cISl z*5nLO2mt1R8Gu$1e2M2d;?{DKdxhn~9}FMu{qUec+vU@F`lu=PwS~x_a{Ao_u_iz3 z&W-<~!^E65HD+8&SNcxim1uPeirE@r$R8LHof_<9xpM?bv8VJ<=Y7Es!fU2ex{r43 z$`J&a{BLW!Y%^^AlJa`Y5*|8S@(EE9{R(W75B6anu0`Z)eHs(sb*k9Td7E`77DeJj zAqsX-GWdv(?`lo$&>UI?iWxY*SZ7R8E z^&7Ob=A3y0TRn254BrYw|EN*NC0Fqf#Jp&#au?K&Ldgpsq>F7L^7U{%5mCV)Qv;GQ z)#&-7O#Up&F!iy>c7ED3Sgj*5ozi@F{6^i>&==Ee-waKQ@M1JBo{Bk`T}B^yNp`Nn zTvAa?iGo*TTG+oNr=N+oy(&({v9eT7yZaFmNn!k+RtaBQGtJdS67Zkg$|3Q^+|N zpi=4U7_O6|<8+kHYkV)O{)`ag|7_alEOPBX#Z`WHJN!4<*yO5~yo*Tpe`coyU>LC^ znST2;Q{CG6eWY>LnGj4yZEU11O{;i&8IlcL%fq&>a76m*q#rdpRkcaOD*T=Lv5B)~ zHGytoTJ54S;fgi9-hHI_)ELdEC;PO`wny@GgdVRx7RG7zw8oLq1^7N@ zNhq&BR1Erqbt`Z1@OF-$oqv?753g&t-x&X;Han2iJ<9MQe97PLkFqu&Z4!L#z-1+0 z=wCl$jO;v7yfKQ7tueMllI~t%O#*N`r(I zvv84V;T^dt6!9A&U<~a9phi)r?Euym+OOxPR=O}z54`FbFsKG~lVd4R`tZFb+sU*W zRLV26@kS?j@8|i4S=Uo#Q}%^S0s1^RPUXJw-0j#n_FWgF<2>MhwLZd}k4}0Z31g<- zR@!OB8UdywIb3a4pL^j)c0&Iz3&6IsSV5JyE3%1-Op~F%KQS-mPW2SaWBOg^IlW_w z(-#f=)K|s^{w7t3q58T@7ftj%UiFB~3qzfsVo}}Tk_Yr1LRzv6LlW?GOGFfzvIUSYF+0l#iCJHjqZLLx#JS0nL=F^lQTI->waZ`V3d4*u9KI~BzZ7Ky3BLdzO(=n zA15A>sblhbiRb@2fB(PyS+yvdnd*M5 z_;iSKY*%S&9pR~@*sL^tAOHPt8un@IZ)bGM&Q3UE@m8bijFT@v{>EQx;_YEw9{tvu z!3MQBWgT>QUl4e@X`wI?LZPm}6zsPIp*Km_FV@&U2N}BCc%Ey$^vM9-SjR^`jphl$ zj2<4&pyaf_?gRMmEp@6yWXQknw3rYb|KU2Q8p>~X_AD=;p8mDTWkMp!tp<74X5xVkv{0L@FXU5VDtnHR%2s?FnSi~ z+9D}mlFOQ1+RT+WE#2jDiu}iUdwC%lBXPf1=}?<@LrypEiF^)CMop!4>TOK&sl31V zS_imLbzrBLX$q{V#PI~<6|9mpZ;-rowca4e~VGcvPnMCICHxsD<|8%Tp>JqiKBU0x4vm*0Z zwwm_lCR*3`T=IU{`wNyl(U!IXlQVkU8;VDf7}Die8d{@yu;Tn4NjI?zOPJPp%)#HT-|pN)?7Z+2BUw zO8Sx0Mjj`Cb5dYrr-|f zQrBvU>AP8Y<~hTCeD@_ln%9vZLhK|hxKEVRy?9#l zL`VbyO5TOw+>-Vj>LpW7%=t#_GXeJ7C>;!$YyGb5HsmhgP7+>yqzlQ-drV z>tUSClMds);*nc69e6`lyLzrV0i1J1Vyx0L6~PrHXC0-eNLTsUPW9r7UUrci#3tXh z%ZQc6|j zI?LdB7!Z6&RW51N|AD(PUbJh~khNp+xKHcH$zz1LJzM2P+mq<6spI=S<8E?}njb>W z1++-o05ODbRMC~Rw3%tbCsUV$Tq${xiu+2_z@+umN_F$D4c#ZsHCF$&ANG>3-Fp6% zrOT8#Z+&gW%Q)HU$$8P1j%tB0rDQt%tuXbkfv@`ei3$nvky9wrOXkkDI^L9)<^ASr zuc05VGlS(E^Wh5G~QkHop7Z)?COqMwojE<^0sBygT}K#)Va!kdqzH z2U#EaUBT=(Eok629tDZ(eVUeZ<0CdLLs@=a0O_(!lolu9e_3Jb=^tlqRP3L1&`oN~ zdaLK8HobyF%jwvh)w0y)MX5Usq zC-KIHvL_!Z#&&zrzzVtz7c3t%ByB1cHrCyI;`kd2B-3p_wCxqPUdw&huA&rqwj>x> zSsj(JIo~;VY29LmI~D(bS)2*!E&%mP=9i9MuK_pT2f0M}di%27T#EBUZS?C5y9DTG z)Q@CIv{otlM}_rk7+=#S)b*v|lA_s@LIDQ{xw^9?i&y`>85!)pZL6zQAhUUX?+nv_ z$K31wy&|)pDhU?WY{?qGbLS%Tx?8D+AMyK1{Zn_x8D;Se-|Vnb*{I`2XG?yl67su6 zgL0u}PB{4C^#NMK1fA)~y&6hB86uknn{F2dy7ttnwN+~OLYXQiIR+eG-w1yqtXtS- zGDe1S!7v}Le7yv>Gn8kAQGQqdCc8qFupO3@!sxvh&#gYTQjg6yHTV^ML8Z+&e7826 zQNmH}`$pEkN%D7zwE1`Hrn@%+Z|kMFj|7pb8mGD5?qABwfnDnEGhIRkULvcNRNJLgVY&Z?%$n&$tCVzi-!#BRX^r9g4{A2KM z9Si6w0x7slU5>6nO-`60#&5>{+JzTtSL9#IX|cit7K0AMvjPP@tK6FSB0b!VBY(I; zjti<7)+Du(n5ws0)H zcdex5)@s%pnhyg@NcKdj;+t1`LFJ_O4BAHr*`;3~uDPl}MaMOfqBmh5I&NB^N*_-K z?pcaVsr7unrcT&ESpL11p%O*m=o+^9d)nN>;rk4u+;X4AO$CUwDeP3T6XF=oT@uq? z2_I&s-pEeG`~6*EMi?E{G)Skr&=D{DJFZf?sJhSn9G-EmR-J>SHanTRl>T`1?!mgl z$Wk$YO)rI@>y1JZ>xk=8n`hcjn(q;`I~Eb%45b2})OrwxBQ%oA};&Mh!1>V(BCMgb)-2@Mz3?wS^#7DT62*?B&pV?rNUA8{ z^3M{P^PbGWLdbjM;Qe`;K{bjyXSvZZtLeV#0FF6tGpICy&?noM)=C)AnbeA~?tQ|; zP-fuhp$}cl9N4#bl@%%Yt`5??_!eF9=P)i0`A8P_*iVCf@~4>7BW3kmkFk*)#F6kO z$yi?D(b?C_me(3$dfo-5=1d6?w0xKOeUUW&zh^gmJV%o+BSNTBp2#yxZRc>+&wdbI z+a(e1xJw@p-%=NJCT5#At#95kuJ^7kZi8FDgzQhl_^?-c#;bbdWeM{irFS1W)l(HD z)%U<(F(HOVqSf$Fanaxpbc2T-Wj7lT5XC23u@E<5_w2e|CCmlW8p&V%` z1-DdIhzyMTcyH8dX3F5Z@4oF(9=7o8oU}nYCYcx0O!-A6sSX(Qf}}1`Hc7f2`hoC# zrvic6l03s49nD`i(Ou16%t*E!b<09$SeCFSQO&_*q!-3ElcMF2s)2lTuWw!9dz=>P z0@xm9Y|%kfiw1q_t&F`b=2JlE$CE^r{448<*_B^6)Sc{DA5ShzJBf7pOxYIKWx(dm z+J)-^Z~Jl!CVyVflef{*$;Mv)7!_eL>7bpy&m<4c9n)|@vrFKh5eWm8vD$#`wpb-J zw7co;Z@h-0oKmtjU`JA;)^Aj^4mtgGTlpWiwr69z#ms&A;>N7((*S5Bo9ihl**8z8 z)mF(`ur~*`u!rTcLZ9}0&y4(hQCN4nwBUk)!~YKu!v9iqe7CQ_PwT?(4qJS`T$z3~ zzBWcj&|!ycA`P=W;wn_8o|7It^oj-s4ebTq7!Q5_jC<|V9QMtSE$qC3uiuT1F9djR z9^7(h{6!3Ow7w0WoD02f{BuwIa8ZogDmS=ND$XlKYIeX2lvN)cCdlxM^84%53tV@=g zj)P%+7NUO<2#<-+lXRn1cFZGTz`P_117tc+-1(?^j|K3~+= zl*90s=uat6`^4^6QQM)cj6#gPOL!87jFoW$&q&>m96u!GPhBC5hwYff9HoF0s|ag8 zlx6_222p0cPg`_kdq-LqNXeX!2DZKAtBU^qO7*IRRt^a3pxPA3N6v!-7;3b^6F#v4B0?#kvSu8j6W#>+{J+G&>p?#+`z&!B2d-7da^?uho=rqJB z_?xZoY9W<>3t<#y3vRqy9k))qAy{7Vl7#RLT5oC&E6HYtlK-X`AhB5oIF<1y_!$0<62 z=r8!AsyEdjyGZe<4BHRrPNo&W{_>R-t$u1=gXXsQjSdI$o93GF`9I%iwSp6;0x}-Z zh#9yDf^FDUuPYh5tN&oZ|9F*iLM_OGx+3Er>_K2BS5}=p7d9Rt_v{zMR`IUXNufo{ z2m&EwZ0ppPJS04-g2J$my;D?m*6K@!=r5C&)k;IB8bzz{3=d7+Qx7&0B=IwTw~1ia z<_p9+*G^6Qy*ka7^Yz5s&dSJMnTjexy~;X!DS9X8$m zKf>2@)fvQY5SbbQasd?lZOL#bIw@8A-Z|v z^M%{$+#)SgO7NPFNB%`?(cBrZN}yGHK>3yrg>L+hSh$u7aa8HrKrULLFP=BK|;GYzgyWlYF_F zuEyUP8J15EMGYRTd}rsL=rRTeXhTYUi!;;K>-~7%Gr!Vh<~5t2YhkBBFezXCZ@M!O zMMzi;@?98GL?Wa5q|r!&p>nOZe)C8QRTtZ~PUru38mB<1AhcBL5r70;#T&R+AMX$6 z*T3obviTa6*FKE5XL5MKVCJ-|G;Fx^qPXBwu=a=;y8P>?*bLUi%O*1Mo?C(gtXldsOOZmBH zZuY9er_tk$j3cmaL(S)AyWf%KCKS!MI4%*oDa!y@pQD}I*Wvuvouv_bmTvN|b_s>I zpS6Ej|5Rr$dWPtXUc-y7#!A9|hQSZ!l`K5wVlKD?NkSvxl;3SqMkisSqVVe!L08X` zhX%g94X?rOR6#hI*q&UoF(#7R;Vkl!=l;s)*N3BS4B^^n7w$HQ`VG?Yjat3kn#kD6 zkhk#gchPsJV&q{@#aZLvMbx{}f+H>n+w^=r&JT(s{gBc34l>D*t5O&1|so zHmc}l#C;CCk{cg|rx!}7G3?!-2ex~EKO9weIubmO>vE4+>7`?BWhW`xu^c_R^XD;h zf~j{_7Wu-i!n0xRL1kCHmp2&pW*EdD+{HF@1n(uV)2!@wcKl~~J}IUg?Wp2r^&jd3 z|39VL>1DzhjCiuwSt~|Uu$CT|;ivQ?e$<&hp;YM^#fVA-+ZMjZ$#sYIk2a*jN?~(S zY+FVgW32%G%%+RCg0#oID>sdhEUMVKwoFUW0+k1pR0);i>#&{|Q~dqp?K1U_Q|06f zLs!8w7htbh=U_#d_NC080whkF{!d1}Ey^21dW*W0WLC|)@|H3zcC{gj(cu}Z0eODi zlEpG*ga}du=FF_>VN5iFlP;qm`DB@N-{*qs#^$o;TP*rY4ndvYEM0336=hMMqOfST z-!rJ@naoMs6cSwevCz~|hFzL$u9Aawkozbs8A#ZIN7rD`H@4Vs0LdX#(UUjG!xsmX z-83AMYUNastOdBi0>%?!&|G!C^;l`LM#cScr}p7G(PiS(fs55oM|r^N|9YiU>}=%D z%OGPxXxXChYed`}Li-4=uu{^gOn*Oryh!12)>GSb?jo0gxm<;nsl(I!i8R}tmT)=y zQ(oHBj=rYI^`hz#fo`Ms0kKd#lAD~$M1IU4;!W#HJx z%=8iaHAYbAoa0@kd5F|l$8nO<*59ptyx!>xBOj3H!NxfAMU3kWM%Afy@a#7h7~dVg zrDumF7GLfW7m~XC0`HIHUu{-u^-JS5*xYK7;v$OGhCG|!m2cf4bTbYqV&;t)5%aH8 z3eBpKx6D0z8{$>-E=+?i9AiGdkMuXQQ43{Vbo2jLf3{>$GgS@g*}$OZ4sPqtOZa&I zl{1;c7aaHfxCbkpVE7rgld}-PTEeQ5Zr?s2Ep{mHgdnJ(kPv#ZoKVcRo4?H(0U%#t*n;D-A@nd?(^vd_moISPfiO)*%yZ# zJFI8tJYDMw?fj*0K*Ko4&Xe>C?QSV-@$*3R^=q})dy1C--ng>=JN!h1px$nC;#i}2 zgL&y^x`T`lPYFzHv4>mNVjypwTo*|FN^^v}T3e)oRa3-WE5f%9;qc8R0M$xd81Vn+ zs}}!{uUbfH#@`6Pe?Jnfel{zVzHGi*zA)~{hklK^nQG|};Q%b{`ORYCj8C)exXCNZ z%e{g|=TA?_6WL1p@C2a`~*B;Fpoe zD{t#dTm=`p>W=ZwJK#2`#bpTIXW1paq(O;jjPyAA%&Td@X`PNq=zyTCqGW_LA?EzWEGA10 z`Ur=A-dh#gt%w@#E}a~h4s_`YmTaJG5>w3cGLyaoMgEp~J{iO5BThF-yF&<{#L^xy z{=8SSq$VpDkKh`lsDLyAx3c@KN0X}9u4;OoF;s#DAkGznDDva0?eQM*CHNC-Gnity zZqR!T^z-3tS-Bc;>Yc2J^-hMaR`>}%^nu%^LKa^VUL@j<%jo!XF}$*21J^g+pMK>8IDhWa#p+ohQpQ(Ul5%Z{Rf|Z`X*`*tFdB7`G0Rp z(RXJyUo+*74oUy9{yXCQ!KlEO-##42=cfes*7yzVB;5&AjHB=9%Zoi-!%a``Z&)?z z4SN2)H;<36QdW0dmiJldy>EqALJTOvG1ILxB8rh^Tqp7yl`p5~7C%~nQ7EVv)p82e zl`o|lrsq-;N?@n%6&P)p$P*~{rRfS>za$^5NT(N)Xm)6@${bX+QJ?Gj4K8oapQs7} zg{ms&ii*4)K8UTf??l+Su!Y+$r>R?&M+g2=t@$AxAa-%>@XqEMA*NdvrAtq`W10zW z4_j>3&d=#-1bRD|&=Twq3s%rubgI0&XVEjj&hlJI&S2NVC&j{Ubn9 z;?|Yev5g>*O90bvV_;!M(I^9-&fLBmvT)veeVWAk5`+tASAah}S~N4PhkZmH!-!kU zJKb4!mK`u`m?^WObN6fsGb@oL0@e_ZA@(dPkX3=H_b$|&SLEV?VNV5wW-di2#b^V^ zXb291?=|hjg?4&YRJCDfsTwD?;1uxX;z4}(oS{ts$gfdfqHme&ee|VB0nCl4c1=Cy zw^kX!B*5q~3m({^a$JHYjCH+HohcLX8k~)e?gvo@<)5#chvHU_sr(q}%Mmo>W2e2_ zcHeSVOE^_u@0MR?1$%mPm_XipdZqszbOBJK&7^a7I=f=~`9n0u+L5smGRVw;$;`a{6?Y-dL$!%vZdf<#14ybH zyJjsXIWXov5JmVK5jTfgza+t*4IH{Y3cldHG;QrX^R>yW$3m%TF_yh{8fQa87j3g) zo{O#P$9Jg-|LP#sX*~q3gK`S||HMxI-)hU@m6PQ~$VrKA`wCP|a+U*K@yOp{=5tBV z?;g3W*Za@U#tVg=9Q--suURgoi_$%fEa)FPJ@!>____7?7&?}|vqQ&|tZb~-BaSbh z9vv!&pw4L)W;7Ffmy+%Y=cy>e)U)x5^n=ng$phFR0%P?XsBYc3MR33puXU!@L-nY& zBd(JDn{@Yi47=*U1pwQ=BVSSK6#NMO?3ql9#|u;3?b`$Lsk|CT!*s=-^n?^GDYc}3 zu-!wfD>SV+V2nY4zRX-nYx)u;#&cs>i~%iRnKi04c$EEcn~*JhZTqB8KkSX|L^+>) zlH>X{cyRs%oxRjns+QDggvqlN#ndJXI9++dRG+etp~PJ!v9JNFyB6wdl)j?64|4dt z1emOJX?mxDZTQc_K<97j`yL*&z+g&oL+g&~tI15AX;Z0dqRC^rB}EF9n^Tu%syJPi z!Gll+5gq%lAlCKAf&AJibmI1d_s*3aU*g2PpoOSBn1j(MdUj!nHh(xU-K>bKAk*bN7~r0@g^zA1CZ<* zP{!)(z0>-;W3kQnvb5nm>Le*tTlQ|@<9%J@M6B5+Ay{a!pb#(xyX%{EWJfTCPzbz*j= zDTSS+oisAWw4*1KjlophSEyd&9i z{xS?tY$Csr8$>GYTM#vQC>A`EFTB}M1X<_<^|agNVu$Rs9A-$g5-x50EsuS3c{)}b zd`0<;Sl>CI*H#jr5*^T8WqPw>Y*xOJhtGN=K}DNyTAc?W!%-&lG}|tUOUr7;P;r9| z60ydftvbvsNV0Lo1w@o02V-ea7`Oj$$r#Zru#aDFS@35BSM|i zAZjm4)R)rx-5G)lRz0=eC)u_lnK)i+ZncKh2?iiu+snP69<*a_q`&K;q~)=Yh}fAc z@%VRPl#?-|!6MO5aJ4RDxT6#K$rBg@^gFBS*?cVuJ?~ov3(TLfKmIVV-kj?!V%F4Y zrBU)$k(+rzHmxpp2pIGg_8s@K!U$u9k`YhcS{uFJIZ&_Rwd>ZQ3-|?5SGwWdLVPIo zTd%H!1m8G>p51JC%-?AB+v{0W;(sak)dt^}IgP?iuLv5<172y~g&NNSYJ?B^JxY!l zixexsH?q8)qOVUN2o(}v94?W?5AAn0AMeSfmXB=-2~E4;YFbs@R49mrXqaj)s}-^9S!I6l^M08bkF?S_dg<((&U`iv_w|<#wP%-D{}>z``06{ zUkxFK8lD*;2bYD4^xoh1Q>$JEW*0L3E<8`l?#(C@#AK_2lGj~MY+h%L?%_SI4j50* z5v>l3c)Fry#0HsED7ndnQk!nnNtzj?y{ zYp_#bCM&NlKvaiK;+-E?N^qaFmJH{XZj>I0_C`5;H;{uIjqQ|8JG}LJ{!Tj8!6Cg^ zI1`V0{IwN0R7?osC_U?EvD6&jUlJvMRvHKvP; zUrq%U-{aFyy#9VyM|JBRXTm0{__w8U|C@hwXojDSqMF)W1G8SZA(=ZGe+9JFl@TBF z$p;H(fFmYic!!6uy?t~UyYj36pMDf{>J0x}bs30;Kmx9*v1G`cu@c^T@_Qm=g; z3Q4EG`cXWA>hT-)cMp{^Vxr#RY1PFaUwhCaQUCGdHpdHvw;cC}Qr~WTR1ZilN7|6=(ST-X9QN=XXrM=+`9In`+%Pmhme1i0eTX)xBv|p{w znPJ^8X;D&pHymiiOrAFx8_t}8!UjPVpYt{wW&K=L{L!Yyxs$_AqDn5m@?oAyY1h+= zpSCjY9sWIAX)WB0+U6cSq}||ZEZ!;JfW8yWT@BC`7SNfizByNZKvn&>UN6-uf_Rn7 zC-lx`YK{Yz+>EHv|DX@l~B?VuTC3sGGk!mSbu`sy12g)M?gDH4h}& zALjKVRfwJx9MX%Y;M?bq*qGW^V?*`Funzhy_`x!!Bb80@(kRY5`Xo=*^tR5Kz(CWzr(N)0! z-i)Fp9zmL1(rZA4kh8LR?Z6V>=a<_#}yxWcL|&f|N56XFy$C`x#%6` zA%yg0J8a44nD@c*y$FG!mMwBdy!EteM>DE~pBPtLXfOFhCACdsS9Y%Lwll0MqV2^% zh$TW%i?n~1?O^QDUoRIsQcO7d>t(bwqiQLudn(DQT>WEEtu^j_PCiQywm(FHyUQxb z4C}yuw4TWx2>?~2Tb|h(@M`DH!!&gGn|te|P0#I3s4b!EZStu}hop+9uQG5VS8@`1 zYWj`+2b*SVfp_?*xPga|bsqH`fS#jpVp4uzc=WC(s~G>fwitt5IT&#*S?JbMh|9*O z7`0rx1-N<~h*lRNIa=r9b&F2IDvchByf64TO_(0I_zA#oaO}<6p$M`J72OAhD zqta|6d!IM+=o4`t2un6)KR64eLL5O~T`r$?D!%0hLAnW#27M}wH-sB>bXL=?+TbLk zUUyNJ6HXwr))Du9yX-6xzis+R*URcw?nNUXtu8_{EGlW`DR&aj>Au?U3k@hdkL!&` zQU`IG*$(9Gclcvy1W|qu;4y481G9Ys6m<#mtC&OL6u-(zYF+-XELqb(Cd6`TokPBqvQ&tef z_A1Y3Q58M`%c=dcuVG2&Q>Cr6KG#uUHl@VJzg1cC%dm0G+57~*iH_6hne^)NO_-P& z3D=}izd8+Z+%$34^52}j_7zi7hFA8cXL3ECAA4BUvCujtUc6b#7iS9<6WAEuT096m z)X()s%h1+MFyijt4DcBDX9V!Q?fA#QTsHet{L-mekVW0~?t%$F(ajw>zS6sZiD5#j zV}n=qJqh%H2SO_*pJbNJy}+sfS`o;triO^?-m{ z2sw#3`FI-D*)RRBznx*wZs1N;e54!|6s3RbNNEp6RMIH9Ld}i}3D|rZ(H~=<5JLH` z5^ciHI@ahMz2-l~wjrtWdI1M2{7}hAy5oCm>@lj}Od6cN9>ZYZydd8V#&w-(1011> z%bfukge5HX;?=qQtiWcfJKeLjEkabguYl2}mjiv7ltOuViL|E(>s8B` zG^Sxc<*NXg@cW|)#lxXyUt8G6hP&sLDDlcEu8e~i-o4Lw|0F`gVJE-n3P6z9X}XC; zO7Q*F`4+Of`Vq!Zej^rw$5HSjlnVewB37*BQp+JcrYLzVumn_*M?+6|3o0mgy1E-U zer!Q^N8-M#t6Qxa5Td=|^Ams1AGp-lz&emAMN?$wA>RXyRqc5^4W{LC?^4qM42Ej7_nre` z5zzK(vox1}>1q2C_0$IMX?`&m>tqprm{KQ{+GZ_71tUunAmOOpIJF;H85U>~gk%e5 z)!)cPrbz~BAWgwO&aL>O7^D>Lu`JWRt?0Ti^BG>TmC0@t?T)2FS(9)i2O2*5iPPqR zE1yLm*TaC*>qrqN#N}IjDUf;^K8eB}t0J803(3)cNJ4`oCp#3ve-Pu5_`@_kE zZli&~fP$D=nsUAmb+E&0f!VF^zo7J`MKWPSyDZ7!-U4Cxsi$09LO4eC_SVqI4Ad>n z*;A5@uRz=SeBel)#7I;AdYMo76>G#b>}cUfiS^~-A`W=KqSx%;5H>x%N*c7APxfOk zWtw9Jy=JD+Sn_&a^#xuWJll4So!UY`r)ps^|XG2)%UU;v3L+M^5t5O3j@#cUjrKb zczZUKez%Hplf~A^Vd!0=OaEold zo{Gc1%n2Hkm)|zxgkrZ!A~p*cOw$}R_SS4_=cQ5ZQgqFbC=TI=nshg(TGGw=pKpXP zwZ35ryu0o9oF%7>C!dzw@unMVoq&$QI~K)G>Gqjioig>tzABC0%NHDvjr@h2J2@n0 z%IXwL2j47LV(jGuc|O-^+;Kz8&6D@DrWhWGYV7YpPw-6s%RUj+cj&DJinWNmE2K+~A90Ou60ZdNYRYQA8VQX_8_YK98wZ6T;hQ?RG@`n3ghaTMW2JJM zYIKr05~9-i9n<{@hSxnknm&^T60o@pq*WJUnQrI<>Zp4BJj2Z`_U02smQ3o7KL+4K zCI#TwFl_hg6|tGTvy%E3glI6KgeCxHe0}Dz39_#x>fQ$KG?yxxs74OFkfORUrjp_8 zuAWJ+tnpTFi)lpu1>)Z`1=au3AkWGdrPrfLx?&%lXG(rLmznM})3Lz)b8B@B*bZn# zVe%-T$h?qtv*5sQS5#ahxW_l%BR8slW&ZPCF5&3fwgVQ=8D8l~Xh%&G$o-JC2XfKf z(8)w+wRl)_lfboFnDRHDh!8xA%4r6dOTBW^_PO4)@>Fu!1{*GY|1&<)LbVN&&X(A} zp>;z8LrBWT!_XzSm-hy!Xa;@#-n7l->j7|#L>#$H4DCyeZvmbw0m)w>`khP$c5rQ- zy%NgUxJ|j~vV6?wX}8YakJt>xK@GOwPio&J(EJ|Oa0nqiv2*7zAO<(`lFH3;No8U1 zz$XpC8pU&_(R)lxFhcs6ZbF;Bv^#WrW|>?v2!&0=bX$Vpapmq{wHsoxH12JJkF+WIx$ABj zyb&HfjjHc0@%VsLGb?4q%=p{!;Kg)+_@&eusV0Tv?~4-eV%;H4hm%*{u(pX#zk33m z(3VX&Xqh!(pRoxif6iMw@gMrSGxKX7=4*7eI5FvDbqF(>cr2uYV~1v7-J~Cn3zM9e zHwqh2`ka#k3{&SQ!mI$8ZWEMLk$>|aRVK~M>5-RQvMdO_#n48q12L75A5!@YEqKpxeKWsJpYtsy z`ej{A_Yw$Ij-;-)-uDZ9aVt*6L0`sQ6RReTwh`}}mi z0ThPUaQT#`*~13Wz5hM-+dBZuNk<!| zM&Ldm_B;a-*f_f|EYS;IU*3e$S0@d;it2nf*`k~Izd!N+pM$h!EbL-)?;Xf>$^ZC! zUmLT)9`-3)XV|dFGl$u;wMHEO_i$h4-3Grags$sw5%bR}r~9=L|AVQ=k1iS72BX+Z za@L9XT`k4nF|nopi>>#JYAXENys3gzsX-}0iU>-P-UA{cA|Rl22!ew2j+Bs41f(~m z7ZC*!rHE94fHV^X+`R*IDcAv+upH>vv_=J!1%ncV6}Q zxJ3|f8I%%sGp_!Gi!pYAv%XsTs>@zVUW7r_qeQb!YsFMA`VPF*8 z%A?UaFy)`wYoU#S@2IBjY->I&Cf8iHoO!bkyqdK3z{^-Gf6s3Zznk#HSpULrH;>X5 zZ~y0peTs42g0QkU=X)zx=*EB*>}-m3Na43{rT|ym$u7wJ{Lpkq#|w>Ww^Rs(WQ8*i z!~R+D$=aOHc?YSanufloz+eF5On<^BlB$9c>mvHAE5%fg79-9s3%MFGrq2M^a+_gC zk@}*;#a63Mb{@s>psUC6yZE1A4Na%VSz{!Tw+iP>PLzB5CJYWYP*4y|W&M#FS3Dj<>^vY|l98HC67R$v&i|_V7UQnukDlFxjPUcI;w#qwv^p)L2BxFz{gx_+ zZ_E-uiCYR>>%7y^p4Wg<@y7KoVi!bMe%MTun-#Vb0Jo!gekc0`2P90?;?f4$~0!G~>Ge*ndWb z-A+DTh#A{PX`U9r+YZ1^Y$e@zrY2}XMX*p6g=>fSl^rWDt?W#Dh5=MqrZDvNxAV<4 zw7aHkf0G^1Sk+nm_rRx zS?IIB>%iN&2cI_TVs#Q|4T{2^A2->S8M9dtB*Ezhwi$P)gc}cv#+Krb8R466*}LMGykk~xtBk9n&NxlRyS8& z__1QP^tD*F0fi;I2QauE3D*b+{4BI9Yz#_F&;L+4#BGzGd~4}NYPC*L@x4Ye(ba4y zJnFlsrCBWSU_GhJttD81|DUWnKD{)oP^z!FG+X*H6!Jv%--qd3yhwRDLMqF*Tj1qa z@#l-QM%0*Ely<#(4hfo8F8{GTj{L`S6d7l&qx4)}imoPRpQPg6*N1W*Yi#c+ z$p$|7i>ce%&1N5z6eWLE9qh`;azYQ=A5Msy-m*T~UW+Ay&3erZ$ks@T?J?KOYUGzX zUIH|}_xGD`sFPKz)Oq2HugJ!5;)9`;jKB@bZ;#F&In=MfQu+$@ReP231=mheU5F2 zxMRi!`v60c^i{J>`t=jIt}VPyTdzcdX$EISjXR8XO+rsm&lyLYj^pm3&Kf`}2VEel zKFm8K2hmf={tkY2D_z==_%!?|1nP4UCyfZ&@z2CAm5LoG?vjJU$>!z%ueJYQ55~b% zAk4s2W$$AAiNMcnnMIRe?H3qER<#33sC(_mUuA46JgykSdE6kJfZhFG;UdOO+=0q- z84_zswK$>f{>zo|fIC0ldLFiO(Mx|%aRX0wJM6t;N%Af1vB7cs@cp>1LIrB^uRC`%+kc?Q_8j{j-kdN0V}DVCVkD0f`%q&5Bc$v9n7PFekKs8e{al zM4#(U9m}iDK|1-Gu5Yy$oqWWY`uo%-vz@q&{ugI$ea`#u!zFH8n@pix2F~`=D~*=l zl`dV!E{sSQ`$RM zPub~b`^5Gxy75U*GqcRhqjidaVM8GZaZT0beSpTuuPRtiB0d2eIFA~`JAU8Mz7Kzm zenK2;E5P-0O5*VGq%{<<>x^kzHog6y&TL{!nW($9(*8O0+yah2gMB0C4+3|LsSetk zzQ*sQ3Ei0xI@;st=wGL>zB?tuTquT1lMbg%Et{FLigXoP$u)*g+ss)Wn-8mDX;;?i{*2U`*h{!mGhK zq@rJMq~$UTOQ~bk`|iqP=H{ z&13cY_kX)Dc`%)WxRO>i4-4}%iFOgSxgUH7k(O)2{mo^=ZC4lmHwz#f0pBhRf|x#1 z`?Y^!g9V^h(R*k~?qYVy|q!;)l=m0c*hFs)?c zo_iATn%L7|!5a}M(DVL&3itB|vgIsO8@FD7E!UE>eK-3aebZ9!i&luUHcYKRQ%-fG7xPNP z*KFsHv>7IQMM;C^Y{v~QXiD2`|E}>{?RKa{EI;0-ay?_ z(V8C=2Z+nYs#vFdcqzx=-s{8i&(EtT@&Gr5T~4E&c~q__cEz_x5coug`+a_z=5Q-e z^M)~ByEowDrOt7G`&vx~a(o}SlB261mnygn@%4cwChV);P@u#AQtKP%QMmpb7FWudf{nY^Ac_BN{8M}t|KQdVjLP9aXpZ2RNj=rt zefmX@1$T0`N={ZC@ni_7F$B_xbs z`l`b$8rAcJ0~7!spP<=WKX1)SHJs16+_&|F4KlohrX2&5*`^bPN;|zh8Q%-!I6-se zZz%(YuS`Ei6m5qZdPtWdiXXI<7fQ~?w#dbXau*z0xZKleiVzrfUVx;Wd|epX@SCxC zQa0xR-{cD{LL)S2bs#eYnEKj0CYp;zB47WRsoj3+A$`F!S=lvip1b&^MuXpNZEGm} z0|Rx1C!=k;vZ2%Gqcin+#uUP$A@dTGxOmXZX1=gCSo&YX7m6CJwyJv76Ug01FKyjE zaa@#FbFEOO6k&Dby?BhR9N$o;D0nxnErrc9i0HU_jBrrzU;Y9i85hsx9)rQs=>pSP zPM4UHpGPmGq4lW%%0E>a59PN+$z&8w9o;eP*6+68B&NkSRqxf$VOGaD;z04GN0Ug5 zZGIqc--oJSv^O;S91BV%3+L!0Uw(J#N8^t_8!^eQwbwJ7nH8^0Q5-EmraS_*xc{Z> zeLM^G_# zq-m88vQx=QT$Ez^EC<5YUd0?e2@H~Y)ZNmh#`wg06r0(7dcAr&I92od-K`v~W~L6D zLa#`1Yi8GYafJ@;E`6C#(R(i45Oq(m?e->LQxQ0c89)O?cf?+1l}d=NDe0tS=WuaK zkKTA+jCM9gf-d%}*S)DO`YzEFA8Q(LT3vxM#>nx=miWNifiApyp9cB z&V6GfpIPZW!U_m>TnzpSD*|dzFC~x@CBE#X-kQ?9cX_(eN5?|KVvSw==7VKE1}$Jf zx}{qsIa3kq(5RzaQPg5+O2mO z|HD3WpE1;(i<#)0mOphez^r~JE6k06zY6m!#?x=r!Ebh0CdT1biE&~e057NW;#?M<;KCu zVc|d3obyWw{%gr~Ar!SgoW!yvT>VMG1;so8&X0!+c?&NGIIb{0xv;$S%Q0Y=c0Lgo zoEJ|^q$Qo{iUx}O`LO=UqqBJ@^`YREXKG7F9Lw8$A8bPU#JcR>Zv=*CsiT92z*eBnE1yK3tpIDR2^O{bHXlnQ*Z>5Q1ba-{M(eY|kuSOlI?v z3s+6wy+BgrR2%@^QuHWQ^fH8uv{PyWGG|yk9D|futYUvs&v@37_W-M)Z=?TaWhTU z8CCmzN$4pWt03LKXx}POJ$t6CL-Sbdr_~6`WN1l_4qLc@W3<~px)+^)t4|#?l-kvP z8sUL0i(=eh8V(d`b79=KMwHx=^h}TySP76i-x)0<{b1Z(FQnd%y~6R*;6 z$3XwTx_*v=4kVF5T9`P}R$UwpIKq|KTTh2rs93`PZra_F0`n`elkA;82}azTD-Ono zu@zkLg+TUncO2Gq1O|PY_{8}6!b7mMcghm!zJ55Dm$4ut?c*+1StHY<8Fp0knXB-xi0_d40fdZ0MI-AS425N)&V`=2n<{<4QB67Ar>%eO2EB-%p-TrMsPBZ7%CKm5_jAta`PKNKhQxFJ zUYNLlx&5~@5IA=$8Etpl zv+U?w>G3r7G2+5|E->Qx@tTEa!GM2yN+WCr!6ig{y*T6ARbYaXZF(b2v37cVgHP2a zTYkeCbR-t;!@x_&Pf*n2FIZksu;fiBWRpWQH$9?k)G3g39j9&e_8JwjI}xPu0Pyw>7a4CqH-G!u>d(T`fohV<(lEOZW(IqT)#uZ| zcZEVvOPaUsens_H-_c@_d4V*>PiBzD#iIETNc(VTt>lRs$Tz??aNAA5f;#exC;WEY z4t@ePeK{>=36;|xc&2pZ4_X%NR<&c`8HD5;1id8)f7knXV?yE<{QAwuYo*nwF>-<5 zLtRLdBgZ$DC~GED-D`9J+gn%C*9#f%?X8APHFK_d_+K}_b!SL#AoPN7X6MC}n(e{@D7Vzv`OlP(YgXSnTij z4;Hqb-!%O`gDgugrm> z{Jpqpks|(_Ple@>DeVW!ed3Sr5C(kGwP$VxL-;tO-37u{T%dl+a5H6|@2^9kp{eoJ z_h&YE5s~WFLzH)=5~tf*<30_0rm`R`Rd^!%DAINpR2Ec_b#9%TvwCa@oppMhCxHFt z@}p!`m9?0I2dOn(+(JAH`J{_KqTJ8q3@DNTDVU^OCZl}D`!`E|9V)Ayo7C<{Di%p} zDb-W0TKdGfm3J^$rnO!TePh&9?+*=!u9V*9WS2V}*F&g-j-pTfQZ9Bok$TV&B+KqR z$UV78RZCJX83GAW4`{s*tkFB0oY6``_i zxHG(nv@9!~0gKXg*yyTG8}r-u9+bg~f_|i$Kj){9%49dTkRvz0a8P(lF$!X~cS6qB zLZDG$;ZO=OfJSqu-Qa}i4bCzAT5pJ3CtL9hmtY+Fv(N2t=Oc**`y}ej2joy>V%X2(<1{W?#hczVg%1 zOf7E5e%uQ`x+nw_yQ5V4`<>eR^;YrdJNwAX|E9}9(m*pfra@$0&P}_sl`N%d=Re+= z*#$c>UeanQdoc_z!Lbino5k!iqpnJ!wT+;q8!>EZSYSRtdZ+)@p#A)0M2T(i$oX$` zjFW*OP%lxAzyDMPX4^#2M3dD4IC5*l3}C$IpowY-!C^Mp1&J&at11w;t6&QGhA_aKm>N4CkS&u{kZ zU(YxGyS&_=+g`)>j2`)KJuP%t?r(M}^G=U34?E?q+s&0aDZI>9XJJcUIz`S<%4HYZ z@nLD3wW%KMZ9$f3MG!y)1b%-ZFEKYxZuo9BK@3$q{(jQyIXl#BwR>G0DE~~y?&`^Q z6Gp?*rve!1?CWh2RD6e>${}YX6dLfX;M^?JM{@V1CWLX7=t@!LyDQq1I8))hmF%yv8HX+-OMHx|y>^Up({u!=1(%<3AI{RG(LXCUWng zw{gu)RIOigq$_V9)Gff?Nn5N*d@WQp$elhH81Khwq)Rd z(Si6Q+h|Y5Pp0Y5aTCrv<(msjd$*c}?)I5{L3tl}Cx9V-WkHv$bn{R)*%P;$j!FC4 zH!Ms14Bm*_iNV#~6k)BXx@d%Sdo?#HaIse~A8W=uic`Q(aDEXTPI)xtm!HT=Y@Z#Y zzn%0?gC-l)M_3>DPm{kxuKmT-7dixgiVN|Vuk*PzrOaZ2vy}fz`ivN^4F0SNno<;V ziJA)Sm!1zU<-;@WWp9o4X$Ps}D2`PSlhi)$_X>?ASDs)7gM#-kR@V3zk$kw(wy)Cj zbEH3Q0a*r8WZ}*mVy`!J*_b$HTI9a4@S?>mYs%p2k>4ps>q&5!!P3jd`z3xG*cY^6 z(A7kZR1o)+csBwGTB%Yz+n_$0_Dk440IOlzV2HBkbo0l2&4;U5L!)gzP??~ZVw-@e z+{MRN8|ry%njc%vW?#CL2CvrI!F>=Niz-ji74gs?uV}FtShaOxVg%8^;%3g{6YJ*l_sASRSv>f-Yr1y+=p6Kj7g!NKHQV8 zxlA@$+IPp;gzO?%_t&hrl%*&s*#F{Vww{tn_TlU8E=7D~l6~kleLsV+%Jcyv)#(Az zSKv+H)4AH*HP){&*9&N!mC>#*u>q~i(im!q{W9IVra_ajgxgK${sMV~&hEtE)-b7Q zf^M;K*_a$dBWl7@k&W@w66NQIa^sbDRm(@b(%*0yydMU^cN6Z8D=LRCJO5w-W-U^U z$TTjggC1JfWiP_V!~DMTOnF!RtWkQ07hh_aqTtFhMm&DEcwfZFV_?!4+>-=jUj{)K z)36t_evpcD58#Hai*HazTVBM(ib9cL|ZCE<><>SrdYQFPRC!23N3$& z7tDV*GrfM&CRWe(#l>lD4zF%}RI#9_Jk|V9A|+*PYfws3{`R3DudJXEWw9z#HBjwT z@Gd75d{@JyFQY?0l}z7&|HW_OzgC-`>czIis^H(zf!HgYe=nk8a(BPhU^lUhgg!s; zgl=55OAo^C)(AKAU<#;jxkB?=5G=s=8Q|>XY{^G8#p6oK`soQdUSx=%r{W%}*}vER z_RHB(ax*5HkOI)a?>IA-m>vn;LRWLnN%-%t4ZsxKBNT-vy_Qo+4hlGwlw#x>NQ#% zzfY+6%@E}qG|p~148=V?PAm%YPwYFGr%TegGrEZJqXU(!DUHn+aN=&$j}&zM*q+#GTSI_C{Hk!dYncnQKx5$2 z7Vwf_nJgtmt6C@xHcZX5Et`vFaA37uY*L2^?8Y~xkn^INmBEUZNN zvBUw{VC0RsWa+LTR^)?YY?`lq{ebu}MK0HtBKJRlSgdSrw{E#eKNWOC53w7$cr0?JNV9sU-H9&ls-t zf;v9sO3z6NHfKqw8+AH%zKu!c3d60k%H|Bc-ApSNT2C(AtP$)=Nq_yU`XtbjJK>Qd zzhmn0h`r6pApXfrpN80E)gZFE++c7ATF6je4C<8ozB=_HFX>5@gMYo-$=d!^Y{Uz^ljE#*{!8PO?b}qe} z#@xH%fBPRB?(e-c@bo#GH|j&d?yyP@D3qI~d$w6G);*j5{b_Izl2+@hJvg0jrinm! zt8v|h&m5k0maGqT3V7L6eJM`a8nkNCGP|RUcmw5YhGFydZ5w4cBU7&56lD{*3PXDn zB1=Kr$7UeHo;2wad`bId1_?aG@=}^+5~?Qj?bl@aZ7sX&oLz_&^7W1`KP-&Q>^&aO z8HCKJ4-Bm48X6Ev>s4jXzv3SIg$mWxAi9QpOpZ*pwn0k6*d?k7+N%DXfAM8obt5Uv zrwwKfe=iK*i)=WFrAXbB_8UR1qevsarD#7!X(LO_;$|bM?ZV zgZgi2k8+D$o_pf0IuRNOCG1GJW$ozBnAWkL=ecCwF{S3tGBBG78A}+t;uI>{>YF|` z6L?k60;%Sx3r;Cc`4v>Ok7jdd{d`hxC2TzO!DnDGAQ}~I&BPl>r!JXpV z@`gvgk6QqeVOLMa{0A7cHUA}0#Z8AmA8HAy9PPH3Lu_V|N4UW!Uzcb278`3))T-oIiH4;qaP0 z*Blx@?)F0prM0}`ou6&f-(+j@@B`ESJ#?aCgZN5ssCLz9pmao_LSc}Hm*w#=T%(PwBEb^z^dcV4^d*Yz<8dypQNFb{*>N$GQOBd>3`E(jF6kI1RiG*`nI?89Im{(A*dg z+Nj{E$HggwVbH%o=yo2r+De5|&p7(e%P`jBciF#cnnS&UdLPqFY_(s;GjY_~MZ-Xb zVp#SO8Zc={RBZyu?W?&mtQmG@(>bkea6w_IzN+ zD7ZGH@NrgP4#tRciD5;#K{?!CHMqQ6ysJU_N1IBUh9doTz1ZQnS=g5tZAmdtCdSXd z{6BchE!!cbBe^;>>)tQF>0Gyvb;t)luF;ZzM3Kv?&Dj5l{da^9OQTH1zOFpk*!YxQ zUHW*s+v0bi@6Uoe8@mnf@eG9p7Em*3RX)uw_HumKI$jx5Ky##ktGD@u;ff7-hFfl% z(cuj<{iht{obk=uM$XAx$l1P4?B7})cEV({pX6pC_+|eeJ`4O?4^{F4XA4r+Jd5|v zL2Okt*WlOGnaLaSNJ{+k+wg~&#g-Iszp}eZ$00%aimM2?fTQ6y^uTu z-jzpcj`9K73fWpD%uDifC zw-CVoxaaT9{M0rDFXVFr61amlr;LoN znELwsfdMU^QMiz6^?i#NYN3L4Ao!y4u1cvxzJ0Qt(okF0G#A5J1J~=D z8=w<8xs*obO@0Jzbwyrn)X_dA%dWx&tZ!zfoNI{nVZ;`-U?Q`+zx_H8YZ1V@jG7MY08N$)OEX+F5k}V`4W@4XL2f1)DAeLeUSGD^3@J4*%>WNhK2A z+lMu8D3v)lZY*lhDg<-vAPNC{vyR!tUdO@-4W3jDXWKzAfWNXfD%+*9d9!7H&P}z-H5uRIW>p1Dz zG^PKay!zdj_nlneJa&7xU=ojvqAKoWrMA#u4$bDe`UlLn+dM_zK)pk16YmfeSZ{fz zDQ>Mfkp(*ZbJ-|tkAG@51<|ZBim@mAx|tT4t#s~3zgA99^O+jH)z;-Jr87){j4+&5zKtL|?4s*%#nU(PLGPj)UVJq;2%F zmd7&E&=qyq1hMfVrFrUa9okpz1~ousI)we-ip?cos$X{2VveJa{16Fqy}YeATY|ms zVxv2e;jx}!IhWddP+D4q8%rCwESl8N-;Buw3*!IjC#?&ttJRO&GhgY?b}R9gGKo9z zsef0OQH<6DUtG!9Dmc-Yd%sOpA0gHA7APjWtT(E7^G7-N9h$gBH-^EVycFWC9|yCx z;!l`R39l(RD!z!)*%KZ~3R<3+4PbM1@M708Y9Fwm{I~<|VoL`;{BBg^G1@LHoRqgf}sxZ*$XW;-&UT0g}Uf^ zF(b+Z8)iIW8uASQJzgZh=Ew+Q8L+7hCZCs?6y;`9!~OccfYvv~QFL!YCmci`-w;(O zr1>|{N$10ovDMRl5XE;^;z9K0C!!iM94;7yH`P~DIZ;LM%WvW|^C;4O^%i+3vx7xb zL>xGERd|(qRA2>`u6$poIR#Or0-u!Rpk*|r-!U8o%RyB;NyNDHV7ccMEfM4;&$LLRK+CJN+h%WoaB z;kb`;0+qS+eznjgh)v>$TOWKYP=0W(-fu4i`N`48ABMbpJ>G;QbJEuSJw8jMko42{ zbHgF?N15{SpNAQDBKx?%E1%)<)DH)sZiUI|3aE;D9{C2D{;`ui6%#b@Y5W;)WDtq{ z6O5pgGUm*EX2Y}dcmpQzkuX3CC(M!#h)SSE6xE?LX%0kMFUGEeoZ1e;Q$Yma`pH8- zfRXDA%M)9K(x_7hbvi{S2BF1( z?CsJ9R}i;*4i}*4Y$~1^#vY@47eOo_>;eEga=YvUKUq?pc8^@_msI)Cg3glOnjc3v z%iFhBP(F5XDf|>!*nNq)juIx=1Hi2Ho#<$@)xO7Lr2V;Nr%7P z;mhudY*Rugt4HUMZPr5tbnNGx9X(EkgK5=%O}*<+v-;~^L(U#`wJwqnF(2O|2LqlE zUq)rh$!xpQo{CM$Ir$+hUNXceNr}gqanzA%^?Qtc*tLDmg7Tpm?lMP9S?s99#^HK5 z+(sbG>@i{E)X(P!%1eB=T{T8KUZli>)B)HV=U@sdD#CjYRG?lTcGilf@=W3Rf)JC* zp8x#eU+=u%m|A|RXTj(4%`mOWz4L47^$Zm8?UM$If-)so$V`Qp%kDUbCmMw3F(#Hz za_Sp>5|8-0^PsgsxMc}GjfQLh;twSki|ot;jc;8?XkW5#b$R)fe_A`K#nRKDxLM&6 zL$*c@-nLV8l)JvQ>L8p2jEo`SHe;^vJGF?OO>z&M<~p~v32SiJ#{oi%mSzqurhZNT z&?}@UEL9`(qwwllLq)HA5yq}h1CC~rzu@b)3;8za9IgV=I+|fD2iU8VDxKSXwT9Gy zg~RC1%=S^OUA@HMBY|TG-cMc9|>zwg0Ca)z7$KKYKRYlW2%?PO=?|7vr95PI@TU z+RC%O3#c6F$EN%sD}7Byy{K8i+eYGRk25Df9^w#zkk1Nw>SpOZ{jU@$5vTp^<=URc z(AyET&nYJ*v*Z*a!-M!(K~FZED5+`-4HmDp>CuU3NLQ}gx*Qvr6im1jAMOg)Io-m{ zkbQCM1^0eD=OCl%l|m@`51Ct{y9-cZyH2v#sz1tXrGx>7x)y0%(s4c5;IiM&&J^d9W+*4aP@ae4N;C0}d!flt6etF2qVEv+wBf~X$7!?GKCZ$}Jn0rh%Tz$&D06zUUs$VPTBO0RTBT$cg12? zrgEy80=(mnl{8`2NxiTk&cS9f-$1b_jJLp&`PgsrrTRZ>*ok8No1Me`fIr6tza6ni z%!{EjUo1f*GB(R*p>^fwn+39|Kmd9E5-O1Jhj=AH?hOFo>{en49Z^Hhwu{BTD1JVM zicaYCvkg}+u9g3D&SpYg^lM|l`1|zQpD!#oTu>^Sj8-fYBbgj}5CIN~fEEzGJn1NA z6sdwODwf8Xkqk&Dc+&`W6-wHV8}ZmYa_RR0Lw8|U$bHr64{6c{?2wV(dO!^>*F8Y{ z*Hn@?L@7V;*cJw&s0jEMVghiOzn*N;nX+JqcvWW^0$wPhq00-K#Y-y*I-qQ}vzKrf zr!3|CV)Spmxi@wH=-h`E6W7rfp`^{7PDe2~e)9d&9PvG}?N#U0hE9=HN?HG#gO7cz zO1}Czq)kBzYlGi%D)ex2ZYuTi@4}by{z0T;-B8ROy`P!-c^{b`_B{;$Ir1B>B_2 zn_#Ji+Hv5}!}Z@5Gl+O&*?#x2QQq<~5p7dP>9!{)$#&w4av;ZMWGcnDI_N`1gn|d^ zQ@z3YpvclV)#{ZOn5m3MV%Dpt^)x zNXhq_@G|P|zda$=FZ~|gCj3jm?EZE+l+=cX&q#ah0}p4AMM=)I(t7*y=@$88lLk0{ zw^Y-#x|tWpxrM}ahmel-Nu$)OE|WtV-_I6EQ)n@(g`F5(WN`2^S?vxcFET?Y{Y&#Z#Zh_hLrqKYL%M^A2U_!aL%R%kG+Jyv|C}b6ol9z zWl`ACdy%atTTiN7ZE5GLFpjQ*bv5_janTd$e^Ihi3g-c=R~fpH*j$6d7B}4yr8$Ug z_JKCf?4x6CIQKo%l*KDqC1IRZEK)H!$P?uQtoV}?U$F1{?A$L%7pR(AowV84jT9+$ zjQeLN?dzZV#Xx-%KA=WKc}}taFV_0aOmC~7N^R)uC!^Q6Nt)cez%8o6D{~jh)OB6I z#>3DLnlP=w`4%@8FrR0I^F`QT-H=vD%Q<**%%+13Pzx7#b*mV2?19tAc^=gi zjx4?$O2rx-#r1~}3H}!1ELfa#UMnyCWWVq|$Cw4_bz0fS@ z=)&rxNLPmR;Lic{U+_NyM>b zqYt0kQ!Mb&lstS~N8f{)i^t;UkvumM0y-?VP>m; zW2%cueAHi`#Oc}P>Ubgdv;JZ!TNEtQ%n+KfBpAV%v^D^`Yy;go7M?05r9ww?hLkW_ zpBX#y;nyRmGLD{)VtKouPq8Xj5tE{Dzf0!^%xk((;1dD>3(UBD3=FL}(~*-#tZ!L9HXrg-ntW6an@)IXPCAuAm8kpM&t-ZZAME9`LOR%1uz zp+L~D_u`JFXc1ViC_Wddve;Ma)mN3{s1n=AqQSzSs@0VO>lz0){dj|pEc&|A0^I^j zgfuXEl+4J?&;-LvTRr2&+tSDoX-nz3$QXh9NJceqI09wF0hAaoD8eP3_k+_l)lz&_ z+;^3a2V{cpS-_1Ga!aR6QvB40mp$;bP!P3W zyNxu<@v%lD{-^;cG6J)z4jJvZG#1!r3eB~n@oSWjAIW?J`JjLA`-_HE8>ajof8GJ? zh7KjkF{Z$ixJ=(fnjqCcwCQ43ZGAE(*hFOfOpjhu$IA){!BX2{ zamG(5$6}6H&a<@lt1Zgwxdj_Hjlaa;&gU^n3A z1I#kB@!fM|)J@cq-h+FR#bzBvFi2CbYI?OXs9v?&L}_0m-qADpy^W3}jdKI$+yj*# z5l&@DJv8Bs3V~*LwkUb6Wusj}y88}{Mc#i$bv9bk@Q1mY>NW`|J-?qgSL!gb(@NLp?R&1L+AVNoN=ZK>Jmy}e z>FS$l@f%X?{b@^o(P8u9`BBe!b1fa!l@!?Ytylm{!|5yDiaLOra>4f^C%{X}FjKjj z*v*j;DN3~IJjq0_o%`wIoe|dJjFCh0_jvuip=S_=0+{ z(86`Yz@QNH?UM)~$nRwXrfU(OZ_I}h_DjoPl~_DD`H_43p28C3=XKH~WFHLedmAr+ z?CQ#12X^gxyrHic`eZcI%1O}@{`lkJC1+hUg!B9aV;eCKtLad8HeE?I4foy!b-QtA*+Qcl;mt ztsfXnK7|%-X;N=UWRb6hACX)_mtIA#!!e2J{F7DhQioy#j>!ANB;Lsf<_@Nl-AZ*8lU%3fi^Qk!B z)#F{lxi~$vxfxA-JU6|xnKat`lXr{^yoGT-ExM@%Lf&`Iyis~`OmKdFfnRDCE@zp= zsv@f^j`%&1_nvFlK61yzX5j$UGH(QVo9ZiVf-pNGpn^5AZ_j~YG%LctP7<5Jn79zP zLzFsIT&^JpEy+{pT^&6Qh7*Xw4sjUW0C%hnTUqChH@4%eVYoh=3kC5DYzG;RZ3bh- zF>-a|9pEi*&lLOHWYs&70|}yz_;CAq_ou9TrEBc#p~|XF*;F%EzTF95m%*(sUTEqF zyI&O1$nEFuriLRGTiU&#yO6RlcODL?TkW^<6+EXyi<>X88|}~LFdXz%0e81=RS~5w z(z(6*lMK7+`x|*AbPeS{rwB=?MgG*!KtEXID=|pWxogy!mZa

EzHztjWqFFf(bG25j)C})Aa z3sVM(kFGCOR>Nkw+v$*uJPv>~oNKJDx$3!)%un6?#SNWO#*8d~%a735Y^-5F=@)Dl*4|8XR|4)h}Pb52cs_yiyPSwf6^GT zR?W@Z`jI$N_1+1%zR`4ZVZM3=M?TN_CH}oIWleWmo(S@tx`CVA*TJ%+bpS$jR>K9! z!_K~ku>O}F2~v5X=q%R2`#bpcwDBX1-{m+tum06G%l`v$0E#Te0dPtbC+l%cQ1D11 zQ?*ES^)pKBm%i#pAvdW`TO7D{+N70eMe_i<_KC5g%PNWF1(YwCbJyTGs)!pR`%Ay)v8F_78R{xd>>M0YaTc64iN4#HCyc!+ie?liLW% zlqztnUpaKQPZi=HB&B18qG z6BMLM6Of*O4G}4VC_M;D??{J)j&!A$Kqyj_F1?0cq(r3mPUtN_2!!P3zxO`po^$WF z^)>5RnRBf%-tn7Yr82G=PnfK2?<M@YD)D1&u;NHNR|%+x_Gh&8Fu`u zI{dzzP4yGEtKf3y2h zB9mY80%B`d={JO*Na}BocaY-o_eb}l=*Ds7%MS~w;ETaZ(uUNopa$|v_LYJ)LRVnS zM%9=SrdO;4;jnh{xyf&Jbn0$3=%q6u}CijiYA*+6L7Sx4&nX$BWkv*+~OYgd+qk&7Un+ zsaVG|o(I4Tw0=`XaCm3>y-RUSOYa>jx0Mg=8=A^2GL)vRDVGtOH6@|3&ZG16_VJiX zRO_eK`CqiRX8DYedn<56d?pOR^z4V- zR(g^6vbGUUg(f3aKLh1fKlv@r@YV}iOzASlh zm1(mhpb>jCSuBkE z;B-C=m@rfip{Sj+XVP?1Cbw#r(NQTmz?T9KWXKNPMi4{*Y(z5ZZaNBaQQo|=X!r2X z4#&GE#y(p4#a@GOlUC!R^6jz9CC#AO7bwGxNln5z&Cu1V8qTFIJY+@pIp;9jpRrZa!%P4r{JISBo^NHuZ|xTqn5q_v$^B#&S z>$so${gCG8@u>C^SE2E{wS|Pc5V$IWM3ijt(okSc#Z7CN68^<4#v%(nC{Pc zzL@`g&p8~>>ou8Y#qWV~VazHw7(Y&hQ>4EeknG!!y;J;QlD~;0*(Zd&;Q+bG+cz9d zmwy@t$p7o%v$9nP?BVGOjH9jCS^Am{JkVC6OPAGq2!_+Rro~}s^iMnvZAQ_0ho7Eu z^OyOF5b;_!1R!YhT_U#p!J8%OI+|-Kr8=Rdmwq{98dZS8^qoP zx;((*bXpX_E1-CEqE)H){+(WXO`Zq)b-sqe3_P!9;yc75S(_qg=l|-#62|yQXUMi) z-Y5q)N3Tn-c~|~U!KU8FKkj^3(#+o-E0(|CJ?y*#7K{IgUcWoP=I_CHW^R*V%=_<& z$?m(%KQUDRVLS^cjVtyAUi11WZeZ3o3uA0Jp_ccg^cnt^@R{k$8$%u=Aw!VUrvj{? zx)31{98sMBd`Sw@i<95Ik)QBXy@SZ36BCX3S(m)Z|yJgva zswQ#Om|i-aPF|X$NIJOcpy1sfZ**@VszO!O5&Mb0g<|z~6H}v~t(Rreg$Vd9{kp;o zEh;3TbMix0`9-!dzMJPW`5O`apTcN`Gwbi|?re#JT8Ze%q-vBy86*jZxLXdx<$=e*G=Kkbcpw0i5+waA&k9G^a`QK09?>q&0Db*U-IkF^PY&DgcX~gZ!k5Zmryh1A;El(1MCpEc_ z{@3V}U@zKN0Cl3il>-v0stCNPg`UI?$5DE#{P!V@*q zFZypc8{;3Qpnry+3x)2U{{ppsGG?vHh^bz^!X231V4RfY`f7Djl#>SlFb2#s82dnd4WxT69?Jp-iGMV9Q_o+B$0|{aG@m+cfES+BT_Ohigi&p{= zD3SE5#bAe6;+7yfoRvUFmUY9B>6>H8d}YD&uWXDD37=r4pI>K5!$oBW#22T55>3bW zuKuL7X!XTmFv0_MtDtR3i8yofL4XWf&1x{C|AAZ@AegDq^_M4>w|C!yDKw|x-R9*# zbCl9+ACwr?gA$Z;S%kgeao)lBgIh^r-t3Le1xRPv>)O!g>%SF-$9td~;Zlv{$pFxm z9P&jmz;q`RV*j9lFGcolJ*I$rtUu6l_Z0jHYAf%)TtB&yGGV%LE!uf333=wB6X*CS zg?`4BB-{72&HikyJt~0s3vHnDG=|PJMN2(raYqWa%C@#9Qk3W=IG9t28*9N67>j`5 zhKfIh>xg_aoQTAk^K9WGGG`V9cnAC++)yZkD60hBo&dm}|E4Al+7Dz!U05ab;zs{f_8X*N zdf&hND#Fbcr#vTbp`W;xslm;nhUZ6ZoJEFW5Nf zF~ft+lPr@gpxn0(r2AxUK<{oUuvh+B5LAJ>T;j^w}!~Y z^A8t9L<@GSre>h*qHKV=NvB8P?X_2GAz!m8tMBF~Jby~vYT*2@z4V(C*;PI5^A2Un z7^z$V*CZo>JE7KH`qWXpdaTGJDYK+kN(!S%2?ju!rbYw;{cJO@w^z&I7rYq$eCrFBJP?tvVx~IJFFb)(`%Ac954+<$$5E=L1f8}* zY>ksndAH<}ZO7TCybQNVT z(>J}*O?ypbc6!i;T_fcSIk2^N&SM0w3`jgnYXvF!4g>Oaq(W^UX{DSEFhf^vC>dHv z0yzxX%zj3&SR`NdW=vhW=cme$i}+niqe7u4T!~W&#XLd;NsYyvM!vi`*IQ_3(B@#EY4vDSnzuH^lC$PZ6 z!w9)gZ>k0mU_lkXo9+8F4stTrfT1advB2x80!@~g?Rh`-x7#I4w{#Guc{z0j~4e={DsFE1Zcx}nFYI4 z-GK*uMT0UwU3;+-E^l1V*E@q+=TG~7Oxr7rgI%nL!-$ZF=c>lUJmT)+<#90aFr|Y( zg+}sVE@klAF{x7Yu@p>sn6UBX5q|9T7a{3v>-tFv-6sv=+a(9iDhHb13Im$%W?Sz1u`Ko_@IsqRs6xn%C~OdTq#>oft8NB=C8%vW3^*ol zii?!!4Ns*$x`5b!+2|GBcebxiocR1o+U0F$|Bm~s{x~|J)gzmj+j)(i8Jsq)fmqrr_{raVnNCD=s`H5ISfPSs+@H1E$}Qy7tSO{6}ZOL`t zB=~tG8y<^-P3KnR%2*@D!oR1YN7w=4Q`0EiouYb<;Ef1&9oO6~3VHH^uq#4Cm%tQo2SbD;vjq7eKPb@r7K3) zV7dCyMOLkE7Z9tF(&ekahHAdrJe+(q;2u;&z<;XWJrTO1Y-0H~zS3B2%4P8?hj|!- z8!#74yA$|hAR!*_A*Z>cQB}qGDdZtkajY~z9%FJb5xe*>p};A;VqLkL zpzPpwu;H1^qy1OpknZxzP2}o6LTKDK349p^M(8r;<9)=ko^~7NFgY7=BySg3Z!w60 zt5Wiv0C#YBvNp#hE5eth(LgO45a;=SE)eQ8t>r+nrR5M+0GFeAi>ddYBg$xD@yD{@ za_7n%ocFg5te1u&Gnhlv+E{8M+@@B7{G|inbvpCx8;@;(u`p{*OR313Z!PQK*;$ZV z4TEgHYJ${5Z?4@tj!3pciv_9U+Y#UL{-wRVfXqdvcUgA)sd^~1to7l@X6Dx2!4sK` z@C8?s|G4(cWz4~Bv(-Z0)qGN5uS;>M3Rd+%2c;Kx*&lq@Wq?2M6TR+h4HV!|(N+PG zTzmD4)F-v%HwEz zDP|~^B|j~5%5g|0yBeEc%-};sVg%Z=_G<{7$9SKfo$3bFB&PQ1LrS)%)*N zR7012uTU)EqN{TO>!`(7kkUL|V?UmRYyJi39SIifPMi4ewu33f?p^i^f=7wp*l^V8 zFlq>%yCou3U)1?Va|4ce{x=p{%lWX3a6bT<52RRyqUU<+^f!LcAueh7(BbycaKu!k-W22@c~QW5 z$c(f4yjh#NA~QmBPW6l zV@U!n&cLme#n6{wIE!uV>IRHDo21t_p!w`q?>%!_{h5)dVn1tkSZNx~%6NcowQMmg zI$e93FjKrY?SZG^@7bLbd$?JTA#uui$rSGKPa5$U)&}_ipSQR|y z{Ja$e7Vv;$Mr&jwO#F1}w=sl-wvcrR`Y)Beun~oi4!L6Mj1QWTmEZ^T$s%zh-XrLZa_;C0@?e;|4 z?+PQ*&CM&?Y`B9ygI?Jux#+SY^p9RSU11rVuMIWDZ)>?)6H$Dn;+qQXDwZOhgJ-0L6ATg4J@^^fMAojan@UNY% zUH?5G)+sv_n`0qDljXDSW;{7I^b0|=gEY^vG9@UwG|r*c|Bt2lzt-s0g8&$1K$iBg z_9V@nd^vzO)NeT_V$M5pD=#iN`_N(IK7X9j5#}%<+>i&qlt9B%*7Jtvh8J(7;iQ@( zQ2IHziqVj{3Ru8~ea4kU3b}n&r(gm*3!2_gxO$|@2B%iSaQ%HxF{An{>I$JY+M>xp zteBV#m7Ciq4+yzhitU%rmShK#U+P;ytk;$wH~fZfbAxl)HmpFc-DT(IKVOrhDYzrv zOc?*v)9R0OQiAFXvXj3bL-i@HmrA1F^d(=vJ~6maT{f2S)jd)SJV4rcb$rrl z-@w<8E;ow(QQ;aj3Y`31&N_Ob+{Y8{pP9e~&VgI41X9l)$HvV+rxc!A2#|&A@}(R1 z4ZXTJXX6?B9S^aS#id`nArba%qw0xV)m2g7PVS}xOK@B!L*l~SMcR!mckiw?Nq*SL zh!nsxPk%V+>xUue$6)2pe!@oKERADM7iwGUE}+Uu3=eF;cYkphkiJXxM&7KrM*rtBS8ObWn1_VYig~gPvNr>y7%ZfKe5q^gwOq zD*aHGofh!@B@oW22hxg<0$%A|$&o>?FVVbs`&`o3vh;75!{d3DX)_m-92JgwX`3Ia zR$k3AnhQ5$)$vQVvV0k7Shs}V(8=dZYfjo_s?6-Yv&NGVR7b{0VWjK)BAy?hLudyK zc{br?miH2{W2s#2N8W*pweG)z-6+F$pe$x~4V;uDC(PGtTC%SQU9uT1xDQd)qPF;1 zka}TEDKS30Q_?;jCx%;>RFY6PEd1F*+>k#R`zUCZDj zS&qG8()~U?&RW=XpD0zpCayh~n&TOA-rI>@thCz0AIrs6ShK$5s!!(Rx(I&Q5+w(6 zg*cHq;&k^HbR7N+zlohP9}8!K-IW%Fx6?m+e2X{h*1vB+1b9=@mlCe;!%D1(xO;=z z^~(qsP+><>EG6xx9W=G_uko<;OMj61(>?JpscVWBTDI?@rh6@+q=eD3;G} z-+TRz1qZp;kvFy1DS(~m&qtA?wJeVmUtOFED%p~4_=QZZO3^ZCg&E28j(maBU9-}d z&Om!AH0k**h^3pJJbf$|4|Y4|-`AmJHPIi|3EO(8nzAztNG&Jk?V4Say7%@{ zK6n@x0p48zTflR6&)yYp&SWZ0@lGm*`226a-Uz`eDAH!1dNbhT5>x4-f3`u`HD8cw z$o(w8ljK%gNN26nS&o&4je(QZFR1wsmq(2yBS7%UoPzVPgS?ke2;qXK{Rmq2KgFB> zUBv-f&_K6nkcT9yTPQBe_thV_TOYs!W5o3MLZ*dP2kIpLv?2}RKDE$H8g)NQ{BbpDixSB=(DS=fsZ5|78-PAG z&6@_GC_Ue?sJq%6C)R-E9M^JtPH^97f|AKf)U^o9&rcwhS3UinhtCGc6R_rkzR$n} zHm!mej#_>PX|>P|{v04&FVLd&Xm>n`%5FXX$FJ!H3y*IO>iyIJ;t`DkeM8y(SNn^) zqy5BxlSkz~pG1`eGoE0~#roGiO-%+|Bl+=F-BNXUtE%MsYtvlx`n|I$``rNe#4 zYwMp*a5+>_)h7*csf`^?;3}V`zPpF=x|G+bTd-a3eYD6W@yR>kyaunGM z4AM>VEna#(b98i#b1pHUJ$R{N%g zz271+GF3No`8sQ`azj>>0{S=GqI3&fvL5C1}+2XMK8<1?7^9wz>&O6)6bNiidfnK#i1c)e0Ou@ z51U_AR&8}<{Z3Sm!d>`y!G=-e4j2C3{bC&>^(r+;o--%n5S9cgFJ2Cbf${vX`Nbuw zy{5N#Ed?h#v}QxCkMtf5^)NI)Av3I<>13F-vVwWbI|ZR^emN7$lO?IuLO9ryu~Ga~ zb0F7#h!@K0yKB&J`~%#{{&)RHO2_tQOaEQ)qjBFa)xfvjvmau*uiSGY=tECyoNw9& zWT+q8?WI=o*q0UY@BQ;L_rZ)%oVoWCS;ya*wDBcaVP8?~XY9i*dg6gFaLUe($OwY` zd>TsI2E!wWO9NP9Fyu#(V;|KkzKjjFsKE%OpVem@Uju0eZpnq|3Rqk&T+{~}Lw32| zU-ZXiAGD2vUksKY&h0{VazP7bCk4L}dTUe@;Pep5*1vN9McR83+mwXXj>B6tRo-F@ zcy=}Cx9p}EzK<^+Gc|Pef7bHb&r;9r5I`PAX$llYDipsd|`B^@oN z)71?$zy$S5lQ?^30SUtliQUULP-P|XKDocZBEjZU?2na%-@yZZgPz|m$vxc|b0>&b z+*&ru{s3uRqn{O-9rg-&+^^ED&Hco-*4g|B=rF2pr!UdW@vCv*SRW{= z3MuMCY4{ z?{g{Gv^AXmejYoU*Z|-gHR;G3Y7}c6^A4cO$1xEsm&>3+`7)pX#_T_gr2jsVzWFog zmY-uS+1-|#OLCn`O2X0a&bN`p(6zoc=bop@+n<1Xn8QM@NtT$^4CQ%DxtN<|m8xkM zKG~`Mgh_SV!h>Lhz&9Ul@l?f}lg87<-C8H6^VK)wP>;tS5U+^5y|}^u-|}ro1I3~6 zxxlYpW6Ob`0WRo|eR0Z))ax!AX@Zn6t|D^`OgpFro%eH!E6Pl=BWzTaFYB9B&p`)+ zX;um~vm%r8*)!A7uk26h+0%53$u-~f zv0Jm2T}Lli(=bA0)ItA(XFGqTczkDnZoW+E-yNn&&S~u=TX=5_f^cv2m_DXdC}Hb5 z>j@q5YUdLB&fd*7tRJTY@puVu-SL@pD7amQ;8L4C+kfjeo$}@cHZZuHK+}5pQsbtj zKX0bPRsyYA#o!OvhCBz%{4hcsj&!l_z3#zomH9N-lYDG~JnMY<;~3iKU;DT^G1{4P zzUh1cEP=KKrrR-zSza}fx#^I}tCcr2+|3y*cC=HKo1XTt%kyh7t{NxIr+m8Alb^aM z?SW~G-O#AUsUIiXIsto@+2a~+i~{a6X~mw!_`fNXX!u>Y&6^TM>mjGuiwrgsy#6@r zWUXSrZqY&P5!_Mk(+74{rF4^~xFjS_}wG z-fsw;aM!08tw(8?uN4N2#h1f=<*As*GF#kV^c0%ZpY!(RyL+^7Pn8G#uo>(AW9GWZ zupD>!qO6|YXjv@gl#gQ1qC#1807qT6}TTxMuK!En)06wud(qLx;EK# zi5&{6wes2+?<^lK%BssmV3-x&JZlp*$3PmFdU7_$8=Eu8IpMMs=v0m zxZfalrQ~5`hxIge6QE5gPHeH?gQqGsT-8KybF?pu{A8zTb0~6ebPAsqsG3$zwmiUu z0_(5ellP@cI3l7^WcY`KTLE^jtNy~1r(035^}G&lV3`ei$?p?3jyor%{zZo*VFs$uW`U` zZI2q_F$G<6eSbUYunG2c_T1)sX5KY*}$B#{_WQ_&^CvNR{(Z(i%e}iAWa#4> zd3WPuEhmw`)QWz08&!)cRW0dKisUN2j=mQcFZt0$?&PM$rSo`3kAAQEhEuugZMp~o zKh=${vN5Gh@AhW1qS;r_zm!GgSc&Z+*4xq@9@Tno=$|j}*ey&SN)9l&Q~-LsLu&wa z=1oq+%NO^>tFb*2cVFAfQ4`Hii2v`pda4Q9rT)IAS{lYWMR48{(gZxQmUAA5n zN{Qm5gU6DIm+2rTCMH)x+Nk?I*6%lGA$DSX_|Cw7qnn-XLbp!b#M%0z`hM3tQ7{*; zEkxeBEUoXIKtCKucnNt@%1Rp+w{x50H#fV@YCKC9Q?Q>noq@LFQy<-Ot7yAN^x!%` zj@h&0KmXC`C&%^y5hR`dIw_Aa&&(u?d_m>R8I#Uqded1PzxGQ$H+K(|J)|GjorR~d zGyW!BD(U+g#U?CY{{D|?2oBmbvj>rI8lm`jz8(CnhTXN>0?L`keCgwl0OFw%%&V;< zJQMG-rwxf0ZZ->p-RV(ij`ew`+1a$0WR<#BO+eu1GR+d=(*EAU1%=aOXJvfIJS z{axw&99-{)bqCfdQ&WM7`lg+LIG;xE+g=v|yc{#D4tyCmChjB@@`NGMbtuaepDO`$ z#}L*_d8uV&UMoFc)IH18p#s5I;?}Kcy>;QQ&@HPPfOP%yUojWE@3PrnIq*?}yek!Z zK8z336o5Q-Xx^0$@%C6ZiE9yNCb%n>DH_l3LGGvgn%*87Kg(pfxtP7WZ_sY*pDKE6 z%HVGjEbm)A?%$!g`inwKg1OE6G`={@yt|;yY*J>MB@Wj@;nx7uaaBxJyKv))AHluO zuK9Ct+?Nf&GL}Tv5W7sO#X=%Jmrw29DO_OE=RA|M{*_X@W>mgJ!>r+Pm-SJ#FkuLj zaNb^xxtF?`1lIc|ipzTgwPKsCxnuD>BiWd$kJ!jHlbAA~{)3ip(QarI0eGC&V}zG( z%60rrmF>0mCZr)tT+2dsVt7&CW6}5N8!@*Y6N$J093!g(yQmuDWEgPP?H8@W-@|p* z9`=1c6fQ7ufwV`W3vumBd5&pv;G6;wJnlMa4vUU;uep-RT|9tN_a0VDQtU~)Fb*NN zP*HaBn(2)zb&{=7Sd>ZakWNv5B3{#><-FrSw0Ua56l27_)IaOKt}lA#@sT@|(2u;N z?NVZzYT!=GU|nD}^GO)K`iZjZR!oUI3p3V&%4LFw-Qo%z=q2KcDP384h}iRS{6@HA zHD;jnd=s5fc7DPI{yEf9?8&$POO?ta<><(W{Or^MhEXu99!28m1JDp3!~xDw2F*`= z;Poec^n7A>J9HRUOaA$nXmb&w?+gv3xQ&p0d~(`LQqExfF#7D-2a0QcVz88} znAArg&Wa(iFuXl!Fdax1&{z&WG+8{l(@%`$>o^r{O%g?RaI=7~YzWQD?-%QR5baHq zL7xs%v{-(`0X6+qze{U4K7uZ9JPS+}sv5p2B@RN@NpX7l+4D&R^=;->LSJ-nXB37t z-a->pM%h6dN?+d!QTiU#OjpK#^=1KE*>=GW#IPDHwFe(oKTrwWb|czXdJ1nnjpq-W z=O%mK;u`lma98w~f=n^bLWSWwresQ--Y;!lr`3nZ{>JQ0qZkw1YQnO~Aj%k$YJ#Ng z;~a?+ki04dL{qnBejg*A3s{r1`ffR+JhO#GS+WNHfJ^+SaX*x?M6Lv*fa2NGS2raT zl064L%0KBTa56Mc+}E*M<;1V`dXnw?=?=+Jcd#pfCtFg6hv}$zU33pNrED!D6AH!YLO&%z3|HjMyUsSdgl%2G3ITc zuF~Okv#v5RrIC&qkMuZqfE47Su*QFX)|S@pw4sRS_>ZSjWaeH1#11(EYGx^^LztP8 zM=krWgNk*Dp;I_DP6ejnZ`bk}49ce#-)gMtWiYOJdZ5I<^lB1T3i=XO0M=5#qEGxDi8J!|8i_(hl8Q~t zWAXFKPrdHSlx{sZnt{0~4cDWATejA0 zBJO0j?$OsBkXHCFE0X`yT>YOeD|#mIfGEessP?^36}&0SvqP!^QExmqTin6)u;l>hnF6SG~pVvd|^OhEzf zzsi0Z?#%_b`M#p6uea;(@Du-`S-HnuN+-^8dsScfif5C9eiTS&auyJ=Z_6EJ*Xq}n z3EYcOO!E1Bu$_QDtc-&7$|B8mqrbdg4Y_E%NG{Km^PR%Ym})DrJpSeJ&U+R)V{&ct zIj^<-uP#(JxH3%r;0JG?x~5#1JMruLteeJEJIAS4pdZ*1YA%gGUo^eAM#4eF2IicX z;It3W_K=&lP}~3L^s43{IL-UxmmfL&82P@f0($aSJh;TI^Ey}-OY|b2N~pB2kL$S^ zEII#fEPu8LI{x%y;axNh_|gi*LNUwyCyjGtAy#jLhKr9mvC)}ULK;Ts$ zoI_5}8nk@MM_TMy&~o5qItwaSSyagP^1a;BbmQ1>iY%jj)Sv_(>$+BBIL@_zGu0`HvfC*F-CrF+FFsRwRH$)-3Z%SH0XvPW+L)R_Uoh3<$(4JR2KUV;x|fgoTvy)4ek9IiTwP+?Uq$>AE<& z0ua6M$$evM$r4ha=$986xH+fE$a^i^|Ak`XzyU{ZVTG{o@PV!JYUpUoa}ief6XuX~ z{jZ_DBl7NLwZk!me-1TD+hp&}<<3l-Qo%EtZ|pzXB~%TwzFlDF(O|sG@S(EbA{+)ul~FRI1|!0{TDc+2@Q;V&B}ehJ5(LZDBOb% zso$0?)bkyGKJ|7|uXVTh=KP0(u71KlWF=K3FWVMSu~Ho#+YXV9< zx?S!!gK*)cM6(>D?$?GA1#z5UpIOjC5%L1=_HNu-v#mjlNxTgD{9v#pFkRUuI`4GY zDRFvZ^%;-9!x)Y^1)x-&$|5I zeer)JE(so>X47 zKYZ<-7zxH5XD5ainpYooay0C&1iq#PtA6i&ac<6zT$lwIdbhF18oa`MUhLf8cvfPJ zuB#Wz<^S4sZ2a-=liQ_Mbb;DmjDvT}Vp;qR;`%f3D$79PJS_5~7Qd?9E8EMr$7d$| zW--g3eIOo|!dSL_q1u-&0L}x>1`OEOEDlwKq&M#m%x88laM>D9C?N>$;TgrS7wBJ^ z1y^nt8)@KeQR03jCRot1V$xrz2=M8HD6M_n^xT+t^>@D`hHzyvg}Lh$@d?&Y(`hWp^tzTWE!Pfi_{h-J%C zH|f8(_{Vq{FRf{DD4g>AeY7x}Hky0j}F8eU`I&)eDUoyb^)T2?ayM3_Z z`#Qg$Z3$ocqk%V*5@NTE zG!iSw1baTDz3phkk+|pI9~FuF9eJ$iTmLNXu6oRda?H~>{+b@l*o}o-4US@R&8VAj z!>FbZ2R6SOC9toBPMM3gznb|%kURJCkB)8w-zEH@EuWK2Y ziY#BJfXdJM?w6>#!?u!%rO_@g-QuY~oe{jXi`U5p+-0|<9@Mh^6TadLSiCAG?Fdd= zq+0$d^m;b$Khhnmm6S^w8nZebIC+dxD4=O|L!=twmZ zNaMMTNCMd|3h%m3lrWxz5~OJJ*0 zE8{@Es!k`!L8RyXu&%=na#~=)%YIS}E-79I7;8xX8|e@lJWXJzeieBAS z_ZUJn5;#H5@VZ>h7WaIGxV%X8A0WIu5Ahn1{9!QxE;(q~VZ&(6izMX(3o4!CO>Dbp5~&r zAb9a@lo^Ul5{{9o_A^{?t}lcsch9#xxF@J!*9m28##V8qgTB~wP|;LPJxUh+Yhot$;OP_ga&R6;NI-&(yHTIO$;i4Rey z+=)gG4hd@*qleQ@1DJ|gh6u=94GZeLZxb!zUrXmXM7U63 zw=eeaGi?*!$sq8y*#XM|S%2}hFyMXy;A=unK@)xFPOm1E!8OC99L^7g47LBnE-&KN z*Yd6;OX|-HYe??}JLTCwhX7zIiO!)(aOH;cUdfi0j#4sKPfY$<_B$1cCWP!NWGI%7 z75%rwvhIp{Wf492Q)js1e*ZvIFk2N&uJK@wNF%AF`$mgcq{&sGxRCZhYp@S z`ie>8n0+kN<#MmXj9;t9S(n=hUA;P0N?j}QG~ddgCoGCc0ohRB36e5SDS54$bI^@| zUMyrBL801eQt0riP@NiM#w;OORtcOVdu#=Y%Y3y8`daBKc-u7h2bCCB?_X{I;@!2j zG+NAuEzU2FPr35!Jks1PoYY&LVvNoNL2^q=Rer7^JV3qoQ&sL;hKF)I1~mL+z!es^ za}@4o?>~|F$MI1*gOgOi@gG_vpWM&8l^dpdI(>ngev|s@VP;vDXDh$oz>aBj(cf#s ze8YlXUV2)_i`;KY9Ll)(*SR|ma+y@Oocs*kb`kl}uFA#lqyqWxiwexQ)y0XkH0)hu=JbdMw z%y$QKb>j7V+}5SjvoAdFl4&-(#VB?onHd zM=q#{c{Kl34r7v@}C#RO|^o=#RJ(9!3QU>y1f>Pi%><=#s2%TDh$m$@6hnd4dv^1Os zdpuKf0~_z6uh5XMVn|tB1<0u1iK5LGw}LqWRyrBC}MCYqeuIF7AW`%-1<6Pyc z`28eGj-ON`CKiQ5ia>1(jmSm#g$eWR1ZPWG7;UQK!{LIMW(;k;Pcrgug1boPk}-ke zc!-F+TK6RMmp7q3%5O=9F19?r%1>oV{o2q`er+@q`Bn~GebO<_6%}cL%t9DFl=gPw zpOxy?S=m(WMZof#*z6~NdVvPzT3p23=(UK0q~H#)WO;@3L3CUR-QE3!8w#tdYp4*p z1E!@^uzSGF7&n813w{Vpz|`v9I+aB-n&CZG-#(Y zAAa$+{c-PoR>j<-tAbeK>7pO*3PylYUh(uoE;5j3>-<;lSD)qxG8o~TeH~_wJyo%= z>rE)C4cqk5tI-ZaA-LjznLTz1-+CVo$q9A8_aq9DR);-!h1XgRi3d8~Z-8x0TjX7h z`OFH6f5P8;KqLCxfxp$a;FYVSApN7SI){Rm7b~t`c6#HYL+K3$9J(wiGvkpf>8{{e z@TBHK)-$8qTQ9De9wc2;OwDL}FZ;Ifzwr8IVkf`vzTCfooz@k7%8L0ZnUv;zR!m0e z=S`6|24j!<|wQskY4tqVbG~y zN^Sy>_UB2woQ`<%gIdm})an<`rYaNJC7r)Cm?Ca+udWlMDLCH{f^&K#Kp;SV4Bj+~TI z2DXaan@x9Kwh`BotWm6-BQkz#{1A{fOyqNpxM87lJ_WVm(;A&M)v6-)gsKt7^*MFo zG>)2Qjn26;mx1pcCI;xRA4%~W&-%A}r?aL(v*RaC7MPCs@T=L;V%t|q=1q<(dbgh_ zg=n)cuIL}`DERFthf=2etmRux3{tFZuMDfJS6jbb@?O_q^d_B(^wkQx(OTu_YQ=Y% zp3*O~K|y?K-b}+Z#USfF3YB>%_)Q3(xS2AJCmuxMRKck^14VJ(%A? zzTawMh+;S@%jC_)LE@U>#mq3ER=T~NM%qIEF9@<%WwLo?%i|X9 zZ$mdJ?s^?hn%Zc5PMh`c)0bi~JP3@jQUc#f4$1Uc!B%kt{2x9phkdV6mTFVp(D?iG zaeS93cS)y6bgZ<^F;>ORAQQ}V8?rZ1lP$XLD_7dxSMK6!iaW|vY}}(&Z~pQouB4C} zTyqDXeAQ^Q-B)a@3H1_Ms}0v&5pPc5_xHt~gbTIRf6y1z2f59FXB)+ZPuBcuIEgPQ zW7YkzqJj>-CSchGPgtja<5TCO>-G5XPvoy(^sz_A)SB+=Q(1<`=T3p|@qD?%nt8a7 zXZ={ZNll~ek9lwvm8q27U^+``9-_RZk(WhR{|{Yv{nzyO{tuiKly0R4N{F;5&4!|) zA|WVUf&$W=gMo;22uer{MMR{#8AuCkBFN~`qiX{;SbX<-zdwDueSbTDz@BI4T<5y( z4`6aM(4iKrHnur~Z^B6Ap+c~{F&fxP} z{35+rmNQ2_42YI_9k@Kq2BE-KV;Tvp;sxPz%HNlU3Ibda{05glx#d1Zzd#<`Dp}9V zd95!Mag=9$TXS@%{A;NdznAjr{Qk?|JaF7MqxyxTmds&Re`mp%2%^sV*6=j#S}t27 z?R$?z%3+B8V253hr84_mp9&)&fx4G_59-Xs66idCO-QAt%~yY(js;o3i^dYlGc zpNjoEb&Oa_vG?!>r9+AFJByS5X$BaWXe!P4ZfDp|)n zr2!*kpqCdVXzlK7mJAFlbYZbJi~gczqY<-#uU4as67O@9{t0P{C1d;7XTUmA_>JaQU{ydthaqW@#b(3!@ zj(L~?;_9>Ag=hjA*gkFa{e1KFt+D=CImf`6EcaQj;Xx8|+_e%p1Ss(6>#=)xBELDE zSK7VMNb~+8`SUgHQfJ&G{w~osE0*OCeqiAAag)KO#H{kSuhCVXhfcrh1yvcL;)gGw zJ2mw5{HRR}Ti4%mpS#-&D3ZXpZ&sGdKS)=H1%Gc!;?uC`Er^_;k(n{sDUqbE@+x=A zl?$Fmsee` z0aHt=#IyG!8IZ>99<}n@4fd+$R#f}*G)q?HmV3gu{!+|p!CNsXMo0F7+Vej)U5vrA zr8?Hy!(^u(F{onitxU51?QZDdSsru(7=D^680uxH=BR2C+ftihXNI(m8D<51_}gex z^;#-gO)V&*SwPKkp?-PR>vF=Kn=qwPBrHh4IwNPf*cJ8V+4!2{`mU-ae^dD6yw-Le zK&F{-P)}0a8Q(-#60h(cdx)B!uW2I#6R4yfpxJ|#RfTTOM{qWo6 zqg!Sa+rC~l?=T@Yoz!rZ>0N;kWt6G4^dKX5n=&C=U<)q)uW6}&Ez|-Q%}6q-f?<(M z7O|2U!2Br$C1FJY(c`d#?snQfpx5`FJ-Lt-}tH{|!#YFPp`@CO}=bH^WM>?|a{)tUO(;Q!k?e#ASk ztWmcFW$PWLFU}iH&vcz!yg5_$3P(yM@g`sLa7ftnC#{3o^#Y4Iw|&^< zZDU>|yaYW8yDXyq?f5LqXbXFydsV8N<7F$;YPac^z&@qpFqCC@10Vh-ucQ32?5ZYD z)2_^4u@}D{X$=FIIk7yAyGLk-wSJdNmjuVWQa9Nz?cDp(ryzDLq{@al$tO{`CLr+xJf*@D_{H z*9oEdpg`9c#MutusoE5hyZwLo_En1Bs-S8+4{%|esx5Qt!hierlT+Xc!qVnJL)q`IN9N5fNs5qJHR4U=hn!eqq`+<}g2CY{=~65#+_UklX+ zZr!uK&ULP$%=NdGil~#i-B9T$?Hak7=@DjhVyW~wv(u^k=N;5ce|=h94g>slec=K9 zfi9ktYK3&a8NY@>@71Z`sv6$cd9C5bKsdAKxFACqPO|fKO`gyIx-GHxQlR+rAWjM- zs1278ru6cv3unm>FV1b4QUkC4LCAXv%ZmGDN@;s%dv*``Dz)CB&p5=P&h8a2 zp~cMCO}yp#p;~_ws!n0yqSu$km1HwOIg2k@l0q%-5Qm=2N-_gRubNzM_jxp}>F&^Y z__rZ^$s9WOJaEqw-l)LSlRnL#pazcr+(a?$ZMI0)>_0}k5f`6Mg}?eph<902ePn#6 z-UKnVgeJ5fdx7858w%G{k(Lk_ELHAXs#``oc}B<@1p4=h()1s@NdRZ19gY<908~BN zqr8z^e4?{`-P8QJ)>le1E?aIxU+FP^uvZX8%oaSS>b%zF!FF11Nal1k=*@y^{_PX% z@@BnzT+PZxqT z&%1s5hq714{|(ZMfwg|?%L|CHB`E{#8&sXF8oh22?zyK6S-_oU7|hk5m~^x6_?&FcJablz49gX3Sz&sv_ovh4fp zQ7Le(;g&+*FVYW4Ux=^PrrlhNIz$DXr>hJfm(ToSP4>##1^53~2mOC622fFUcqL6= zZ1==bxMj$hM8U0|P((X9+^+Z7INhR*kmO=e6q&qvPr zO}`$CwI2@6jO3)FUw6fum>j(X;+wWTvaMgqN@~P69U(tW!Q6~Y16v=rLGU)jp~UF( zT2>lvdf z+=BEA&OG>fVaoD`zpI7EF-NY%J$IeoKR@G!Kr){09R(JwY~~41dOhWQrzAvZuL7sX zhFYh&j6W>dGBsFZsIQ)k+{?p#idU+%w#`uKA^Hj39ewl+P@VDFj{?~%)1*!v4g@s* zSPS*gKZLs*EgLX59J*_o^D$127HUt!p;w5>7Nqtv5MIqhLl2Sn;l(Zxm-p?VUmjB- z=BB(>;gnLjSkNY$Db)tb5%SHW@#jWC1x(|4IqkqV<50&~57L@fzj|RS)Ml|iiY^UXU304( zn_a%7AH;rb@q^09p3wH`3xK5=tKQs{^m~1q^6+!{Ftv9f2v|q7mHvJwo_<<|4EYMd z?^pD+jbGG*+9(!#kWUNbU?9ogzYk1fQ->FJBm6o;R|||WaJyO?=PrJ33SR%B0${Mo z*0kf7o{flAi~VACr}3PSmdsL^GYu^{IH-7tNT}O)$YA1wp0eNc5`xAw7e;IhT|vJV zr}9?^QS|x@;qTSu=;88?7pi+-+>7jkx*PKgX~Z&f3O>mak8V%X{K$ey3@%iWBvJ0C zrfvu0pO|;9Z`~Ln<6(rQED$aWv`uNWABR`e|Bd6_Zl8b3U=en}B_+S&k?&A$H6BKC zBDY>dSv`+TKQ9Vjwe26!zi5}>o#M^Ju|PWNwj4j3F~NVEId$*Kd8_ikA_HprMQU!A z@H*XrKTX+A%C#_t$r12xAS3$KV#&iHpAhiW+1`0kL_Ma@*QZwQ%an*E%{f} z0!_Na^|7n&MZjs7qMYwaf1P|ASLFk3jk9&}p&_^AKOWp!y;5ta*&()GkP@*>_w(!R zZ0&aWEANJL@Y68raaDcxAC2d+g*F`7Y=fH+V=IVrvUN%#6hjM}k@i*Vw!AjAQR^Ja zB6|*VUS#W_Bz~#p9ruQargbWrm@BT!6YVXk=6VZAyL%-m6Rr+wLsW_H-BAG%Z=&** zcrSbk5h@7#b7PiD+Kculw7ukx2FMUl0Zo4+j|%&^tA6l^HTUT0iTgEWIX28IjxzmF z?2`e>+0$nR6vzH3tbN`MFUU8^&s$gbrD0TDe27tPC_@jPmpj*#0q8%|@!(%?oGS7o zC`VFbpYg{y4Nv@tBi80vXh3%H^~`&piXMx#n^z(8qH)z`Ju)|%!^=%f&bEoO*OK>8 zxZ|H;Wi-I5;ziX{+3>HSr~8j2?yNbW?6JPq6UTo(n%8PHNQAu~SC6dg70JWa#E%Yu zHy*lZ(|aYk4>UAhIHThIfWM)Avzn2vE&N_axXutMDi|_3MB(he?(*8}-&@hd>`iZ< zG$0*vq^7kR^3C_IzcTJqLZt3DT6na(LkvcrUh-A0!>FX>6Nl}CA#0OxVXi<;{gCRP z#egyO_~BFAl3|(7!-MbduIM|oqXry~pq6WxjxE86<q+MkXpPakLYo?P~p^O!Ba6pZ}+qFt2nyTm4Wx3h=H6L<(+~ zSlbv@v|hKivdpO(ALk)x81}^h_oP!o|J3bZHc^xConh`DEyYaxw8Xm!#SnIVAl{<# z0uE|xG&k9yM zmM{5Ncv>tTcWwQ4WErIIC9-$2;^95dFD(e8bifn3cg<5$`e|OtS?ctcQB#t*E%`k- zbO#Ypj=7PEr8W*WQ5XP1$!3k=Hf`2?Rrq^N?w5W9-a@Q*lzWBqk+6oHNQ{!qrZIM= z=2r6nq?GH&!l~B7F~j`vH~UZiBzR87H(j97l?_m*wxx|x>c7wofmkC9c@*xCON4&dwHsRh<25~yuz4prqX(7W!-M_gx-+2@#r^EbLb>M{|#AdX{*<_2Z0XeqyZIu1r$ZMVoDc z_MM387dcq>`(J464h@S*qEz>o2Z`s0sg#a;(k%Hi#loR`6^EvgZ{T6x5ymKC*5`1V z7wfYRlN|+|dpMBTH#VfV(9rsb#%G>xZ@uRCf63!~nN{#U4GWZ={<{|m1QWXYD107$ zzd@MUq5J9B-uCck+CPJS#{KaFZJU{#ibL(yZ40*Tb7;r7Y1@L9Ea&hQ%)6Nryjdu+ zFt`16?Fac>kk&1f5k2;>obv8EsPuWHv?91=P7>2VrO}Rw!T5@If?244R2WOn;CJ{F^k9Dudjb3a@RjcQ)({>a@mFyQ;NcE6tcNJDYDUdFiq~9dJ|*Pvh|` z?Nl}VZGFG<$hhQbU>P9nqq^oBzl$?}&t$m`%$RQMFU7yykr89-%&?o=6h7go4!)gT z*^qmTgBw@!2{0BtbASg$uTq?)Eo=RdDvJEiXTnumu<|RY6@4Q~10fo1L-@<#UsYnt z_k%@~=&UlE`l7G(#4{AT8ot$~j*yfNuZ!+3klt)7G?+b7gPE37sQblo3UwcJPBLLnnp z9W_IJj3l+JIw;irL*QG+LIr?56`Ej=;fM(3^WK{jyWxGL4E>3~ORdX^s5D)@05vuR zH8jh_lpQR(je-O{kw5TSF^)kjs<#$z_Fp3xwGo@%(c508SocJ}haB*s(AMF&ID*X? zNeHM&|Aem};3C)*?lbYIfQfv-BmWn-7B<-ULO}}^D z(W8X+sRoE3-YQFf%4D+ZyZlfpy^lrfVw07cR6yWw*0#^8XM%0s1X*Wz_T^F`}W3A%B)+LRO zn%%qw&KIW~%8KLCx9zSjZs7VoqE#)JgD0o?;C{-r)%>c`E%1B*wXut&S?2PmSoNpa z3%8v0Hlbx4;@)@&g5;lB< zg*!8nQG#VdV6@%U*YAJoMR!Q<*M*6V0Ec*hczdn$5b3TO{I>)u`FH2B?^zaoWPV&{ z`XgE(-h7W;Pg@p6f(C$+eNEN=biL-g@qz_j+~aq zcy_wzQcF!RT0DQ??&@kk&LNWa{#md{RvhWyoqrm%{%HI93u}+z5-_sLt^fxlIg}tqnXI_Uu%S6k9tfA z9s4z}Nq7}VD9!T6=7+<4iFo;-cc-3d$TmqbAr@i*qB{sW(xG}#%QmYdK7B{biTqlg$?Gm4*E}UszP`Pu4>!a#WM*{SzOQdvWilP1cMtAV zRxBGDRafa`%iw4ZKE=mZh{X85Uiiuc{ZzXLywnsJFw83##@qJ~bpI4khtV2U+vLMU z#H=t*l?=O@r>r&ET~d>aQ+jv-suf@ZZCLYlR~1tQo`?oQ`^8L3{Eqs|(i2FujU5tL)t(hx6 z8Vr~1_4>dYy^OBrm5o;xsb-K}9va!rAoQSBO@2C-@i>^VDX}#9d2vQUU-}-Q%b7j* z=65DEZoF(QM1k*oH5wJ_Zh$ZtFiuohyA0}F9FU!LSIZV<5A%Hb4{*Q9LRV*S_0)%E z@Uv-w<7x)(OpAVUthlNsJScU!KB)D_8_e;wU7vO{nQ6GBPDR2_vqLI;@s>MC{~Yt9@Nb8k_P zK434e2s!tCCpRZ=zu5k9&aiCo)kzCq)ca9tS)_osv;PvmY}(+c-;+mqo z`lDGK(wpUFNhXC^cdD9=*wra%C=I=E<;WqT%DAcdnk@IU0ve zNWq3QKqL1~@cZ=fyMAdiVDcM3)_ZwPT$?jgPrMlE&$({Q`43AuB{(@?t{9T_sjD3$pMaa6J7?kn&h_46^MNdG6{{~X;T z;6gYOv<;vU%)T=87X4o9Gj4hncYwLx=VqRRu&mc`YVdpS0}_4ycl_pM0rP_7MY?WU z9)IDSqe$KFcknVD;(pKyRyx#jcv=RU8MkWRuGxND?+D#3&-TVFaP3ml#qv5D_IekE zU-@T`9xAio%OTSzr+2?eLU3=>{R$I`eSChT6sw*ksDk45vL3s&dc@Lxa|C8CkZF+Z z?m2bjS(S6(H8KB)8_zigGS~9--76E{vQK2R$~cY>H;A5dT3zt+Eg?S+YSnQ)D!MM~ zB&N9219sm>k?8GyzLNvpU>>I*p!oK=AI7hF@vgsKVgpx>5q1tIoPcej)c(B+SG(V) zs!)LY8qb8ZR`&g?7dR`AV*<$9AeteMm<5$t$!;EJ@~X%%7h-0QZ=ZdnuIiG$s@n-e zWxy4Pdxfh8dFQMD&H=Z^ZRO2P)QS9v3BnJgY6sU5b-tyd7DV-=@{QEE&Tx?7PJhi{ zteyF(-N|LWP5;$!m%xzZ)Fyn)B%|@abM#bA)1NW_?bsXEomQ<{Ch?8&elA> zB|7hl>Xjy9a2)1a&!3a6CCwa8rA1?#K*AoBda0+nIC1wEoB`Vy4o>?E8I`c#d49n}^6;aE{^T`}d@|0y>hy0D_gOA@8jnEa`pB}7y;PHps+gRj@Rq_e7E^<`2`Sc>- zta)*$tFPLS4}2nBy@L2u6TsU#2^pl@8K-~2sQS)Pyymzd$1gotJ26(6bd(s;JSG2= zG8sfXK`cv0R>=cQ9D$CG|$yv-R%b^W4-90J|CWZ!q& z=H&U*6HJE-IY}SL?F*@XY2{V6$I*ki+dD@o%6JmmSJaOV$!kK3?rx@un7Sh3CNc?mxYV-6GVM-oVeM z_Gyr1OyGv^r=4b@Z%iK1E=YwBy5Uz^>f+mo!K@IumF*y+q4rf`=pwcOicOGK!6nLP zNvrdyF7T+YS#i?$=^2uFscw`z7LNkiubeEgE1zB-`zFeltv-01_YZJSI!eB8*n^c2 z@l*^kV<>2%c_Rgg$!DAW(Q{Mc)6UG`BO5fq$SZbxdU?c9^R{?($29Vuh?)G!P*sd$ z@=6fde7obtIit(R2f=pz*VmN_`;h3^x#bUDZQ%4mVs9O!8mIK^Bfi`iE`1FVdOKD}d_PlR&nQS)NBs5d4!A zZLC{c`^>L)SxMMrqU3p*7%q9XAL%O)@x`!Yc_mLw8re>vwYf%;qnB_pNfW(!HzJu_9igM)4Hyn*N=Lh z838mP@Z!XCrpb^D9C3u*(a7u!F#E$LaIti}U{&kT6Pk0wjGQ&G_Z$=o4y)oQ>k(x4xuyCmA zq8jjwsf_0@u(es{5;wu8oTRs1y$SB{?PN?xPlA_Et_5C@Ily>aIB!$^{ye7#fYM_rF9mBy#;~C7uG*fYrgU2FfUQ+cii!%{4szV68rVm;uthkg(0TR)Ir!W3|y_C5}5#l_nL&lB`j$y>G; z0=8pJ_uRjvdZ-(uew91}uaNa1jEkmmLbsFyj5(jQ@5nnV1CRFi<7ey6=ucEiO$wWT zB^sk`*?%^S=!iYu(VSqEGWTnw z#{q(pw`Fbei<5v7rxk2;>O-Q5$)~`CN&L(noyWAP+mx zlXXA;9twZ%7_A^b4_uBSyJlK=O%ogE2uvhd2RNw)2eCC8m#S2!9? zuE%hGP^PbzUi^^89w4|r)@Ae%$=


M0zVIR5a_`x}8%g&#PlFI;@#t?DsyaRw>p zm;%Wc%A(;YhLjT#W4ikl4G}qhUWfx*XAhkZ$HQq`x5=mg`mS7l z@A(g}=!74`ct>fCtFj`Y|JeDuk#Eu$zD|8;cjn3cSn#YPcr(Dy#nd%qOg)wncLQ}~ zsU&JVhbfAxy-4vAP+EKpp|5kYwy#@vX7_Xgm8ur7AUZ|YUtH`}SUV@vh^CRvM;$q1 z^vaJ1B;oU9Czjck^o2S<`qko&b>GZ3Uf1GwI_qyz!WTni0|Md;~u>Hl_I)oW#;I^$;Qu#o9sR=Ek>lKfv^tAgMzLwn*EFI z|6YJ%FM`hjs}0xWWka}Hb~{h7#S-#WVUOk#Q-&wbnTLT3p3dju&hq!wxwFD!(Z$G1 zzPS?Y`$khCFJ5^)2^&{MvYKj&#H4iDa~vd!E{fFxl_%Q$m9uaWsV0&0k(ZYQFZ!oy zw|lea+qGe8trFaLO;>a53H{6R`|TT?r;Aj=6a z7?k%<*v+I%%4mF!>PHyl@Q2p?Vy3;Fv!-4r$gF}jrQ;| zW{NL<*z3I;Cw@oS+aBj{fo$#_)IfO*Tzr(D$u{bs+eGaV67l}JwbJw~s6Odc3Qe@*Y2RP@av>WX zcO8~|%f(e@H~*5KHMd;q8ne*N^ql;l-*ax@Hm~@yux({BN5@$ZwHU2xgu7ELq%I+F zyZmF%CSt)>tDY81I1V%OfV#Za|pu) zDB$8+P*SUSXw+x~N381mF%1>tMHYPnoi4~A!HKIm;A!c4kGi;Y1t2RHqE^p-Qfk%2S%a!Ev=hE5XUierl)uyX=bG78em+}~O|PureQK#l zB4LdT03(ia`o@1pB#~9hmck_RUvjWMTEk%8m^Akax{A?v&!iHecdPNk5R_hFNvzhj zH2{cR(y#0Gb}nbiH-}ON#E%@$g86d`1UPu_N63j!CP*Wn<;|!ICFRjUIO~KV%R*6R z1z3E<4my7rTQ%IF;J*FG5jzg?A4=@RRKYJk8@WAw;fYaLoU&5gh!hLm8*+i$(SQo5 z;ob)!X_g&)O_dglz)K7s@t%!H@seMV3|k5FcBILHDiQBR~E$o9QWWl09uduc`}p`?87UddrD@Hp(J|wKnye>PgNXGtX}) z3z{tbrz=I%*^gp7E!RE*U)`a#3I!KwxO{)*8*gs;qgo}Z+sxktW1GDVuV=p22vVBT zL4a+ZY2LjrvS#mPP}BX+Bc^xs5p2bT9NM2HY_F&L40(0d@=?ysxUh@2O!{$e!2%74 zpd&`ebt)e7k1gb6GkY-872FL4gRk7u@(8x0q5hOqEnshb9Fpu%qy!4|`3K#9Fu+c@ zX=Df72Xcw!eR>jecPeyU&(8F{SK#%qh|FTuBH60y3nR)*({BnEUi)M@{KpHi^T*u%{veug zP}kmMu#AcB35=s$(7!tPsfSPvQ3UR%a)G;&{Q8r|p?^O6D%NCcVIj~o~K z(EVfGt4nX$iGw;8d7aWUL5CK)gGx`)iZ??Oz8b^}<~9T2WvU_Zo1vFPc9i7UhhXZ1 zd>ZYNE9RI&B~-E3u9JKAE`2HOjT4ow{*GLf#hg;to0p;U=wT8eOcoPW`S{pk%@A^k zKK+5rd!@6Zsy!$+uDX5-%N?i@zX)<`m z+`Gu5t*Y1ks=8-UvuO_WpWHpy?D6+RL+LA?&aMg0C(Z>3mM_(ag0g%=Oc|dACfnIB zEOpd+%Y%B_7v?~FK)ApSs_Tp(^M_I~KS=b`XgLz=a5!r?cff9~EZ)}guIg+!!0`YG z3j^a3C}{B|JGzJ*6>eBnR#5mKl>mx#FU1-pW0U_|5{$smuH(;+FkC!FhWHv`qD84v z4n?|`-u6!i4cNyW)ci=w*Ylx*B9mA=oau7_0YK@KaJws(1<+;xh5f$*DtMRhP`QsT z79;eU^Wq>HhL*u$zjsRf6R3-3h_^afV+zUr`JP#>{%;XNE3eMwLLKzZA3I?kXXJx0+fD2&zwE(q`QRnp7A+{mi} zZkG18-e#R9tCGn+B@OC9oft%u%_p=xd7pd)<44p%8$%*;Fq4V%ngu0P4>r?FB$;1g zG~JU-1`Fzmeh))km_acOJt4}7;XS3ith#{TGf<`>k7J(FUS-*Yt~GCtL+$470RB6?_IH>Eb27>WYJ9`m!BBKs1Hg^OVeH-9$_q4m_bo$8p z;UD~qvD9$&aw@Evt2k^gT+yG6w2F2YZnf!O&($%ydW0ZPvjIu#3};WNKz(P&sIxG` zh=a4B8*%}C*!y-Rd)OD`F~dCIJ4fBv)a|P8O*6MNO?sK_L#8|iAl?om3+<-;`3z}p zY5nWyO?}wc@5iiycLuqk;b4=4y87IJO`%YBDZ47G80jz)_=M8E!k3~90z0!zv?E)HrzP0LD5==rU9Z zRzSVvrCv@mEi`0{SyPkd{-tF`=gayU!Rp(?F^yq?HgE&Mo78DtxCeH}V^!O-`}Am| ziB!9RvHbmmu$k;`HD0n7EUPP~+h2?7@re`Us=Y081tGMAznB<)Qoz)FA{&Dk9xk}> zsq<<6g!Y-l)fno$0-fapK1Vxx=ZNPM-?B5u56`c$B8H;!XhXfb4z$9j{p3#bFa$%bIozQy6<8+8NTck*Ud`o- z;n7c_-lL%^{VdIhIzPv}n3iC8vd=;}obbIWCm&#ePggm;80)xUu6MrvSi*lg;5MR! z&>2ALzgzNd>l3xsPJ*U$Fo%rqTilBd7`3)eaMl0VuNSy*(}s&}u%B)WRe%tmpQZs*1*00uNnUes-u-GatKTG{3vs<_g?=@{1J_097t&saw9u01e>eCa}2w=+f zPK=2zIIjn>H*?rR#VosB5|Q#@IWV8e5HXVh^7od>Di22=W;odDB!7-D4RmgWAEI+a z4ELm*(f%%SbME_AmF>Z&) zz9-1iSism$PcMQ->TjJ`$-$~^vdf5Wq`92jlR(6(&lscq)*A#3r8&_v(9rNFaJyD` z9%OJ&M!P`EB#rOd&etJvnbvj2=$Kv3xWBq$iW}a>Y#X&@v1nUI`qSdUCFu?PYe~qD zBm{m=$2ANtab@>O|Hc%nSn$@bj`u&#?JBW2O;CL0L`FA-NCI0ts9#5 zY1GC=mIDrI{IX66k%N4Ac=?(Ds_sM$NN+ImdL)(4;KzmBgj7knYo36;jjlb6mHY5P zptfmB@Y!4F`7598T~dvqlG3XOa6{wpyh{RPN+R>wSdbj}d;}>}iASmh1WXM~&-)o#^VgXzrjFTa_lA-j=JOG?D@0r^Ipv-))k(bGLuF+Z>C5Bpx;;v-*L(kf zlJa|;NVR!s(`XxKAaY`gq(+6%S5;6j&*77VV}|6%i8mqP_mLmyasYbb3aEKn_(49AiDx)mcYPgg*EHEXOKXQV!&U__Pt7I^zJpPtpOAB$GY*Z@ z;Bk^Lm`%DXpqC;8-;`FR5rPp5;}E9-QN6KBzllhB4Fcu+Ya6`{BvqVkrZPZO-8yAZrN3`pJU2EC z`+m0oz-|IQ5$$0eud91dkfA9(T-UA zmiExJ?el{@!=vBYel1tFT*nPIHl&nYO#CmxfiI?|UY`Y9I}j%nldR*PR||Nadw`dg zuh>KcV_FPrvM@u?7S(~xiyxYwy|fDo{fEAvn|SuSUxGnZp_vlS-mQr&c%J}Mm!n~y zmbVMo38LT(x*6D^m{cWb2E;=Uw)8b^>Dlj<-T~L78KNFlkTMKmbTrb%K#}ibt~q%H z-NO)MOckSSq~r6N>Ep5p(|6GL5V-jSPp6VL5a{k^@6y6xwc46x1hs}60~FDG^hmg~ z?qdc8t8X;+SAy?vpC(<-6zwiRUHe%sA4mYF+ackjKy0~`?Dj6c6ngo!V4@s)Q$1Cr zS7-l;KEx@*ddY%qdaGH%w|eR$*CRPO7Aw-J3Y9|K|2gAB@pPRSX#yQprrje##LvwT zyZ3)-8EtI{wJt%n?Oo`P5>tJt>$tG(J20Sao-mNwpj8I$lgKCG?vNM+k~i*|1e6K} z=jcR!fVbJ?#X>m7W;m=w+?t&Rd+P?+HZY-d*&M3Av90*EV&A$c&(U8(A4`7UvrZg2 zOD-eniC2nHQvT8v_crZ&tp%tzSt)1PEUBZbe0y47YI4 z7tv)yVTG+}*yl>E%W7E}V#%7&OAS=_1z~l|fwl=-G*>hDIhiCrYQuq%O;b1QH&SA9qxuiuro)He)LI26ab>qzp4`fAFoAMvYwB8 zm4rnsVGA}wp{54H>{plDDM3R!w1FIYUt7MK#S@Ri<7vy zgsuIQ7lpK;kbDr%D00rs9@NY@O^hpEqdFK(hxl2T8V1L zE14!@wW|X{3K9EcI;amlpQ#M;~&_?|ZR7@#?|76I3c$t4RD6GUKfD*6tZ*e_i^7(DL$7%m)U))yNg% zc~JU=r1eYq_|AQoSUP&k^?#<85onR0-Ll6RKV?BRm9o_Xx zrulMcSyJ~srSv*LwGBh4pgxa#v4NQ*yX?5mvCa_l@XS{t*iUAYKwm^#g{FL20+yaAtfc*1?ulln zd*-yj|CZJjWKOUDSNOh0i#1JGy8U@qSvYC;bJ;bX7l4p6i=?@7Yme3f%V`%H;gZ9E zL5$M+38_Fqsgt0_A$9N5O+qWcSDAyH@k!8b=4p&jrckmiF*OsUzJqT z3J9zjxvKn5=z+sfTi0uQ;E6_@r|R^qj9mOGeu)%wVdB*2e8{j|ZM0DsT=9WT1kl)* z>pFn18yN1`-fhy}GI#$3?~FbPlX^sNe2u7FMC|+Zs%p_B_i+K#w^xWs3qF5QKV{;$J6rAk94U!**x0RXUr(-5I0Na5=4 z>Vo6;S}b2xCvU|iaH2-PK)NY7Tp(fC);5sh-e>>Iy=SJR9v}S_XVC0obxJG>wd0~H z7bk}(W{eImZ}kC)JEbf}s%YkiaCh$C1P()Lx-q%QMMhPqMZ)eY9+qb&v^?Uxq$5c_ z^GOF_VaHmY`e2O2@Kk|`R_9+??afMRu+2_6-_BEU8lUU%yaLP)r6e-f*SW21@)U`3 z9{vycK1VUo)jzNgzl_%zmf6os%oxA?#xlh8l`6as?pD=vD7kL+;~LZMf#Ydl*u7r( zbl37c#5L(*OlGBdV#)gneY43CLBElm4YiJ9$fX0pPs8_0UUPB=v8JdwJ8V>g4SUhI zCY{_O8@TiW#jJAGI-nQGIK7(}{AT3)@N3xXt6||0pI~B5&%(mZFW7C5>RZT_wIQ*S zEn@@z_0GJj#zKD|$!*GX3NEairU@aZS-K2IRU_ARSRW_J|6cvMFJS*j`(}NsxN=f_ zJV=G*;d(3r5l;VPJcd+lB47&k_?Q7KmCXqVq{bbq-M?hw&VTh&)rSW{CB8mT)$f`h zmwtdd9HX`|>~EHjfy zpW$rBZ~yR7Ej8Ps_GoKVt*Y81R8dv5XsH#WgrfG2#Aqp66s1-|YnIx3?@jDou~T~l zNhFdx*YAH__i_KPM|X}q$m1Nz_xOCy^L@TfK?LG}rWq`5uE*S7LS}E&u5>_*3}rP%dL3|F93^; z##gioAdo4^ZlPFZd9rQ3h2IGArSp(w_2i9YU573XI&HF$_h6-r_=iskAL~HUhX>5u zM8?4u)n8ag8 z8dd9c398cL~36rZNtvYcGUoUKNWME+@RjJ|seJ~aTT#Bml7u)^U)+aTM=H*}H1`H9bC7O#k7Wx2 zjs6->!Z8!e;z<}1?)?eCk90=*m&)&U&oCcmQskJ*m6X&@q=zDWd@r`{(=KO}!h$a% zQAB%%t@&`rUW*xLgT2wOj`GD*f=@ykpllus$2nJm%13+Bm}9xjnMI*iO{BNe_f6 z@(=z;%4g{8r{^|(dGpp9hpt1)FtY(BH$dqe^cn_SD+ji<5(qDsPF#Sq)<~BmHb;nr*0iKZ#@jX6x%LiljPCf)jXga_M81l$n|$) z;e%u-KiVy&iP?q_=AMw&X!cN=u<~U-P9PKfPA=+;iv$z0jy@_yJ_%eYr5I}Yr96M&|6>9C zPdAsKB7F20ZA_6kB9+wK{qJ*&RNG#EUo5-YjNh{RPE1Dz{$J(Is9QsjDtkKV~ zc)Lcbm1yqC)I#N1AwY6Ra2h)HhZefBmR$x_)B0T_Kr!_x=9WSxz0;MVkqy>4rnm|0 zi84GR!1~2_ZRsN=gRMAv7Nnya4v9_Ln# zZSzyt+p0LQi}1{!dWz%xwd66(PamFtui?Nt`RB8Y9dN>B8d{sJ@2Zwd^qrzK9oD<7 z3Gex(s6JA@o1K=~50tTm_l9O>wMhs0lQ^4$Wk5?JT7rX!f3!RHz@cvjCtliVH9--c ze;(>@o~SRGKRecJOSNNevjks+&&atpG1t#h9RCHs@27f~vp2_d&BNv-7_#s;>mhib z^uaY=zC^60296RboYl67iZy?OdtWI89nxbv;2xxJ%A6(KrU-g0t(vr{(6m#`80otu zLOPI2I7*AqkQ_ym8rwURteb`meki5q62Hh#I9i93$Y9bc`8SQ{LsC#!%>JG2 zG8b0lxRs#>m?GZ~N~F}L3#)bu+XV10YSr;HGCb;D_-56rie60vCP!B#7TVDo3t`{( zMRXSN0hMQncDKIj_Ak}eF{#~HA9ddEd3sd4n{%1D%yVbc`d?4O4I0faSv=F?_BnMA z-%&(t!6Zg6GO5D*zXwkdwytIn3UlKE8Y(T5CA^l;nzo)W6#BKVi*&NZgTDSfIv(&~ zM_0|VJ0jp$H{$+jC8yzLXtakAh1fl!rJCZ>V!$#RqMG5UK!Z>9NP~*yl=Skc)YU%g zEs+BWGM^6{HKtGmP6lV^>i27J&tx&)%s>ppA5#2GutxD{=2o2(vN0>?OE1;$`dhx! zTvx_z|E0XzP+(oa;+fyZQM!CjkT*V@|N6WBGT!|4bFF#PQ9Vj07qwC0t}?e5?bt%3 zA_J`?=Ia8ix%kk;U6uan+}$7Bx{lT2+WpfwOl0|nzdOVsVVUtCqCwpW+KlnlBorOG>>wpmcX$Cd#F_p}}czUaYW9f(t z;XW0>NPJhT6IQ9UXeC_niVv^u;e2>gig%%|p2a=Cp+odNs>)5rWra0)TK(AWy0n*l zWWwPPuF$1qJ+A`j{;dZpyPEK7_dERV=49&7clG>Kr9Jv_PrHFn6RmV(wPq^v_|A6% zGn$`jD(u(iqpD1UJD@NCuCvxS7p8Vd$De7p)x}$yo+;CMu0`mibsWWZTT=c&Fozb2 zh?z*CYWZh4?=w^0IKcgIVh(9s|zs@<77BTEGE0<&b&(zNln-Geo@8W>NcVlLg;t$g{yQqo?|e3kAAq zquXX{nb8R7!6!l_E|ECvNMFzxnjV_Y53xJf*hodUPnh;pbag}-3-s|bd|%jCu^EdT z;6jRbtn@Jn-%mtO8+&sGDJcG(&2i^ncv~c&x7tBc0rZqB`g?4Zo-^cJ()Z1)K2drL zt8d9*@o-Eax@~6?I(q-N;@7%zchA83F#>O#5_&~?k zW98(NpP>5mAg}9*1p{R_LAtH>{@MH^NrYj!lZPLq>40#`$K$#y$;{*xFx!KXDot1F zmtuH0t8e2VOpSMV_v-ONbKXPg58lJK>itmzQi!3Jsq0@tbPr`(H`W?SJ8FKvzw&+& z5Rva~o+wv@?BF6HAMtYt9oi@)nN>KngN@4FDSk4{oanh9Z(esm}D9HD6T z$ittW-C3TO>*eXJ*5D`Obu;IeRc!c{0Ed9_7piMYQsiZGK|#Gu1X&36Gw1PK;C1 zKW1M8fB6!B>!Y^;&6u-FXWXlOLIa>9Pts1&qVpLCt|i)Uj;^0WNzHI}o_}+2xaN$@_o_`1cD~Oxq5jaEw0-XO1k=vBXP+4yWOcyKEui=Od|cD@whv z07n*p9FgV<97uko(4OeA-?lwfy!GqZn{F1ep6@5Zde!(t5Dtq8GoVw`U0g8LRJ<`- zwG%{D$NWX@ov-6s#e}KhI`?aarzk(~`0}oaat~j3Vr8Dn-C#(@+o|#h4=d^76b6F~ zdaWpGyH!sggRD;s3kn&cjqfmL9^zP`FdSLUU)_H@cZnj8rZnybO0v5R`hvOrsaalr18bn=5z2DA@vj$PWvKth`i7Ec#Lf z(1}Xko=;A%%{yA#09DnzZKf z+Ntd*xjnNtWQS1xt5mGTqMS}b++yv%OwuO66)*6sqva~dC+4O*56vjW%ZE39l6KrBrY7W~TkONh(`2)h zt2TI+*1d$?Nk=cZF>iF#Hym%qj}#ZZJT;xvYqkB-%8)o0z_*S1kWrcUEM4GO&wAQ)sKf8TK=UZw};y`1AzZ;nCCwqP%>da!n8Xs>ys-+Y{9k7@@)UQ zvXpC3?6H(&^Z1cuSL_SIvIF{Oa%zE{Pbfn4v322#^PWQM<~v1(#wN@(R2Sv6;rQmg z4{GI|dp({FIhpJ_ivbT*L%5v29b9H!VF1d>(#o4F)T6z0u><_9OUJ6Itha$~^GzUIn0@NnOvY5Mu; zGotZmD3`{6hfjwp0wE1Q#Fq>v8_O%X=BY_zGrBWmIY`xiEAIJyGT-pZ@#3r3kVwFviEPZ?{y{ z2fgVYE~|nxIYgy{++KL&CwU@^(>cbOWEfnLnvY85&Oh-R&E2|scrmC7BIEg^Y}#U8 zjYi4zu~C6aWRAWQ@q;m!>d(9GyN)G(^}TOOZ?#wMU^L`nv2}$hf zV{S{I&EXHk{a5ryL_6zoQ$xj~ecKaOL_Ra%dV2^i`2vxq#yItQ$v8Uh9Frb?OiLN3 z;=yQV2~;-~SF4e?5Fg3V8Dt;&$|Nn;c-w}V8YdWNoA${y4^aiazn6~JipxB{O<}2Vy=(k}@d-yV{@H%f>M^%e8$OYnb}4K1-s5;*i( zJJt9~GhXxZW3%{;@7)7^A+M8pMx}l!;JK@{3sY~a9NpxAXMTTKDA>gpwq8(X*XvF> zu1eT^HM(l-x8o_=8Zq$IwBEr7u4zqdm~-xlu-Oe_UHidT@NOt1Y)6JH|C`P}-|+E$ zUpcAUK^M{D%_7a+^xL^%n;V8xYzsYLNq`mwxq4ifOD#%Vso=QP5IJ@|GeK(u5yPLc z@P@_jg#Bu(hMnPhmFL}T#$6$3On+6_(YHqs#p?{-ShmNG>P91et%Oz^NwIeDDM3ps zezWy=EE5nB!z*!GJE3WCOrzMmSb6Ie)W@@W>hyetHj+`phPjqg4iL95i{ala*~Y!Q zfWeo7G1oDp%myFN_6Qk5xC%<~w$a}91pWR{&z-v2(`>}$(D)J^ZvKbcnVq;*h7mTj zDz*g&Cv7_S;!pms=>Fk#!k+L^7BG-lEN6WqFwhne{CwH+gR;A1K!C$Ut2~$T8fGZj zu6b!A>o*-_)p_crs1r@scr9j2B*gy5Xh^$4_1*m}_Q&hT&O&Wz=ZAZV`huVx!9Xm5 zIh{7t&?vUYk0_h~;-UMopJnvX&2KS$m+;S+YHp)w=5bL6ZeQX2bnF)H1N;|Sv90sh zm6pKpzzPIJC1qs1BxB%mSTSuCiD2*p|I5cW+aL^H4eTwkTBUIR_?n8#I;}YVHu>0V zpxp3L?XI^~!kLS#xzg1&>a>>D0#=%=jD%DMSHVqnO9Pxes6*C#Okz!u@`2=AsDZDqi9)wu}M)Jk0afn6pGd^97^O;n*R*Xo{9u5HvJ zYwdoQgb0TV2*Sg7dnoqC?^ngPIQ_#5UUMc*^17C5nI^Y0 z`hASddRoG|)hQpfl`BuqOH#NuXb&^Jk^I$%;QZsPJsY=U7yPEzBWNyra;Ta4_C}?> zpdJR{Ou?*Psrdy4=kHmx^P=mU$BoZ+RBnNmOPf&P1FUxlH=iZO-~$;4A^u4C-^UNd(zI=-DL;k$QR&+;%B0l|^p{Sb2dv*MD4rGKu{uWC1lw1)zrQb!U~Uk2*VmVZaJ9n_;=V4| z-}KNwUj;Ust2b}BUmtKld6j}4Vd-~!M7Iqf!9kvg_+JiL7x#teI;Zkud?euv2h$Im z-2a6-_ZU*$<9{6Hab){RmKQr7P^|)7ze_L2@%BUL#n?a#ZH&vwgz@ho$N{JIv6U{( zYTBn1o=X4VXRG3(^HKTkyth7D5M5n5KNa+-jZB?%dm--rx1+DSa*L%m_qMkC}yU87AhKS2Q*3N zr@y(3^5*s(lwk0qw+j^^*4MPlQG06^B9~=~DD~(3sBhGPuD=F2m)8V+)ffnLM|%8m zZ;#gPp?efxBu?fYwO2HIY9u*Oo!#YZ=R^Vh z=s#+97t8S>Mn=sv8-#Ib_kieMmvi5SWPOLLCVh-TepWd61Y<8Z)ZA-3Uzbm% zcjq$TtPMGi9cgdgSdyb{^I2uG%=ogf+~fR!yKWy_?o^(Q7XDPU-~4g=3wb7p1%T6f zs=TD%K{c*^;}QRc#5>Bx`es3;#fSN`xdTY{5x?(*?HKHP|KmwhWJJG{B2JHx)LM(E={T;CDhgUOFlCbbAh7@0``PXGPd6$?sog>XgV=uXKL2<^ z_*}rIv}XSI=m014lQA<*K={Q<8gTD4G#{?_tHeqVHsLO}pQn#BYwXZ~3U3 zm8Y&TUH$}zscjyZk_635ISu@#cbh$p24H+DRcQN@n^dpD9EWhLAZ&*tQ0p#_wnD4m^Dwa15%V(Wa@(Ld9T{h7vOWThfnM6gc@Z z-6wZo!1c!LnG6!0pV;+&pL8_P+mw zTdO@UM54w%w99QB%`2jp%Im}ZB-i`Tuoc*g|C8~dA&u4nAlpEavJnwnPUQw6Q z1VTyz$G%mmxC#QXSPzJK-ca$|Wd1u1Os$b}2Ll8cACJVIvu(sZXxFk;{Jn=`AFFcr z>hxhY^^S^7BTp0AqtLr_c8c!GgHGB5rdMKH_s*n`wyycgfju0Wm|cfVS8QAYGK|$R z)?sDyF(B)AgKJ=L!?$qyE#LK2!9pilZM(n5+6j=@ul`Vh8=*Rg|9&^(>y~h~* za@Rgh=KK;Skdd5wg{jpWQt1i9$rd1LG`%Wl)wV$yhhq&1XeX|MJ<+$puCp=TW@`q$ z+Fokn2iLW@ZCc$vjh~#(2zm&P$g{<#!kf&-Ika0N+%pNI)?Z|#06&KO@;dXB=y_Uv zZJs{?oYk<^$EnEVjA{p~hWQd_Y!8CSi+O81hnSGO+1iU%Muj7=%wV#mpVpN0fEWl- z%P<_9_+y)wdpq?>^T3Pa;{ijBmB=i&=N64_N8d8i>sif9f_vZ0LDr*csxJF$Gh!1Y z)we{rUtYLV3GCA(k!@*!AIxQH72tXh!Sc(MIR4Ms7ryc-_RzNRLPw=4)8MjqB`Iv^ z?IGV3{+ojL4Uh93)y$FHmNXI$7bf}Ib4E(29PD?K=ah2RvH@E3h_J@SEQF4=ir@AS zz8V=}HDJ03o77ojl0A4--g9{SkNQ3sdZj(`cp3RWgINEm-GJ1>4tGQ-j((pvmk0|< znFI@gt!qzyQm+Me%+nhq{Ys|UOWrWI9oj)WVK*j6@7YX z!duv%c;!Jj&5MNOwDcFj@8#bU1nH4ssditq)Rm5kcX;ExWkvRkP4njRvk2FOb~^3y z`y23UZQ$fWUli&~Q;udq>%CpOX%U-0NdOTXyM_p;tyjW_D(P%jzN{`#0j?K=TgzQ@aECo~ao zeDjL|PH^+HG%MDM%vadv{0LI*Km$4nC_wlf%Q1x8^tPI^2$tm#IEv7CKzOzwoco<%mcZ|Zj+d|G4z-}%19QBEJ&U47 z#x!yW8|mpu1e}T0gxW}>%=vD3eYB3rfCj|9r@WS}f%mUa(qr_cMZ=?`Z z5)5BrN-&kiVqm)h=)A%|7rKL2Y94hV2mUybXdL$oH0a>~Fe5X2tVb;fYudgSy`IV( zcdQHq+pVIPw1==4VIKnJl$6^tGu8*B;BK@xdnX=DTnWV5e3)}%xvz4|YpmgcsXgJ$oUejq6gMkhs*QlGP`+)H%o=`}Pct;mVwjZpat#)?qR zWkKTv%%*$d(fo9kYFp(Psec^`1@?0rf4tf_DSoHPQEW(c%m4N!eLRt83V1WHsnRLa z2EY^D!2~|C>0^2+Ou_XcY4oUv{+RW9c@pHwGFLeN2zRi3e$?T4>>&9`?@!v`$M+HO zeDp)J|U!GN|IHp##UExxPBp#_CVPZEV0c_Yj8^e9JaUAfq~uNqg~8wK<}CY?qg3op0* zgP`lq%`bM@m#=X8nS3^zfDO36ppPyOiS8c{@0^`)8#MLIkPVpGI?PqoG$-Z?Al0sI zcY2vL+3B)nB;0;A6LA;dR9y)JutBiLeWVfK@Fj~sgpPv#&qm<;Uc*b^nXt{I$lJ}D z5k@Zwz5v!E#!cc-9nw1w;UuwvJ8Q4?#+v+m4XBu>AD*SV@vxT=3R7}cA5wf+vO7Za z_<6yLvh7lE=4iAuRc(sM1dj;W;^+(9yI*iSqQt{PQb0!gj<=Sj8M~(Tn~E0Hk}a^zMV+iVVy_azw%rs>FwhK2o0F3GxF-+4pEKz~@SwXs%;2bI)hObeuxSmd}#2KD2V zLc7?v!l##$e`+mJTKQ%4`ZJKy_D)288uu&ZhdUL(D!Rz2CuhidUF611d^+64+x8Fl z;>0-D<6!izN9B->}mNYfzHsF5mqfgwL;GULHwu--|Y~>a|aQm_r4>6bYSp;0wgUl&~Mdz$* z5EP21u{=p;0x`TtJVn7DZZx5Pfi70p1K)ubjfWecT8##F=5w$wCp;F!Va3MPIzO#p z_bU|=uc0WOxc>Z3SJ{aV8F^ryk`#jN0b;y}5sTkjJGp7?b+)2+w-c_@R#T{2R<*l+n?75hhF(9P7=<70a0p#?;`k>$i| zjh(fn$5kXQOP+fl5{`ME1@@HL40AOrYT}pxM^JRk#en{5C_;;zZ?&f+w8;Y;Qcw$_}p{I(Q^m zFdQTX&5FLPcgUi8^Ajb)4??zGFTCbu+z}96kUu;j7(+kgs}pFRagzddYbJf>(0eNI zhc}%I)T!<^YHFNJ>i&RuxN8E91JNthaX*zv2Vtlw#sJEVSa8QIC033Wo}A z^TbH?b*x1el!59R@0PQseg12?QLe9k?Wz4Cibjit%#}$2c86w{NG20^23H9{k6fQ1G}#@}L5}PoNfC#NZA~qL z{Ym)H+UMwv6p^ZiOOQc${q(Bus1lt>B0v?Ec0d$aBqBXVHt+Pr-Re2dP=BY`=BO@? z1~|K6F@<*JWRM-F!op?ZD$`w8z04-^#?@=psI_iB#$P?sMo>Har>LunAB~q54pv!X3IIB1Uz5Wi?Ld_`<{RL`w-R!=LHftO$$g z(vd~oe(mN}-p}$$AgKixdo?w^Qj>#}AT7>nrH~C%zzA9+s>^Xa&Py^($~?A=rYiW! zHpL%TZxvDjzOzg3z3fjJYrEipY-oYvNae-UUDp{@pTglvh=6Bs?KkdC5q1?e)gJJV=dB3~> z1fl=(g76N4;=6a{8MzJUhB9uS3^fWDntC^+C32E;R@ueTc9tIdtYWVO>xLDN!c2Ur zlK_01-^Hdu!r>S0Mk(XT8g5j1pQu+&=h2hXtpE zuOoP}ZUS@Wzw2Q)kHA`Igpa;LDXs-GxvAR}qccv7*cFOF6H&w;>~{1B7=uAkKEO_dph@$Axg^q<`zJ*n#4* z4Us;Xwo|L>Ny8jPf1lM1Xq8wBPK)JmCAo&{05yYSMWgAlFJoa8L>Ji>RNaj_3Xpu@+8C9hb2hE^T)iO_>kUZkL`rG2n|ZX>f4Tbo zDg;5!H9M$8ixa42O7swWO{K#W>gi8>2Zhn>Hpd8oLRptt_bSMPPGXBh%m1&dZ-`c# z5h*|k6Vl+|G6bSLS8trVZ(@aylxI+Qv4j!O0{9xxx60^>H7bfMbJ6nDOl?yKFtUzv zh;eXVGo?w4uxEc;7*W+ZiX(AE{{l}>90|+$it4f`>gxd2Ne9E zgI$a#WupQU_YtyJH)EC4hQ+LN`DDf7^L_HmC$T7!2ubX~wp1$IO4q*`-(G>Q+JWSQW@B ziY34wlk2Kiaw?*+d(a?q@n$8S^fw-fN1T#}bm!sJFMq#+yKju%RPOigibi{`QjH@O zG!Ipl_T62fIFioA5Q*S(O?}^Hp*{xskU4G&7Hb8kH+YAb^9T$wIzJ$ZRmo-#m`kbc z1>W_3QtT4A5bm_Jy~=o4ulg`APWzsrhC!Jg`T`T5b29%Y0y@6J| zHSz^%)M&83kt((K6s$^R%bWHa+nh7yA7|o;E$YWUzv;q)g_CGU&v z%wMRtL{6GK6HUh%P(VvT1htx4k;xZAVuJsm%8%UzPF5>#hX!(D!=YHJWTpG~{gbzG z#-%(GyUFnJ5W9U^j^MMq_wj)cuK0|?lr7I=ARbX=sbLRn7aLV-#AZ^F$7DX_8*B_s z8d8={7II@0qwR|Q15+0+Ji|E|K4tCW1#30P&)Mc6yq{ zi^{JI{j5%=F<6e?dk`?Hryfj<%0OFEjcTdUj2TesrQOrb(5$z4_WN}hA-=OYp*Qtm zk7T5<907a(d-_S3?f#lV7km3w!<2vX5w{O*Q|9-PQ7Zq3=iPO?jwxeiidJv;0!DN7 zuA=5C?lhvsioaW;VEjG$MKQP=oe%#CT5;*ci~`?{+S-fgI4T2h@VClvg|vzRL&nlg z17x~r5*gL^i)Jm{POh?OBGngzk3x=wVjS!sx-l$n9uqOM~!bT z)dst$@?ACR3Phq=FgwHOB;23dg(eAA4+OqFma|{`537IL%zN~$3O7bp^%FF~-Mo|Y z=sL@_l&+7RiEfb2Z{J$dB~*EGH)Ul5VW-=$rHrokdaA=$)(YN9#t4ch4S~!9tvx{d zxB&w`OaMgyMHB_RCTJqSu7JV*qk^MtrOqs-$yTvekD=7*oqcvxlHS!=wz$n zL}D1Zf1~9MAE~OaGZ;`AZr6-y&sBXzaS0a zcefQU+btMq{jiZu%;3Bx@ZD9X33ljx@LPv8e*D=ob>WVsT9ccj^z~pLk0)~;r|y0Q z6!VHzAmNAWdVdLRrn%~$ zQGsPQ{zU%HtC{S~sZZxt^&JlGx;0)w@v(b&wexN8!F7Tyj4Q<+XT|+D z9;BNn1oaZ&0Xoi`h2$y*I=nO5=l`7&^1PQlmT;a=@!;9tI4{xTz2lKx{Dv9GQTrzj z_$2wM#Ofv{-$ZOBeFTTa5)E+(3NYFNiN)3tyMUEzza)e(;ePLRK~MS*ea;Zt?U!X7 zVmoWzs8Cg_wK(UX%?)CX)3i)moNSE(bgg}O^H~@L?+yV>cJ}Lf+tZgFcp7E%WEFQk z?~a}9yR6h&Ic2w|Zn(JzKY#S=-@FKM7S6xsEGqr`-YYmD-1?ZeHR@&N`jXh_)Hjt< z7c~O->RKSTUS_fmLY>E)iH8Z+RRH7>pBIQuyAv_z9UFdHLxpgC&^|Lqw$!z!%cM_q z!Dtv2>fZ!t?_Hdq&+a^$YLu!mk>6^x?oHe|=g%tiB7Y0wOd!#mdLevCD@e+NLqA^k zKiWR%-+yWQiA|H&EGT(VedXqMWdtnDDCXOJV4+&fvD?;ooK#*mRl0VHOlyJLYVc8W zD5W1|1KhFSAYhdQwwv1HMgiwdwV`s!hC} zWKxP00%=r`e~Pf21T>1?J+mqMcg#{yW)tj}bDWk_<-I~x{AnvCWYE`+&Iaxm#H3aj z%U5^&^^XBA1++6o8Kc$`WYFr&BBtq>5Um;#7audfFOANS+90bXuON;LS(em^U9#*^ zjbcv2+~rK|U#xk4S%=UuH-U`Drcqaok#`jDKTzNrldAh1xBKxh0#Q7GDAY5CgQF48 zB_W7Pk1gEWrPgQ#Ad6DlN`aZr+YsXDz`W0MruPOZ+1_z(jgkk&1Z-&#%@ZjtenE$y zCjQT7Igv0jMso!#YMjBh#jwo+HP@@2uUt$iRsP8bUenRTDM{gv?yWWN^)yt(np$Na zF~+|~WPL(2PBNT(dOj*p4ortgYx+1}w70998g1>I>}q~NlcV_@{r`*8M7U8QFQ?s) zxz^aZtP=NRXkNKiG~wtaF}msy-6D(PJiFZUIKJ(L{jO5r>%`*dK zg~J*ojc73erlu)YX`8(Xt=%adQA=rnOI0qI15W?&HxqSE=ijz{C3Q91#Uc0(H~Tfx zAix#3q8w(S_zkN-x571I7+)Nf(*WS9vCnp%?#|QLZ-D+2vNmFt6sTPb6ZGGj#)Sot zw=$a@X0UB(qAHR|(;!9f6q%@sIS`PI%V+fT{~-HW?@>f8#^zMJC=vYBTrNxs()ze- zSlI-;MHjoTqQmjRI|<56UK+WLmA_NHM<*qkcsLfpX)nrnM)7<>J3WN8fI6;WB|$Xm z%vCu^J)f@KbddeCvF)?XhcwDhzB?^lkO#1&G|svjc5Bx=HB}m66^6{Hfv0X3@e{0{ z1p#lc+rm1F-_OpkW^g7ym#4*%gV9re?*z6shAyL7K8kGOhZz1`Gt*5EdNOzuP%+#@ zXT!$L*Yuh#o5PdPc|r;1*yLU^OH#|gDa8bBi6C$18%m7exE(Ec0HS6&s2fcmCkI~t zdQvQp+y8vSeCs2BlWt7F+LE-LR>P0X_#ZW1jl1aw13(_A!`_dHUs*Uznt^Wakj^66 z;NdCCt3boij=iPX;Do6sd4x}EGEJxJRg#3Oxo(%Ugc3`Kb}jn8A=OgDiqisK-b6nnx~})lCsa zKgk&0OEGx?{S}!x(Xxn6mO9#4r`H)7Sw@9o;{Z>;P)695pP*C$E~@}bdRCm z+L~>Jip<4^%>0DJN))Q1a@UB(b{}8rKgXAQ;&CC}@XW6n5rVg@&R5Gr$s~Xw>a1EN zM`=arjVZZ6oCl^ptGF$9jXpy^_|sqLE#WPXs@O;ezoMM=kxO2rOwAL=+tTbejIp5C zK&IJ4_0xyE`&AET{!*%`E$yPe-d7?WLb0>_Bvc!g`z;{washLKpvXjR{v6YTYyj+y z@@G2ZFG2HBaL!Cr-yPtJl8S3=R7VU%`35p5D}GlLH@600v4C99*(JOg3F#DR_3lUt zi*f8j%!tx6{zsH}9}NzwxK#yR*Rx7;=Z;c>F9hap%i^;hCyt{ z7>~y7jRI)KdXM7|Z~Hi2RibKQGobEv9Jqutrhflt@&QuKj+yLgwr2H8(bM}6xF3=b z4q}kQx!&BZc({~$7~ModVOLt)%f!&@*(WeU&iT1=nzA$H>iN#ayHqIVbG!`DnMCyd zTS+JOo4Fy2-zQfq5QaLPQI|J$e#pdbGka6u>cw$TL2j@_8~|r^680sS2hi)$5-Wd` z@H!!cZKL~p*(P+1C9(6`nku2;OBwPEKzZE<^5G|W6VmsvHtd6*Gw~+-E$#zp7G+6K zJ(4uS(5ctT67}SB{LY~2=)8m1t1q}481FURX`NwQAf!|NwyMNr)?-hz0MjUquiRgs z-BMyLVe2wx=&t&_85<0R@jq_tT~@@i80sJY^jwqGC|x!osq?t-)T8YZQ?f>;Jw4{5PHKozd=3w6z8h?50W}x_cSJfwrd> zjP4TPlb9;ZV<(7oUn`aNX;ug;j~2t~W+JY-9gGB{pLpi!J{4?4&7_;&Au$cp(3^so>(}Hd!olS+6rx zKK(OfiKA~IdDs7JLM)=Gc!a>b1LoO{Q6$N4rt?LEdGYwb1XT+jSHMFX#96Wg& zM0M)56%th9;m|L289bWN3pcB`+mkV6mO(GcIvZ~n2_n8E5RN#NM%&-IsT~l7AUFW-T#GmY zAx=u3WRk6-#ZL^Edy)t>g57F!y@oetFN2Z9e!|qT&Pdc`WH$Dss0CaB;6VNIJbyR? zp}6?Km2M+ypCT^_|BTRAQtQB zZOKzpf;brv7t}_a^uz!8^PKXI(@g!5x%OUvdQ;ocv;IQxU}pJ=R^06+EtfSXp=&57 z`xv8jv{&foSwma&e!$h+TdWegr{dF~J}7gS49W{|^hGMomAtPb-MVGH|fs zU@`5bA`JpJf7j^DP%))ky?x5o1r==R@M+yl4(zf%3SBMM9eR<|p-$fnpj02TqDs2B z7sh?Qo<(uMs;DAs^rbth77t&UMe>Uy;o)K+aPUW-;p-obi4^AZ{gHR`(A{(e>-NSZ<<-&@%hj)lh1CR3km>y${;1uL2oYB zZ7cRQYu@O@88122mvi&I3Rx6IE(6!U2X?MEV<((awk_t=>7Y+@NDZs81EYCjOZgaz zar&N~t6pV@fnZ4B8=zXim2dF+5>^X{$rRlUfq8{)YTxyX=$8jbXgbX(n3K5ND=u#Z z?2ql-Oxg5DvjDHS*wWHnMxF3%!kKs%kdp5b{9vu>2iC~vXgU0N+?~u4-T4P39x%|=9DOgx!N}Qv zC4#1`p^Pt+=8g+*`Po=^WVvdbW2hoSnrGyD0Qo#u5Z}ei(fduf&V!$c(G7FO0#psj z9*LBn20^bS#OeUQ5wlsi^SoLIyHeKmBkndgDW;5o)rbD6eS`GyZe0J-Wd`aW|G?Uf zkDyVELSEFJxt7eBuArF`01z9k0B9&fTtoE4&e@kOoHIf~x(fzGi$)$O&=~*Je{?3} z2go?iC=+ryQxSMdf!%fI$oO$~jV#C9Wic#uD@JJj<};Cd%a<$OQbb;||tG3Zag z!BYQL`@;v8ORk2i=T0%Ipm%{5_VuIVnY*xd-{3R4=%jl|g0_4D?S4r=3Y6KCWF3`* zzN+;=m0$YB=D>#plXUn6l;pDhM1@>H3&}g86RE0s01raDKgv==eLnnIb^O|rgq{aJ z`H+$uER+&$dBy(LW78-H{fJ6|Xovlj$mSq4)na1c{4FP>%| za18q}HM|R-9C<#EF8zjAAa-WA=Vy8FHeY&$CsyDuHgV^uasQUB^!B{475_$4@U#W3 z5xL4KA8-EMrpnY{q|rc4RW|fw{N5(`xB@c@f1jSL=vi=vsV!vN9C!9tC~8s@Df`4F z#|STU9wLeLYY!}rz?Z~Z@M)x7PjBHa_R+QT-y_V2Wj>?X+!te=XV=JEFfel5IPl~+ zsIq$4MGO(-mJ? zZ;}|~-WjBjXzRX~7LsoL`bF$T*&G5OB(38V>M?E8WlV_4yBOCp3BFVOj(+D}#=S*U zY15`pd~Vo`B>YLs%qB%z?l$xOi(!nQ<&HD>`B&u~->X#Ei`p2WM^}#?FdPE~MXQ}Z zyNh{KBlD)(78EukeZ(hDl(IE^T14jIdl2eX!(h~`IzFTwfi;80O$F*PR68b+Y)g}7 zk2o2wNl~3t2T8dt+81RUMS2|N?QUEfTdby($Q;o@ImipTd&n<{DmD!M_>j$Ts&`1ryXzJ+>YR^eBfQdRndWFlR0^3nYH<*R26!A z?T+6aC1B}BGaYNcI=eA@`)o(2%(N zrQ>LWQ*jEq0{ep;Y54C0r3dx8uH{c1M9b{USw8K-l8$VP3{eVyGig{_fcm1<{^Ym`BT-u|c;F+7d zAI@20>8$rBT~kV_(71=xwp7fQT3!%%GEub=utFBw$O*rA~R|G)n~hXA~fG5FXW zr>7RZ`JEMM;y-#FjA@bBOX>@>CucQlAP7YN`zxLIy@ z4VITib*7Pehdiq|f3YEceH?+_;VyWACCt!W?e?a{CA=A&V>eM)j zDgYs0HgW=}6*V6B_)z%^KP|PnuJ&uRAiX`kE^`{fn!Hd6G zc8Xc)qrmk=Hi@fifP}`~^kb}z`r5RJOR#3K1%?fjebDUFO1JtUG`iKJtMPj%LdfUK zr`c2(=nrqZtKR)5&~O(j<~gM@PMKqz}sTXa5Y@CPrEgaF_mMs^;4XFP1~BY3a0QgJ;5Vb z_IT6YhJpvC;j5*HQdZ=T{`oQ?_t(v&a*R-uMVDX3=|H{v0r%_y+d7f1Ye1n^eD&hN zRD9w}&MaS8YN)>rq`wG?lg0~%0dq+bPb5w-?3tf80!`QUBH&K<9m4G&$D|ydkV>3B zfvA%!nvV5gZ0)%veUS~2pJ_ey7yTN(M9wfY+fdeDHKvJcvcX>Jh=_~%4A>B>UuaVu zqsfw??H83MIiuceR?4`VZc7QS6<}0$+l)E*;}846o#*fCHJ?79g`QU9j6f5OrI8OG zrLtRp6DHCMqt=All{Nz0x}s`8RJdNMSJ>#kr11zbaHsmY(V~qn2pjd;;&TBc0d@-! zSEV#;jzm0WHh2|L`rFN5f6OaK?n44$+dVsGQBQQ;c_+8=&nm3qm(>h7bCpLqoad{@)e_d zP$+;^C3bP5R(o}j|5J(jF_89UK<8kMSwCbP?3Mpj4akh29&#pD2l!5Srhg3>pg$xe zo(=1~d@y#dB(^=T!hUjKN>^bn|1%5TE7twg{Rm#G?#ty+xTsB7Pc!V?1y6mb{lgNO z9`6ptPz|$L2K^-Y$sLJ5PuIU}^=9aj1bUS)-Jv`A7;{k-=0YOzH$34xnWzpIVsd*n z3iBZty!zE5NlI-zd?t+u=m5JIA0(CE4Q zRkvE&gUa>{4tD(gej14M_LRp(1+RAbXf^4pH-oll`Iy-mwkmAl2h$9caJR_mEf0o_ z4G{3&bLN@!>PpLNWKtJ}5;e_rERcP>u2gI(nIcCSaS8Hxk%c)Sb?efRHuBNiS%-?M z6MJhtAv31YSiAnRNlTif+j+_tQ41E+e)YW$=57Yn^>nn9-gg_wQP1oVeTwuUo=|R^ zR*P%`ZKIm;9b=3E)YD5bDzWxqMaBEasm8NYBY&Wgk^Bl{!$VA7a_=^c`8glGDwTPv z&P#v)qm55es;@Aa9($^!C|bUr#466dKSam?jBRL`i*Y7a47#`CC|77viAp%;aV5+nOFd zI=^GV6imlFMAaTQvQQV1olW2Tsd}_+Y@k~p7%SeCbsED_HagQS!8X}=@Jsm9xi2hh zsN5A8&~csh!_J(kY&R%2V5xR&M^;@C|ru&O=Su1m>ER&Ct z5=)MJPxu1wT7#~$n6|BFkw(2^TLLjSl11^+%R%mP%rY_7FW!UBLt<^rM}4cW%a^ui zk3X5?gW~(x=#tyT_?lBRuV`*ry8ig(w~NDTHG%H!-?J3t8dH5ECUOZgy)O^viC(rz z^ZJ!5tseVja&w}}h4mB_wqV)9i|{Wxj96tMwa~{?-jk8N{n|G=Ef+|vZ=v^PamJyo@tvvFaj5da(=Bylvs0x1d^KT2J53uy-HfwT$BdC2q*8W1@mx&$@e z$Mn3r>84c9#p#;+a9iJM2Ba)Tg}9{&X-gS;+5^%JRdG1cxBtf?C0FP>-*IEBEoyWj z)TVZf4oJkofN-p)6}Ya(%21{}^Ke4}IBiX4iK?|jqNbW@o~w<3+C zTnFcH(>J<@I*`^Pg>xO4kx{l=r;izDV^|GZBMB z3uouAkdNv*N}`rif%V^DulEKxbvD@a@7MZW+q5sS*OXAEc-+LU=f=*9`M9=q)M+mO z4@^fozsCOVkVZV@GJJ;d=WLXK@HH#fe@j*qf3D|0bu;wAUe}8GSXrydxf%|NW`Wp* zxhoO}j`4(ZgWna{OyW_P0KS`SN(1m$Xm*ZA@Mmc)EbP~Y&}FGN%s2Gc(>OiiTOh~& zs?cn$uXKM=R##TNXGxx0Pg%?lor9N&=pIGs4z%tcxY9PKkT^H{x=%Wmt>fpvNWSlO#q{21LPu{{xXja*Y?!}4yw~*F z15cK?{>_SpQ~r9ZnIUP&-6Hp-C)DmTOp+e~BcTlDPIn@_-5ZRB8kETSt?+Ge6JirVNuVdc0#LsBMJOt0I$0JmO5Ycjn-6O`$Jt3bDf1W_C8` z-sa~RB03d)*y_XI2D$J3SPMoiyv8~IEo9R$%*&5>+JL(nl)k~0_^y)Wzu5fA%1|+5BI zDFNf;Vlb7RV5-mdVEcPYz*CY{UyET)chSry$eb>~pQ&!ZhsiP2LrEv3CkxDKW(wsL z5l_y3>Y+8&A^MMNcnjP*Z)3g4E*rW+nl78q3)wN!SK2Hx*&l(qD6n5|{_2 z4i?&$BA`p7F7A)@a#>wW?m(f)H654 z^1)mK`_0)Ob1$qJ*qPG(x6$MwJV|6sUaJFl9x%DpB?2yY2WyM-yf9gV!NwQdh9Uia zuftYObJ&n8V@d5%L9T>*^+IhIGgAAlSFI1STahw|J#sS~Z`TS>#XlHt=eWX{A#u2U zATed1>sJnTsv|WJpX{BS>={?^$PEE+F_No@|FPFgF(buT{e?}FjJr^BHeRw@Etw3D zq>p*nh5Zw7KdU4#rjh(svzKD754|^~c~SmvMm`yD;`+6e7rDUJzW#P(0`tVJTNhB`E0)nf}NK3Uf`3cxg>_>K*z`=_%`M`&(alpK{`>pE4;q zxT||doc#Epol_-`;kC`|q(*mVcxZ~>^Dwmt`lp6%3(=U3kE!iryi_`$OC@beBX%_u zQa}5!17)XLX7sn`cHtW!gQ8f>uLx1c{(hDZf6^!Pnb?9TZQ~_|i*RS25{XVxYW7Ke z-x>&aHfbQ~v?XLt9&gq@Cmegf`?@JvqxiTF{mci_lX09iwsYpnAUD(AAtn;<;V%@ysc_76B zf1M@HRK49`<+&NvVQ!S>_wVj!eeTT3e1gtG>`F_`J?h(@6Vsssc|8fkGm|S%1Lqtle=9aSFVtshBR5tPW$Sv}8AEzhteTPn-1nz36_~ZD+5qjEs3vYCIvyI_nRM z2`wR&D#rvl_{DB?=q#!(>fH<5zzW|HKaxZ%Xo?$hML0iZ0c!L07U{|ArK>j=dKZ3N zk29O&g5jIrJ-Pn&a~265t|Gk?2oFA&|JC+===fe2D729w5%?=S(9jEkV;+p#p@*Nu zwbzE5z4Ac4PjNY(IhJdXWJ)_p#h2TJrlC0pZMA~0yHFE~JInCv($#W2$MqE)=|Rr?mqZ$Ltuo zlVHIjr>sw_rd=h55T6CIiVvq}mv^Nd@N6Zp%ealD*J%v)cBY&pt4Xa;4K?5qd5AEa z;P^f`{bk09Pk@{t(`cHzkyn%t@ zXFHHnocOMs)`r&GP6}O4{jj$Bg4wJIH)YR_E*dM4&UQ&HpE2Ta4<(>tQ{Gnl#UP9u+9tF38LVeODT{z9 zH-DhTpBfjM96_|%gNB_8MY=funI&fWV1K^)Q_M85H5-kZCt_*HmVThNmc#vMR_^%w zt^OxyYrTWc0W1*H7m9c$YyvksV`w;don?@(zH5Pa?JhlPqLpU)M2s>RfQ;{EJrCH) zy&Tdi;%owp79z`$@<%P3m0#0oWGhTH1V7$0^wbE5vs4`{O_^sZ{j#~(ossG*@}ONh zn(6#Dchi|mR?#!1fnGjyF=Tz8)^tajniKQlVpRe7j^FLdRk;-cK zbm_ky(Kt)Zc8q=IdS^8T!22wO#8=?vxU&Dazq8VdBE%>eV#myG3hAcgLf9=K);m)1 zuH{uHcQR`8vJSNCV=bOX7loBWA%Me;4DRimFdYP0Vru8l2*TmNX_zKc4uSO4|HB3Rn4Z)S#c zzGY+-PIB=$w7=KVa&|G-F!d(Ej|4_1?(%SD=k)qJzLDyF5N=9V(I-3G-}+V+Lb&jL z&ujM7-&6&OM!PEbsuMSV#p>`QdM&(E=-Put@GU~nxXFD64umn zvNIqa!>}OM*=v3EfwJuUK(<+{^`EncRoe$)ALsn6#S?<1_OTzr^eyHlvf{7V(rcKP zGl;z1A9{S>e^V0PUV3UtOSNGzw%B*lkFtDK&CJniF6&FQg&Z|APt3RPpont!Z?q*G z-c)xd@?GO-t!A5X<~TiknR}K3Bru_YG$-CbmRn^W8O9KfjmBeED_^;T`8 zTdwW8?yi_6{nI6)CddvBv<@r-qpRJ+`LkQjXK*7VCcopnb8TL_kF|CRFeKM-huNEl zw`z35KOyNSCLcD@=BQZs$u>$ZRmW)%LofK=+)#sZ;G^t?u!y8&X*TxD84Hr|>5u&xV|&DgozDo9B~7VJFkc2xc5Mi zr>3FjG-8Kp%?k4h!x!hNZ4%|Z* zUbPxZa>Gf^c>Y9n_wMv-YR-+S9i{J3hc$qn&vWd)_7s5D%Y_1gb+rNKrkJU2i?5G_ ztWyU_jGh8B>h7j9)sj7Vs zwomGQ?zl0(XADb0o%PIzA5(o#?+##Gu76yDxQx`TwXABDy}rGv{zN0u1)a`7!4b0Y z(bED(cB{KS?+bS3{=LR1GZRzmN$J&_hJ@RX_wM`Q=VFy+uR5A4rjiLZ0M0Gn@(mZ) zskg7xR&LC<*7+W6GPg*>*4+~xZtM&QUT%5jMVzS9k3vN{#oV{I^V}GM2Pn9UHt)Z%97Za-yj?vDjEK|=_EKV87Q_aV{dp;lY$V_^GX7UTwmSDcZLs)cD zA4~M{BGqrgmlhI?zjRZs7OTTkBfNWZ^L`dPJ)-{iPI=yI?+#FN$U)Pd#0=E4+LYUd zbE3iurbIna#W9o>DI~L>-pVft5Vdt532ryXUsj~mf9~2Edi47-K91%pU^vKAGJi0b zZ@KwH)N|52U=|>JFlC*YPnTMGi@K(5BPu26a?CqXGm%l+=GyG93A&})1)YNzK&YIN zaMZ}jFjw<0v=`ik(%$8H7plMKP7wJ2o&f(7xa-igp%g;wk!B#-(47gBZYF7YXtW6L zw_D=xSiY%ITCpfZ+266&I2`*BQO^>}`who8!`!Bprc}`&#Q3b+>(;X7st4nT|IqhS zDOLmHC6g~&V-TGme8f_fLK3^9NK`7|OxkwZG_KlReaHpqn#|i6=I{1WXKVfH@o``T z70*=bvtu8I8&H&k==E3gDb~FlyA*e@Ghlz|)ptfb}S*wCX#;&+h<+&F* z#ewg0GWZBEEjz5444GN4@AbRi!PB+;dxE_5v%k+FxA}5|Upf(tg;GDu0VR zb8+o<>6|wMd0$O#TV5m0`|$pQH-QsuB&~W)HmA?=>_Hq zT?a$Pjyx?ZFide+V{EX5M`au2I{k)P`1G>_NunMoEzLXqS;)w^ZaL%o@sS2)zS(X` zYJi|6A_;%{oSo2VM6Q1C4#=Y(g!CqcAWYUrb@x1aj2<)!)L7JZHkts)dX9{GMT!cM zHCl~ll8vWh`j0kMp%7t1ytaRsr$kxlJRsi8L?oVO`It;|RsoqB=dONl?O`;$g$|vW zGAjMby0O3Kdo#uOx16>|>O{YTdU8eYhMqU=l`md02IKzW@h24Rk5-F9ae%9HD87Wa zThxwg$1^4yu89gJyX!|?Kh|};O9T-M;Fr7YxO(DA5df=ywcT!h4#X6DZY0jzCv0xh zMW5;%44>m1Iy!snDn#7!tmu2-;sC{E6 zy5e~xw-rBTJ1$Ifl!X5#Z#!exbjIk6d|auET}G{mw_<34PaZ-EN)XSJNA{0d#bhZZ zy}!B}^)tA_<6Yftp;t_Bb09wGi2NS8?&4q;fPN%l)0&Eu#AocKM~-j?8m)4Av}n0} z%KO=y)%(&=Ckc!*g{q%wlEMG2(vZE8tu3tU*4HD|7y3}qBZx$Y!?EdiM?wL<{-M}v z#0XRNUR)l*>A0*sfd1YR?++wKoa{=jZfB!?Qo zn#?dsI@F8xp~WvR2Tvrn?aL+O%Yk$QA(WMaL#g&pa>A1cjlT0w5Rvs9b(q*9Q|f1# zxEofND{2Lar&-+{d8>1ki7KFfG<*L;;RlHAwvzkH+J4KK*o5s^)GA^={f#1jtzDq? z=f}Pm*ug>0NT^J>BX9!1x^XQB8A+pLei#>3u|Z>5-YKHm>N`xa4R)z-E?9`# zZxMml$6nw(z9#ZdHbTpo4!lFhH2J*6B$M2YP#`iXCE$7I6A7&%snf zO3DKchlGBX)`R3@aN;6WsEhw6_g}e#wmt4Z5j`Me9ZW_#{gZmUNw~3Z{ais|H*NZs zx|efcw{(Y%)Gp9Jcj%sU%~EnBBX1r>{hIF=)E#vkXJ!M2#@m3*=ly4|7zsGxHj+K;{Np3z2A3lvQJw?4DV>xv%eEg+7&3`DWunN z4SknGXGXPumeu9?VFRM;zB-=&67g~4=Z)&MVd9cb(XId%E`Lps6)%vx9SuzjVa9mn zID-v1qD_Qf^5Lpm@6%jEwJNPM#zO;5iof6Fpp&ThBbQ2bkaTgXd|m=snaZ5dSVh_A zUj`4}$!aW7<9y22bUWlZ)zRyXm15i=;D)fxZmY{NpnRnT9XM!AIE}0Z zDYCxJ^zP#Cd&iEL;>k2RNYQkL(#J|EAY(TA-<65|2gk4HenYjAEUk3p-{@y6Mt;fy z+3~YCQM4rft?Hpj-uiX-yp-+QeRb2mEgWTB zpI6jbme0oTu&`&NNe_0e((gQs8k-O8Venq2eBmyf6}^(f?YiC|(tL#pxb-&htK_mY~*g%qBla~K-D3n8z&7?pz`Y`}m|@!!)Q;B$ag03#Xtx)=-Q1E&RvD0MIo>vA`Xnzgc6E~dtlso90Y4fedBl|%-f&t+4&?K z(+fV`g^=n542ame?W2;A^O$blhw{gSno;QO9X4;rLS9UE>imP~jg>4MWn@B0c9^Nf_PO9i ze(--l{cpYU^y|NgCv$y~e~xrDeQ5U5`lQv}&LX3%qfH!NcFKCjiHL^WXvx*9RRP1dp0(QbAskm3BRNCwH{88UPo%x}r9)sEF+ z$k)5?{Q+{2M7+395S#_zeu6Q(v&1^^@q!E6E%$r#wev;tnbak^E3H>_ zUPeO?|88hzK49VB`Fy*oRkGW-2fqo`ArJZL9l%5doX<@KW>v+m!Dlr3nc^%3vvvz- z*oNN&I9liFCEKbWqcGl9!FjRaX-&)lAMac$hbk&S=0BTgj@zMb+)iNE>*y7TBzxw0 zQEB>uJ}J*C@hl zwGx2!y<5WrW;EI}nb4ON89Vpw&ysO#_p6_n3#4u}hkrQ$hqOWbH;u9fb4$E>QnRZr zu{+Ele8bLH8u^V&9|pMH$6u1*Gv}nb=y9?CVfDNHH>;mM5j|WU_8(S%CF1fO?yy&p zJdG2bupdaER-+B6J2vS{Aba2zefzd|Xv-)Q_me0aYP(ifIkO|GR~{!k;GzXewWv00>HWH=IU*!GHu-so`D5GAvLN^FLk=Gf1V z8n@r2krl(}L4X#xvhvyYQ+Q#|C+Djh?xSrOj38hL+7D(*q?pC^G&J*9fhmspwq8)y-B} z6txpYfixpN)75t21U;q=PGP@eu{Q9SNxjBK(1pYSHwt?{wyp%6%e(fNMJzIC0Q0>V zRcwBVW?OoeaBc1!9ne3`$s8jr#Dmpo7vIE>j=Jx9}OrG^V3^IImNG=J5yE<9mO z&JLhHAE&iaI`mzp!&HhaRZjDRNM2tmLEV8LO|3NvMjZ!3>%O14|9G*+#9bwV|yaSVR4gLsoh9 zce*mzN#rg{Un%)uJ`wc}k{?kumo52;x2ba1`-LwT=8OMDw-KL_kVhm-HR|c=De3hL z>WGi?E?X~ohyGcpW=h}vG$EYQV%;`~yh4Rl@XRq8#M6i^;M^LRss>=F9 znbxbFii5lG{rpGw_`M8`DbIIP+D*rmq3^W*LDYa#ayapqu?JSr3vXsKjowOeslTGa zED82%**k$ysZrbWyZg**-QvFMry9&Xdw{G-E1fD5!s05$wyPt8dSPoAc{b4Z42MWM6OP_#I5TV7@Df@^1 z!Jn-wMy>>_aw9gKkriy!zMmAPMS=1orpcL~ zeSeRnm`#vet2I2>f2^GK)7!&UN6qxx_o5VY7 zgkox;p*R?h1xh#oU{lrc2Oxak!K1rvF?zgvq6?;SOncGO_Mw-(mem?FrcuPKq^HMb zb4sDu%iLK1H(U3lTWz%b_hjP#%p z=#vrGO^Ko~WiztJFxK01QW9N{Fz`R1lx~!2Pf8oh-XmT z9cbHSws6SCX%TT5iaReNX1BZO=7pqq{X*;B**tSU?0~tSbmRe)yI_c655v-iEMo-H zk0?d|uH{^gQT`Ut87@oXr2o}dTZX|oMSZBoHxSdNT>+rOIU4seQaq7M^f=5fqKNjh zfGIC4`t-B|?=(s31L;ilQU(1*Rv#2zv~HLD5Jc(MX2XbkAIwiP>20fZ4=qB@%_}pj zbIQ!0BbVw2IsDkBW`Be}>bN2+KgFeYhs3I{Rb1hYq6(R)1s%2f>)6!U|GHJ@YbYc; zcv%k+H`#NnH`IMqTiv*O8)xTpFWeR4OZ^}wg;@%Wi-%RjL{+-Sl?_qG=D$4{LL zsL+<7K2ZeUXsgnA5@cc0w%?qxon?CshWS~pLY&hMEOL2x)m!koD`c2`%KmUpDaY#_ zCu7ekM>2W8E(xcD)l6tWA!ne%P17}UB9 z6p0@h1zk3h3~<08Dd9M3UWX2Wo9Zg%K{MQgWxz3FY_x7mZu!L)_# zR08>HVCOdBsTIwje?YZ%ap8q4dNhg}4>|rgE+|Ptdz4lJxe+*FnINS7s$z>_%;A!YV4%yPnomK* z;;611TA=9b;tg54@~!DUTUb~2#*~~0*qyWU3dBF)iOC5{*B@i(2o@>Wg%Qq_$Unr~ z%nro}9ZTobTxCJ~*?V#63fQ4ve)qm`*Awf2B@b^G2SWqKAIa9`&HJvTCWRHGcO;bI z1Brol3h_^Vho(i0KvZMXGbnso}2;1@qJ`xmT%HDiyagCx@q} z-v}4un9hrH=27eX=qEM@!_^tBN^P*?t2-N2?!}Vy2NBA{Nk0Dqk}2Xsj2Q-hc!?&NwO@9&0*x= zwNPZ<++_vkljN!P7cF_u)`~y8nczux^>LDHY#*`-!JKQh<6*&9D`2FdddM*o;Tr~s zl7*m(NWGkP0!d?wAdZ8G2-5xSTKhJ*7udUVZ_rK#XL>VBwh0L+z4LyG+1+F~cqm00 z@Oyrk)77ksDI*k;2mYhX z#h(T~L@w0sS&Xg(d(ReM0z`etcJC?+k#i2`?cBjS8z~ z_`OlkEX}@c?N?ZLu6Gg9FwU42x2Tit|G{%aCgrra!KyHR>&lLz8(!0}5|?~fiq5)T z1LKjkIh_Z$%sc))1#>2aDO@tZn3VE9I9W9|ab2zd{gK6Is%V{r-}{#ycl>Ux5HMmx ziJeB+`<*bGy?B^%sN@`6y;ZZB;&VDXd9q`*bqT~R$1b&@^#^S#hzR6G{>wiuhjQbs zO)u2?nG)r{V0-X%R-Rf#rlpUrmHu`OTQ@MQod8_AgnJ7f)tsKkbN#iq+4|n+UwqIe zIQ~!NtA3nnYW6|J)`(xjt8+p!v2W>ebi&?;^&#Y8kXtSAIOQd^m?+XPLHN}g5@X=o zI4f({=agYyR8-ShqL4&Fj$kZ-yO}9L`p;j#(V77qO1{W>xT108Q8aA8+ity>YCqjx zL(<4*r_VN-yerfn7SSNgXSh~Z8D?h1)1<=+vuC%8sSZ-5*;VVoiFPfTlD^fzEzD(j zLuT35UeI0l*9Qtf;COgl)670HJx~ew@9IszQEJ5c1YR{+L4lG=V1j! zS*lMQFP>rp_(qVgXAs7*MfupyT^)Ju7SB=@+-g)<+gZo&===p3SdUTyfSDf5BCFx& znEw)amLLU03Ruz#H^ex$s5@-0$$S;PRArDjm#H_qK3Km~Yti;ezJ2EG`-g5kJGUVS zA0Q>*v1n|cBzUooJEBUQd46VtOp9aNIM}Hs*}t`@e<{k?f@218Pv=uVl&$7N9>}~T zG`|mamX_s5Jc*jI>;8I^c#|4Kr%c(XAeQ^o{%UvteBDV0cOe$}+4t;UC>){a880?A*5ClA4ujN^_?esl*?Fxn9Nhn$MtlC)pN`HZ$Y zz|?bY{$Y3XF)rWlhsYP6*g!+Y;nwyECe=2}8|N=aE7XCv1K$*;Hpnd*E_SL_o^^2i z)=`oa_;Hd;PUB?p<6jEVCVtCsK5_T#t}YTDqdw-%}^5J zZP74&OS!5j&h^e+q{~jVxp)$Oiek-0Hozjih?}CEt%m<}EX94KLlUbhYvCJQay9P7 zxxHZuPM(J9rZ#g$KF3V{Yqc_sFZy;lOptj(D-n45SY~<`SVMKzs*z@;HUbJvFPcme zUuv|k8)0m9c8WRZ>6kJQd&F4>?E6~|#KZtY7BHvTtRz6?y_aW&b`4-&p<-b+e@noO zJ_kQ`RFALh$Ck-=(|yzd^Z|}rUR#J43dg&HE6q|5N%=WHaj61-o1;!F3hj9F8x6)o9KnMAcRe zwlB;zdjzc%R781YLxXBke^W2U`7Oc(YElV~E-?}L_~OOj&B~B*^>Xi(t?5~NUplEE z`~76EU01hQ-8{e|LcD2P*FAF*_ohu_s=rTP$Hj|h$vQh6B44h1Bwaihw^Zv7uG24&F{a-EZ%&csN!pk306) z)q=4dVSP?l(6*M*t!h;C6Po=nj%Z?fqJ<(Btf>jpEPx%s3w@5Q=_~o+XJ(gytb13K zaaGx&)0pSPaWzE2w;Bto)bsD^1&Vjr!+&_Gwrsq4Vu0HAq1Bj)Uyh_dj5|rW*6zn zP%o|cO@>9As&o#UUf;CrjyF}zk+kr(8^?Rt{R3jaGyC7{UPgsQ%_SPVaLi4knF~e( zw_WmOz9 z?C;m;f>K@;(DPjXsncsvfeEHW3MESFgYcdl5|V%2v_Q<@FD+|dbM6R z*iL2@m^w-0sPb*=~5OgsV zb#SYx;`W$oZVP7|S4P)^BV0qIf+;&JK>#9!ZuD!F9r-`B`O?>D#lruh&0qY7Hh<9m zxGnXpQDU#GmFq@I(gTi}i?&}!>UAx1?0UwpqP)-FD;IfB%NO9O_ntJdvV>-7e*!#T z{P-{#Fhtk+6LEz|IN(|>i?1#;3V%Y`Re#UKB&Dc8fW{)EfQ|XarG5!shm%^6Ik`%a z5$@Gp0BO`5sp#^h>F$K#ExHEW)!gRvST(%Mt^Zo5q#TkKkd?ui$(Gs!ZCo7;|AW{F z5vzmsui!li%c3Kj8VbQ;k`qESL3Z(P;wgG$C%AXGG8H~_Z`xO!sRikof8xvxByrjt zR>38%k%^T7V(}j|dDTa`eHSU|fLx{(!2f2>+tmGlseuS(>5UZ&;nGRHKh|pvJRkjp z^H63B&B3nNy%rhlFs{bbdiS&kom#=jc3*qP=<820gwEMlpWWL=d~;+2=3%{8I969%&_i>C8f;5jr46=heVs|WKp66WWocH_(``UY7>$=yy*8TZ5 zj9W5J$d4}^LK9Vuxv48Zo7o4kQsWNrH9AhXmE$`CZ)NW~XvEk`k&%vGC#g;y_jAN) zx-Rlf2hPMkHkRH@&ctYaj<4gNy~)QVo#(d4&x z#=Zh{L!C!m^81s#oh39MFvCf{pUUFv{uc1gaJyb4vyNH?E+8rht2&vjZgk zMpi!%PsP3U^m6gh?K3Fq%Cpr4h9`UrKDF#2Exk>gYvrj@)hWeL-vi5kM_=x{-)>LZ(ot<8%!MC8DuV&# zaE*%yx~@hN|GE^9*OU2;-CTVg@5h(-Lf$&?UgBqr0G-f&G_%FB%h`PhqxoV`To=ki z#6oHTrjVUxW-uf9;RXDt_8(a$QzdBIIwud$hy4$2*xmXCqs0=OVH;pVtJuVf`e4sCe=FWSm@{eaibA zy$4^Fbd86U{s-32d4e~4K{s_#&IEhG`zGwullx_q$$h573(5yH`ADr)?;vdjQiBXS;PKvBA1oxu0U-AebJo3@Bm_j6|{!B9~LGTMpWs zscrkDL%b_z<7_EslHOYdP#eLI%p=K??FfzP_2~4vk6FRaN+@8vV+bI9yKK~};snw^ z9p~`vq1He8u7+d}$_FniRThD+8GFPL1)SB~m9N{~rn5sad51|%KUpqLXg*X1b|N_M z;c0JHy5JvS6k@Np9=&P3_7v=xcdn_gsEP>~9Z#SZZ;ewCBZXdi7|EId>9u{@^p_yxJ4KxMwdq)j>qALF-AE%8d=9KEd#Lrq zgt)wh#<(RDN_v2`_xJb*9CXMyY8&#`1;5N}l}R*H=)M736L61*!F56MK*>rJfG|8y{HFhQvpo^`YuK@!?#DO9D8_JVz=`?e z8IQ`-YVtcRmTKuf#12RSnWv>nUhyoEz~=y??Updfqry(I9c=TAn6M=E9|t1-C>28}ghJDLXV3tz6Cb_p zPft8?x6`U9>eC8QJEpJM6%Lolt*G2ao&hHLCgCE#)1o3-eaF7{CbM)9mXe9F&v|AH z6Y0zH0N|2cjZnvDf!q$Sd{`4Xj`RO+vmACbR1srI34q*yVoog#xEAziA+)_SWjqvc zd;#FEBkBX(6=sxVk8v^*+Y(a8ZO#*O*6b{ku(Nv;U{#{Bqg|p%UMM#Ub%+-cMP`$k z?%l5sDr{GkQROYTWNduyRH%MWCP~NSo}AH?xcX&;-@RNPH>bo_UA@cW%V)uNNBcv1 zQw5ZUm7zGdgOT=EU%#0(AD?^dc!%moy+0j9cuQZ2X)HFL32wpeehvAl1_ckNHSH|I z?9-yEuP*Cnt~8mqrDpp2S#vmk6fY?VbR8gj&0w{o1pI7SlsR$;*=sp2ftvUVC@5(usj#C^zc$_a`C@w=?N&ARwn6_5`Y*(z@Bu1v;_;r}v@~JSeW^1;ugI1T5 zd)nG9b8Q+nnz+2SR$%)iU{^yg;t;7-51eMq5IeMgS{0DW6U-I1xsP-nmNdw-6+>(B z;+L$)GpnN(0RjP-gt@{|ii6h=`IOJ-eMK?#Rr@|q)fd%NU{iXy?F#MkLrUeT=hV5@ zgt9cY_lJZ z)U`!;4N4pgid;2(Pasv8?^!im%9>1ksRI1yl3k_u2cOvm(jHGwZhABe!DUfK5R?F; zV${}SJ>Hsg3eGR*K*vz_huEu5(&VV~xdg#ES) zzY1IXV{_>#MzJ>^W@!%^ScMTiW0$KsKVnb}zUi{Ql&2_a-;D*Kfpx21(ELWOzT;F6 z{6+!X+es@n!c2A&Pe=MV2=0LMsgEfk^}Ajxz{1xF210I``5MOajyGXv58ZQ6O-5<= z1i1#C?r3ZedN?RHN=Nls?$@N#fY7GUx&Yg?pH3)bRI~fk1fCf; z55qk>A0A#lrn|jdbA)bbAASa@gJCbi*y{^q@mdi-(ycIa9@KY_upr7^Z8vKIf5RWX zCw8|3-&(KWYFdWxIT^f&0CxJ$pOtXCV4{DT-@M|h#eou6_51Azy`Q9c_isciuA#T|SPX$)MjkjwR{wjk z9khCz3`W?eT(Go#i_P!;2b(YdRvi_ZOCuWCk<4}E7h1aZuH(P4`Pq%4Y30vh?$I{K zrU##29$cTksfqk>-@={jO?e`$gKIi$!%p#B?q@mzyPMd6d3O3xmEaSafLIPmmREHg zLMD{bA{|Sa-}<-Y*e5iuiR#P0;FN~FNj(u!ZCtNAB?{Z!%Y4+&n6xOp^3RwLQ2g6w zstvzo`dre3oi<_~63)1qUmk7M=iPjM`_*kJb3`j)Kb$^{5uS-3li-g@9{cHU&2Ro; zFEIz0P6+}lFdcLB;;3CU{adc)zp(kJ>sxI868gWf`G5kV!ZQY03xU(k!xDmNr-?*N zj%v+hORKiqja(;nRM!+Lo{Q><86c7NToPZU2V@_Ft9yav?2v z*#lRp+<3gw&7fBpaoSo$Cd(Q?VS{ar73=Qgpe74fbI3PbNR>nx83dH4%f*^bkIHk z{(1s%-QUpkKnmc;UBW3E@iNUa56srJmOpR0TyID&>sy&eg4-cR=&h6+K`uVXBEWEb z_@?3UAD0~H+DzG{VE8s~bQQXQ&Jg?$$ha~CHc$&QT4|9rF(9b<*$f_Cm+Xw|uHT|- zk5mvpDraR-!pJsIZ<<(2nuENJf9W*39Ubf!%XbGZp}&F-GoBr~U>Z!x6_FZDDVpEG z>IKp~ckUKxx>vqX0=65)O5ac|OK-2`>@+o$b$V|%5pD?ddfOMA>+YVPl9Expe;&a{ z=PPHPWB!7@q~6mzG+E`}G-pw`!b{&WP!T{dYzAAu6Klz8T-l}VnII4v7cwNS9-|dj zSy0DHVr^&kj>WpPSBqfol6+=U`|ymQOF9-4ZML`B%OCyU)_i1VAYS*GIH_b;>z>bF zv+mBShP@~J()#`BP#V_Y-DkmQ&6ADet=-J9D+v@5SMEt82z}^ICh?BKQ7)Hp3+pd% zKLERw&A!!yycQwC{3RIPQ+{g}H#=XXR-+J)rH!aMIeKlFevHx@-|U#qd$2kpyB_eq zBR>i{fbJx;*XNDUW!YFZ;VI0KSk!~-O}2q%DmM0K-}zg`qJemo!fu;RBb0~5Q7q;I z6ly5vhH^A()~&l(STz{8t_wGt=PMQkpO3xq?$in;VYvv5zaNvF0=PfWbvgRKRQWu{ zT8>mj%`7Y&sSTdGPZ}B*bSh9EJbPp0eVLRifg3fTsiV2;o>ShGq@#N@*WMo|W3<#> z@|pE4qyh*&^JHAG9gyl35>=3#DI2}%>hu)5YAVE)5cc3tfVheq0s>gh5Qj>AFn_2%xwl^rqb8bENHDu1tqUK&EO{KPX;5J zT);K|?a5cw|k3>iys~1ZSTI+5rdzU7`=}eW+j&FRp1IV zP5!$nGBaw+V}mF)`nsOwR?qH8t~#O=^)Bt?4|It@e6KS+m%#V_xHUhtXZlEReQV(QQpl{qlF}-eUbfXFy@y;7Q{J* zM3HE9UzbhT(GjUJzjtMc?qwzZ#S(k^T)MDl-z{~NRm|N@Oi4{Bnyl;giDV*7~h7gg-Amk&r;Sb9sgyw`bb6MKJn zjwY_wvID%lT6AsSkws2*`X(M7i&#d*4OW_kU*01DRnPCAj>9GdArDqq0AGu+=QFVf zJ}GkpR{1{MYpn&E)1=lBo3=4ue#}SXO+J|QwON1sTmRBqUsYsL0HreEK&U=WRht#B zet3zRN;A_#M0{$7NGbiZ?`&b~m|`x4(i})~g&vzjnFB6OBrVmaY7TySV6U3#`lEOd z-wF&2ce^H~cdL*kyYwn+_8tZcz%#v#PrwR3Q;%FX?dew*`wFH*$l$s~27MCva5-PS ztReN@F44se@$|1ccQGQ7KJM1kpU_muvh(IN<0`%yGZk`55`WRN&MLHX;kN*x(gaRoh!WYlssMubcSp1d1g zt1BabvL`70Nv?JMqMW;YqkCu(CxEF6Z`JELL&S z=Lgv1W3PW9uWRqsK(eUEp5a2q&eu=6frSR+FX$W-ilrEB9kl;G;PU9T8edm|R*TjX zItRSGe`J-EA$E7WE5bp7O!9d$nP-N7=pi@A(Ok&vv?+nj;&Nt|6P_MBC&M`@co%?d z0MxOOJOZ`U7PecDM`pH|8e^#Mj#(y_Rt&b)TGgLf{ngf`l7n^9zjxkd2+P0h?a#(Y zzE>tQ$<1%vdx^I=dYa*(crD;X!|zovwqrK`j`+vuKZp17^2G{CP{xFRbun%vJV|Vl zW|fP77k~=ND_vBTT5&PSavu_ACJ5{kGw*TiPm;(doQwH;ZUHy;PVaJ1F5N)1-55A7d_IY5D{n~ABSmMBE zD9F+JIMY`AGEF4$<{FQc$5$rq$YLM1xYH}2d^hroOU-NOccPuycp2s*QE#u^^J{C` zUl>1a^t86JH=#t6T0|aS^AJG8`kW!gLPXd`Zi|3 z$+&f=xY&3oBK!QRx^xJApm*2mJbPK~HJo*-(}wWxhkrzsV^^CLCMxY%U5i2dMAVNn z;#U$nA0xnpPrd~l0{1@BXK|9620c6rWQSnLhVm$P>bcf3JAPTG15*Wb;T1Au9Ma&{ z(&0aTA@@!7xRF%R<`tvh*{!`T&!6IF7~h!?z1OSjb`c0u z=_JLC1Rz`Xk!N&OBHHxBxkVzMO$qh>+@Q-iNG$#=u@2mnXuSVUa7mZ6FvtaD`QS6> z=?sjy9%%?W`+7J^yu#GRBsv?f&wWeC-z1A+je=`Iq!XVFVSz^B9~}Z)tMQ^a_2mk~pv9!skqBZ|)>?lf0kG3Hyr-Wpo%2g;$ZhSfZ-d7$vLWl=|Y!?JKUm^7>3V{y$cNcw9I~#DQBxy z5LLG#yI|%g!|}mTY(>T0Z_woV%bEA~14ilFiwzG`{K~zshg>dgvaVc&6=UR=BP_jR zMaLj6<%LrYA^ZmLWS?t4-Rd16$@IXTJ7=S?5`$Fv_T5zJ{D*@kj8zH%e`9>a6|CYN zK6?J}hLM^?R}@L?5+Rs5gw|S`yr;j*wyGO*7ifR;|MXn&bR1W3tDBwi5BRnq##OXE z-J3sWD;Xe8PEQoLA@C%-_A-pANm-C-6!b+Yp*DY!==2}IP4>S#ikh3xURf5Fz{iab zhKQG6*pPgqGdbGWO+cJGPjTW)g+8O8iFu#nT>?2z%{lL(XNf&D2CahYvX&?%iSd1I z>n=?+z|j(elY?iB+!B@*hcjZzljxp2%{Ky(m(&rmOC`ysze{LR_=F<=NU~4A#nlK( z$4`(eD+R*oys*q#LUgGM0{3gXD}TsTW9k9b8hgDS_3uIk+Y2v*XA=G*QInTHf$w|} zrftDCEf?3MBkJ#D>{!HhwXg6tM>?T5!?pXB14FfHvy-n<2u24S77|#*Ri2YSdNg#b zVMj5TmK)G>m-_yF>J%1M^QYbngV*I-`DY>bOfri`1{ID%j%Gnef2Q0ILsDf=r+c0% zoGJq4i;C#}++G7q!MvmzL&F@f^ zPcSWSe!p)keE3fBb#M^^h*t$B%+6KJN!9Z@IjkeWs4B@OAZUyMj))$}%Cz(O&B?Ux z6ScWK*cqc@izZ!!;9mFrg{}JSw`4akJHWgwVSUtZ0g@KFv=^LY8GaujQ%xS1xdEF=EmSnn&)h zY~+emyOg#bP-wyf_T+UA3G-2~6c0bTk0=35`taiakQdLX5*NIJi`CRlL8~ii{v90w^YwcjcVaW|L(S3DcG=>6I*n<|;PU z5e<2ku1*=9Tg6L84?P-Q zRU^wsmpE0M-IIIz%cgui5+Y@>vkGI8s&YT4J0gj=RoylNH<2IA&ep`77@oGq8dC&{=C%w+O)B4Jl^ z_`$yry?bNN%fNQ)LkHOqebnkcX2tVv7`tVd!wd(~*$%ITV|xEMTM1~KUv>*H7-k?k zW!~xmo?QK9D=?Bo?F=`4%h-WzDFL#UFJ8W@ZtAe^-jEMg5LB*?QtR+Gr>yVmnBVzX ze_|hqd7B`oJmq?Xnz)>4sTtP}J(O@liRIZgQ$}JwfQYlK}o^k@Lf>c zQxqCKMQFIjGQ%&=N?p=_WG$XjF0t)z{0Dg&Qu|;I{hJRO!e$!1({HG*YN~Qxsj?ui z5f;(9bY1Fj*5c>De~Dg2#sE}1P|;I>N8wecB31BG5ex`7((uV)oT>MNDDC;viai(H zp4?P*Q=ONUg5fokSv^SY4>_wrmr0A+7Nc9`4&rvikOL~`f!`K@VXxQbx&DeGlGz0} zbUfX{l^lb=Ti+yb@*o#U{j)+O+}QMCixb?pZN~Cw-#r1=#{1j67T-%Y{tB;3wS9kc zW?wKuCMulPPO=Ztm=XNslI>S!4w?B}NO}Bhk4yIqJhOxdX%F5z1 z3&Zc5vUs(<39fT!M+?{gW5he5`&N8rz_UFEyr3y(A}w&t#^>jYBG!mbB%Aeld(|?- zRbj{Fopym^rSKyPu-;0;Q$oB50lY_h$};FQVvkwWHiSZ+^a%@?R(_jV&9j} zP#YZ=XJeVIS@*bN(Qq~>rFb;sYfVv2@bR~9PQs(Xbmsb#uT_lT;Ba$AF~5n7SGpj2 zVG*7-z!&wiG;W4Ys_w+TmIPulN_zEjT(t|6KDN6go`H zn#X~?=gPf(QkdkK9*G5G{^6!tNz<(^xId*Y*6MnW`y^0V`zE&3`wVK()Y;|S6UqH2 zY`8!nr$lrdqCeCEyI8k^_HAc0wkmS11!suLv+5Oc<~;_Ozd2;WIgLK`L~Rh}IKWQt z+Wn;rUFvDKbn@8yW8iao?*rHV&C1!6!KYOg;S*vTJ#EY1_vl2B;>o!ZlklU&ScsI) zn40lrLOp1XLj?JvM9!a!8(J-`Bg=Owe7*#HR1vbHBwxZe>gYxmmdGDcuZK&MLnp~i( zcy?luyld6sTMeH+GS;@e#=1AfPq@+aK#A4AfQrYWhM`3o7Bc-7+9>vHcK*%GYUze-%jX(f z4|RWXf_}K^lGU}bG{19v?}e+^I~T=oSKET%ba)3b&I(>|A zNxzX^9Zt2?S;l@d(6SMwUG&UH&P+brE7KFj%=~#%Ml=GU1+Uf*K7!!fcu~)I; zLK+H&GxN`T6CQwMX_mKXA2|DqJ}MCNKPMrz8lBv0 z6Q7>54ZAm7cPCS9J6CL!@+>;T7(@#q^&s;;Q=KMgL}`o=)R~iTX$t zNrwcwq}-Y2UjpyFZ@D4LwqWiOUHM{ z%qIc0Mmh$&w?S`>ZpE-qIn&!dtti#-uK6`=sfXg&KRSD8b@)!3Y3HkUxm;2C;Z;UD zy^V4C{`=ZmWMGaPEVyEsrzV%lsxv*8f>nXj{?uV8zw12T- zcqHsBw)-@tt=xl~k5gh<;aDivn3H&y-7FY@l3t;yMvvPAV^w?nr)$)_llU*rKk6;P zN3l~*sJ2FbKX{x7v10F+b#gTIz|Kh|?-r#)9SmiAw?qwGa&^BG`uM)fWx|bGG4f}t zjI;vmpW!z;;c1iku3NyInmvd)w7q57RNacxPV?EPIRv8Wj9=-Ya|hE6dJuB(!vpu` z-~B$hZOhTxDnbu(#v^mN0)}ueiQo>A5$?dywYnrv&^Im5Godu}7iqTQ`(I4cq6;ST zKZf*?@Su&z(6-UYxe-nmPT#E;$0haJ?i;+nh@V_pQeV1vCo+S9g zJ+X|D$;HUU@_}R#sF2e>p7<*Gew_1F+WvD-wwiO+dghhL^kq~j?=k3=uQ`=R6 zJ4wWDCR+zf^uB+$jm2zF+Wgb+rBFaKl~CAa7-2^dy8U(;4<`EGD|<^$2N&+ImAsp! z<26zDFx8Qe@@`kd!8ODCCMw0r^)-&4kB%ZOR-I-3Wf%Y4;7jXCdI@@fRHIwDHQ)Vj z&3E1>t9r5v$=CbMC!4HW8$rG&BGFbyQyyc>bLntU1EPt`O~dYBWq5DxJex1oAiXK} zz=7dToHExlJ#KV}U6$2?#&wQNWB69n+?#JKWgJnH4a(EqPPPOB&8%{y z>BuZh_G!fG5V{RvHB;H&&}rLZ>_B!@mfgKyr3htHwSg)bDf|a~N6@&YO>~;u5>D){ za!@HFJX9uAP4FXUvZ;*a1`2_vjWnX;($Te9Uy_(2Upg3COIgBHieQ+4xn)e<+fk-) zkF%&Tb6-m^Vn>{WE+v9@e68T0OzkCFi^G0(4+-UB9t+rr(!R4?K9O6;xTiZmu7%UT z_1^pCSQUV^{fd1(gdZfht{a6=p-cPBVhBAi`6EkM66NrQbKxqQ_RIHl;3BQOyy;ni)D%Lnab&4*bB5;e4ty+9Bm?=;TPux&Emnz{ zKpNngR z5VPh(Hqtg+3%W#;NOy ztzhXEVxf-tg*YNNbbT0rh2CJEP=3gPT+xoWJxX|jZI=Wfehdj$YAq}NgqJ3?n zv$`nxNtrI1tySx@!EmDbK#1iJRZdSOvuJsFqo&x#r!RbMgthK=`~2!&QJ0-Av)1n; z;eVbh`4D~OE`~vqp;50NnN3Xxy-H~&>v=YuC#uwUt0?OdAnD!Fe_0X145n5O4h;w) zK7_tdZ4iLw?)aGhP7UcvISBv_q!e!fpnQHSjdVlY-`1H5?qC*D1ds;!WB?W2+Z%Ox?={=-TGbDqfCM$J632z^=x97;>S=$U0 zZ(ioGrf{=lXv)ASlo6-28|6wsp^H^EBc0h%cwuV>G>BbDdCa3=O>PR^)OTebVrMOm z&PQJ)gxOS;hZC?5S~7&^K4-s`YnSpPHvogt*thqW^q^eP-hzh#3q8IkFEOQvU-`pk zh4w_BO_T6nAsd>3oIhDtJ|~HsqQIn_30~&rcBrS<=76is+Ma3^No4g5=%`8VSHvrY z@&Q`pOw)iqF)N8~sc04b+TBAY$%+^ZCjv2p9Q|tk)=6f6fCu~k zv_q$wg}f}gP|hZe;Qmsqq?6+zmQ60#+H5p%n&bYHLI84J&KMFVcsKrex<&g270TcP zR$o`?-<~Pei#`~`muXJHU`Z+oDht8i9+I-eXn-E1G2V&O{gqBabZFXo3qo(KI0^w> zez&<;s|Xyu%>Ta5g3fyH!r4;1f=@XhiMFxQR%j^xJ~%EJfXTJ z-(Lt`HYu`b8Nwd+lSRJMq}>~*H$Mk7t7F*3B}D9=QcU}R#UlZ@yWqC$-HFs7`LgS! z8kUOT;g|kfU-`nVIq%4FcfHOpV6)?@JI!YsMnI&VPQS^Uy=T9vyR;y{p7hmD!_EP%7ehrk`JHQ?J{?)@8Z4?!ZpTlD;sIkE9&zJ1$C* zl!>?m_+`^n;x3opTZ60qQ+EHK>$O>42iJ})!EtRjhC-~Qey~#VNH)~w^@5nD`7wj_ z1@m>fuJ}Cx-S1JXp?17$F3N7ZF2Kk*y>&S#* z8IZ^o>KU24a(HkdltVFRgMyT&#{4e%GH9MjblHnaRnPUstddfYg=k<}UE7-+l7X|U zH(|CP4Z=Xg5cXZ_4$AFD2s-8wDTgk&BU>UUU`g806UYnzlPt#jKY5jT0)Pe|FY1Is zb)L@UZn=nfDv9SJ+MmxKBw;lAyY}O9lE*jtj=R&Q6GK8mJ3#*X z)=OeJpeZ<0JLtgYYCDgPE&JV!$xqeHaTXK{ThFt>Xa)J6fj|U)azOKtB$-f6O@{8nLzBPJFp2el|HvxQh(O#)3Bvu*yNTRBFWp?YeseAV zwAG9ODjs#O-hEj2y)RUKy0e1A`-kU6Fx>ZNtVgZ6=4rn|{#lXRem1gS>Gd<^zM1H& z9q#?Y&W+rZcUD0$GNR%|5L=O6{e;m?pICd&>U8DZe25!$dkX z8M^MNgOr!;`sWx}kh5o!4-|1du+Y)h3S2&zc-&MZIWrA^F;OUC5}nUfJL&hkc{~`Z zT$pp`{+2Va$utz#M<}2&It<|iRx-L&eVbg@#66P(z-|%+V?0=-Mv;nQDDa^gGFc5G ze8i3Rq)u0YNQN`+X=iPCR@w9RQJm^QX zJPO>=S%z$B&{9!l&k)a#P2S>Ujd%Gb>=>E00)us(gvn z>P-1u9k27B?sIpOeifU}WI<>ZX7<>^5PGh|R8C6TyR{Jpv$?ULZten?SE$93NgJcB zCk%k^!g~emr!^^dUX>nKz5eas-;LSdE?!X@6z=_9Za&;YWq6k>KZFPf1X@fBi|xQ0`?D5v4?=iDx`?+ zaD`gX@drkPH_$crES-{ z688(t5%d=eC8VM5Q(S;gc~Kg|G~Nn$|6)(q4uMS#Ng@k&dqR;Y0-2sz*Z%C@{kzto zIQoqWpya*!x5(XxHOF*eGY_0>eysVwjN46%G&r;ZTfd=jSTtF;Q*wnu4(T@%_pvn% z65d~Sa=`l~c&!O&`_}#;XEDK#&+|nI*41ZK%)x`nqzjC%3vRUi2E#zKPmIR8lT}d! z2%jBQUZ6bF@4l}68*Gn9fyMJL8rdG7!Qc zu&d!$#$fHR(dd~1$e)w&O1NhuHi28e@^TICLvbu-%!Obzhx|I|;W6^L>8n70)ehpG zX*S=!LF*kS38|1D#qBZ~Q@?I!gPH{w7WVif8^)(uX3ac$emy4x=YPQ%pHx8u+b%n{ zOKp^qqJ*&Qh|0w;*Y{`cC9Hn{)>T56?{rXB>Ync1!bba;y`vKlKw$*@JM#b;4ZFV# z;R9N>kB(036;eeQ&WI)Z%$*HGnIu>V&lZ(QYRGF|m!ZDJHWK!Ozudn%p}V}M9(Rz2 z%5XHkq~^~Y$o9}IUgl61sNNB-K{HUSZH#&Sd>hYOSa*p#LgoT%3j78Ny$Yen79M`5 z*gGx`R!?gFlI+kox4tpv2qEz9q0^EC$loBje8H2(3zuARQ(wUVITGoPzkFyv|B;@W z2Hx5~$mkqpa6=dd+k5l{nJ6yY+e>3yKIvD9qfb$18V|I?v2RA-nHiD#7U%Ie5VN0W(ZW5SHZ;CY@eM<#+oMvvtP*cyzWnF!VQ&iSPj=kI;*JyA!RHKwC11b6VYjMr&K zqcHS7udI+!US)})jB{AO6PV)^o6yt-WN_>QnP=qx6zm4#P8A5Cz9%Oa#dqo+@0E`s z(7wKhKc5pjz_7Q}S}OEWNT?$5mVWzjRYC*HoY7j&LrhYdEjTkgNavT zX4o$MNhy18kPe8*G(p|QYW(?_nQvIB#(9H4dcS5+7PWyig0K8SBld35cG?ScJ!088 zeyoqalc@>Hqa;g|M4mzEzYu!yGzchg=jH|gL^Ox4RT?S`vkCe`J-6$w54d#0$6mfw zq58E$)0{Bp?uP4t?oHfHG3z(jdvLQ$_GmdLCJ^^BW4Cd)410;YP5z3T$||aQt;uA+ z0;(fP*)||Rm;@5RU#maCp2OZ*0iIUhs_n({vl^4ix4U0y_4O-${Yz}#@WTH20J8*S zgDok?V6S!&Z548Q)=4(dl6bW#b-9lQaWt8HwX)hCJ;lBVommYr7krYjzjM;>J>HEnQ~gh73utlqH2Yb|I0KXv?k{%zkS(dxQaK+JroT$Tei zeB4);{jGf=Y3j2Zw$bX>fDNyL*au~WXSmG<55o{aNmhO3 z_slLV(Zr3D)hmAq=P;zP#jq4f?h(7F zV&BbmVzvftP%ZtAhq*AV_Pe9mdq#Noj-R`~zgq#}lq7X^?Z}<^ zvZ=M?A!FC(ghlkpu?J?qc!!&}`VSA(7ixTDssr-romq1zq#%y3pc zP-N6KGQ)+)eu_t$pZQmh@89a}8@8d2*r<#0)VG5C5^BAQF5P$q2{CYw1I=GZ2+B!D#<&n zQ3E~UK&Z7ho>WKFXZhA|XBoab-w)VNtO89Zn#ln#XX0{y#AEs$xR$PDYPk(Oo|=)r zRW8vy1S)@wSZ&453hq|+GTVU;^4UAZvc`Q)BMZtTz`LGO#i~BPWAf!RqSKae&);+f zT#`1ci3f&8pz8FkY-1(Ozh6q`n(u1*JncVAYry!*&HFDYGiYT#U?WRM3ebR+O0sAp zR)o~aZLj~R8m1Hx}fj#dF~DuC-iVilZk7%Fw*HlC2WLycb) zh(>vCM=whsBrtwnL;OK^zJMYMnJ=&N9fB%oX|3Ca{wVQ~Y4(24zC!tEQUk>=xrcp& z*R(6tjYpK;NuinNampT7m9{S*Y6z30n@vxy&MnwGD;R%I$oAUqkJ0BYT<`q+LM%61 zD8f+5|J7RGjIJk=*jQec^Hq#zmC9jo$Yi`;-Mz#0+-X+mdb|@Tk(al(H&;C&rKSD- zUFW1zAJN0B=gNMHryuG`p(Z6fU@vre;K&g@6a4*pZ#FU-d|`7x(~I*{Br9q$Q2A8Y z9#*ahXu)C6c+VYoN&R^(UY*M5x)mx|Vgd?Z=!q@B^dodKLAYLL$>m&O?*1`%S#s<1 z0!<0z1ueG(7%t{|$o5URu)sU6CX$@cyT;1vjxXHSy~hGrZwvne@H}Kr=&eqEg}z#Q z1kE}VFj7J_JzAT}qWTHjs9m(c7KGO&CG9_+zu7$fM(+((I{>UTw(gChf40dYC-Wlo>FooNNg;sasU{PHRG{dC z#}FVI+BloKR-eAg$L$NUY@MuTX@BfWLb>zNs{4uz%KTG;rWlMYfq31~#s3_l{!cgO z$esv>bpc|JJ#G|W=fPA*uC4ROflCg%|NJ8e5>D&0xnVKVA3ekz_owO!!i0whnU!-^ zgby03TUoNOuT|>iLG7CGY}Kg@0fpw5J94FGhg&?ypP*Nra+D}y_M^QgJ=dyvROIcg zujoAoFfWb*3&%6D2I4*0zFr995)HEh1Ki(7PfA7GN|*08ISX!a{*hEL3PGxKtk*;a zFt;xNw|gRUzgzthaw&k4|29My6jEQK7CL?zWAw0&0fr<*ku_;*<2Hsu%s8HDm?^vHt?scFL#?<{ zIcLUPg2Dk@sNL$@*E68YuN#w9*FviHHX;J?e{z*_PACtPQ?V_KNsm#CcUUW zdDS84tuFTMWjw_c+D^fpD_d9`{#EHhs=5XH{plAQm+sN&L)eiyap3JNG`8_W2;WH* zVQT}{rNQCBgesF6e;f^3p4icn+^m6l>61dc>$30SDM7|EiEr5S-e%x7Ryqh^Y6=BG{XR55OE;anB-nz-<1u)ef49i zF+S^Q21LEXE_JK{12xOJuEdpOi!iTBvoY8Oxd;fY=>M_+E~SQf3Sf$QN4W}*qtx2| zg3ez5n?;LkKB2Zk$5&WVwK1Qk*g=$|8_uWb9{F}mWMFG{PA(*(BU(Gd37WOi&2czDLMj^85IC)n2d>8~+ozBgRi!X&~ANx;Ovx)&ED|XA|1a3gsnQC<4Ggc+2C}tP^qV2L^;Oe(lNp5Zm(~ zu3eSJvm#wc4bytroe(1WM>w;N^zPoR{z?6hW`W+XD0j_Ttrafp>Z9?~+YC9FGO7p= zMMg6;PVd)57*E$+!@TM{hf7tlI1r2g%)0SU3jI^nUg+pELefk*tX#C1sQMW{yl#h3&kS&_y|)}Eg;DFBQq)Mp>A?afC$$ah zSQ}DQ-zX8Ko637_T2ZvyR42pkAqJ zQ|qqPm#GtbVU=h6ja#~JJN7%yWPsARbfKCsHr|T)gV!4PQrZX&hp(-tsC6kLGj}k( zT8jdsw-n*?R%VMewgwjEXopq?&zw)Cu+)k#-$7vMT;V}%*4${( z4w}op1eG?LZHx6}uU|U4+^kJ&7e*|h7z+o7C;^feP~s-qfy)1kXshwD;^4-%zde?~ zEEh2_@}BZhUZKPbiRVzUR&sfwc z=$j41>wRE2e(e$v-O=s}a}O`dcNClTvZwC?Tz}pp&T;!Sg#&Wecl*db=8|X!ZW6Ge zkNauVQ6MO85?I@Q8Zvf7jN9bFc8|ZhKwYE!3_$?wO!fdPx2)W-stw!Mb5Swn*>uLo z7Ivh31$XrJ|2?w*&wZbuCw$NgHzb3S*!Sg0?jsj3!0+`a>cBfwXGVer;4d!(nfo9n zH)H+UunGCsAtHkV4a8<2w$K-z$8RFlSgr|cCfqFl;MtwcXmG~QqioKnVw!1$E{T3H zF8!RtQz_1nx}5QH=b`6E%}nAG#tm#0E&sMBREb`hnCX^gyl*Ku$?%W%kGcL!oh&ZMqsrlL>eZE<3J!O@jgK_s{e;R}o{i@zB3eo|OsE5#D6`JLk)liH6oy@OvS4)9ZI-o$%0cF387)L5T%?LdS}9~npco; zI(kX4`u|qiPgITz{y(L?0Dc;JXK}85x^-ssyK>uHdEjxoWRk+DzoN*ZcUrwfRw9sd z@*$&xROJQ6JUiMu^H;J9hMpzdD_8LGITkdR_EKlKkLu9#_DxO(HspJn*CDu0<(B2} z(ztz5@1Xnv%dmG|m2x&cY_>FWj7wv^=o*V^kyLZ~Bl$1y8&~lCu>*7IlOTVB+r zlb?5fiaK4+K{>1t5*%BZYc0wv0ocTqtyR1M8-uu+Z#ZZB~|R9gv*36xtCl zqs~=TxqMNFsx*3KRk- zWv^?6Vj}BM_=((58n%^iq|>{S%l|3`{t(S5gT8$po$xOAm4Q<52<;QE_B5%aGakj( z#>_JBX_L!u8P2Rf%Sn!`i>fK5qfu^yt6pe#Hgh%YtiP%Z7e!L)ls^#& zuwG%J@knA-SU(}GCL?<3YJFJO^%o?HKXGIQ3ZO;`=ms=b*G~2QFmcp6@0G4baHz-N z>R9@NmXRWPg3C8jvLf!TRnLOlBjpSl@|w3X5UX8FWdTvsgn1=WDbG z9$rn*zaH%cg*Fqkxe;O?knIP%O2gXk5b_~%GhX&2Qm zcJDv%y7NSLQ+GNTstS@&T9#{~f(id&$Wva^CBL^qF{(!M5i?KJ;GqleBwcvhV|2%S zb`f%ss;!SEfiS1g)S6mf#*}S~%;A<_vq+<`Q(DkTiw7e8T1G0@@rNdQ$E%8rd$urJ z25y}PI7e!w9K$c}1rAh>6eavL_rFqIYwyND7dpz&@u6Jo&`oy`j{wXU{>o+Nd`{ix zP^OzBZL=FibBC=~=duT&Zmj@!@HpheKohqiLhJF*RMV(nxt>`ALFk--mtXF53uV0> z?TrPr)Wj)nAv7>NZ{*Wi-A#*vJx&D99T?-;HQ&c{5**BwQ}KWM%rD7x3dCjOdOb^Y0#+w21TI6c^QkSn@>=-@_5@_;N_J>WF z#l$HjOuP_R5TrUZiH=4!9=I-c@4|Ruue7=NjsX~3;t(?vj-INKHxtWh>-W_Tu}>oF z45mMaKXQ?WkjAJj#dfB~>f{N-`+Hn{9uHo3+FRzXj9pk&7y^eKJlsIOh$2=kwtr0+ z?X_-*8>NwpbwT)$8Rr>@+C9crYANU6Sl#h}4CzOG?AUW!AO>zfuliGW^H_bXm6`Lw zZf%xXCaJ&w`aQtaDig88&^81UCvGu4;tEM`Q2znt0>htEQ#u$bB!r1P3cnmAq*K>o zQHiD_ux&x7&s0SU*Kl>sh7KOdCihu2Xckpkr4gt&D$^fGW7dxnicp5sl?-Nv5tCX2 zbzC^;gTV9vr6TuNTY)31J&G;xbEf>pU)!^I1~UmqSWXJKu~{T*H;zI5?f5+me@>9# zUr(B%{;%LOLhi(y>p{L7tU6uG8wMMpc6vI*<*0Zu;?roA&br6WZ?0#)vE#noY!N3u zmyeb>`~Vg-T(@Oiaiel)oXi=>$T?%T*@Jjx{0l%43lM4|8CclTZK4i~DvYK$<0i8- z^Yzy6aQEJQtxqFpcK$E>*}JR0uqb;`Ynbgv_vAJ5=cv*Z6pf%fOdKcHC<6;Q#$D;z zZGEE&bJ;T#{r z#$a)mK^4!&#`p`nq8KvpyA5`Q!W%Z1IXqS$z?Sq(g~qyX?fug zEJu~fuidHR181i@L=&seoxni+YQT~^ionbQ8@m~?CYwWs^x_2S+Oy7S@8_RVNHXCGYoF?+=4 z1{w@rM)u>Ieu-x-wf##3*}*r-1r)2gF_(pVG};U|JdKtIJlbY%9;M{2AFM-!WDs z#@I+l1s}kQ1L_pHN@s4PBa-Ho+bXe1#@ZVr>L(b^7p^uLdE?uD0NPQH4Hu4!BY3{s z<>TYP-7xG6@4Mfx3rZi>|K^8d3bM}4b4J*w-I%l&1OMNzt)wfY0}vhY^&{WomWl{wt>o~R__v6~7cP5OZDx{bgql0RB)xSw{6sJHiX&kyZ z$Pc?XUhoz@xn@*bR<$lMWOTEpf9FD|GkWe&Ik8_~7Wk_+%-&Bzc%xWq9X1oQudQ>i}y}Dv0Zu8>*Y3A$$0D9XM4&otJg%RY9s5pzQ2yKad5f1a zC>gZh)P<`1`-o;Ro!A@c{}Ty3a)gx*5LP`Ta@)gUhSRlDrtgETybaTaJDR=!(1hOd zJ}#$hU>}UP_vm9M&bX{iRcrbbXJlIChtWo*d^s89x|o0DWaCyY)An$kyGbs~BFjO$ zvia@O3nA#;$+-PdC^a1Tq@bH=3SsyQsB4y=k440jEV3z-)LoPl9D#%acI zEN#}?wY?Wn7Qwc=XK9)dIzxVY@UWSRZmr%#M~Oj;$d3HV?jOYJ;6b~zE*rh|!E6VN zW2D)N*n2i7i*y8co6T#145o69^Yd5>wHfcV%MICN%9*-kbb3j{asxcRx*8HduxVb- zpg4uGpwGbPvAX-XABibKB$HdhNU|N7e*6RPML#aGzxZ(L(a`yCPyf#XnS@e2|4x1? z)cblRX*p>|%;YDMryrDx5yans?Tp>3-R9BER0q1Pzl(Z;ns`asqaXvjOw&|xbm2vP zt9+KS00w6|p7BfEzik6t^um->TU{NWm1HJP+$^QM9JJB~`nxvh1+?k7y~K1B_;?~~ zDXe70&LfkbFn2ukbz{iqu#K4AEex94hYEa6D`UrvbxlGXC>uTW_vt_I>51dSJqu0C zstjR4J5csOVi>`$NnU6b-(Q`4lnq>x0%s$BHQhwVqcE83#&d+2+eDN%zZ9XBl+t>> z1Sf}+r3zZTi6!LqIO56>53ZXue!jvq>06Z*2UDf!{6irPA9H)~-5ihm2&%C>V*N>T z?}T))61V7CJGM-<=s1KhY-fCs8tndNH<{4wJV4wb{Axr0+5huO?$>59IdSsp6ZsH{ z9h`nWVdJK?P`I!1$Igt*PVxOnHww)x0Vp8w(8VqhUqhE+>EUL+>V4AqDMyUNP3`Vy>!xrHS_`PkX^S!z)>;6aN{Nv|{o``wN{FMe-GpXGv4JqoX=}bPP zPw+=TQ>_B#>lKJg=*o3Bk9Xm5KxnOkRp%|QMOuffe>IS_aG{*FCr>lSIVrOar$MqB z)5B_P*e_E;$!Yl<(zsW;xH4Y#uBAPyVVfCyRes$X1y$PF36QVXFWY;Qb~?q|+JT&5 zh;J(EQ}0y@HAbcfJ(TY5l~83|EH{t~LXU$fiqz9>5tT@dhnC1~$E)X@1%j)}P!C5? zcv=?aM6K{!r@vI(L(}7S4(`o-+{XPz?MUg_Ve@4CqMS9 z%U#LuHk$nJ49G3}6%DU0`$}W?@pUR*ty2FdBmdvqPbwk6b3>vCg+Ib%LaKJbcrWm; z^wDnEkksquD{q21ijb^pLPb-bAa`#2mFZHYdR>9~S~8flX_%P6rhgX>mA!qLP6!%t zF@S9r?{Wa699(-XN8;wA7(d{#m9)|fa~rijeC%Br>)BE^QW0IS;f37%Klsjq)$p_K z&tBysd0%V|FMh*zn+endE$ls+$nUcgVHQ6!$fLdl$E)t<%ZTHepwb($aX~ucknB<( z^Eu5K7EHW&FvA_2EV`M?DBOK%)ud}{covYDcUMj0($IAe`jM-{FPIa72ZK_VS*cN! z{nRh6Xv8;s?FEid6D|8KA2b4Rm%dizUvt>Et4;ohNgiuWw1b=&G|UN=8C zZ`vxHUtqvHqtubf+Z8AtD#0v{6HGtk$e4l=9I5?)DA{gP*#41GC|koagJ)ol;Ln%h zm>nM&zUyu$*~H_v;tV{qY%WuP=#}1HShq8#ES#kRD6G!!Cv&zRrm#}tGszVp?X5m* z7>*J@NfABNdgz8$Zq-3)mD)9bzh5_a&L82q&Xbye#6+tG2c>DlGHj2I5X8oap};x( zO^Ac;NgS#s{F`#~>5;7Bl_NrT?A2qtam!id_>ryZSFhFi%s;LdZ^n+?b2$=Bv9L~5 zD6C@e_pc!izFk~Pu^XBqpp_vGKk?(j*%-_aNE=_(d6No^9AP!3GuL@@V!5)Z7>awP`9P zu0{R>YFz>5GWi6sY8Jz(jBqg3G-ETJS1fDqQdBxpUZ*qq==gLvL9L~Cp*Tj_`*$Oo z)n$pQV59^%9Via*&K}a!DI@)HbhJ1IB~jN8!N(3wSl_$NPcC5P3SZmgdY@sp-$kFI z@0F)HwL)Nron!)2oG}%gWBYy*sh~(ok-XwWKXBponZIJ8hmDk*#InT=?q2hID zt}Y`^71`8r*}{JSDwU*Iwpr!$;xX;V=|n@5)d=Ji4g z^*fbbhj3RKe3g`x3wxS_wm~r+g?o8KuO)!G>H2m*_MrXSu0}a;XUJDhl zf(>2uyik0&SA;tj0(Mch_*GGoN44PVvDK3ZR2$9MSHO)`@qLmh`&ekd#RQYw>OEcC z#%&6<&1u*DJ#L88xm>3b?<;YBqfAAwm{n3SZ4C;U!BcSqBCPs?8yk!VhYt;*`rEc? zhG#Hg{lo|w z3arz_u^VzqfZSeo)SP;|+u_qHbR@+1E9xfb1)HL)!|m*y16_>ooBu=vY*XxWGi^yB z&$*bd+&~o{Ok-EBIuj?XOLtZ$$4_cM_71<$G?6&#f^^-O4)i=tV?#(435d>3;_)sT z53So=9l);3FCC)d6kB8S(v@w@~X^0F?br<+TaRQhZE^gaEHK zFr6wE%PNEYXfc0n$k%Nh9t8WP`}>ca_$zTlN;WSKAfrlN4jY}q`+R*e>d$*gtZh@v zGhwhR>%zj)qRX7UmDoc?(|Xt?@>_oa%y~o!xRCl>RmKSGk z6#kzNU19$-1v!hj%*X>N7lDUQw_131?IZj$X9Ck!TrLjx!~X6E!jzx?mC^{T`iG3i z-=x1U^@(92MPiN5+TJ~xk&u7J*xT@;Kbk9*sYFVKw`6S|;ZS zQi4xDQefK#!ZrAutbVOucbWaPG0^o)fcaHFTx5|{GLp^xoczX+sqj_Pu3gu4$rc+C zo|1<#UatN7TJ=1zsH$YB<@Gj&vlrRf^KhAoyrAz#S!p*cd9-3ToAE+p*@_+1zcuOq zvU%XE7w}634rdms{7xa|RO#B7HQ=3<`yXaaesj?kJxC_BFJd&L3_XRNn-2^-hxcgC zQN^3g0j{2VP%OhIun&u^ax1hnI>5Q?YUrwN*eAu5U!8vSrd=le2*+7u$Sq$zj44dc zR97yKAJD;cHSM6^AR~UFgyv{mLw-6MVZ~T0lO=`ZVL@>r*?eSP|Himzf6Xs*0b zly+ALpmb)|G}IxDrT`>}giNKO3S#1THdL~gJoK~Kr3067YoVQcAC+ve?Ij?bTHVNV zJNykSjrp$?2Oz$HMx|rjL;4@}9Up%s@RT#_J;J*kC@uy{aYIYTxi+?>?ZajEZhtdP z-8&oM#FoN|#HWb(^~!lB5109xUKPm4&Q@N}eBAMHrbZvWn=3|NkvF-gAXXRHHFCWC z{q^wKL1G!<8MomhZL${HsYX*e8|VnQC^#2=gFHq|)#RkjjHNYL$wCNX6tiH$eMGcp zdeS!f+FwMwU>%(2)>-t0-5~nDzWU{o48iXc>frtPs`{pdn|G#B`QN zM*AMha#NYknU&sCfw5jboGK`Kw&#)FX`%)T)=X-Vlk7{YUgV^iwv2? zt{~DT>Jae6wE;s(2>oJb$9`*JX!AKY1*siDzI@FacRRfdP0qsiL0vyUK{X%t*%uH8 zid}ptBV`46K}xVPFQdY@kcOPTW@Yj_*y>D(2lqukh*>LzEkF$))(#x5$;mXmp71Bs z@P_qW$<{;xNpfOh|CC~6c7G^U^gMRd$Cog=mYZjF)aOmAf7BSH0`InHbzLh$y{beR zTonSfSG|MQ%IR2fVh|K0x-m|q2&@m(!0P@|W&y*FUUMW; z3@Be4e+2LiR}I9O>8jNcGMR>#8y;_ZjLq?`M5s%$L-J!@BfA z2Yhr!_@o_^ef?m1f`X&ufTsK)J29e6d(6hnb=e>wO8aiTT3tV#TI0(Q0XgAUq$IDi z8#2P|#!fat!_Li*``qGZ(_%0+TsVWkt+N>akf~_ksgti>x1U1+Mh%!{uf5&yqDZNF z=)@{FnKJ+FG%yY9v0x5b=kO~XMqj!peLax%Zk9hz3H@5Wo$u*aVoRiNtCn5L@$k#3 z1iEqX*dS$s6DB?3!;jkCg;z0`LQ!wS_t6w>78jQP^GTdAEPS9#ypsgPG2sl~-hU{i z1T$8aGCefN1b>N|)=eh{iT#Nd%tqpHPdrY2>7E4=nn7#bvr;|*k91-5U%PwVTp=<; z(J7WWs|=H#k}CMl3}ld2Y|1=Mqn@*Ei&WBZnlwofWrfY+zj?k$)~bsS{K<%@=LzeD zup zHh9B6FD0o1H$fbXCUWu~*;0W{AImSe{ma zV$*Ubq=#oG8g80l(2@2{z63E{s_1op;GVhj2TzydK+teYHApWkIq{KQQe-^SfDqk! z+-uv?5vbpBxexnQnc65mfS%{im2#H?ErxKyfJb@#(&qLao3!rN$f=9Xk*puL;q1TW&d+EnlslG>zQwpy?{BuCOA}?ZaVNp_1TJBNA$gr9FHHe_+ zZB_$wV3*hu7C~NHB^gryZ}NG%ViM|*WfwuP4_pwVpAF{N7S+NYbdbA+sH}VfVvVrl zuGIKX6{sAO`?~!F_i0|nQ?h43$uM6W7-Pc=aRCD9?u!uKxu9A~N^Sj_t@05UO2ZzK z?e5JDN8$!aj!wMYih!ey*|f(1lt)(9nS>X0n`5hFjH+FR`ErLgE4P1;re45wKVWC) z>mY`stMytgEa|%=Z548=Ve+iuP7nH){!@l~hUb;0#WJx)OwO10lIUQp(j|u&SaWni z^K*spe2oD1y?=0Xp98~j(Osk$ef={5qZ^QuP4tdu3Bp}e-Gj|6cwMX8)m1i1S|lKD?Sot5JycG0CKaSdEqKJ1e=KinZ? z&d^)k&ag)S#)hlz*E`P7qkj22l7egWU+x6K#)%Jrz9A{BhJaf=y~D(ebqwSAzk#QS zyWTJK^i6Rsil8`aQU1=;JTqE=eu_ng>Ic`+pYbaHyf~L0*YqbmGp0bDdP@Li?AC&V&G@Ms!C`6P zcQDFPR0)RJh+GkS(BwH%M=0%t3U>GjCA-j0G1)e21|Ruv_^|>tW5P(nAT6&^NQ(RgoyHYQIhWw*7J@HnWtd??7kYb??k!QP_76;qJ$HmLZmSV``K`XdJVQ&!8(p*yX2t+p{cc$} zKlD#qqX!^aJkR6MdJR&KQADGMlD5NBB92`*_QFj=7zX}7_{@LjCT*zTM}9D%+tcR9 zhlg9UH%|}cJJS4kTNcH;bibiIkJUxf^VO7ADQ?C2TmBH|JQ{hKdvhU~<1n$cJgWq7 ztbN1x(6@oA?jk1fdEq^AGR1dfd{n>mkKmQ~1`7NS8eVN|f3*w! zZ(lkQwAia`8%NkH92BOb$SU!+5qrumyJPhYX_8(hsof0 zEc{-v|E}xTcaNV%+FM$5>LhY{`zOl$K9=s27d!E6L}r|nECxIhUWfMk(sv@HBGao? z1HF3g;*^1eG!~hl!CqA_#_WQ1x18ah9~Equ{nT%uT>Sl=tgmLHAE|pmprzs1qyAd) zlz9pfu;!tFot^tiozWS8l(QDP$X}(@jhvagI3A})Aoz7l9NAMv;z9gCHC*zyxEE7| z8X^{Q@4}2a^Kt!NQXQdZX(Q_PFw}KY;Ai_ymausW5nZgXd{#amx1`8aA z3;u~QUq3@QU#WQ&Dy!a{h=%Y`G`LM4DJOrF6sJ)FEPwVupMSG^{72jKb~{TWzT^vS z-NfIiXbZ7v@M~$@S=yL=&WU}C&;9BE&7i5Awa+S__oA)KmEjYNlE4&J8G{21kod5V z&~-UMCua~Z*Hm$6ViAxKNbU!`)7nMAj+K3;gSPL+6kL1pgx8$yx$yzN?M9=)8a^_R z5WDtqkj%xhHFoB|^K_c10o3JIqj@uwwO)->Q(^fePrup?q61uWkIp6>g=IyQ>Asy9 zkBmZbKbOJ$S`1hBEbPkMr|I`tzv%&fi8s}S^hniW_M?UGZcl#93{xhn{;cv+BaF*5 zpXF?8J!!;hQ{M3Z%;r4*s~04R{n@NWLfK0MPvM@1;NW@)E8?_6euR4a*3A;jTR+|sYUAiS;xCMHneWF zl4aDQ!#%*oGDpp$3Q2Xw_0n1YOBJ5T520hxwAN^&7{-PU`QebEY<=_Tk7@K4R9i0y zx3KJ*KlbnLf6ZLajy7A@ZRhJV-sc5^BR{Tpdl`Ae3bu0z-B)RtGyL>>q^JL+i^(D1V2RNj2T zE@rfLUzK+`%AMPO)K?u2>!v&X8cv@<>by!9SN?mj;~)^ z(k0Y+a@XYLAs^1YL3=~iHFfShpV+B6!6w>bI-dRWfwW;V|I6UQ1_m5^XMNa1g_C9JT zc7L!LjUKA0m{b8WQ)30%MrhW>C(uu5H z4v|c@;4UWMHSi&gz#r5U0c_TOt>E_CH2>pYyf8hN_Qx?RG59iYIC{qJ_BuveY1;|2 zZ6!WQUl8Pw^F5;=V)Z0n*FkVW2f$rlQ#5A!!h>2xiw*41L3EMy|;UO7`q;< z$jM}p`^g6=IPMS(m+*Z9+k>CAUL>x&`OKKBYHyOZjENx1d!cMZ3g&_0cUGMDB*$-` zZ$Cd@r|lH_&TBzUOpaBypBA4vwRBBX?Zfe>{lj)Y67>uE*K(Z+T_5krFf1lL zR9EVia~8rqQd>Y4iAzQ)MIw=Ft;;|FgzPn3G!M^z7Xn zUi0Ta`2Ie)q~UkB2ktWgXBr#7&4G&g>`xmwz6xYe+r3wDcRY!|5HIt|IyvA;M4#=) zj~7BA4qZ9$Zpo*#$o9HR8{Q8#NljK4zeT&yxin zK56@EhMtn_^yv_xLmy`;5vhfI2^tKOZ$BLoQVaY)-Cu^jyvH#i!ERxMX!Y_`z<9$d zezHGM5B4|SBX2tcsFVxZSLvLeIrV6yW*@GR3_twDF)!L>cxCW8U_O03A}D08O-`%K zsOzGXIx>eIXyf~UfDUPHIp$e;4Yh;Q0$8Wn$(CsME3Ap7=XyT0KoydXd^P>yyshnZ zD4zu^D58c}&9qP%?{zxfVAdx3AdeYDw%x~j#b702rJo1*ESJVB3+Dqm!FJ1_mPT^XApja$M(vj-~e zQ3LDS8AD=QE(xl@>DOHqF%3^R_wU}h;$xVy_EApv(f3)A+Upvt`7lDk)s>xiAqk~t zjl#Yq%r5Js+0Ckw5g&?10(Gh-`Hx5phiDK5KZxnLB>Ih89@If z6QFdP_GR1lt?!8p5f{1FCeNc(fe~Wya}Fodl|eVv4#zIrhU5;YgG>t5r<{Ro>3+k% zdwsVnhb!I-|Jj3|{@c!Mplkw?!=@d{=d@r+R8oVd)pop$9=D*z1sjI)Zv}_#(yV>S z$cjuteXPDZeA-q#Z&cLs4j|~E0|JrT`{Ur)g<7(}@5?>;+E$El&p5>&3B-Y1Cy6!f5Ku zj4YT?d0B4yscMD2-1VT);9;^`y!18fQZtPa29gPv*^gqG44;FLgk+xLKbr=w-mgq6 zo8MFg;%lXYoZioD_0=lDUX^R1?wlUic9xX5)?&iR9k-(e>Vhb#rJ&_4yVdpv2BYQOZo^zMiYeo5IL zl|i!6enas(ej|Kt4*<;*?IYf)UjCjP_StE)2O+D0ZK4`NC_OlW6E1f`PeTp(B!H-g z^v*qc3pZx+ps}rvumd}rA4EtD08jz__>n8_v|Te3)+Q9+u&Q)%ETzbx?#MFqXQNNk zp2Mp|>Nu@}#fabUAI8$|G1kD;7<;z7s)+{1io!6;r*Dk)8;tDaeEKA#-Y0P@v!YX;tCUg0n<1n$+ZonjS=RjQ-^G?2lZANPaoD4ri zkxrP%y}_Dr??#^ru)ok42JQ0bCmr@K0D18=aCjY34fq)m0RJ}} zb-K{GvsNZ4YEml2wvmnz>^E7-m{j@FpM|HvcP5fWlg8ofsS|UR00qBt zgKpc~29#}%S%LIFNdy9Kgb+_rrt9Wy%U8=RmoJaM1%mg>u>8kkZ_#`3BW(tSJ`eE4 z-P;8bXOwSqf+)VE#28hUg&#aZ6WsLL1`syCo?p`cxKBQ0@bWvR;XQ&E|F{zA@X)n8 zGjyJQrc4TT{p%T5q*iuZVKd>LIHTgF0*^3XPL;e6b;-wTc*ACSSZoULIugG$t9KQ6QyGKASjq|*m9gpv_5f*Z2Hjs4RX zBb}E==Upov$+j77O_6F^sr#vx90k8u_tn_Rn&fWU0JGBCP3--?Y*HHFZ7EcOOi)bJ z=Z-i#z{nzDlW^*UMOcS+$>~cegsdtfKbBTk-H{i$)Ykm@fS`pUurvQAN6z!L_V|Y)A0FqA z3d>1q@jt$M$8PnRz%TtD5%;XF6WXn=h~B#^xFvjtAz9QmQ$a8H_1t&jjO~|-Q)R`w zPAp;arWBDBZ&}vhrax^b++TS8slSnktGIi zy9+W1Rt9>7vDVu~_V?12%#OI@Nrtz)3m)Vv5b_Zp<#&yPCyIA;H+=+qtbMK|oj=vI z@QuqALIzCls|(XV0OPQP>o1QlKortp`{#O#sv-MVkgT}>T(qvx;Sdy48Jsl-!=q<> zDMo=(IgI;xBW=yM9^Q4RT!tC^i%x_zYi89|oPW8YCS_6K5#D(@kuT3I3fxvp?~VnC z(+3$)!<}N##*Fkf;Hi(P51gldeyRs3gYs;$3=1q zC+f%v9tn$ikw%L>E~C_)41owa5mwJKt>jR*pyBA^8ouErG(D(7nEG$8wS|-M(~ynX zjWsVlipLz|u9v2Kn#cb(<=eNG@d=1yHzKZjM^&Mmhw6!-Tt#VCmvID*_vR}e*elHN zRngenZLGe&Zwm{Rx$A)U**^0PdW^YCPS2_rh$Is{28A(Wu@VS*m5q(ft!#CqEsFNe ziQa~n{)EeudqQnHt z?TAP#jiByY4F%o15LjhzWPykBrTpGCd{Xd#$?qAvm4+$PRGDg3G~N>5>eMMWIZ97md>LJ_8cC|LmEib&OUoMXg;y?H1VE^CnbXf5DVRI~VR;;vypAZ%j*JcFvb%cLN4{MHfn%pjcBBIChC_!DZSQYL?#S_Wh42UhuB zfwbmtDdZuzON8pVAA7&dx>-k9glMK| z5AEf4ZM4@(yK@#E^BT!?lC*-My%@*Wv>=TH{DG~&qvbP|NBt}$bN}+f)a{+!YHWzS zI8|wqZuSu9K)67eM?yGpft>EGG&S3s}vE8%eba$WcM-ARtrCM99Q{Oo-qHVG3J3C9znN=>| z^dMM?K?#cT#j}e&rqX-VL#Qh#(BAB(NktuuQ!fq-hF;_(6t}0<5GyX3ciCss%2_}O z-awz!g>+^g3km)JWBw0WGUDliZp5(~d`Zvou?8^X5#|NS5MYA(VNu>+*Q^p^QvqK` zL0PXmMeUpO?Ax18P7)?Pimij(7|Ejrn4*r@ni}+%k+Em3s?{BMp6jXnb;+YgEbEKh0|Mqe9a`MGpRR0S{-zg_C1|_%#5r z?ifX}O6>ZE3)6Sp5A-uwJ-5X?0lns`fGo)|i#%1TRPyKn%+v1+iBc&tGG2A_u&|%1 zODXNf{!HT-UTTR0x8P%cW5YepM`gyFmamMqZIs4zjuZx+U;j60VI+nbj~mjpIeKzq zZdgh$hT9eGET<~-Q>v-rmY-O4;2)K?pEoyN$2ae60!U_6C-Hu5qC<7eHahV)cnaMD z5Ej3EzU6RY;5!uELWcN0vz-lv??at=boB z41kfL!(q6~X=vh*)@QXh>K+$ylYhY$M)V<*r!Nk_eZ5G^z)b(Q1)zh`N$;nGxR((hwfS%=QdZ3mAPBJ( z-VWc=354gikSa{++vwYd!4endpJEqI0R3m&lz(Mv13e73!3KITu{_4b4Jj#1$ve@# zkTJ0#yv!c_KxE)Zr1z+85c@C_bj#DVES4g(4&Ug?&SUF%KMg^$IC&qnuVU_4Ep9!( znw_k?_mXrO>pOd2BUtdJ55_O9q7Wj1q&@@<DTu@OBN}xt5!3e0I~wqS#?E6bx?^x6Znr0=U? zrEB$>rFrtoK_8!5rJKZ>^co3vTMVs@klMVT!Ev5tx69g`D&rZ5w>ZO{Y(y#$;IuSd zUufn^Abl~Ik^|P;#H!Jt#5#-E-qh$Q`F%yFF^kvFC&foX^d@*daH$7{- zD_-RXCq?R!pWEv89C8_BCii`~%E>(<5CNX$-@Z)B+2~W{Y118l8FKu!qH7{M{g9rmw(Wokp zohMRY=v&@*OGSIR(?7wJ>I>KH*!!`B9uQw5QrjqxT0BYRPga}>!#?;gR|<#bB*YG2t8Yw}oKY*=AhsDwW-dR#G6<%S(dAASBcip$amU zGxs-&AC4wW_I-cfXP77TT`XK^m-lS3G95A3|93*`p?-RW`&J~9to${yAp$QWJ$F!8 zl(HU~;yOxaIvCHp6uk49DQy7qVoKbTz@@z_(HIQ5II@Y$4r%9`rfW<8f5ZBJe%N!S zz#zyM)F1Du2In2cvz*SCzr=@2dpy&=;=g(;X@YNrDyJ{-4<$Fby~T{O7%D!bjG_d! zXk_}k9@$$j?dPrDbe7gVmQ1M*eKS(zcx4zEyWBgYNDJY0>^Y`lS5{DuYfLVp~Z#q>bno$Tm^?wViRfO^vc~e_{U;l-w z?{1DESdS=1ZzZ>ZF9k#8Z&dkk{F!tmmCZofL-07dYon4tvs=kSjV7S#(l!IAN{+da zjP}`!=Y7a~zxjBx1zfadETq=7a{YVfQP~$ut2i-3%-j~IBJRyafK=)miy>;Yxm!RA z5~Fj7V0(5px<~h7%lzWq+l)u~S?=l1KJWiafRB6*qkWPE^&r#u<*Dy*0=aMZ?yRP| zX#Qb@UhI}eS8pa`-RbPD4vtIDZBbxcZcQA!gQC8qM<)j_a6*1!>pNbh=agVbZc==- zMz7RH^X>GufaY4jE;g*3!sgO|Z1STGu$+^&1NNRs=lbDFK80CQ@$Nbop;d$et6yoV~$hTKjAbRNKsC0Yr=O+*6FckfkD6HH= zpN?a~(MH=!yfc&GlUNi(82&CTUiSyy74vQubF*c&D)MutLiN`E6OrOXd6*3e_$v+T z(V?D~=IAdIHJdVUNi^NOxb9Vpm$A!!G&S} z;EV|3?6-u&JX1utng%b@WMb;XdLcu79+Ja3(<+2+tr)Ytb|V1(oK3y`s5=v#L1_$F z9B07%!JZx>lCgv>;mH5Yt>P1wBCC}UC;%qGZ-)+St$JFgDg-ZEld{XJBwv|CSr40 zBBolkovVK+Z3ba&tV#x>{6$`UcJVt_K93#13{`;Me{8L$q3{$AHlTV<@3rk;9sp+k zi;@oX;f?llbdG0mzq zSOkW^F{q%yNpdZLcHa zJ>i$0oNUY}l!4f4lcJ(`0He1=AN&R!H|C`FK8^Hb-G+Gv#~QeT-M*lXl)a93Xtnr# z&Z7{{OG3M0i3`nYSBy&?e>_c}`oL@G>T9Y&`VI9c5l zjo*`kNC|+2U;OdWzw7njPh_e%q4~j1>1Ig3;}0omm(5NE7ne#ZQr`^<87KR}A`lt3 ziUC^4O|aL%dGDL;t_(xF7P(Z$|F$*W6htgHWnoN1+`$MYIR%AhoZmMb%(WZfc@Hap zx___&QTeUZu?wG4hR|CKfGSbw>B6A?QQeIyk|)vQ=Y6PO)&(q;~w^&`Aj~D z$&fg$25c$jJSEBoC>`1Ngo+B}vgBq{teEJKI~9fZwov7G-r0sUDsOpnst=704tXZ* z0HP_9#uQLZEOz};lzn@A)~Q7c~t*!fLsvBnE=xQ2wiIlH$ZVoXEPv+?gTG(^tn^^d9Vx5x7C z4CJra`>tEmT}+wM3*7JM{Mxyzn*iWMm1)g|)e`cwm}!^?yL z9OtC#pSlmm2YXZwn;?VN_BPJxr?3n|#rguE|Y zZSWI@O|B^#kJ?2$CV%KTrVC^^^56>Hag-O~Dp$yoIyiQ~gNbQmYZs#D5#6V&)?Ka^ zh%iP>dKAr|d=;s4c4zdi1b$Pdv*9*Z*p?;j!>@WHt~NFGe&3tvZQJQ6-|IrhJvk#B3%~9FA8v2H zbcB_^WI|*Z4=daH5$s{~FDeuY&?ShVhhBgKR0RJZjzgzkb_@;=E+lQ*SezSY^K}=m zDY&}($C=j=p0(~EX^3oaNNn|3|7xPxF1PB?AuH87;k(~qZV&BIME*I4kJi+VaK?bk7 zEn=3}$H6E>$JF`3NisdPOzD$fS?=sP=t!}7=+DaTBSL8+Mi}+WTOCy)!~RfBTz2-e zQD?Ef4sCVt+An@{4nL#hL0Mh=W!@Dt(8*lHO0=DMB(9R9{g9-*%X~*G7jgr*CQ3eI z5#aFEdU)@OP*j^&P~rA@z&)wD#uZ)U$(^HJqeEjKaJ_Q>KzF}hvqEmMMjd1S?ZbZX z(LqDcd9hPQwGq9`!svT!e;VkBYH=8&(QAv$279Ld2w@W zlbH`z^<>xKE~v-7c6^-Vks|zvhSW!)_THIx6Jfe=`-Pn_sjAbKyk)S!VZlVEhg}Y- zTIb>>SC`aN7y7N)XyJs1!?hU~?4LbEU0Jc}x1yGv-j!6SUIW6)zmsGf>7$>1MQGeW zdL(06uZ^~KD}8uJO-`$ZBeFuNJQu}m6!Cn|3F<1S_B7H@h!^&{>i|B%sTzVhUmW%* zSLjuMp%RV`u=mGhgNAXd5r**#k&81@9)}Yk^_L&&;oI_LcNete__YQ@A{_ZOWP&7y zvL=f=Z<2~TAs-)g_$K`}QZ+(96$s(i`C6isFu#`9WB>$;Oil_j3Xjo*^^Z`OOY z|M=MpmKhAXi7HS?6}Bxlul(CbU*iN!6nRQ)l*QIG>xhLGubrIYC{>6-owPtyf?QGL z(mC+XOnp`S;ElUSqoD~6{*1GuuT0aO)Yd$WxXgj>Za;RCOZe5L;_$5QP^8Cw?8e5G z0^8khP_nE7FmJ=Nhde;lQHW$8zbdx*as~Pq_U)>{^uYmDZmFqrs$_JC=G={<dJ zGRCaiy|6B&*EinTZ+YjPVt}2hpz zUhj9EdfP+Rj^`=!i$3CVnyCo3^i6(Yn^yKZGV$n(q4Nk}gUUcf0<@`;bTPTHstawc zPMsrVUK*IJHM&N~s)_!{|T~m&ijg-H%9Ue?jye^)aC-d+%`_Vyxe@`QwZIm0FAQCOn%aGTv20XLW!I4yC zg_fM?mtcCE2kAyP2GN(`9+ro5{CpvCPy`^|bE&OjpxPU(Lhw{)KWx5o7gFgLDdbx5 zO%V>@mb%k2hQQDp6XxeC97=^U?|5PHZ1XQ`o;blZuuTyt*GT6Rn8`@Pgfsj|x_eJGg!odWFs5W89BOmz?sL2Wh{b?^VXY3jFs4By9S>l|neabH zP>y2Tbsu3GGuGc0i)AhUv`vnee0go4&~Et5;J$7k^c99# ztOGE1{E@1#jmjm2t{2zDyt0HNp7_KR_=vosO~*~51)4t9>j-*Z;6!0>HK8oE2tv3{Ibg6n&#u=CT>Ezw=)+M1Tc_cxS|{$<@e{~POmrlVqA(=ZgK z8DBK6a6ZDK(e%In21$h6vm%Sqpx)0(6C+JfJ|S3=1b@vO(axXG2C)cYWk2MkfbPMW>AVq;9e2~hp$P^F@E{I$x>ow$mp4mL zI{R&Rx4t=~qx6F#j8~4xK$gLhcp(jEZJ+sXi}Qas=>GEWfJ6{1&7a*i=je4$41EkI zy!AKk>ytg%;3y}|tzV$`K?4JQgN7@Fo8e%3a$<*&8|H7pu{<4VE#^tUxN$%_pvZ+`LR+V z-(`PhSehc|ryI+z3;XZmG#$4jaq>EtPhry+iBJRrnb-K27nl8^CpXOLMD&qVTGbNx z1_L_JLRD6&^T$1K2mjq9n9nVzE~$rWknO=O-eJ|MUS(A)>hTD#vp%PYg4Dn(#R1+v z?j}zpxMm7p^?4=_-t3f$I6aH2_M@xz2=e~i&YQvom@Y5EBn0I);KISNA!iwprd!JL zF=N5IQM`p452U(xx}y^;Yj}OjL!GluWGhTK>78b9@)Xg;E;=%i_r9h zcjMRTw>i`xG9iylo;ynb2&4uM8qS>7@voQ~PZuhF1jdR^J~F8hM?KHq9@wDzg1V|=0t+UCE4YxDZ}CD)@Dw;hFUREu7RO72d(m^WWM4|S5E(W@b&njqmD0Gi&MPj_Fx(*Q z{NG7@35E;C=$aR2zP)(2DfZ3)p$-h)Q--m1Kwzn8T>%O0GH*9Ljdi<6q~Jt4Mh6sh z#M$VW885(#vra&r-Lo<-9vd)f$v9+dj&{%mKh&jsBnJ{HkL%k4PBz509^JmaJ>0_S z!ngWKy7kAd<889!2H85cSsYm!v!JTZhhS<~hNae^gI6J^7%7NjybBDm<7LftF5!pS ztNKT7XV%K6{pyP0z8Jj^2|a!>Hyq^f!SM7bL(b&OcF&Scu{t-m>h1D`E*89e-$)`z z5I-PJ#2?R~5`Mc~-6nNHHhct;{iC+uHJZt5j8Bo4t}&$j54K(1vcq$h+oUw9^H--1 z73P@#6L`G~+Kq%#4w*cZ8y4$hzDYA9Q@(U%J!duW3g%puXIoweUKG;#f)W2SB|#cF zzD5|RbuMN~K#j-e@|ORWb+Rq(9V~%1e_M7Homp;dQ`ezN_g9zNb1Z&t9kdw2_SuUY z=|NoTWmk=_`5p6idr>Gn9xTr625e{U6lADQyiRlV={Q?AOooYL%lNGyU)#eRP9Wro z-rO97hW4|SraEauN)`KAIK~$ zhh_1ra*})Q_l!b{iu-;{o&Jr8ySKFp9-TVx`OrzT)LQj%(l!XiR(g5A6?CM5>ew$c zcfATxGj;6c+Bjd9e=M6nm;WMed1m(8I5-t`+Mg4wjFngC5Qcp%CevB2lb#Ei*i<5C z+?*(!^YNSAMpav-A3e#rLA_x5uJ$!rh^$AiZTJ^7ZSV47v_3xT%srjTkk}GhfNLp%QdW4$eR3y;rxr7b0w~hcLRI4xBmWb7QmOy{XFBz z^G&1{i92JL-@5x>r9LpITk!}i?t*H)<#b5LW}+$LjgrGaO}rp;Xswn2=scns&masr zpLpM6-ITC(vCs35)IPz)>v6uUQ;u8pfhbR}Y`!S>M9?WcL>d<-+wObnUrxr)^xtBL z1;4S|)Hc&JY~z3D{EyTQ^h-)YU=*=VqNsAC;}a6qeq9-;wDs~%`N~S?mPP)``TH4E z+}4}9sG_>>cb|)Yp)%jB8hbVr;x>)A_ToL(TRHwcbg?n$Y|UGC$JPg_{&6Azsv%?w zRJ8+=Iu#{M;!>sH-%Lze;0Ubn#L~>u&zBoGS9AvNnt_H|!`}%wV3UPe5@@P|#$ftX z%cHn>hDibbAMEBfJF)=k@T9GA%EJ1+9j)XJ44Tw>mRpeVZlhaZ)KWs6eJdji)M^fv0V2#8+qv zobvPRbIty?*P}~;HQs&9yk*xO8)2lVW-9~H+9uSWX&u)qJqx*gb;k9R((~80ny}O6 z$({`C-6>)(?5M)9sU3NSB_e@@Rm7#yC7+f_{ZRXP_uqPEgOm?8DSfg)(RXLSb56(G zt2J;mqbBFUh9WazkwsQLtO1O^N;|+g-A2$5B! zAQ59L&VWtW=;@Z>=A>!WlY*xziNl-uZH%_i$DJ23zm<(U2c*ygcC&Yto0z#5{`3a~ zKNum9u`~AxK+5y!1}8QotR;{0hj4XP*VW5bJm9MWGEkS--k~=2-5Zqa*Q*k6&&R>0 zCWjT38w9QnTG-?)(Cb!Z>Asjh1CNn+?;64JIs+z7{}y&R3PeTvJx)aVBX0R zRylGSHUSDM_FplZ+Z$I?wXrK4E()G1(#dc9uL1g`{;}A%Sos_y65RGHWRVqCCI zmp_~bo=c+TD%x5fmvcU2`5611=efp7g&!xm$~9D74djl^3~hRg3G1;?5iegNNM}e) zxSiAT*P@o|$*soGE$P=;DH}O&0v;mH2pHRE^U66kAL_Ve-qJf$oHr4Aw!?nbV>_PA z-;NDS=t`oR(ebYIRAmAEcGzD8|{*5G#-#C}Q=do$Gd|%vQn`_Z>xJGI>T%8C+y{{$dnj6D!L4TBaxgd|(vrBf8RjXDE zJbFBkLwnWP0}$iDki_~&tltPC3lMLGdI+7}&{}n_(lgX~Rhj+pv&i?#O$#S^2Xreq zK^jfH$zvV2Qylph>7_elb5rpPpV7O!o#9I?D6vS@7m^^;N8M{$PX>;?LilojKWW%t z9BYmR@1A{BzS7IA;e&92b7dSG4ZYfMc2|gGNw!V8b>39h7AVhVd1cA}a`=jJk>OE) z8^n8ZujP;@35O4zA9#3`(Mt~eht@rCDv!$^SeVItT^ymxs9vqhFLP7~&YCJng@W?) zk-OQs(o06j`n0fz?{4Jid^ntJG!CTPu-Fg^m-{X*MZW7V-*l%-~y-sBqj zh{*gC3-LeB)NH-_4$<-J9m)r46xw)HW|ryvnX%;V2K^gO6w z*ft`i!#CgXbF__X_M-*pUU;ubIbgb91Gq2_eur7kgHY-a+#?d|k6B<{N!(WsQ5poi zD)}@%5Y-zN?Q?iBK-ZwexzH3`#i}MQp%#yXC+4&KUwxg$H^P}m36PX^0JqvhioMzi zHfvA>a2*WnfK)qID&Pq8xd$b?ecn*Qjk8bfYC=9$Qg3?A?)d$OzHVjrzDYB8H;nHC+vK<{`puKRwi%fWd3=81MeSKO9@K%mOHuwm-$*g$!B`FUbuk_QDa9EQXSR>e&x+pS^lihb_ z+)|AYC2C(E5?3Hpu`!X%|G+#WeLcJzJ?|vU}(|6@@@xX2(Q-7lq!v~RDw-I7ioO{*7d zZ#d@YZ+M8rr_6iaS>V)|58$^y`_m7cmT57;eZBT`00vG#G?l|3f85&+cfJE2&3Ard zC>q~P)^&CN7hadWEYs`9KavA_E`P1(Om-D5I_s2+I^dWqb(brFJHBeLmGX5DLGDtS zeB3)4mM4B-4+d=qUny+p)FAC}&_CfvDh2#U?CUDiDzI~M&6}Y%lG>2*aF1jucd$Ay zUFg*IF8IOTvQBVq0kf!}xB#Yz{1oVg!+q(Q`R3Z)Em)VO2HPaB;P7+ZoVgK#@jq2t zRl4zgQBL}=*Cw=bvKRoWX{Z-%Mvc+s(QnLQ^ADF=>dD0GDo4Vcx%w_f$gGzq_0GQC zJ(j#M`cHMeef9rubv@JS6rgZFE|#t{ji-$|2dOA{-Lb|s<}c(B2=V3_uw`zlxu$&Y zCd(T0=gY50_TOWIOkRi7gv-WKS^hLr3CYDI94|j%F}wRq`R5yeuXE%3O{$B2IAXLZ zdQRk_)v~R6!+Dtw+Gk$fI$v<_rZ__S9{BfKOflZ>th?^SP@)}b zty2-V6w{A{QrwY2=TiEXi;R@L3J-fXDB7{_Bt%$=5U;Alw#bpR^=94IMN*=*D})Z= zwGyz^m=0cAikhnt{^5m1N$+auQ8_I zgCafI=0u20lVYEHee-pZUxnzYDt6_HKV<(S=bP|E-fa~1JBN8fZz;30>OFNrqUCL( z1j}bpOmQnjrOmSe6r$OS{t;Gcc2VDm`ccsruRVI&PySDrl(hR87*-gVT423@i z4eLjjw0rh*(LQb1WsB9AZ@B%~Eu(a7vHP!;z>T%*+XR}d2E9GI&Ep+`2<)It`t&=n zAU@BLBmaV(SMu&p3%Z#;As0ymziL2>C~R^-9XTLm4<)hd0xp@vA-bHcH?AjJidCE@ zkUM|Z9Jr6+8T57}FZcCT{fcsqf7o>`OJQpi+spf>xOX$bj@;zhb1k`cOxwJ4`@M86 zwsls08)1Tq1WykQ0mJdEc@@SAfGW=5r`vR^H~b8$KwG2{L0n5u-b11)mzEIYaD=A~ zjM~60f}}>(Re`e zq4~&RMd#QxUd`mE>UHYJ`MsDA?6^Z@efE4x0%b6W`|^b~#})5RzS z%dblnZX38TQPUrWUt}z2ppdi-DavwUlB)}K5ZgAWBL;n=RbtOENSKG__xPh37qrkV_H2qmX2*YHBCbs$g z*#ph@-&=S-&Yj<3_{+u9)ZtKts>?6>yXuUhJBK*)nKcLhMVdPglsMYTVc)A~<0NXp zsus`+gL@7hEL8`}rVMDp=jlf_v=bB-=sMZQ-L&pWpo+c1gn$hSm$>q|h5)zbzBO8m zh0p%BGX;wPu68cHF5!b0l=Udrcb)YaK01&ay3FyyTNhQ61?f2FcCbYubjZcb! zT(<{4tj4~*)en9(4|6r}zH;)`gy?#v2$LDl31uGlEUWZ<=BqjxW}aS+Ge)br;Cpm0 zhfuzm2(|L?yJx>W?#!Glrm@9hK_R?M*Vn$z?5J4YOnPIf!KQsuI<-A$P|2Hp{aZX? zw?5_DW?x+y|=t3V%A$L`?a!|+SO@-v^kp6yk(KFY;S~D-8jveJ|j~SdIY-IdxKKWft9-YqktFON+#NSf6in&+BG?bu#6f769O+ICW% zauHEs`F1b1q%BuU8TU=>V8{{H3nNHoh`e?tmRw3wyvc3j6h-eJ%~!mxi4Ud}`g68N zFhoW2)Le*gVI~M_>9->|1~1f^gkdrzz^p@Zjjh83y^o;o%WfK{pj$0oi6diMtnuY% z;L5l{PKuJeSvBz$rpOC5`2;3nF1qRu59ier2ynYQDr1n*hwblfj(9sz@9<&tm-L%; ze9a9QK0}LsfeDAPHSXyEnQt#MOj9pBqa>cdPkB>4_nj8CfK}=h4j;EH6ypJ|hd;k; zbfci;$*C&qbY^Bse^SydSZm``;N(gX?=xY-#&4hKA^Fjcx_TCuFHCz1_caVKobIwt z2Kw{#N}QbjBuBQ? zDoZQIIkL#NV}T)=s2k^AW7g&)Z~Nmv-eS3!84-szQB=(g`h1&0h~;4AWZn;NELzdt zA+Te3C(o4=)o*;dQEKdoIHDx{IZEL70 z>K;OpxmdADD7<+Wx3=vpC$D6i5LfcD#NIB$4FkJ)^MieaqlT(kqhN8{vIPZLbohjO zeD4~kv8=$=AK!@cr<2yj!EE+0XkD)kdG_)2002tMb8$%%s=pk3@jtIeY1tMO$@U$` z{J*rk+-U8ShL$IAe#zMrXYqLHdH$sv8F4Czm$2taPq(Xcc3$RiCamnm6xK+>j-n9h z!`Q!3kFi2l_<(4u%a(2OAqvGNx7-NogTh8k%;(E8boHsX(sLw0;})<5a4#oJUF;Qa z_O$u23uYDYV(nI}axTKnW|E@`2XyO)Ig$0>y41Cs!AvilO{PD~#ccfQ>}4w8^I{&L zXt;WFJo9szv{3~`jaJleXo!vuZ?0>=DS`W6Qk_lYUs7El2BDW<`dT7nJkS>WY+JY- zszkA23twkR*2iiOfEdN{S}nPeLa{}+*PJX}sr4s0>evjpylayspiX&$ zBxRp~_wpp(x>_1rs7D5~+^n z_$e<`ZVhyE#^6-5IwS&`ZoUn;R(TVS2-oVWyx+cX*>3aDqmD z4!dP%s$z!kl0&B?xw|r)VkcM-0F5vW-x>GzL^?pQ%Pf4@jWF3|Px*CkG(1rr3aSF4 z_FN;3$a`-%zf+}zvn@_b_yt7)crR{%*9ThZud>j_jI}72E||(P#SJo_j{&lCegCwZ zFbi~7U5p=0k8eEXUpwP zj;6QMh2{_s5ybR%!fLxk_~J#?7I7bjwL^WPIt$x;kObM#yK(M^q}Lyl{Mip%@tAqP zhG3fXV7@9Z;npUq9u)LAX1yZXF${buiohqlZ;8CpSWs>A@*>{lCVU0EgoJ6W~y z7?sJsC~Fm#hfQbeI*-=sPQC6X_dik(le^!>&dZOAqe_df4ulRd_FzPv>W-6FwpDulr` z4JFxMYk)X-sn<;|PR>)3rv7!}UrqgXSjN~qKNT;=+;NR`q5f#`NYi7D2>FLok7kKs zAH+N^s9rM^ZyH~i=haU?$SxCJXwP?s=O_|O|b>Qn)6WcH2Ls{%-)0b zzg@x_F4FDaC1P{*1^jRJ+JlQ0>(xYCf;2WMyd$U9QK!>r7=^tle)oS)+o$#v#Itr{ zQ9EG@xO6JI*4s;x)U*HYo{EGYR=1hMTdqo-9eCgEVprA^l`egoq3@Yfa_^c9z!KA3!ci&Es_=G(4++MkJuc4ir{I2h5ym`iH$=v`9n zqnqn<2C{4!Mr}4!oNxhnwoaI{%DOQ^ea>Wg@i02h7FnDoE-CiacK*yjbr^p z!R~)&U)2eFe^6$T9n9>flhz)w^ngzhKLC`xeXZ}WGt&xYbk^SXA4PqZ_me6hL`bw_ zN+5;bsy`T&3P@M$>+FFuVhwy}46|v_TM}UKgM5xb%46XXR(_m~Df&GAc4z7{S@~@xr66V? z7XhA3RnF&j%EBU9w(!B3(wA+cU%=*t_JIpuRL)|8DtqGO>N=$C$~FPXf;)O8u3)Bi z+~1z13|&d*YIx&+y$p3B#jTV-4GUD0$c$lsjmLyl2c(&hP6wW%8pHAqNx^O zUER+gnOhRi?JicON#fUPyS@;t`xuS4BV4AVFT#Af$KD%R;hKz$Xs5q7`OS_g?u4GyIBA*P+#0aSM^j&xZ=C-~ZE5-&W5g zGSblEl83M?DZ%bOxBr3E*}sE!G*}Tkp;RBeF6kB!nmfJ`u-a-&&N-$?hA^Iy#wJA^ zwZ6IniB|Sa8vL|9qW(&wD!JLzbN3#IXD8BOz?G?&w@rqn^rSH5Jhz>*@1=Us?`hvt z4!c9qFQ&#Sh3~Hvz^fXiaa|-v-39W28jTyZYk&L*{KIV{xZSg8Wo=^drA|8DJQh2s z1F17wxcb*SgiM06){4x~`hzPcEeNzdN_oeZRZIM$sBNXaR!ZmRH4$fP>Po)i@$P%^ z*i1X&EP2vZT#3$IjIIz&*S570g8RJaDJP#d5ni!i#IckXIC=i^dn-K3hr6 zx^1sNcI)!)%k#y4kdlU^t6hxpX+_Ay^HOlv@6)Q`*T_HgKrXel`gfDp%iF*n3+tH_u=yN+%^Qzcuo4ZmSrcS z#K|CO1D1P{otJ5b^Ce# zkDso$nuEM0xZkJn3T1R2P6@5lWYPg}Cr%0$0JHrTn6GFJ(p~*lrVbHugQ?xuyyZUU zu)&XL(?9^C_4A5Y2EFrMxW$>89=51xcN^s{AXI&oux5v!JBY^&zUg_bnSWuZY{c`7 zl7mq$+oj@-(Z@C4-Ezc?T;y-YC&=5?)z>S64IRojcE*=-R4kKQo;46uq>4&UiuA)n z4KDXthF2-0Q?}H$3l?sFkagAgnSKPl^w9>?*G@iE!P)45HhmU5f5tu;ohlPtDzJX7 zDE8%yssSPav7D1pcTu+1p*$ml?ta#p-KE&{kg`X*bk~YROy=k1dra2<<*DDSY`gZS zy5peV-*W6=wtZ@b>B($V-jj*I*?@oXbOZ@ckB{CPCJa=#_aa)=#Y_piVS6RC9fVh| znsvS3TuxyQo@QT0e|T5@UhwT-${8a}J+S?mLBpS|AINNcQ^WgYc4jha`M!Niv)yh| zHEoP9c-7+O8jd^vj4$+Sj_%O`@5B@iEvHBZIobN#pj9_;OA2zg>fHqGNq(RQ%ewkZV?`!)V-=nc68r9s9X8JX;auJ-+B_xv@>!Xob^qDXUVYu1RO zIphN1(ZOU{l@huz456MEZq=PNG26v{@6yN?^vKnW5kCZsx0L+x8t zIfb%G%Hn($dfm-DiT=BR(5RLwNTt1tXdXX#CKMPEf83}IN5PGnh zFIpsalKUTkdJ&9-^tBzr{x{F#@ z_QZ=bv(Qx)H_b!Z5N~Us8A8h`YlI9`?`zThNY>THG^=V7wiC1@KbP#1zZ>|~1b;H! zP}!IsSlHnfvZn8-Iz477M9*B)h$6{pSI)J}Cdn-@H%j0C;MUtLjceSDSf^^3&KLH>>Xs+yORP<=f0fhaB(dCl^kP)-G%?+l*jK9>8u#8tpO}BrKGxUHrzd= z@W-Onn?I!0%NsbfRwf#$NZ52ei0EVbt^EQH}3Huy&Pm);%uO&Gq z#Q#{Xzki2!eq1hYIt}rYWRvfMJajr5KnZse_Z^|OSpA*|sDdM|EtPfK`4?oay@d7K zMRub_L;d$9tVODF2u9}^ZkH#f-MIez#e_r1dBolmi7CS}-70TOosb8$1{hZZzwjYc z$U1!$J<}sl|EiiKc_rDKG8Xa=otqCr?)4T=Np0g^l6euw2f_oQhPm_9fa{bE_{L!G zcRnFD+y2alS}`d3=cC{sNfw>iyA&@4ecc#l^oCE_{U~az@^a5|?C`Frmw$5+jkP0A zcauvO9BM)Qqc;l&gd-Pi0TMxd-T62C)<_S6uLtWgZgu|p-P_m{!Ezy7LDhIuPb$Kf zf4)2Py@<r9Q<2x_MrHZ1JWUpTEX7x|GYD8(_cVcpvZn?wf3L+-qvVG?%(`cf46<% zzq`57JuxyCBM+|Cou*)}&Eh5#=O_|Jb8S*Y)hPK;SqL}pXG5gOneZDiF0_)5YO z7T2bKFShmBt}hMhEl0&@?25)u%he!Arg|nc^TBg}A9OaXMm!Doe@*q9GmXj!$1_Ha z(Jw}ABdKwPs519A_2Dm8Bq5OonRi#-wvr|F#izvgIXLz>%y!ST+^odt)&ix1s+O+stl!9Jog= z2r-jG@nds!H5@noPg~~!&eq#E{-CH*swhfPTH2~rd!|cOZCay7j9RtDjwDo3wOU%E zM)+x|P3;wXk7(`MgdkQDD@5|o^S;l2Jpb!G=Q`IJ_x-)kxUO@b`+Udei)gu^ker{Q zB4J93u7JqROcvhAa?X7=Tntn;d^ae6-7s@uj%eko#`nTVi;cX5mN~UiDhD-ZETZEU zm;ZRma5WP-lX5VDNjntD=MRzf$^FeMyb3j;YJkBRMDY!jz6aC>V+ky@o4Kavk$IGv z?01NuM0bQt3ed|6KOPW}Dp8t9B5i_wIP^Zg-$W7DK_n-rc>Ths7-d9pbL28A^+5M; zRu(zn9g1KUxOFo>k;v4Q8G$Jz&i<_WnREDrR93K@ewoccA{aIrlm^_7<*5qo;OmKO zTb7c(2BB|{2hpkI86%ecb@J9BLV!gGxBjD+@=KA za)c^<+(F!OV?yLL6~wD`-JyoR`x#RA-@Mk73HtCOyXzvc{E-wtwvzjKN$uK;paNwUGE~%m z<`UT|i!xUnO^8-+gI((alT*vhmFn(o`I5Q0eXL_q=6-WTzkM8OPQ%`4;O&7|*^I@( z$(rin5 zPYiqhoDY^PvBh-fb$ZcC8>qG_14=jRMaABZybN!vIwE{hyPyyAxjWX-R3L3AcsVrt zm5!-2<_;#>di?tb1Fl3{_Ua79nb0D?H2U^ybSjM7l2U5Nbi*d!^@tn z*ImkBXCs7U_c5rC2wV*~D53#_3+KK$XM%MLZ%k_?-|IN6FTDENU7tfc`wIk`>?kDe z>KFvitzpv-e!ez-ZJ>M8vQu>fXH}jvZcNX@5CW9H^Yf4 zF4QnZn?x#0ZG(nKY%IgdRm+z?o=gKj`>>C=uKes>ot~*yxG%?I< ze-|x$lFo}!=ZipwQVHs^H$p>Ip0TP|Tl^aC?X{m0YoQ0W7HBDV{}Hdn*n=7aHJD#D zDP?^u4U^$YV@9<4e3C)M=1Sh8B8fJ51;dJ8aJ&jj8K`hk>!0imJ-+WJG!Z2h{nMdp zl{V$IZ<%E{(^CHcG--Ym#oKy(IfH+Q?@ZoAg?`B= zXbkRY6la8dcdk6Z zFRz4*N{qtgo&Tb!e|!W;kl}#Yo3%Z7u%;97Y`FpSawY8c z#;~z(yLP;7^_DFE6@;O|X}6jPA-X~SelNaB;qLdWODYz4F)B#?gf;gVs4-QdV^2(X zc#Xb@h`%2C)wBjnu#nfC1#}Nh!MI8H7sWEN(zi9+_i^g-qRwaHOW$G#0nBgQ5(&-z z!{mBJDEWiM6f|F}pvtDWIKXMl-c#5jy^|cp`nbG@ynYE&F3E#e0g8yhDHdU}$%~ta z@g=X8hb-QRMXI9wd_szXr;y6gCmB_#YN3%lWfGvPaZa-Nxaoi zC+m089b;8e&h9nP!NZEs!D_^$x3QZ;$_lw9Eh)3{C`*riI?4e7@MQIh3%wT>>~)(0 zbLuu6N~7^pfblC{v7Ty{ZS)>+#<*XvWnC(0xelA8V*+(u8UOWM_p!~y6F<8LNn<>5 z*)d{|FSB2C4*YAoYNrg0nz(v~?hVwr`|O|4+z_r+$eEt}WAiX(mmSfGNjoU-V&}TE zHxcRl^TXSJG1T+lxs1(*{;d;oUDFt>ko+-+lM)S0MLIoJI#lA8 z@yql=*$Wji%@4_+=M}SYjTU=c8l|n{$8qw7G8ppXIt`HZMf5Dua)bH}KJ3cQf**y? zQD3jOFXmu5y|--pz|!igs-dx|Hw%B(s4ScKfTwRPI(^CP=1n0I)4%dLqQ1Of>5LeD zL{yty+Rk~`<9S+eZ|r-UWZmZH2T)9{<6J1iMZWnY{+Ca+P%$sx-|6&E>SRQiah%gx zdmWv{!R*=JQuLe`pH8;nKfw9^qC!u8uY|N_g04SrGTqQXyt(sN5qTqr`H_PLN;kT) z-BwT+b)tbl_}&7f)SD#-!IVnA+0tNL8MU0!@X55GM~O;> zE%&Y*Wh0`DC%(LrtZE_5D#y36Q#@WchmNCOuoTNCW2l4gwBA7Ie}fkPw6yjs!Z2s9DG_k24VIH-qn522Qe{y&g&8@u6)TcGn`#0|w2Q}iX9;10FzI5gz zLS9cf0qKrme90R3q*pY*=DeVV#GsxUuoM#9z$|rdH}_++3M=yvF{bc?1D{CbHM{26 z_gBXCtWzq}*Lpr7yHeVz2yTQQhuGyde2Yko9fGDefN~`DbChiZpV#4Q#X}OORIG{Y zUhrIdy0UsF%uNocp8a>IfRDzl_u*L4dL#Tc>imfmE-A#Drjm>8RzqnkF}$9(-{abG z0Jf&A1tS*HDLFMC6W6VARyc|Vo2u7Zrs8@h3j=mR<86?;>%^@Jq=@c-CBYmMo za9Z?+T`@J_TL6$;Y&&o;iobCaBKxoa`8$Hw;qGP8y&sXNV8QOY?N>nFIf(|`v#k7A z#4u)RYs?oKrNwY|tO4)u(LBVB&mvkAg-}EFrnTsnI6i9>Pk%I6)@XK8Q#btLF>uCL zPw~=*i|Vc|tka1>r{%ShtVjwXImHKhD85TV?I(@Vj_kE(UzcD~M$CmxU-mKag|B#% zyPJz4>*Z_>1d`5*96K_1qu}xlw~F*~>t(7N)K7!$I;9c`v%oRw;?B}1Q z9s&4S_M6pl%nAX?oIa~_GWI5PpTM~Z!#37AoqZ&G>Mw@|)`iMWe-b-0xLiXNjHa=@ z>P*QrvOi*8vGha#y=+A@$5hKwYYjcQyHqb}%cWybnfF?w;X|HO31$yWkM@J}8_>iD zR{?}SbruL=9|dKDs;x@qmS)_0+~hRJojao)&TAhvKFdMrx2yI-9N5=04TQ6T9N$GPkwB<91Mj5ZHC5L66#!W2MWx-~*K)b@KkubX>^2k6Csy~jhXng)tJ>|($?5I*TzMyN0r#w`{%L&q*acrfx*Pb{{Ug< z%&*LfuJ-!PV7a_*m1gnYZE|L5c(mFh)k{}@1FD8fLxN zU5aJrY@iWus0y|xE0o0rBKB?V8|{|$BF4DS&*p=KZmF?czr`XzcPpEV4Z+>k#>2)$ z7x?}YAU9nUh7*%*HK~(d{oT`Fj?7B06t*w5f*}4NpQehb8 z8O6+CQK=I8EA1HP((=LT4;}ztD&c~M+TRBqu3vICU%1dEapmm?i9Fmjz?E+in-<&E zlf4QFJ~aK&jd&8njmQnuYWHr4Gnhv2so&u*4PuQ?iO)XO)>U&D2EJUaBXU7`WqJ|_ z1itSUpTcfwCv?VRNZ#0zpGCj2g&TKiI@q~2_=%#xxu@D|X%olDES7(6!>K6akcU`=xjDZ+TI&;;+%)yHV zs81AXl&i7l7!LTP5ejNm-JcKNV+{>lYNA`bal*0L1|ky{NhfQHB&KUNMF$~W5S@kU zxI+)o>9>=y!#0aA8;xN_XtQ^$_HvI5qMvsz_2^I>hthw(qF)*CUW!WOws?g0o| z-lpB<`j82#>0mx&YU5<{UZx#vs`Gh8b{SxbH>Rd*9vJ*S1G8~NoD^nY^w%iIExYL| z5!Go#<)}zve9>=R+wmoQ%&ctljs7Oa#o)NS-+^lRg?Q)D-NT+qlWympS_>jj4&Z`wG=yuRvu=GySX&PzV5q)>W$!KuZwt< z&0*=vi0At8&Gxll7S{<;dF<3AtFgp%SPV5OY-t23cNT&WW@NLK&s#rv!B?xJq|EUz ziX&zCD)UoV1~pjT!;^}8U*6Q{Qp_y&jN(8MlC40@C*!k1p5^6iqZk7tIcCefZxM*9 zI3bO+J)KNoIa?x9zg6Ij=MJZ>9?8~b(R#%$^dG{F(;+Vy$v*{jP=MgY?gg8^uUH={ zCL9=CJweV`Iyk^z@&lIaNAoZ)|K47(!eoM%*7rE+Ly`Ju!dpto?68&-10N2oC zQak%JT!X14=A^dB zuBhP_EHDA$iKa>%kkDNHJ902$Gsra61(Aai)N-|+_dX}7=i`q7ZqJ2UjyP_fI( zh~NcO{A(w-V%|htvQ;?t)2Wo=c6YF`c`q0{^gFby+X|F$yOmnmGt{FkPVN}9xVbt+ zGz8DLs5qN$mkLIXMVQpVh~f?E)3ORc>?5RsXpHD6amsiH%6H+KioD%cWuwQeQxEQ(HhNj#frfNmFkD2ICi3s91Ihi1R?j8&2s&k)c+q+{ ztVm_V`E4JaKE$EZ`>MG{G~_9!oDs{u6GINuZzdDn8@F{E&gT{n?MyR+-PS$c&2SEV z=d3zw+oir+WYgNRJEtULPB{=bW-1KTH#$_RlfgFGWJJy08(=G8Xd}-c7Bbb1C&@`} zs|&h?vWot-h)6CNuBPJ-jl|9TCER;!BXiTzt8~&#vQ#aTQd!v{Z^U(k#y@b2Xf#id zmO(|Q)<5Zs?W9>{?g>148Q_9GjnC;k=Z@B+Z19<2~Px#n1 zVVcE1lVe2DU+6+o=)!8ZAg8-+fsDxi(}x@6(Y2By1c4`(fRT(;8(R$<$zU4%V5(DV z_~wsiRUqG>!Yw{an-7Ez1$8mCa-)@Fz%tuIogu-#(i2o$_8iyk&AoHJ^m?Nx#a$ZCD9Hu!B|K zkn5T2e(@(7z+sW0)hfUv{Wp8voz3TBB0OMx+Geaza9L4lhhPYC@9mGU7Pm!MMG{pF zClh_|!JhRLm6VO`8-=ZHaWH#Z`Y&_}NxP~5PnQZi zeK)P6*ZT2%F z+Ka&ybASA;640&oGg$*@K9+oCN-W^oAF-#Qmu18+0iDzp&c}HYe;`{wL?iE&=PGCH ztJm4GKwQXe#ez3$=3kCUOR-t~QZblnuU}`fB2B7^DV;1rC;Ky7@d$#bK1**V;q40F zLUV~vd1s(lrq;r9pl>5fn?-PZ=rNo6Rm->8uR=9@uU+vfm#rc*alDDM5UB~VW7Elu z#c25ukyTu1Wf8t9za;iAN*&|lX@tno{krmggbmvw*eyJB=Mh8S4J@=aSad0Ru=(Pt za!vW)PKa`a^= z6B)`Ya>`UPxPl*re|x7^iBd-k?`b75I+&B4f#h`x`2=T1!R;N_0Z3zT0ymJ17o;@Q z^euWe9UmRsru>6YLle?Z2FZt0=We7@auGR;LXL$AH9dcPo^OhDrWuVA3ryfpgEsPq zE)n3Dmz3l2hm#BVu6pOb>kV#3T{flt3=QA2mz6SWs_*XFdeQ}V1-mfhyjvqH+C;1p zwOH~$H=o`bA()iNNFUGS8-#aT&rPD?QzI0Y=RcRL0OH82761u^^Pd0jz83pet!zVl z@0h0i)CtY;=sCrvi?b?8YBUA;xS__QpFI1&Z1mD`y6-K{vCcK%6m>CWGo=I1dT}3G z?m4wuj|Hda>VP!vi4DAAE z=$kx>{VrQq%*l7>qE`SCoG}`=MYWzbZi&F~`2}VDuA`x>Q=aAH8+V9(kp`RDfnki% zTDl)6aSb*s8Nu!IlGDOVF~97))Cq%lBEOlgyb_RhBIR&b@ZQa`Dz_jFoph8+%L~fr z58zNC&E1G|eA<&s`ag*Wi@}<#xQ`d+z8II@mvCuuWDsx9AnlJlmvms8VptRN3Nk*M zLSu{VHnlVG!LYtp@bH4X5eKKfkKchS+44SoF2?*O_Kn%J7a?pHM2NVLDoAv^3fiQ~ z0wi7b zcgHnr?&ChFGAdnP-;#w`5=RU<1|zv@*}5-BKPx%Fw)e)lskC*Ei zJgA^_O^JKQ=h&aebOreUOZdcEz}%KOZXR3%ecOX2H}CL^t>41^BW02Md&3FJw@!|y ze(cZ1QH$(DC1Sz&TP;HeZpYo*Hx>lOoWWRacGZsVZq>tyu=DGM#1^0qSIY;|FW7xp zSs`0_Rx;RmvHM~euJ47J*a2%l6qYlODhC4f?I$IG#ZN2d@A*5mo@SnVrvQ_@+uk`> zo;yHNoGbGm?dAY8*Aq$>&t8<{NnZ-iVWyyk?bXAzhL`_1R$jx0rjmI0*M$X9ytZof z&>ipd`%1nNBbUv|nE{2O1@(4fckx@Y1;>KQ{Gg7y)JvSAB67~6D59Yahf?;?=N}82 zy;MRva)n-(p*-1(9zY~Yph{oJx0Kh3&KgGzB9;KJFN(9gh*&7CY_t5fM=mwIfA2Nu zCS%4dR(!h+V@+_<%;L3E57fuGgGMH>6frAG(*BJRAGC~0 znjUh}Khf4gS@&nMBKV1fRFgHggXiQ>Q85468D0a3hjriXX0(|&>NnXYFpJs;n)n&n zOW|zWq1W4*pJIz6ilq)NsY@g({xQ*U52U(H&f_Yfe-vLqms2;jQ`ziRf`_gddZwH% zoWVW*@#^@3p(_QZJ9r=Tp=iD_!vDC%DZbE$<2bFYZ}I%I?W3R-e1MAob~vGf)a3u$9aa*?_swg!|BpV*NFhswUVO zo#r)T0Cf@zcN~bU;Y5J#MGZYF5cN3|TD;!dGr5z+~26d7qkT{hH}GU%`m9fzO^uYggiP zZZ=~c_)2;q2&50^objd^83Se>xj{QmUX&0wYE4lAd2AJ>bRXrE0Tj^ z&raXjVsky+4iWOAGSRO-aN6I=LAvRn99!mFL_T4JuY<;(YE7fy&4V#f7)<^b@bY0i zzh^{PcbZA(SgY{5gNr5A`p{%Bp}aUWIVF0ki@0I72vb707c4Hl)@Z7P}#$SGtS(TeiY^+pGzb*imv!4-j8w&5S~+U$WecCvXw2lW7w8b zG)BNXbCl39^~Nki^`Qd{i{uG4`RW7@q=wigC-g6kP5WEhg?2O4j?BkRAf-RC@A%|D z$J$MF6ol%26Z{YZ%f&M%FZ7TeuQN+Ig#2Dsk8YU?R9KXIzU2LA!ge&dg8x9+{Zfotm9st9NdMyP5Q7BC?llDmV*ADkjv>$Ta zZ@zXjPmLbowj#g}vLA$(bxA)LG3vU)l5DNTya-_wkB@ncuvpqfzx$vWJc8)X+BS+0LAHrCq0_*yYT0Yv;r9kCHXcqMRW6O?e!NEGz3IQ`$Qxnmz`&IQirk zyw5pH>`u#Vqyb(__J%BJJCNtW7sl~B;@qZM0VYb(4R)X0cq$-2l^b?p4B94iIJN5Y zP}qC>5}!TLnPObdw`~#?7naTpz%aN>2P!_1J&OoebSjalo&-Wx8sNWC)VS!0JiWaT z{&B~K>EqC$vO<3J`xTx0kk$1lrG~(f!a=9DC(;{`H>1_IdAH!Fscs`|ZV;!&9d*qg zFHqc_r1-mk&Wi<8NXNtoS)y+w_VE{AVhud{=_FIeLd!1F19WDc490f2535awWjwqO zN$%SdxfWqUN4UPautwHGK!|QAgR{6olqX%rGx+f!Y6!!*@h$E|NU5P@dF9ND79ePv zke`zHA}@Jr1-bgZ+C{-_xn4{&Cad^9K=Bo#m$M$Ct?;l9+pSSLlHdIPK#^hi)s9+D(|NZ= zvLeAc)>OA^V&Q!-EG%Zm_D!0eQ1b$oxvFW3Hq-2bkKJ~E%|a8Z$12?Z#ze#eU%eX^ zshG4XRYsZ0ZB)qIa-m7MbK2N--vvJ17Q7KZsHdVztZHQ>I`Qps1FNDxCi@=JN+VDE zFfP&S1!~XgwJID_nwv?U2?%*HUG+>IJvwDR7IBD$D=t#_0IB7pa0-fo?FCWlD0vf$ z>M+V4T|&u-m$n&qIYV+Dpd1Cf-T0A@3-QpCo)~K1tt6 zk027c7_uV*^7HM3IQWv37y28X&qZ5Eu0@?!2rs3}bG@Ba2Y-%m6lAS==%Ed}@GCL= zOej21R-Iu(5@j#Idd9R@wXebPenwVRk$6TQ+Hm`ZAa~3s_6UBA6WQ^Id&0&_;Wi40A(f7A+;%6n(N-@lIk1f9+X z>;LM^@QgmVw28kphH1B>EIunH(*c@0F$H={RjB0cDAJ(wus+dhf8I z|5-tndR*hXGTYWCB~qWNI7QY;NdOPHQ%QArmEGM7Q85P9LAws#<(le1k(CpH*V!6P zQ}bhQRyJGl(`)zMFRDk|U|$(^n=tbD{QPcv%?fl$vQ|AppqVTKbz{C+O((D?DP2 zxkJVL#oOJjh<pu{n z0_6k0!kcw9)E{Q0zL4mG%5#VL87$R)_Bfwq#&l%|H$bD%7!CP-w-$2W-37IjY%1?O z_(%N7cal;Z%eI|>sPJDFy2*>sV5bU}}&2s^$=%iGIy2I$2Kbtug zGuG9Ky~e#s9c{c>2t8%{%F$WIMo7^%fSuDGWNrjYX5F2}_%<7OWr&Z@I`?a*&9i&& zEiI$Lu9aX`1EY%sw!{)1*Q%~l$C0FJ%3UG$$8}zB2EAcGVEfYhRI;9Iq{%B)_v5>+ z1<{;G{t2UJHcBETc0&cEEhb3;#UjlIV)1Z;j(^v_lcn&kSY8rfh>W+l`Gf(rm{<@!5cAENE6!IQoL1(@5 zRaZRAf?>AXRsLI`k3*%YYRpPZ1w1{?w)-B@A-hoo!%k^4Bbxf?cV+Y6?U~(~dvU6m z_WCnaP(ONVO2#^E@7y5dW?{Kmei1makj8_~ED@)cRyV`aLx5bWF!-oVsnam_bscKA z+?-)tWwBUR&BoG+P4xuL!n1(&1i?b(>h90hs!P0+`%fPpk%CXoGQzlVsbWlp0=p2O$C%BD!@o@ z)z*L2NbixL?nPCkiN~`qX9HVG-&AufnlGEaQOx;#=s*}8CPcJWm-;j(!)x614-K3` zy0{aN0r(QfGsUAN5RCWgCHWj^>-fn+t3T?6^~xuVR88Kf&@)5s1NdSq{gU8$75ros zLBh6vK<>h^;BGnikJd@ohfd^fpkTt@_<{5LNf6U%g{PY9mQ42gem+Y3GG%~XkzCHW z(f-!F+7Pb~j_1u{F{=z#QA)RuSlPCa-#oe(n~)vVXBQ7(Jm8 zDr*XZt=Z{@talSg;{^1?Kf$bMz96?avom;o>6CibgEWHL=q*Ihp+{I?W6+tsLGTy< zXKT)I&p!=$m*T$=w}7}o5uot#t<9oZ?_aa>()~QOAt;dTZCiu{DZBXT~e<%kE+P=MS+HB4}t8T zudE*2@@~;ENZ;k7(dyEnpY=q-T%p+roL1tXMkrh*UuJUmPNmF01CxWhlUma-~`YDF8-?wph-uIc|ZpMbWwLN|JM-!fLih2 z(;F`be-B4bKgqXXFVFv96d!$8L0tj>;O?XWNd1SXHMK!+J7-6*l)Us~%}0s~@)9y~ zk2EFZ6dpg5P=0.3.0 <0.4" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -1718,6 +2249,14 @@ "wrap-ansi": "^2.0.0" } }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "requires": { + "mimic-response": "^1.0.0" + } + }, "cocoascript-class": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/cocoascript-class/-/cocoascript-class-0.1.2.tgz", @@ -1744,7 +2283,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "requires": { "color-name": "1.1.3" } @@ -1752,14 +2290,12 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "commander": { "version": "2.13.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", - "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", - "dev": true + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==" }, "commondir": { "version": "1.0.1", @@ -1776,8 +2312,7 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "concat-stream": { "version": "1.6.2", @@ -1810,7 +2345,6 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", - "dev": true, "requires": { "safe-buffer": "~5.1.1" } @@ -1870,8 +2404,7 @@ "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "coscript": { "version": "1.0.0", @@ -1948,6 +2481,14 @@ "randomfill": "^1.0.3" } }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "requires": { + "array-find-index": "^1.0.1" + } + }, "cyclist": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", @@ -1972,14 +2513,30 @@ "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "deepmerge": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz", + "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==" }, "define-properties": { "version": "1.1.3", @@ -2041,6 +2598,14 @@ "minimalistic-assert": "^1.0.0" } }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "requires": { + "repeating": "^2.0.0" + } + }, "diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", @@ -2062,12 +2627,22 @@ "path-type": "^3.0.0" } }, + "dom-walk": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", + "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" + }, "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, "duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", @@ -2136,6 +2711,14 @@ "prr": "~1.0.1" } }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, "es-abstract": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", @@ -2164,8 +2747,7 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "eslint-scope": { "version": "4.0.3", @@ -2201,8 +2783,7 @@ "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" }, "events": { "version": "3.0.0", @@ -2475,7 +3056,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, "requires": { "inherits": "^2.0.1", "readable-stream": "^2.0.0" @@ -3059,6 +3639,11 @@ "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", "dev": true }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" + }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -3127,6 +3712,15 @@ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", "dev": true }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, "globals": { "version": "11.11.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", @@ -3156,14 +3750,49 @@ } } }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "has": { - "version": "1.0.3", + "got": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", + "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", + "requires": { + "@sindresorhus/is": "^0.7.0", + "cacheable-request": "^2.1.1", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "into-stream": "^3.1.0", + "is-retry-allowed": "^1.1.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "mimic-response": "^1.0.0", + "p-cancelable": "^0.4.0", + "p-timeout": "^2.0.1", + "pify": "^3.0.0", + "safe-buffer": "^5.1.1", + "timed-out": "^4.0.1", + "url-parse-lax": "^3.0.0", + "url-to-options": "^1.0.1" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" + }, + "has": { + "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, @@ -3171,11 +3800,30 @@ "function-bind": "^1.1.1" } }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + } + } + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" }, "has-symbols": { "version": "1.0.0", @@ -3183,6 +3831,14 @@ "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", "dev": true }, + "has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "requires": { + "has-symbol-support-x": "^1.4.1" + } + }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -3235,6 +3891,14 @@ "minimalistic-assert": "^1.0.1" } }, + "hashish": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/hashish/-/hashish-0.0.4.tgz", + "integrity": "sha1-bWC8b/r3Ebav1g5CbQd5iAFOZVQ=", + "requires": { + "traverse": ">=0.2.4" + } + }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -3246,6 +3910,25 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" + } + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" + }, + "http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==" + }, "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", @@ -3276,6 +3959,14 @@ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "requires": { + "repeating": "^2.0.0" + } + }, "indexof": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", @@ -3295,14 +3986,33 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, + "into-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", + "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", + "requires": { + "from2": "^2.1.1", + "p-is-promise": "^1.1.0" + }, + "dependencies": { + "p-is-promise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=" + } + } }, "invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, "requires": { "loose-envify": "^1.0.0" } @@ -3333,6 +4043,11 @@ } } }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, "is-binary-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", @@ -3411,11 +4126,18 @@ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, "is-glob": { "version": "4.0.1", @@ -3446,6 +4168,16 @@ } } }, + "is-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", + "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -3464,6 +4196,19 @@ "has": "^1.0.1" } }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" + }, + "is-scoped": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-scoped/-/is-scoped-1.0.0.tgz", + "integrity": "sha1-RJypgpnnEwOCViieyytUDcQ3yzA=", + "requires": { + "scoped-regex": "^1.0.0" + } + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -3479,6 +4224,11 @@ "has-symbols": "^1.0.0" } }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -3488,8 +4238,7 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isexe": { "version": "2.0.0", @@ -3503,6 +4252,15 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "requires": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + } + }, "js-levenshtein": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", @@ -3512,8 +4270,7 @@ "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "js-yaml": { "version": "3.13.1", @@ -3525,11 +4282,38 @@ "esprima": "^4.0.0" } }, + "js2flowchart": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/js2flowchart/-/js2flowchart-1.1.7.tgz", + "integrity": "sha512-F/lH3KZs9/5Z0l/78bd6DhDq0NEk/cTACMTNjnSvFZOAAtsixE3vruSPRVhbFMAtLtQUmFCyEx24SgN21fcKLQ==", + "requires": { + "babel-core": "^6.26.3", + "babel-generator": "7.0.0-beta.3", + "babel-plugin-add-module-exports": "^0.2.1", + "babel-plugin-transform-es2015-destructuring": "^6.23.0", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-object-rest-spread": "^6.23.0", + "babel-traverse": "7.0.0-beta.3", + "babel-types": "^6.25.0", + "babylon": "7.0.0-beta.42", + "commander": "^2.12.1", + "deepmerge": "^1.5.1", + "global": "^4.3.2", + "npm-name-cli": "^1.2.0", + "remove": "^0.1.5", + "string-width": "^2.1.1", + "xml-escape": "^1.1.0" + } + }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" }, "json-parse-better-errors": { "version": "1.0.2", @@ -3552,6 +4336,14 @@ "minimist": "^1.2.0" } }, + "keyv": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", + "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", + "requires": { + "json-buffer": "3.0.0" + } + }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", @@ -3567,6 +4359,25 @@ "invert-kv": "^2.0.0" } }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + } + } + }, "loader-runner": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", @@ -3608,18 +4419,80 @@ "lodash": { "version": "4.17.11", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + }, + "lodash.zip": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", + "integrity": "sha1-7GZi5IlkCO1KtsVCo5kLcswIACA=" + }, + "log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "requires": { + "chalk": "^1.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, "requires": { "js-tokens": "^3.0.0 || ^4.0.0" } }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + }, "lru-cache": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", @@ -3661,6 +4534,11 @@ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" + }, "map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", @@ -3702,6 +4580,23 @@ "readable-stream": "^2.0.1" } }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + } + }, "merge2": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz", @@ -3745,6 +4640,19 @@ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "requires": { + "dom-walk": "^0.1.0" + } + }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -3761,7 +4669,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -3769,8 +4676,7 @@ "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, "mississippi": { "version": "2.0.0", @@ -3815,7 +4721,6 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, "requires": { "minimist": "0.0.8" }, @@ -3823,8 +4728,7 @@ "minimist": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" } } }, @@ -3845,8 +4749,7 @@ "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" }, "nan": { "version": "2.13.2", @@ -3934,12 +4837,92 @@ "semver": "^5.3.0" } }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, + "normalize-url": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", + "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "requires": { + "prepend-http": "^2.0.0", + "query-string": "^5.0.1", + "sort-keys": "^2.0.0" + } + }, + "npm-name": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/npm-name/-/npm-name-3.2.0.tgz", + "integrity": "sha512-9Z9/fOMDbH4oUN1sjALYKEa7n60VzFfeKoHz4v9eMhf5Omi7uf0nq0xzpfSF0Spdyn6jKBwRSMXNExEYFmpLWA==", + "requires": { + "got": "^8.3.0", + "is-scoped": "^1.0.0", + "lodash.zip": "^4.0.0", + "registry-url": "^3.0.0" + } + }, + "npm-name-cli": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/npm-name-cli/-/npm-name-cli-1.2.0.tgz", + "integrity": "sha1-/kWuNEL1AJJXRAfbd1On1KgA0qw=", + "requires": { + "chalk": "^1.1.1", + "log-symbols": "^1.0.2", + "meow": "^3.4.2", + "npm-name": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -3952,14 +4935,12 @@ "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, "object-copy": { "version": "0.1.0", @@ -4041,6 +5022,11 @@ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, "os-locale": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", @@ -4052,6 +5038,16 @@ "mem": "^4.0.0" } }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "p-cancelable": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", + "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==" + }, "p-defer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", @@ -4061,8 +5057,7 @@ "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, "p-is-promise": { "version": "2.1.0", @@ -4088,6 +5083,14 @@ "p-limit": "^2.0.0" } }, + "p-timeout": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", + "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "requires": { + "p-finally": "^1.0.0" + } + }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -4134,6 +5137,14 @@ "author-regex": "^1.0.0" } }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "requires": { + "error-ex": "^1.2.0" + } + }, "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", @@ -4161,8 +5172,7 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-key": { "version": "2.0.1", @@ -4173,8 +5183,7 @@ "path-parse": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" }, "path-type": { "version": "3.0.0", @@ -4212,6 +5221,19 @@ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "^2.0.0" + } + }, "pkg-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", @@ -4227,23 +5249,25 @@ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", "dev": true }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + }, "private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" }, "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" }, "process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" }, "promise-inflight": { "version": "1.0.1", @@ -4310,6 +5334,16 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, + "query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "requires": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", @@ -4341,11 +5375,76 @@ "safe-buffer": "^5.1.0" } }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "dependencies": { + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + } + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "requires": { + "pinkie-promise": "^2.0.0" + } + } + } + }, "readable-stream": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -4367,6 +5466,15 @@ "readable-stream": "^2.0.2" } }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, "regenerate": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", @@ -4382,6 +5490,11 @@ "regenerate": "^1.4.0" } }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, "regenerator-transform": { "version": "0.13.4", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.4.tgz", @@ -4421,6 +5534,14 @@ "unicode-match-property-value-ecmascript": "^1.1.0" } }, + "registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "requires": { + "rc": "^1.0.1" + } + }, "regjsgen": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", @@ -4444,6 +5565,14 @@ } } }, + "remove": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/remove/-/remove-0.1.5.tgz", + "integrity": "sha1-CV/9gn1lyfQa2X0z5BanWBEHmVU=", + "requires": { + "seq": ">= 0.3.5" + } + }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", @@ -4462,6 +5591,14 @@ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "requires": { + "is-finite": "^1.0.0" + } + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -4478,7 +5615,6 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", - "dev": true, "requires": { "path-parse": "^1.0.6" } @@ -4489,6 +5625,14 @@ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "requires": { + "lowercase-keys": "^1.0.0" + } + }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -4535,8 +5679,7 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "safe-regex": { "version": "1.1.0", @@ -4557,11 +5700,24 @@ "ajv-keywords": "^3.1.0" } }, + "scoped-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/scoped-regex/-/scoped-regex-1.0.0.tgz", + "integrity": "sha1-o0a7Gs1CB65wvXwMfKnlZra63bg=" + }, "semver": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "dev": true + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + }, + "seq": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/seq/-/seq-0.3.5.tgz", + "integrity": "sha1-rgKvOkJHk9jMvyEtaRdODFTf/jg=", + "requires": { + "chainsaw": ">=0.0.7 <0.1", + "hashish": ">=0.0.2 <0.1" + } }, "serialize-javascript": { "version": "1.6.1", @@ -4632,8 +5788,7 @@ "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "sketch-module-google-analytics": { "version": "0.2.1", @@ -4652,8 +5807,7 @@ "slash": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" }, "snapdragon": { "version": "0.8.2", @@ -4777,6 +5931,14 @@ } } }, + "sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "requires": { + "is-plain-obj": "^1.0.0" + } + }, "source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -4786,8 +5948,7 @@ "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, "source-map-resolve": { "version": "0.5.2", @@ -4826,6 +5987,34 @@ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", + "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==" + }, "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", @@ -4910,11 +6099,15 @@ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", "dev": true }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" + }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -4924,7 +6117,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -4933,22 +6125,41 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, "requires": { "ansi-regex": "^3.0.0" } }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "requires": { + "is-utf8": "^0.2.0" + } + }, "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "requires": { + "get-stdin": "^4.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -5103,6 +6314,11 @@ "xtend": "~4.0.1" } }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" + }, "timers-browserify": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", @@ -5121,8 +6337,7 @@ "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" }, "to-object-path": { "version": "0.3.0", @@ -5166,11 +6381,20 @@ "repeat-string": "^1.6.1" } }, + "traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=" + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" + }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" }, "tslib": { "version": "1.9.3", @@ -5470,6 +6694,19 @@ } } }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "requires": { + "prepend-http": "^2.0.0" + } + }, + "url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" + }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -5488,8 +6725,7 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "util.promisify": { "version": "1.0.0", @@ -5501,6 +6737,15 @@ "object.getownpropertydescriptors": "^2.0.3" } }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, "vm-browserify": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", @@ -5670,6 +6915,11 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, + "xml-escape": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xml-escape/-/xml-escape-1.1.0.tgz", + "integrity": "sha1-OQTBQ/qOs6ADDsZG0pAqLxtwbEQ=" + }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", diff --git a/package.json b/package.json index 6699f8b..601e9ba 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ }, "author": "Farid Sabitov ", "dependencies": { + "js2flowchart": "^1.1.7", "sketch-module-google-analytics": "^0.2.1" } } diff --git a/src/links.js b/src/links.js index c0d7f93..fbf6a39 100644 --- a/src/links.js +++ b/src/links.js @@ -1,9 +1,9 @@ export default function(context) {} export function getLibrary(context) { - NSWorkspace.sharedWorkspace().openURL(NSURL.URLWithString("https://github.com/faridsabitov/Sketch-Interactions")) + NSWorkspace.sharedWorkspace().openURL(NSURL.URLWithString("https://github.com/faridsabitov/Sketch-Interactions")); } export function joinCommunity(context) { - NSWorkspace.sharedWorkspace().openURL(NSURL.URLWithString("https://spectrum.chat/sketch-arrows")) + NSWorkspace.sharedWorkspace().openURL(NSURL.URLWithString("https://spectrum.chat/sketch-arrows")); } \ No newline at end of file diff --git a/src/script.js b/src/script.js index 0735fb0..b8b58af 100644 --- a/src/script.js +++ b/src/script.js @@ -1,174 +1,166 @@ -import sketch from 'sketch' -let UI = require('sketch/ui') - - // // Variables // +import sketch from 'sketch'; +let UI = require('sketch/ui') ; +var Settings = require('sketch/settings'); +const pluginKey = "flowArrows"; +let document; -const pluginKey = "flowArrows" -let document - -let docData, pluginData, currentParentGroup, newConnectionsData +let docData, pluginData, currentParentGroup, newConnectionsData; if(context.document){ - document = sketch.fromNative(context.document) - docData = context.document.documentData() - pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey) - currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards - newConnectionsData = getConnectionsData() + //cc:remember place + document = sketch.fromNative(context.document); + docData = context.document.documentData(); + pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); + currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards + newConnectionsData = getConnectionsData(); } else { - document = sketch.fromNative(context.actionContext.document) + document = sketch.fromNative(context.actionContext.document); + //cc:here is bug;well, seems like a bug in logic } - -// const action = context.actionContext -// docData = action.document.documentData() - - -// Settings -var Settings = require('sketch/settings') - // // Create Connection Function // -export function createAutoArrow(context){start(context, "Auto", false)} -export function createRightArrow(context){start(context, "Right", false)} -export function createDownArrow(context){start(context, "Down", false)} -export function createLeftArrow(context){start(context, "Left", false)} -export function createUpArrow(context){start(context, "Up", false)} +export function createAutoArrow(context){start(context, "Auto", false);} +export function createRightArrow(context){start(context, "Right", false);} +export function createDownArrow(context){start(context, "Down", false);} +export function createLeftArrow(context){start(context, "Left", false);} +export function createUpArrow(context){start(context, "Up", false);} -export function createRightArrowWithCondition(context){start(context, "Right", true)} -export function createDownArrowWithCondition(context){start(context, "Down", true)} -export function createLeftArrowWithCondition(context){start(context, "Left", true)} -export function createUpArrowWithCondition(context){start(context, "Up", true)} +export function createRightArrowWithCondition(context){start(context, "Right", true);} +export function createDownArrowWithCondition(context){start(context, "Down", true);} +export function createLeftArrowWithCondition(context){start(context, "Left", true);} +export function createUpArrowWithCondition(context){start(context, "Up", true);} // // Plugin Commands // export function updateSelectedArrows(context) { - let selection = context.selection + let selection = context.selection; if(selection.count() > 1 && selection[0].class() != "MSArtboardGroup"){ // Need to find source object by ID first - let currentConnectionsData = newConnectionsData // Need to refactor + let currentConnectionsData = newConnectionsData; // Need to refactor for(let g = 0; g < selection.count(); g++) { if(selection[g].objectID() != selection[0].objectID()){ // Then need to create or update connection arrow with each selection - let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), currentConnectionsData) + let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), currentConnectionsData); if(connectionIndex.length == 0){ - updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex) - sketch.UI.message("Current connection is updated 🤘") + updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex); + sketch.UI.message("Current connection is updated 🤘"); } else { - sketch.UI.message("There is no connection between selected layers on the plugin data") + sketch.UI.message("There is no connection between selected layers on the plugin data"); } } } - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey) + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); } else { // When user didn't select anything - sketch.UI.message("Please select more than two layers. Artboards are coming soon 🥳") + sketch.UI.message("Please select more than two layers. Artboards are coming soon 🥳"); } } export function autoUpdateSelectedArrows(context) { - const action = context.actionContext + const action = context.actionContext; - docData = action.document.documentData() - pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey) - currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() // TODO: Might be a problem for multiple artboards - newConnectionsData = getConnectionsData() + docData = action.document.documentData(); + pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); + currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards + newConnectionsData = getConnectionsData(); - const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer)) - log(movedLayers[0].id) - log(movedLayers.length) + const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer)); + log(movedLayers[0].id); + log(movedLayers.length); // if (movedLayers.filter(layer => (layer.type == 'Artboard' || (layer.type == 'SymbolMaster' && config.arrangeSymbols))).length > 0) { // ArrangeArtboards(context) // } - let currentConnectionsData = newConnectionsData // Need to refactor + let currentConnectionsData = newConnectionsData; // Need to refactor for(let g = 0; g < movedLayers.length; g++) { - let connectionIndex = findConnectionIndex(movedLayers[0].id, null, currentConnectionsData) + let connectionIndex = findConnectionIndex(movedLayers[0].id, null, currentConnectionsData); - log("yes "+connectionIndex) + log("yes "+connectionIndex); if(connectionIndex.length == 0){ - updateArrow(currentConnectionsData[connectionIndex[0]].firstObject, currentConnectionsData[connectionIndex[0]].secondObject, currentConnectionsData[connectionIndex[0]].style, currentConnectionsData[connectionIndex[0]].type, currentConnectionsData[connectionIndex[0]].direction, currentConnectionsData[connectionIndex[0]].line, currentConnectionsData[connectionIndex[0]].condition, currentConnectionsData[connectionIndex[0]].isCondition, connectionIndex[0]) - sketch.UI.message("Current connection is updated 🤘") + updateArrow(currentConnectionsData[connectionIndex[0]].firstObject, currentConnectionsData[connectionIndex[0]].secondObject, currentConnectionsData[connectionIndex[0]].style, currentConnectionsData[connectionIndex[0]].type, currentConnectionsData[connectionIndex[0]].direction, currentConnectionsData[connectionIndex[0]].line, currentConnectionsData[connectionIndex[0]].condition, currentConnectionsData[connectionIndex[0]].isCondition, connectionIndex[0]); + sketch.UI.message("Current connection is updated 🤘"); } else { - sketch.UI.message("There is no connection between selected layers on the plugin data") + sketch.UI.message("There is no connection between selected layers on the plugin data"); } } - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey) + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); } export function updateArtboardArrows(context) { // TODO: Need to show amount of updated arrows and deleted ones - let selection = context.selection - let connections = getConnectionsData() - let firstObjectArtboard - let secondObjectArtboard + let selection = context.selection; + let connections = getConnectionsData(); + let firstObjectArtboard; + let secondObjectArtboard; if(connections.length > 0){ // We have connections in database - const updateArrowsCounter = connections.length + const updateArrowsCounter = connections.length; for (let i = 0; i < updateArrowsCounter; i ++) { // Need to check if the element is selected globally or from the artboard - firstObjectArtboard = document.getLayerWithID(connections[i].firstObject) - firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID() + firstObjectArtboard = document.getLayerWithID(connections[i].firstObject); + firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID(); - secondObjectArtboard = document.getLayerWithID(connections[i].secondObject) - secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID() + secondObjectArtboard = document.getLayerWithID(connections[i].secondObject); + secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID(); if(selection.count() == 1 && selection[0].class() == "MSArtboardGroup"){ // Need to go through each connection and update arrow position for specific artboard if (firstObjectArtboard == selection[0].objectID()){ if (secondObjectArtboard == selection[0].objectID()){ - updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i) + updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i); } else {newConnectionsData.push(connections[i])} } else { // If not just saving it - newConnectionsData.push(connections[i]) + newConnectionsData.push(connections[i]); } } } - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey) - sketch.UI.message("All arrows are updated 🚀") + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); + sketch.UI.message("All arrows are updated 🚀"); } else { // We don't have any connections to update - sketch.UI.message("There is nothing to update") + sketch.UI.message("There is nothing to update"); } } export function updateAllArrows(context) { // TODO // TODO: Need to show amount of updated arrows and deleted ones - let currentConnectionsData = newConnectionsData + let currentConnectionsData = newConnectionsData; if(currentConnectionsData.length > 0){ // We have connections in database - const updateArrowsCounter = currentConnectionsData.length + const updateArrowsCounter = currentConnectionsData.length; for (let i = 0; i < updateArrowsCounter; i ++) { // Need to go through each connection and update arrow position without artboards // Need to check if current object don't have the parrent - updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i) + updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i); } - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey) - sketch.UI.message("All arrows are updated 🚀") + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); + sketch.UI.message("All arrows are updated 🚀"); } else { // We don't have any connections to update - sketch.UI.message("There is nothing to update") + sketch.UI.message("There is nothing to update"); } } @@ -178,52 +170,52 @@ export function deleteAllArrows(context) { // We have connections in database for (let i = 0; i < newConnectionsData.length; i ++) { // Need to go through each connection and update arrow position - deleteLine(newConnectionsData[i].line) + deleteLine(newConnectionsData[i].line); } - context.command.setValue_forKey_onLayer_forPluginIdentifier(null, "arrowConnections", docData, pluginKey) - sketch.UI.message("All arrows are deleted") + context.command.setValue_forKey_onLayer_forPluginIdentifier(null, "arrowConnections", docData, pluginKey); + sketch.UI.message("All arrows are deleted"); } else { // We don't have any connections to update - sketch.UI.message("There is nothing to delete") + sketch.UI.message("There is nothing to delete"); } } export function deleteArtboardArrows(context) { - let selection = context.selection - let firstObject, secondObject + let selection = context.selection; + let firstObject, secondObject; // Need to delete all the arrows only from selected artboard if(selection.count() == 1 && selection[0].class() == "MSArtboardGroup"){ - let connections = getConnectionsData() + let connections = getConnectionsData(); if(connections.length > 0){ // We have connections in database - const updateArrowsCounter = connections.length + const updateArrowsCounter = connections.length; for (let i = 0; i < updateArrowsCounter; i ++) { // Need to go through each connection and check if it placed on selected artboard - firstObject = document.getLayerWithID(connections[i].firstObject) - secondObject = document.getLayerWithID(connections[i].secondObject) + firstObject = document.getLayerWithID(connections[i].firstObject); + secondObject = document.getLayerWithID(connections[i].secondObject); if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){ if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){ - deleteLine(connections[i].line) - newConnectionsData = deleteConnectionFromData(i) + deleteLine(connections[i].line); + newConnectionsData = deleteConnectionFromData(i); } } } - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey) - sketch.UI.message("All arrows from selected artboard are deleted") + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); + sketch.UI.message("All arrows from selected artboard are deleted"); } else { // We don't have any connections to update - sketch.UI.message("There is nothing to delete") + sketch.UI.message("There is nothing to delete"); } } else { - sketch.UI.message("Please select one artboard") + sketch.UI.message("Please select one artboard"); } } export function deleteSelectedArrows(context) { - let selection = context.selection - let firstObject, secondObject + let selection = context.selection; + let firstObject, secondObject; if(selection.count() == 2){ @@ -231,146 +223,146 @@ export function deleteSelectedArrows(context) { if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection - let connections = getConnectionsData() - let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), connections) + let connections = getConnectionsData() ; + let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), connections); if(connectionIndex != null){ // We have connections in database - deleteLine(connections[connectionIndex].line) - newConnectionsData = deleteConnectionFromData(connectionIndex) - const updateArrowsCounter = connections.length + deleteLine(connections[connectionIndex].line); + newConnectionsData = deleteConnectionFromData(connectionIndex); + const updateArrowsCounter = connections.length; for (let i = 0; i < updateArrowsCounter; i ++) { // Need to go through each connection and check if it placed on selected artboard - firstObject = document.getLayerWithID(connections[i].firstObject) - secondObject = document.getLayerWithID(connections[i].secondObject) + firstObject = document.getLayerWithID(connections[i].firstObject); + secondObject = document.getLayerWithID(connections[i].secondObject); if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){ if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){ - deleteLine(connections[i].line) - newConnectionsData = deleteConnectionFromData(i) + deleteLine(connections[i].line); + newConnectionsData = deleteConnectionFromData(i); } } } - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey) - sketch.UI.message("All arrows from selected layers are deleted ✌️") + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); + sketch.UI.message("All arrows from selected layers are deleted ✌️"); } } } } else { - sketch.UI.message("Select two layers, please 🧐") + sketch.UI.message("Select two layers, please 🧐"); } } export function settings(context) { - let alert = COSAlertWindow.new() - const viewWidth = 300 - const viewHeight = 450 + let alert = COSAlertWindow.new(); + const viewWidth = 300; + const viewHeight = 450; // Alert window settings - alert = alertSetup(alert, viewWidth, viewHeight) - let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight)) - alert.addAccessoryView(view) + alert = alertSetup(alert, viewWidth, viewHeight); + let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight)); + alert.addAccessoryView(view); // Label: Arrow Style - let arrowStyleLabel = alertLabel("Arrow Style", true, -1, viewHeight-40, 280, 40) - view.addSubview(arrowStyleLabel) + let arrowStyleLabel = alertLabel("Arrow Style", true, -1, viewHeight-40, 280, 40); + view.addSubview(arrowStyleLabel); // Select: Arrow Style let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20)); - setActiveStyleSetting(arrowStylingField) - view.addSubview(arrowStylingField) + setActiveStyleSetting(arrowStylingField); + view.addSubview(arrowStylingField); // Label: Arrow Style Info - let arrowStyleInfoLabel = alertLabel("Add layer style to your document that will contain $arrow name and you will be able to specify it here ", false, -1, viewHeight-80, 300, 40) - view.addSubview(arrowStyleInfoLabel) + let arrowStyleInfoLabel = alertLabel("Add layer style to your document that will contain $arrow name and you will be able to specify it here ", false, -1, viewHeight-80, 300, 40); + view.addSubview(arrowStyleInfoLabel); // Label: Arrow Type - let arrowTypeLabel = alertLabel("Arrow Type", true, -1, viewHeight-130, 280, 40) - view.addSubview(arrowTypeLabel) + let arrowTypeLabel = alertLabel("Arrow Type", true, -1, viewHeight-130, 280, 40); + view.addSubview(arrowTypeLabel); // Select: Arrow Type let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20)); - setActiveTypeSetting(arrowTypeField) - view.addSubview(arrowTypeField) + setActiveTypeSetting(arrowTypeField); + view.addSubview(arrowTypeField); // Label: Arrow Type Info - let arrowTypeInfoLabel = alertLabel("Select one of the arrow types. Angled is used by default", false, -1, viewHeight-170, 300, 40) - view.addSubview(arrowTypeInfoLabel) + let arrowTypeInfoLabel = alertLabel("Select one of the arrow types. Angled is used by default", false, -1, viewHeight-170, 300, 40); + view.addSubview(arrowTypeInfoLabel); // Label: Arrow Spacing - let arrowSpacingLabel = alertLabel("Arrow Spacing", true, -1, viewHeight - 200, 330, 20) - view.addSubview(arrowSpacingLabel) + let arrowSpacingLabel = alertLabel("Arrow Spacing", true, -1, viewHeight - 200, 330, 20); + view.addSubview(arrowSpacingLabel); // Label: Arrow Spacing PX - let arrowSpacingPxLabel = alertLabel("px", true, 90, viewHeight - 220, 330, 20) - view.addSubview(arrowSpacingPxLabel) + let arrowSpacingPxLabel = alertLabel("px", true, 90, viewHeight - 220, 330, 20); + view.addSubview(arrowSpacingPxLabel); // Input: Arrow Spacing - let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20)) - var formatter = NSNumberFormatter.alloc().init().autorelease() - arrowSpacingField.setStringValue(String(Settings.settingForKey("arrowSpacing"))) - arrowSpacingField.setFormatter(formatter) - view.addSubview(arrowSpacingField) + let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20)); + var formatter = NSNumberFormatter.alloc().init().autorelease(); + arrowSpacingField.setStringValue(String(Settings.settingForKey("arrowSpacing"))); + arrowSpacingField.setFormatter(formatter); + view.addSubview(arrowSpacingField); // Stepper: Arrow Spacing let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20)); - arrowSpacingStepper.setMaxValue(1000) - arrowSpacingStepper.setMinValue(0) - arrowSpacingStepper.setValueWraps(false) - arrowSpacingStepper.setAutorepeat(true) + arrowSpacingStepper.setMaxValue(1000); + arrowSpacingStepper.setMinValue(0); + arrowSpacingStepper.setValueWraps(false); + arrowSpacingStepper.setAutorepeat(true); arrowSpacingStepper.setCOSJSTargetFunction(function(sender){ - var value = 0 + sender.integerValue() - arrowSpacingField.setStringValue(String(value)) + var value = 0 + sender.integerValue(); + arrowSpacingField.setStringValue(String(value)); }) - view.addSubview(arrowSpacingStepper) + view.addSubview(arrowSpacingStepper); // view.addSubview(formatter) // Label: Auto Spacing Info - let arrowSpacingInfoLabel = alertLabel("The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature ", false, -1, viewHeight-285, 300, 60) - view.addSubview(arrowSpacingInfoLabel) + let arrowSpacingInfoLabel = alertLabel("The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature ", false, -1, viewHeight-285, 300, 60); + view.addSubview(arrowSpacingInfoLabel); // Label: Other Settings - let otherSettingsLabel = alertLabel("Other Settings", true, -1, viewHeight-330, 280, 40) - view.addSubview(otherSettingsLabel) + let otherSettingsLabel = alertLabel("Other Settings", true, -1, viewHeight-330, 280, 40); + view.addSubview(otherSettingsLabel); // Checkbox: Auto-Align - let checkbox = alertCheckbox("Second layer auto-align", false, -1, viewHeight-340, 260, 40) - view.addSubview(checkbox) + let checkbox = alertCheckbox("Second layer auto-align", false, -1, viewHeight-340, 260, 40); + view.addSubview(checkbox); // Label: Auto-Align Info - let autoAlignInfoLabel = alertLabel("Align the second layer for 5px misalignment with the first one", false, -1, viewHeight-370, 280, 40) - view.addSubview(autoAlignInfoLabel) + let autoAlignInfoLabel = alertLabel("Align the second layer for 5px misalignment with the first one", false, -1, viewHeight-370, 280, 40); + view.addSubview(autoAlignInfoLabel); // Label: Plugin Info - let pluginInfoLabel = alertLabel("Made by @faridSabitov with the support of EPAM.com ❤️", true, -1, viewHeight-420, 280, 40) - view.addSubview(pluginInfoLabel) + let pluginInfoLabel = alertLabel("Made by @faridSabitov with the support of EPAM.com ❤️", true, -1, viewHeight-420, 280, 40); + view.addSubview(pluginInfoLabel); // Need to check if style is still available // Show modal and get the results - let modalResponse = alert.runModal() + let modalResponse = alert.runModal(); if(modalResponse == NSAlertFirstButtonReturn){ // When user clicks on "Update Settings" // Need to save all this results into the Plugin Settings - context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), "arrowStyle", docData, pluginKey) - Settings.setSettingForKey("arrowType", alert.views()[0].subviews()[4].title()) - Settings.setSettingForKey("arrowSpacing", alert.views()[0].subviews()[8].intValue()) - Settings.setSettingForKey("autoAlign", alert.views()[0].subviews()[12].state()) - UI.message("Settings are updated 🚀") + context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), "arrowStyle", docData, pluginKey); + Settings.setSettingForKey("arrowType", alert.views()[0].subviews()[4].title()); + Settings.setSettingForKey("arrowSpacing", alert.views()[0].subviews()[8].intValue()); + Settings.setSettingForKey("autoAlign", alert.views()[0].subviews()[12].state()); + UI.message("Settings are updated 🚀"); } } export function onLayersMoved(context) { - sketch.UI.message("Please select more than two layers") - const action = context.actionContext + sketch.UI.message("Please select more than two layers"); + const action = context.actionContext ; } export function panel(context) { - let ControlBar + let ControlBar; ControlBar = NSPanel.alloc().init(); ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask); // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1)); @@ -428,33 +420,33 @@ export function panel(context) { function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored // Need to check if we have the layers with such IDs - let firstObject = document.getLayerWithID(firstObjectID) - let secondObject = document.getLayerWithID(secondObjectID) - let conditionObject = document.getLayerWithID(conditionID) + let firstObject = document.getLayerWithID(firstObjectID); + let secondObject = document.getLayerWithID(secondObjectID); + let conditionObject = document.getLayerWithID(conditionID); // Need to delete data first, because we will have a new line - deleteLine(lineID) + deleteLine(lineID); if(conditionID && !isCondition){ - if(conditionObject){conditionObject.remove()} + if(conditionObject){conditionObject.remove();} } - newConnectionsData = deleteConnectionFromData(connectionIndex) + newConnectionsData = deleteConnectionFromData(connectionIndex); if(firstObject && secondObject){ // If we have all the objects, we can recreate the line - createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) + createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition); } } function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored - let localDirection = direction == "Auto" ? getDirection(firstObjectID, secondObjectID) : direction + let localDirection = direction == "Auto" ? getDirection(firstObjectID, secondObjectID) : direction; // Main Operations based on the settings - updateSpacing(firstObjectID, secondObjectID, localDirection) - autoAlignLayer(firstObjectID, secondObjectID, localDirection) + updateSpacing(firstObjectID, secondObjectID, localDirection); + autoAlignLayer(firstObjectID, secondObjectID, localDirection); // Making an Arrow - let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition) + let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition); // Storage for current connection let connection = { @@ -469,65 +461,65 @@ function createArrow(firstObjectID, secondObjectID, style, type, direction, cond } // Need to save this data to the global array - newConnectionsData.push(connection) + newConnectionsData.push(connection); } function checkForGroup(groupName) { // refactored - let currentGroup = null + let currentGroup = null; // Checking all the groups that we have for(let i = 0; i < currentParentGroup.layers().count(); i++){ if(currentParentGroup.layers()[i].name() == groupName) { - currentGroup = currentParentGroup.layers()[i] + currentGroup = currentParentGroup.layers()[i]; } } - return currentGroup + return currentGroup; } function getDirection(firstObjectID, secondObjectID){ // Refactored // Get direction from the source object - const firstObject = document.getLayerWithID(firstObjectID) - const secondObject = document.getLayerWithID(secondObjectID) - const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2 - const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2 - const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2 - const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2 - - const diffX = firstObjectMidX - secondObjectMidX - const diffY = firstObjectMidY - secondObjectMidY - const absDiffX = Math.abs(diffX) - const absDiffY = Math.abs(diffY) - let direction + const firstObject = document.getLayerWithID(firstObjectID); + const secondObject = document.getLayerWithID(secondObjectID); + const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2; + const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2; + const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2; + const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2; + + const diffX = firstObjectMidX - secondObjectMidX; + const diffY = firstObjectMidY - secondObjectMidY; + const absDiffX = Math.abs(diffX); + const absDiffY = Math.abs(diffY); + let direction; if(secondObjectMidX > firstObjectMidX){ // Right Half if(secondObjectMidY > firstObjectMidY){ // Bottom quarter - direction = diffX > diffY ? "Down" : "Right" + direction = diffX > diffY ? "Down" : "Right"; } else { // Top quarter - direction = absDiffX > absDiffY ? "Right" : "Up" + direction = absDiffX > absDiffY ? "Right" : "Up"; } } else { // Left Half if(secondObjectMidY > firstObjectMidY){ // Bottom quarter - direction = absDiffX > absDiffY ? "Left" : "Down" + direction = absDiffX > absDiffY ? "Left" : "Down"; } else { // Top quarter - direction = diffX > diffY ? "Left" : "Up" + direction = diffX > diffY ? "Left" : "Up"; } } - return direction + return direction; } function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition){ // Refactored // Process of creating new connection - let firstObject = document.getLayerWithID(firstObjectID) - let secondObject = document.getLayerWithID(secondObjectID) - let connectionPos = getConnectionPos(firstObject, secondObject, localDirection) + let firstObject = document.getLayerWithID(firstObjectID); + let secondObject = document.getLayerWithID(secondObjectID); + let connectionPos = getConnectionPos(firstObject, secondObject, localDirection); let connection = { line: [], conditionID: [], @@ -536,91 +528,91 @@ function drawConnection(firstObjectID, secondObjectID, style, type, localDirecti } // Type - connection.type = type == null ? Settings.settingForKey("arrowType") : type - if(connection.type == "Angled" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)} - if(connection.type == "Straight"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)} - if(connection.type == "Curved"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection)} + connection.type = type == null ? Settings.settingForKey("arrowType") : type; + if(connection.type == "Angled" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);} + if(connection.type == "Straight"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);} + if(connection.type == "Curved"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);} // Condition if(condition == true){ if(conditionID != null){ - connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY) + connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY); } else { - connection.conditionID = addCondition("#con", connectionPos.middlePosX, connectionPos.middlePosY) + connection.conditionID = addCondition("#con", connectionPos.middlePosX, connectionPos.middlePosY); } } else { - connection.conditionID = null + connection.conditionID = null; } // connection.conditionID = condition != false ? connection.conditionID = addCondition("#con", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null // Style - connection.style = styleLine(connection.line, style) + connection.style = styleLine(connection.line, style); // Add to group - addToArrowsGroup(connection.line) + addToArrowsGroup(connection.line); return connection } function addToArrowsGroup(line){ - let currentGroup = checkForGroup("Arrows") + let currentGroup = checkForGroup("Arrows"); if(currentGroup){ - currentGroup.addLayers([line]) - currentGroup.fixGeometryWithOptions(1) + currentGroup.addLayers([line]); + currentGroup.fixGeometryWithOptions(1); } else { - let Group = require('sketch/dom').Group + let Group = require('sketch/dom').Group; let group = new Group({ parent: currentParentGroup, name: 'Arrows', locked: true, layers: [line] - }) - group.moveToBack() - group.adjustToFit() + }); + group.moveToBack(); + group.adjustToFit(); } } function addToConditionGroup(condition, x, y){ // Refactored - let conGroup = checkForGroup("Conditions") - let arGroup = checkForGroup("Arrows") - let arGroupX = arGroup != null ? arGroup.frame().x() : 0 - let arGroupY = arGroup != null ? arGroup.frame().y() : 0 + let conGroup = checkForGroup("Conditions"); + let arGroup = checkForGroup("Arrows"); + let arGroupX = arGroup != null ? arGroup.frame().x() : 0; + let arGroupY = arGroup != null ? arGroup.frame().y() : 0; if(conGroup){ - condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX) - condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY) - condition.parent = conGroup - conGroup.fixGeometryWithOptions(1) + condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX); + condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY); + condition.parent = conGroup; + conGroup.fixGeometryWithOptions(1); } else { - condition.frame.x = x - condition.frame.width / 2 - condition.frame.y = y - condition.frame.height / 2 - let Group = require('sketch/dom').Group + condition.frame.x = x - condition.frame.width / 2; + condition.frame.y = y - condition.frame.height / 2; + let Group = require('sketch/dom').Group; let group = new Group({ parent: currentParentGroup, name: 'Conditions', layers: [condition] - }) - group.moveToBack() - group.adjustToFit() + }); + group.moveToBack(); + group.adjustToFit(); } - return condition.id + return condition.id; } function getConnectionsData(){ //Refactored - let dataArray = [] + let dataArray = []; if(pluginData){ for (let i = 0; i < pluginData.length; i ++) { - dataArray.push(pluginData[i]) + dataArray.push(pluginData[i]); } } - return dataArray + return dataArray; } function findConnectionIndex(firstObjectID, secondObjectID, data){ - let indexArray = [] - firstObjectID = String(firstObjectID) - secondObjectID = String(secondObjectID) + let indexArray = [] ; + firstObjectID = String(firstObjectID); + secondObjectID = String(secondObjectID); if(pluginData){ // If we have database, need to check for connections @@ -629,372 +621,373 @@ function findConnectionIndex(firstObjectID, secondObjectID, data){ if(secondObjectID == null){ // When we need to find connection between two objects if(secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject){ - indexArray[0] = y + indexArray[0] = y; } } else { // When we need to find a connection for one object only - indexArray.push(y) + indexArray.push(y); } } } } - return indexArray + return indexArray; } function setActiveStyleSetting(arrowStylingField){ - let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) - let styles = getLayerStyles(null) + let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey); + let styles = getLayerStyles(null); if(docSettings){ // We have info about the settings in the current document if(docSettings != "Default Style") { // if user specified own option - arrowStylingField.addItemWithTitle(docSettings) - arrowStylingField.addItemWithTitle("Default Style") + arrowStylingField.addItemWithTitle(docSettings); + arrowStylingField.addItemWithTitle("Default Style"); for(let i = 0; i < styles.length; i++){ if(styles[i].name() != docSettings){ - arrowStylingField.addItemWithTitle(styles[i].name()) + arrowStylingField.addItemWithTitle(styles[i].name()); } } } else { // Need to show the default first - arrowStylingField.addItemWithTitle("Default Style") + arrowStylingField.addItemWithTitle("Default Style"); for(let i = 0; i < styles.length; i++){ - arrowStylingField.addItemWithTitle(styles[i].name()) + arrowStylingField.addItemWithTitle(styles[i].name()); } } } else { - arrowStylingField.addItemWithTitle("Default Style") + arrowStylingField.addItemWithTitle("Default Style"); for(let i = 0; i < styles.length; i++){ - arrowStylingField.addItemWithTitle(styles[i].name()) + arrowStylingField.addItemWithTitle(styles[i].name()); } } } function setActiveTypeSetting(arrowTypeField){ - let docTypeSettings = Settings.settingForKey("arrowType") + let docTypeSettings = Settings.settingForKey("arrowType"); if(docTypeSettings){ // We have info about the settings in the current document if(docTypeSettings == "Angled"){ - arrowTypeField.addItemWithTitle("Angled") - arrowTypeField.lastItem().setState(1) - arrowTypeField.addItemWithTitle("Curved") - arrowTypeField.lastItem().setState(0) - arrowTypeField.addItemWithTitle("Straight") - arrowTypeField.lastItem().setState(0) + arrowTypeField.addItemWithTitle("Angled"); + arrowTypeField.lastItem().setState(1); + arrowTypeField.addItemWithTitle("Curved"); + arrowTypeField.lastItem().setState(0); + arrowTypeField.addItemWithTitle("Straight"); + arrowTypeField.lastItem().setState(0); } if(docTypeSettings == "Curved"){ - arrowTypeField.addItemWithTitle("Curved") - arrowTypeField.lastItem().setState(1) - arrowTypeField.addItemWithTitle("Straight") - arrowTypeField.lastItem().setState(0) - arrowTypeField.addItemWithTitle("Angled") - arrowTypeField.lastItem().setState(0) + arrowTypeField.addItemWithTitle("Curved"); + arrowTypeField.lastItem().setState(1); + arrowTypeField.addItemWithTitle("Straight"); + arrowTypeField.lastItem().setState(0); + arrowTypeField.addItemWithTitle("Angled"); + arrowTypeField.lastItem().setState(0); } if(docTypeSettings == "Straight"){ - arrowTypeField.addItemWithTitle("Straight") - arrowTypeField.lastItem().setState(1) - arrowTypeField.addItemWithTitle("Angled") - arrowTypeField.lastItem().setState(0) - arrowTypeField.addItemWithTitle("Curved") - arrowTypeField.lastItem().setState(0) + arrowTypeField.addItemWithTitle("Straight"); + arrowTypeField.lastItem().setState(1); + arrowTypeField.addItemWithTitle("Angled"); + arrowTypeField.lastItem().setState(0); + arrowTypeField.addItemWithTitle("Curved"); + arrowTypeField.lastItem().setState(0); } } else { // Show default - arrowTypeField.addItemWithTitle("Angled") - arrowTypeField.addItemWithTitle("Curved") - arrowTypeField.addItemWithTitle("Straight") + arrowTypeField.addItemWithTitle("Angled"); + arrowTypeField.addItemWithTitle("Curved"); + arrowTypeField.addItemWithTitle("Straight"); } } function deleteConnectionFromData(connectionIndex){ // Refactored - let newConnections = [] + let newConnections = []; if(pluginData){ // If we have database - let connections = pluginData + let connections = pluginData; for (let i = 0; i < connections.length; i ++) { // Updating all connections without deleted one if(i != connectionIndex){ - newConnections.push(connections[i]) + newConnections.push(connections[i]); } } } - return newConnections + return newConnections; } function deleteLine(lineID){ // refactored - let lineObject = document.getLayerWithID(lineID) - let selectedGroup + let lineObject = document.getLayerWithID(lineID); + let selectedGroup; if(lineObject){ - selectedGroup = lineObject.parent - lineObject.remove() + selectedGroup = lineObject.parent; + lineObject.remove(); if(selectedGroup.layers.length == 0){ - selectedGroup.remove() + selectedGroup.remove(); } } } function updateSpacing(sourceObjectID, childObjectID, direction){ - let sourceObject = document.getLayerWithID(sourceObjectID) - let childObject = document.getLayerWithID(childObjectID) + let sourceObject = document.getLayerWithID(sourceObjectID); + let childObject = document.getLayerWithID(childObjectID); if(Settings.settingForKey("arrowSpacing") && Settings.settingForKey("arrowSpacing") != 0){ - let currentSpacing = Settings.settingForKey("arrowSpacing") + let currentSpacing = Settings.settingForKey("arrowSpacing"); if(direction == "Right"){ - childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing + childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing; } if(direction == "Down"){ - childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing + childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing; } if(direction == "Left"){ - childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing + childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing; } if(direction == "Up"){ - childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing + childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing; } } } function autoAlignLayer(sourceObjectID, childObjectID, direction){ - let sourceObject = document.getLayerWithID(sourceObjectID) - let childObject = document.getLayerWithID(childObjectID) - let sourceMidY, childMidY, sourceMidX, childMidX, diff + let sourceObject = document.getLayerWithID(sourceObjectID); + let childObject = document.getLayerWithID(childObjectID); + let sourceMidY, childMidY, sourceMidX, childMidX, diff; if(Settings.settingForKey("autoAlign")){ if(Settings.settingForKey("autoAlign") == true){ // If user turned on Auto-Align settings if(direction == "Right" || direction == "Left"){ - sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2 - childMidY = childObject.frame.y + childObject.frame.height/2 - diff = sourceMidY - childMidY - if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff} + sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2; + childMidY = childObject.frame.y + childObject.frame.height/2; + diff = sourceMidY - childMidY; + if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;} } if(direction == "Down" || direction == "Up"){ - sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2 - childMidX = childObject.frame.x + childObject.frame.width/2 - diff = sourceMidX - childMidX - if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff} + sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2; + childMidX = childObject.frame.x + childObject.frame.width/2; + diff = sourceMidX - childMidX; + if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;} } } } } function defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored - let firstObject = document.getLayerWithID(firstObjectID) - let secondObject = document.getLayerWithID(secondObjectID) - let sourceObjectID + let firstObject = document.getLayerWithID(firstObjectID); + let secondObject = document.getLayerWithID(secondObjectID); + let sourceObjectID; if(direction == "Right"){ if(firstObject.frame.x <= secondObject.frame.x){ - sourceObjectID = firstObject.id + sourceObjectID = firstObject.id; } else { - sourceObjectID = secondObject.id + sourceObjectID = secondObject.id; } } if(direction == "Down"){ if(firstObject.frame.y <= secondObject.frame.y){ - sourceObjectID = firstObject.id + sourceObjectID = firstObject.id; } else { - sourceObjectID = secondObject.id + sourceObjectID = secondObject.id; } } if(direction == "Left"){ if(firstObject.frame.x <= secondObject.frame.x){ - sourceObjectID = secondObject.id + sourceObjectID = secondObject.id; } else { - sourceObjectID = firstObject.id + sourceObjectID = firstObject.id; } } if(direction == "Up"){ if(firstObject.frame.y <= secondObject.frame.y){ - sourceObjectID = secondObject.id + sourceObjectID = secondObject.id; } else { - sourceObjectID = firstObject.id + sourceObjectID = firstObject.id; } } - return sourceObjectID + return sourceObjectID; } function getSourceObjectFromSelection(selection, direction){ //Refactored - let sourceObjectID = selection.firstObject().objectID() + let sourceObjectID = selection.firstObject().objectID(); if(direction != "Auto"){ for(let g = 0; g < selection.count(); g++) { - sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction) + sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction); } } - return sourceObjectID + return sourceObjectID; } function alertSetup(alert, viewWidth, viewHeight){ // Title - alert.setMessageText("Arrow Plugin Settings") + alert.setMessageText("Arrow Plugin Settings"); // Creating dialog buttons - alert.addButtonWithTitle("Update Settings") - alert.addButtonWithTitle("Cancel") + alert.addButtonWithTitle("Update Settings"); + alert.addButtonWithTitle("Cancel"); - return alert + return alert; } function alertLabel(message, state, x, y, width, height){ - let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height)) + let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height)); - infoLabel.setStringValue(message) - infoLabel.setSelectable(false) - infoLabel.setDrawsBackground(false) - infoLabel.setBezeled(false) + infoLabel.setStringValue(message); + infoLabel.setSelectable(false); + infoLabel.setDrawsBackground(false); + infoLabel.setBezeled(false); if(state == false){ - infoLabel.textColor = NSColor.disabledControlTextColor() + infoLabel.textColor = NSColor.disabledControlTextColor(); } - return infoLabel + return infoLabel; } function alertCheckbox(message, state, x, y, width, height){ - let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height)) + let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height)); - checkbox.setButtonType(NSSwitchButton) - checkbox.setBezelStyle(0) - checkbox.setTitle(message) + checkbox.setButtonType(NSSwitchButton); + checkbox.setBezelStyle(0); + checkbox.setTitle(message); if(Settings.settingForKey("autoAlign")){ - let currentState = Settings.settingForKey("autoAlign") - checkbox.setState(currentState) + let currentState = Settings.settingForKey("autoAlign") ; + checkbox.setState(currentState); } else { - checkbox.setState(state) + checkbox.setState(state); } - return checkbox + return checkbox; } function getLayerStyles(name) { // Refactored - let allStyles = docData.allLayerStyles() - let keyword = "$arrow" - let styles = [] + let allStyles = docData.allLayerStyles(); + let keyword = "$arrow"; + let styles = []; for(let i = 0; i < allStyles.count(); i++){ if(name == null) { - if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i])} + if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);} } else { - if(allStyles[i].name() == name){styles.push(allStyles[i])} + if(allStyles[i].name() == name){styles.push(allStyles[i]);} } } - return styles + return styles; } function start(context, direction, isCondition){ - let selection = context.selection + //cc:start#1;Passing all the data + let selection = context.selection; if(selection.count() > 1 && selection[0].class() != "MSArtboardGroup"){ // Need to find source object by ID first - let sourceObjectID = getSourceObjectFromSelection(selection, direction) - let currentConnectionsData = newConnectionsData // Need to refactor + let sourceObjectID = getSourceObjectFromSelection(selection, direction); + let currentConnectionsData = newConnectionsData; // Need to refactor for(let g = 0; g < selection.count(); g++) { if(selection[g].objectID() != sourceObjectID){ // Then need to create or update connection arrow with each selection - let connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), currentConnectionsData) + let connectionIndex = findConpm install [-g] js-dependency-visualizernnectionIndex(sourceObjectID, selection[g].objectID(), currentConnectionsData); if(connectionIndex.length == 0){ // There is no connection with this two objects in our database - createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition) - sketch.UI.message("New connection is created 🚀") + createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition); + sketch.UI.message("New connection is created 🚀"); } else { // Need to remake the arrow condition - updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex) - sketch.UI.message("Current connection is updated 🤘") + updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex); + sketch.UI.message("Current connection is updated 🤘"); } } } - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey) + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); } else { // When user didn't select anything - sketch.UI.message("Please select more than two layers. Artboards are coming soon 🥳") + sketch.UI.message("Please select more than two layers. Artboards are coming soon 🥳"); } } function addCondition(keyword, x, y){ // Refactored - let libraries = sketch.getLibraries() - let libraryObject, symbolReferences, symbol + let libraries = sketch.getLibraries(); + let libraryObject, symbolReferences, symbol; for(let g = 0; g < libraries.length; g++) { - symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document) + symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document); for(let i = 0; i < symbolReferences.length; i++) { if(symbolReferences[i].name.includes(keyword)){ - libraryObject = symbolReferences[i] + libraryObject = symbolReferences[i]; } } } if(libraryObject == null){ - symbol = null - UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as "#condition" so it will be added here') + symbol = null; + UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as "#condition" so it will be added here'); } else { - let symbolMaster = libraryObject.import() - symbol = symbolMaster.createNewInstance() - symbol = addToConditionGroup(symbol, x, y) + let symbolMaster = libraryObject.import(); + symbol = symbolMaster.createNewInstance(); + symbol = addToConditionGroup(symbol, x, y); } - return symbol + return symbol; } function updateCondition(conditionID, x, y){ // Refactored - let condition = document.getLayerWithID(conditionID) + let condition = document.getLayerWithID(conditionID); // log (condition) - let conGroup = checkForGroup("Conditions") - let arGroup = checkForGroup("Arrows") - let arGroupX = arGroup != null ? arGroup.frame().x() : 0 - let arGroupY = arGroup != null ? arGroup.frame().y() : 0 + let conGroup = checkForGroup("Conditions") ; + let arGroup = checkForGroup("Arrows"); + let arGroupX = arGroup != null ? arGroup.frame().x() : 0; + let arGroupY = arGroup != null ? arGroup.frame().y() : 0; if(conGroup){ - condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX) - condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY) - conGroup.fixGeometryWithOptions(1) + condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX); + condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY); + conGroup.fixGeometryWithOptions(1); } else { - condition.frame.x = x - condition.frame.width / 2 - condition.frame.y = y - condition.frame.height / 2 + condition.frame.x = x - condition.frame.width / 2; + condition.frame.y = y - condition.frame.height / 2; } - return condition.id + return condition.id; } function getConnectionPos(firstObject, secondObject, direction){ // Refactored - let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup}) - let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup}) - let currentGroup = checkForGroup("Arrows") - let diffX, diffY + let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup}); + let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup}); + let currentGroup = checkForGroup("Arrows"); + let diffX, diffY; if(currentGroup){ - diffX = currentGroup.frame().x() - diffY = currentGroup.frame().y() + diffX = currentGroup.frame().x(); + diffY = currentGroup.frame().y(); } else { - diffX = 0 - diffY = 0 + diffX = 0; + diffY = 0; } let connectionPos = { - firstLayerPosX: null, + firstLayerPosX: null, firstLayerPosY: null, secondLayerPosX: null, secondLayerPosY: null, @@ -1005,289 +998,297 @@ function getConnectionPos(firstObject, secondObject, direction){ // Refactored // Getting all the positions if(direction == "Up"){ // First Layer Position Start Point Position - connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX - connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY + connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX; + connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY; // Second Layer Position End Point Position - connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX - connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY + connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX; + connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY; // Middle Points - connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2 - connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2 + connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2; + connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2; } if(direction == "Right"){ // First Layer Position Start Point Position - connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX - connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY + connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX; + connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY; // Second Layer Position End Point Position - connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX - connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY + connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX; + connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY; // Middle Points - connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2 - connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2 + connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2; + connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2; } if(direction == "Down"){ // First Layer Position Start Point Position - connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX - connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY + connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX; + connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY; // Second Layer Position End Point Position - connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX - connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY + connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX; + connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY; // Middle Points - connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2 - connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2 + connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2; + connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2; } if(direction == "Left"){ // First Layer Position Start Point Position - connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX - connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY + connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX; + connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY; // Second Layer Position End Point Position - connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX - connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY + connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX; + connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY; // Middle Points - connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2 - connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2 + connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2; + connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2; } return connectionPos } function drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored - let path = NSBezierPath.bezierPath() + let path = NSBezierPath.bezierPath(); if(direction == "Up"){ - path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)) - path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)) + path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)); } if(direction == "Right"){ - path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)) - path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)) + path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)); } if(direction == "Down"){ - path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)) - path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)) + path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)); } if(direction == "Left"){ - path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)) - path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)) + path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)); } - let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) - line.setName("Straight Arrow") + let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + line.setName("Straight Arrow"); - return line + return line; } function drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored - let path = NSBezierPath.bezierPath() + let path = NSBezierPath.bezierPath(); if(direction == "Up"){ // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)) - path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)) - path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)) - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)) + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); } if(direction == "Right"){ // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)) - path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)) - path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)) - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)) + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); } if(direction == "Down"){ // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)) - path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)) - path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)) - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)) + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); } if(direction == "Left"){ // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)) - path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)) - path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)) - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)) + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); } - let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) - let points = line.layers().firstObject().points() - points[1].cornerRadius = 20 - points[2].cornerRadius = 20 - line.setName("Angled Arrow") + let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + let points = line.layers().firstObject().points(); + points[1].cornerRadius = 20; + points[2].cornerRadius = 20; + line.setName("Angled Arrow"); - return line + return line; } function drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored - let path = NSBezierPath.bezierPath() - let line + let path = NSBezierPath.bezierPath(); + let line; if(direction == "Up"){ // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)) - path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)) + path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)); // Painting the line - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) - let points = line.layers().firstObject().points() + line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + let points = line.layers().firstObject().points(); - points[0].curveMode = points[1].curveMode = 4 - points[0].hasCurveFrom = points[1].hasCurveTo = true + points[0].curveMode = 4; + points[1].curveMode = 4; + points[0].hasCurveFrom = true; + points[1].hasCurveTo = true; if(firstLayerPosX + + + + + + + + + import from'sketch' + + import from'sketch' + + + + + + sketch + + sketch + + + + + + + let UI = require('sketch/ui') + + let UI = require('sketch/ui') + + + + + + + var Settings = require('sketch/settings') + + var Settings = require('sketch/settings') + + + + + + + const pluginKey = "flowArrows" + + const pluginKey = "flowArrows" + + + + + + + (context.document) + + (context.document) + + + if + - + + + + document = sketch.fromNative(context.document) + + document = sketch.fromNative(context.document) + + + + + + + docData = context.document.documentData() + + docData = context.document.documentData() + + + + + + + pluginData = context.command.valueForKey_onLayer_forPluginIdentifier('arrowConnections', docData, pluginKey) + + pluginData = context.command.valueForKey_onLayer_f... + + + + + + + currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() + + currentParentGroup = docData.currentPage().current... + + + + + + + docData.currentPage() + + docData.currentPage() + + + + + + + .currentArtboard() + + .currentArtboard() + + + + + + + docData.currentPage() + + docData.currentPage() + + + + + + + newConnectionsData = getConnectionsData() + + newConnectionsData = getConnectionsData() + + + + + + + document = sketch.fromNative(context.actionContext.document) + + document = sketch.fromNative(context.actionContext... + + + + + + + + + + + + + + export createAutoArrow + + export createAutoArrow + + + + + + + + + + function createAutoArrow(context) + + function createAutoArrow(context) + + + + + + start(context, 'Auto', false) + + start(context, 'Auto', false) + + + + + + + + + + + + + + export createRightArrow + + export createRightArrow + + + + + + + + + + function createRightArrow(context) + + function createRightArrow(context) + + + + + + start(context, 'Right', false) + + start(context, 'Right', false) + + + + + + + + + + + + + + export createDownArrow + + export createDownArrow + + + + + + + + + + function createDownArrow(context) + + function createDownArrow(context) + + + + + + start(context, 'Down', false) + + start(context, 'Down', false) + + + + + + + + + + + + + + export createLeftArrow + + export createLeftArrow + + + + + + + + + + function createLeftArrow(context) + + function createLeftArrow(context) + + + + + + start(context, 'Left', false) + + start(context, 'Left', false) + + + + + + + + + + + + + + export createUpArrow + + export createUpArrow + + + + + + + + + + function createUpArrow(context) + + function createUpArrow(context) + + + + + + start(context, 'Up', false) + + start(context, 'Up', false) + + + + + + + + + + + + + + export createRightArrowWithCondition + + export createRightArrowWithCondition + + + + + + + + + + function createRightArrowWithCondition(context) + + function createRightArrowWithCondition(context) + + + + + + start(context, 'Right', true) + + start(context, 'Right', true) + + + + + + + + + + + + + + export createDownArrowWithCondition + + export createDownArrowWithCondition + + + + + + + + + + function createDownArrowWithCondition(context) + + function createDownArrowWithCondition(context) + + + + + + start(context, 'Down', true) + + start(context, 'Down', true) + + + + + + + + + + + + + + export createLeftArrowWithCondition + + export createLeftArrowWithCondition + + + + + + + + + + function createLeftArrowWithCondition(context) + + function createLeftArrowWithCondition(context) + + + + + + start(context, 'Left', true) + + start(context, 'Left', true) + + + + + + + + + + + + + + export createUpArrowWithCondition + + export createUpArrowWithCondition + + + + + + + + + + function createUpArrowWithCondition(context) + + function createUpArrowWithCondition(context) + + + + + + start(context, 'Up', true) + + start(context, 'Up', true) + + + + + + + + + + + + + + export updateSelectedArrows + + export updateSelectedArrows + + + + + + + + + + function updateSelectedArrows(context) + + function updateSelectedArrows(context) + + + + + + let selection = context.selection + + let selection = context.selection + + + + + + + (selection.count() > 1 && selection[0].class() != "MSArtboardGroup") + + (selection.count() > 1 && selection[0].class() != ... + + + if + - + + + + let currentConnectionsData = newConnectionsData + + let currentConnectionsData = newConnectionsData + + + + + + + + + g < selection.count() + + g < selection.count() + + + for + + + + g++ + + g++ + + + + + + + (selection[g].objectID() != selection[0].objectID()) + + (selection[g].objectID() != selection[0].objectID(... + + + if + + + + + let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), currentConnectionsData) + + let connectionIndex = findConnectionIndex(selectio... + + + + + + + (connectionIndex.length == 0) + + (connectionIndex.length == 0) + + + if + - + + + + updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex) + + updateArrow(currentConnectionsData[connectionIndex... + + + + + + + sketch.UI.message('Current connection is updated 🤘') + + sketch.UI.message('Current connection is updated �... + + + + + + + sketch.UI.message('There is no connection between selected layers on the plugin data') + + sketch.UI.message('There is no connection between ... + + + + + + + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, 'arrowConnections', docData, pluginKey) + + context.command.setValue_forKey_onLayer_forPluginI... + + + + + + + sketch.UI.message('Please select more than two layers. Artboards are coming soon 🥳') + + sketch.UI.message('Please select more than two lay... + + + + + + + + + + + + + + export autoUpdateSelectedArrows + + export autoUpdateSelectedArrows + + + + + + + + + + function autoUpdateSelectedArrows(context) + + function autoUpdateSelectedArrows(context) + + + + + + const action = context.actionContext + + const action = context.actionContext + + + + + + + docData = action.document.documentData() + + docData = action.document.documentData() + + + + + + + pluginData = context.command.valueForKey_onLayer_forPluginIdentifier('arrowConnections', docData, pluginKey) + + pluginData = context.command.valueForKey_onLayer_f... + + + + + + + currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() + + currentParentGroup = docData.currentPage().current... + + + + + + + docData.currentPage() + + docData.currentPage() + + + + + + + .currentArtboard() + + .currentArtboard() + + + + + + + docData.currentPage() + + docData.currentPage() + + + + + + + newConnectionsData = getConnectionsData() + + newConnectionsData = getConnectionsData() + + + + + + + const movedLayers = [object Object] + + const movedLayers = [object Object] + + + + + + + + + + + (layer) => + + (layer) => + + + + + + + + + + + + + return sketch.fromNative(layer) + + return sketch.fromNative(layer) + + + + + + log(movedLayers[0].id) + + log(movedLayers[0].id) + + + + + + + log(movedLayers.length) + + log(movedLayers.length) + + + + + + + let currentConnectionsData = newConnectionsData + + let currentConnectionsData = newConnectionsData + + + + + + + + + g < movedLayers.length + + g < movedLayers.length + + + for + + + + g++ + + g++ + + + + + + + let connectionIndex = findConnectionIndex(movedLayers[0].id, null, currentConnectionsData) + + let connectionIndex = findConnectionIndex(movedLay... + + + + + + + log("yes " + connectionIndex) + + log("yes " + connectionIndex) + + + + + + + (connectionIndex.length == 0) + + (connectionIndex.length == 0) + + + if + - + + + + updateArrow(currentConnectionsData[connectionIndex[0]].firstObject, currentConnectionsData[connectionIndex[0]].secondObject, currentConnectionsData[connectionIndex[0]].style, currentConnectionsData[connectionIndex[0]].type, currentConnectionsData[connectionIndex[0]].direction, currentConnectionsData[connectionIndex[0]].line, currentConnectionsData[connectionIndex[0]].condition, currentConnectionsData[connectionIndex[0]].isCondition, connectionIndex[0]) + + updateArrow(currentConnectionsData[connectionIndex... + + + + + + + sketch.UI.message('Current connection is updated 🤘') + + sketch.UI.message('Current connection is updated �... + + + + + + + sketch.UI.message('There is no connection between selected layers on the plugin data') + + sketch.UI.message('There is no connection between ... + + + + + + + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, 'arrowConnections', docData, pluginKey) + + context.command.setValue_forKey_onLayer_forPluginI... + + + + + + + + + + + + + + export updateArtboardArrows + + export updateArtboardArrows + + + + + + + + + + function updateArtboardArrows(context) + + function updateArtboardArrows(context) + + + + + + let selection = context.selection + + let selection = context.selection + + + + + + + let connections = getConnectionsData() + + let connections = getConnectionsData() + + + + + + + (connections.length > 0) + + (connections.length > 0) + + + if + - + + + + const updateArrowsCounter = connections.length + + const updateArrowsCounter = connections.length + + + + + + + + + i < updateArrowsCounter + + i < updateArrowsCounter + + + for + + + + i++ + + i++ + + + + + + + firstObjectArtboard = document.getLayerWithID(connections[i].firstObject) + + firstObjectArtboard = document.getLayerWithID(conn... + + + + + + + firstObjectArtboard = [object Object] + + firstObjectArtboard = [object Object] + + + + + + + firstObjectArtboard.sketchObject.parentArtboard() + + firstObjectArtboard.sketchObject.parentArtboard() + + + + + + + secondObjectArtboard = document.getLayerWithID(connections[i].secondObject) + + secondObjectArtboard = document.getLayerWithID(con... + + + + + + + secondObjectArtboard = [object Object] + + secondObjectArtboard = [object Object] + + + + + + + secondObjectArtboard.sketchObject.parentArtboard() + + secondObjectArtboard.sketchObject.parentArtboard() + + + + + + + (selection.count() == 1 && selection[0].class() == "MSArtboardGroup") + + (selection.count() == 1 && selection[0].class() ==... + + + if + + + + + (firstObjectArtboard == selection[0].objectID()) + + (firstObjectArtboard == selection[0].objectID()) + + + if + - + + + + (secondObjectArtboard == selection[0].objectID()) + + (secondObjectArtboard == selection[0].objectID()) + + + if + - + + + + updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i) + + updateArrow(connections[i].firstObject, connection... + + + + + + + newConnectionsData.push(connections[i]) + + newConnectionsData.push(connections[i]) + + + + + + + newConnectionsData.push(connections[i]) + + newConnectionsData.push(connections[i]) + + + + + + + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, 'arrowConnections', docData, pluginKey) + + context.command.setValue_forKey_onLayer_forPluginI... + + + + + + + sketch.UI.message('All arrows are updated 🚀') + + sketch.UI.message('All arrows are updated 🚀') + + + + + + + sketch.UI.message('There is nothing to update') + + sketch.UI.message('There is nothing to update') + + + + + + + + + + + + + + export updateAllArrows + + export updateAllArrows + + + + + + + + + + function updateAllArrows(context) + + function updateAllArrows(context) + + + + + + let currentConnectionsData = newConnectionsData + + let currentConnectionsData = newConnectionsData + + + + + + + (currentConnectionsData.length > 0) + + (currentConnectionsData.length > 0) + + + if + - + + + + const updateArrowsCounter = currentConnectionsData.length + + const updateArrowsCounter = currentConnectionsData... + + + + + + + + + i < updateArrowsCounter + + i < updateArrowsCounter + + + for + + + + i++ + + i++ + + + + + + + updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i) + + updateArrow(currentConnectionsData[i].firstObject,... + + + + + + + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, 'arrowConnections', docData, pluginKey) + + context.command.setValue_forKey_onLayer_forPluginI... + + + + + + + sketch.UI.message('All arrows are updated 🚀') + + sketch.UI.message('All arrows are updated 🚀') + + + + + + + sketch.UI.message('There is nothing to update') + + sketch.UI.message('There is nothing to update') + + + + + + + + + + + + + + export deleteAllArrows + + export deleteAllArrows + + + + + + + + + + function deleteAllArrows(context) + + function deleteAllArrows(context) + + + + + + (newConnectionsData.length > 0) + + (newConnectionsData.length > 0) + + + if + - + + + + + + i < newConnectionsData.length + + i < newConnectionsData.length + + + for + + + + i++ + + i++ + + + + + + + deleteLine(newConnectionsData[i].line) + + deleteLine(newConnectionsData[i].line) + + + + + + + context.command.setValue_forKey_onLayer_forPluginIdentifier(null, 'arrowConnections', docData, pluginKey) + + context.command.setValue_forKey_onLayer_forPluginI... + + + + + + + sketch.UI.message('All arrows are deleted') + + sketch.UI.message('All arrows are deleted') + + + + + + + sketch.UI.message('There is nothing to delete') + + sketch.UI.message('There is nothing to delete') + + + + + + + + + + + + + + export deleteArtboardArrows + + export deleteArtboardArrows + + + + + + + + + + function deleteArtboardArrows(context) + + function deleteArtboardArrows(context) + + + + + + let selection = context.selection + + let selection = context.selection + + + + + + + (selection.count() == 1 && selection[0].class() == "MSArtboardGroup") + + (selection.count() == 1 && selection[0].class() ==... + + + if + - + + + + let connections = getConnectionsData() + + let connections = getConnectionsData() + + + + + + + (connections.length > 0) + + (connections.length > 0) + + + if + - + + + + const updateArrowsCounter = connections.length + + const updateArrowsCounter = connections.length + + + + + + + + + i < updateArrowsCounter + + i < updateArrowsCounter + + + for + + + + i++ + + i++ + + + + + + + firstObject = document.getLayerWithID(connections[i].firstObject) + + firstObject = document.getLayerWithID(connections[... + + + + + + + secondObject = document.getLayerWithID(connections[i].secondObject) + + secondObject = document.getLayerWithID(connections... + + + + + + + (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()) + + (firstObject.sketchObject.parentArtboard().objectI... + + + if + + + + + firstObject.sketchObject.parentArtboard() + + firstObject.sketchObject.parentArtboard() + + + + + + + (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()) + + (secondObject.sketchObject.parentArtboard().object... + + + if + + + + + secondObject.sketchObject.parentArtboard() + + secondObject.sketchObject.parentArtboard() + + + + + + + deleteLine(connections[i].line) + + deleteLine(connections[i].line) + + + + + + + newConnectionsData = deleteConnectionFromData(i) + + newConnectionsData = deleteConnectionFromData(i) + + + + + + + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, 'arrowConnections', docData, pluginKey) + + context.command.setValue_forKey_onLayer_forPluginI... + + + + + + + sketch.UI.message('All arrows from selected artboard are deleted') + + sketch.UI.message('All arrows from selected artboa... + + + + + + + sketch.UI.message('There is nothing to delete') + + sketch.UI.message('There is nothing to delete') + + + + + + + sketch.UI.message('Please select one artboard') + + sketch.UI.message('Please select one artboard') + + + + + + + + + + + + + + export deleteSelectedArrows + + export deleteSelectedArrows + + + + + + + + + + function deleteSelectedArrows(context) + + function deleteSelectedArrows(context) + + + + + + let selection = context.selection + + let selection = context.selection + + + + + + + (selection.count() == 2) + + (selection.count() == 2) + + + if + - + + + + + + g < selection.count() + + g < selection.count() + + + for + + + + g++ + + g++ + + + + + + + (selection[g].objectID() != selection[0].objectID()) + + (selection[g].objectID() != selection[0].objectID(... + + + if + + + + + let connections = getConnectionsData() + + let connections = getConnectionsData() + + + + + + + let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), connections) + + let connectionIndex = findConnectionIndex(selectio... + + + + + + + (connectionIndex != null) + + (connectionIndex != null) + + + if + + + + + deleteLine(connections[connectionIndex].line) + + deleteLine(connections[connectionIndex].line) + + + + + + + newConnectionsData = deleteConnectionFromData(connectionIndex) + + newConnectionsData = deleteConnectionFromData(conn... + + + + + + + const updateArrowsCounter = connections.length + + const updateArrowsCounter = connections.length + + + + + + + + + i < updateArrowsCounter + + i < updateArrowsCounter + + + for + + + + i++ + + i++ + + + + + + + firstObject = document.getLayerWithID(connections[i].firstObject) + + firstObject = document.getLayerWithID(connections[... + + + + + + + secondObject = document.getLayerWithID(connections[i].secondObject) + + secondObject = document.getLayerWithID(connections... + + + + + + + (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()) + + (firstObject.sketchObject.parentArtboard().objectI... + + + if + + + + + firstObject.sketchObject.parentArtboard() + + firstObject.sketchObject.parentArtboard() + + + + + + + (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()) + + (secondObject.sketchObject.parentArtboard().object... + + + if + + + + + secondObject.sketchObject.parentArtboard() + + secondObject.sketchObject.parentArtboard() + + + + + + + deleteLine(connections[i].line) + + deleteLine(connections[i].line) + + + + + + + newConnectionsData = deleteConnectionFromData(i) + + newConnectionsData = deleteConnectionFromData(i) + + + + + + + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, 'arrowConnections', docData, pluginKey) + + context.command.setValue_forKey_onLayer_forPluginI... + + + + + + + sketch.UI.message('All arrows from selected layers are deleted ✌️') + + sketch.UI.message('All arrows from selected layers... + + + + + + + sketch.UI.message('Select two layers, please 🧐') + + sketch.UI.message('Select two layers, please 🧐') + + + + + + + + + + + + + + export settings + + export settings + + + + + + + + + + function settings(context) + + function settings(context) + + + + + + let alert = COSAlertWindow.new() + + let alert = COSAlertWindow.new() + + + + + + + const viewWidth = 300 + + const viewWidth = 300 + + + + + + + const viewHeight = 450 + + const viewHeight = 450 + + + + + + + alert = alertSetup(alert, viewWidth, viewHeight) + + alert = alertSetup(alert, viewWidth, viewHeight) + + + + + + + let view = [object Object] + + let view = [object Object] + + + + + + + alert.addAccessoryView(view) + + alert.addAccessoryView(view) + + + + + + + let arrowStyleLabel = alertLabel('Arrow Style', true, -1, viewHeight - 40, 280, 40) + + let arrowStyleLabel = alertLabel('Arrow Style', tr... + + + + + + + view.addSubview(arrowStyleLabel) + + view.addSubview(arrowStyleLabel) + + + + + + + let arrowStylingField = [object Object] + + let arrowStylingField = [object Object] + + + + + + + setActiveStyleSetting(arrowStylingField) + + setActiveStyleSetting(arrowStylingField) + + + + + + + view.addSubview(arrowStylingField) + + view.addSubview(arrowStylingField) + + + + + + + let arrowStyleInfoLabel = alertLabel('Add layer style to your document that will contain $arrow name and you will be able to specify it here ', false, -1, viewHeight - 80, 300, 40) + + let arrowStyleInfoLabel = alertLabel('Add layer st... + + + + + + + view.addSubview(arrowStyleInfoLabel) + + view.addSubview(arrowStyleInfoLabel) + + + + + + + let arrowTypeLabel = alertLabel('Arrow Type', true, -1, viewHeight - 130, 280, 40) + + let arrowTypeLabel = alertLabel('Arrow Type', true... + + + + + + + view.addSubview(arrowTypeLabel) + + view.addSubview(arrowTypeLabel) + + + + + + + let arrowTypeField = [object Object] + + let arrowTypeField = [object Object] + + + + + + + setActiveTypeSetting(arrowTypeField) + + setActiveTypeSetting(arrowTypeField) + + + + + + + view.addSubview(arrowTypeField) + + view.addSubview(arrowTypeField) + + + + + + + let arrowTypeInfoLabel = alertLabel('Select one of the arrow types. Angled is used by default', false, -1, viewHeight - 170, 300, 40) + + let arrowTypeInfoLabel = alertLabel('Select one of... + + + + + + + view.addSubview(arrowTypeInfoLabel) + + view.addSubview(arrowTypeInfoLabel) + + + + + + + let arrowSpacingLabel = alertLabel('Arrow Spacing', true, -1, viewHeight - 200, 330, 20) + + let arrowSpacingLabel = alertLabel('Arrow Spacing'... + + + + + + + view.addSubview(arrowSpacingLabel) + + view.addSubview(arrowSpacingLabel) + + + + + + + let arrowSpacingPxLabel = alertLabel('px', true, 90, viewHeight - 220, 330, 20) + + let arrowSpacingPxLabel = alertLabel('px', true, 9... + + + + + + + view.addSubview(arrowSpacingPxLabel) + + view.addSubview(arrowSpacingPxLabel) + + + + + + + let arrowSpacingField = [object Object] + + let arrowSpacingField = [object Object] + + + + + + + var formatter = [object Object] + + var formatter = [object Object] + + + + + + + arrowSpacingField.setStringValue(String(Settings.settingForKey("arrowSpacing"))) + + arrowSpacingField.setStringValue(String(Settings.s... + + + + + + + arrowSpacingField.setFormatter(formatter) + + arrowSpacingField.setFormatter(formatter) + + + + + + + view.addSubview(arrowSpacingField) + + view.addSubview(arrowSpacingField) + + + + + + + let arrowSpacingStepper = [object Object] + + let arrowSpacingStepper = [object Object] + + + + + + + arrowSpacingStepper.setMaxValue(1000) + + arrowSpacingStepper.setMaxValue(1000) + + + + + + + arrowSpacingStepper.setMinValue(0) + + arrowSpacingStepper.setMinValue(0) + + + + + + + arrowSpacingStepper.setValueWraps(false) + + arrowSpacingStepper.setValueWraps(false) + + + + + + + arrowSpacingStepper.setAutorepeat(true) + + arrowSpacingStepper.setAutorepeat(true) + + + + + + + arrowSpacingStepper.setCOSJSTargetFunction(*()) + + arrowSpacingStepper.setCOSJSTargetFunction(*()) + + + + + + + + + + + function(sender) + + function(sender) + + + + + + var value = 0 + sender.integerValue() + + var value = 0 + sender.integerValue() + + + + + + + arrowSpacingField.setStringValue(String(value)) + + arrowSpacingField.setStringValue(String(value)) + + + + + + + view.addSubview(arrowSpacingStepper) + + view.addSubview(arrowSpacingStepper) + + + + + + + let arrowSpacingInfoLabel = alertLabel('The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature ', false, -1, viewHeight - 285, 300, 60) + + let arrowSpacingInfoLabel = alertLabel('The second... + + + + + + + view.addSubview(arrowSpacingInfoLabel) + + view.addSubview(arrowSpacingInfoLabel) + + + + + + + let otherSettingsLabel = alertLabel('Other Settings', true, -1, viewHeight - 330, 280, 40) + + let otherSettingsLabel = alertLabel('Other Setting... + + + + + + + view.addSubview(otherSettingsLabel) + + view.addSubview(otherSettingsLabel) + + + + + + + let checkbox = alertCheckbox('Second layer auto-align', false, -1, viewHeight - 340, 260, 40) + + let checkbox = alertCheckbox('Second layer auto-al... + + + + + + + view.addSubview(checkbox) + + view.addSubview(checkbox) + + + + + + + let autoAlignInfoLabel = alertLabel('Align the second layer for 5px misalignment with the first one', false, -1, viewHeight - 370, 280, 40) + + let autoAlignInfoLabel = alertLabel('Align the sec... + + + + + + + view.addSubview(autoAlignInfoLabel) + + view.addSubview(autoAlignInfoLabel) + + + + + + + let pluginInfoLabel = alertLabel('Made by @faridSabitov with the support of EPAM.com ❤️', true, -1, viewHeight - 420, 280, 40) + + let pluginInfoLabel = alertLabel('Made by @faridSa... + + + + + + + view.addSubview(pluginInfoLabel) + + view.addSubview(pluginInfoLabel) + + + + + + + let modalResponse = alert.runModal() + + let modalResponse = alert.runModal() + + + + + + + (modalResponse == NSAlertFirstButtonReturn) + + (modalResponse == NSAlertFirstButtonReturn) + + + if + + + + + alert.views() + + alert.views() + + + + + + + alert.views()[0].subviews() + + alert.views()[0].subviews() + + + + + + + context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), 'arrowStyle', docData, pluginKey) + + context.command.setValue_forKey_onLayer_forPluginI... + + + + + + + alert.views() + + alert.views() + + + + + + + alert.views()[0].subviews() + + alert.views()[0].subviews() + + + + + + + Settings.setSettingForKey('arrowType', alert.views()[0].subviews()[4].title()) + + Settings.setSettingForKey('arrowType', alert.views... + + + + + + + alert.views() + + alert.views() + + + + + + + alert.views()[0].subviews() + + alert.views()[0].subviews() + + + + + + + Settings.setSettingForKey('arrowSpacing', alert.views()[0].subviews()[8].intValue()) + + Settings.setSettingForKey('arrowSpacing', alert.vi... + + + + + + + alert.views() + + alert.views() + + + + + + + alert.views()[0].subviews() + + alert.views()[0].subviews() + + + + + + + Settings.setSettingForKey('autoAlign', alert.views()[0].subviews()[12].state()) + + Settings.setSettingForKey('autoAlign', alert.views... + + + + + + + UI.message('Settings are updated 🚀') + + UI.message('Settings are updated 🚀') + + + + + + + + + + + + + + export onLayersMoved + + export onLayersMoved + + + + + + + + + + function onLayersMoved(context) + + function onLayersMoved(context) + + + + + + sketch.UI.message('Please select more than two layers') + + sketch.UI.message('Please select more than two lay... + + + + + + + const action = context.actionContext + + const action = context.actionContext + + + + + + + + + + + + + + export panel + + export panel + + + + + + + + + + function panel(context) + + function panel(context) + + + + + + ControlBar = [object Object] + + ControlBar = [object Object] + + + + + + + NSPanel.alloc() + + NSPanel.alloc() + + + + + + + ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask) + + ControlBar.setStyleMask(NSTitledWindowMask + NSFul... + + + + + + + ControlBar.setTitleVisibility(NSWindowTitleHidden) + + ControlBar.setTitleVisibility(NSWindowTitleHidden) + + + + + + + ControlBar.setTitlebarAppearsTransparent(true) + + ControlBar.setTitlebarAppearsTransparent(true) + + + + + + + ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false) + + ControlBar.setFrame_display(NSMakeRect(0, 0, 720, ... + + + + + + + ControlBar.setMovableByWindowBackground(true) + + ControlBar.setMovableByWindowBackground(true) + + + + + + + ControlBar.setHasShadow(true) + + ControlBar.setHasShadow(true) + + + + + + + ControlBar.setLevel(NSFloatingWindowLevel) + + ControlBar.setLevel(NSFloatingWindowLevel) + + + + + + + ControlBar.center() + + ControlBar.center() + + + + + + + ControlBar.makeKeyAndOrderFront(nil) + + ControlBar.makeKeyAndOrderFront(nil) + + + + + + + + + + + function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) + + function updateArrow(firstObjectID, secondObjectID... + + + + + + let firstObject = document.getLayerWithID(firstObjectID) + + let firstObject = document.getLayerWithID(firstObj... + + + + + + + let secondObject = document.getLayerWithID(secondObjectID) + + let secondObject = document.getLayerWithID(secondO... + + + + + + + let conditionObject = document.getLayerWithID(conditionID) + + let conditionObject = document.getLayerWithID(cond... + + + + + + + deleteLine(lineID) + + deleteLine(lineID) + + + + + + + (conditionID && !isCondition) + + (conditionID && !isCondition) + + + if + + + + + (conditionObject) + + (conditionObject) + + + if + + + + + conditionObject.remove() + + conditionObject.remove() + + + + + + + newConnectionsData = deleteConnectionFromData(connectionIndex) + + newConnectionsData = deleteConnectionFromData(conn... + + + + + + + (firstObject && secondObject) + + (firstObject && secondObject) + + + if + + + + + createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) + + createArrow(firstObjectID, secondObjectID, style, ... + + + + + + + + + + + function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) + + function createArrow(firstObjectID, secondObjectID... + + + + + + let localDirection = + + let localDirection = + + + + + + + (direction == "Auto") + + (direction == "Auto") + + + ? + - + + + + direction + + direction + + + + + + + updateSpacing(firstObjectID, secondObjectID, localDirection) + + updateSpacing(firstObjectID, secondObjectID, local... + + + + + + + autoAlignLayer(firstObjectID, secondObjectID, localDirection) + + autoAlignLayer(firstObjectID, secondObjectID, loca... + + + + + + + let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition) + + let arrow = drawConnection(firstObjectID, secondOb... + + + + + + + let connection = {*} + + let connection = {*} + + + + + + + firstObject: firstObjectID + + firstObject: firstObjectID + + + + + + + secondObject: secondObjectID + + secondObject: secondObjectID + + + + + + + style: arrow.style + + style: arrow.style + + + + + + + condition: arrow.conditionID + + condition: arrow.conditionID + + + + + + + isCondition: isCondition + + isCondition: isCondition + + + + + + + type: arrow.type + + type: arrow.type + + + + + + + direction: localDirection + + direction: localDirection + + + + + + + line: arrow.line.objectID() // Need to save this data to the global array + + line: arrow.line.objectID() // Need to save this d... + + + + + + + newConnectionsData.push(connection) + + newConnectionsData.push(connection) + + + + + + + + + + + function checkForGroup(groupName) + + function checkForGroup(groupName) + + + + + + let currentGroup = null + + let currentGroup = null + + + + + + + + + i < currentParentGroup.layers().count() + + i < currentParentGroup.layers().count() + + + for + + + + currentParentGroup.layers() + + currentParentGroup.layers() + + + + + + + i++ + + i++ + + + + + + + (currentParentGroup.layers()[i].name() == groupName) + + (currentParentGroup.layers()[i].name() == groupNam... + + + if + + + + + currentParentGroup.layers() + + currentParentGroup.layers() + + + + + + + currentGroup = currentParentGroup.layers()[i] + + currentGroup = currentParentGroup.layers()[i] + + + + + + + currentParentGroup.layers() + + currentParentGroup.layers() + + + + + + + + + + + + + + return currentGroup + + return currentGroup + + + + + + + + + + function getDirection(firstObjectID, secondObjectID) + + function getDirection(firstObjectID, secondObjectI... + + + + + + const firstObject = document.getLayerWithID(firstObjectID) + + const firstObject = document.getLayerWithID(firstO... + + + + + + + const secondObject = document.getLayerWithID(secondObjectID) + + const secondObject = document.getLayerWithID(secon... + + + + + + + const firstObjectMidX = firstObject.frame.x + firstObject.frame.width / 2 + + const firstObjectMidX = firstObject.frame.x + firs... + + + + + + + const firstObjectMidY = firstObject.frame.y + firstObject.frame.height / 2 + + const firstObjectMidY = firstObject.frame.y + firs... + + + + + + + const secondObjectMidX = secondObject.frame.x + secondObject.frame.width / 2 + + const secondObjectMidX = secondObject.frame.x + se... + + + + + + + const secondObjectMidY = secondObject.frame.y + secondObject.frame.height / 2 + + const secondObjectMidY = secondObject.frame.y + se... + + + + + + + const diffX = firstObjectMidX - secondObjectMidX + + const diffX = firstObjectMidX - secondObjectMidX + + + + + + + const diffY = firstObjectMidY - secondObjectMidY + + const diffY = firstObjectMidY - secondObjectMidY + + + + + + + const absDiffX = Math.abs(diffX) + + const absDiffX = Math.abs(diffX) + + + + + + + const absDiffY = Math.abs(diffY) + + const absDiffY = Math.abs(diffY) + + + + + + + (secondObjectMidX > firstObjectMidX) + + (secondObjectMidX > firstObjectMidX) + + + if + - + + + + (secondObjectMidY > firstObjectMidY) + + (secondObjectMidY > firstObjectMidY) + + + if + - + + + + direction = + + direction = + + + + + + + (diffX > diffY) + + (diffX > diffY) + + + ? + - + + + + "Down" + + "Down" + + + + + + + "Right" + + "Right" + + + + + + + direction = + + direction = + + + + + + + (absDiffX > absDiffY) + + (absDiffX > absDiffY) + + + ? + - + + + + "Right" + + "Right" + + + + + + + "Up" + + "Up" + + + + + + + (secondObjectMidY > firstObjectMidY) + + (secondObjectMidY > firstObjectMidY) + + + if + - + + + + direction = + + direction = + + + + + + + (absDiffX > absDiffY) + + (absDiffX > absDiffY) + + + ? + - + + + + "Left" + + "Left" + + + + + + + "Down" + + "Down" + + + + + + + direction = + + direction = + + + + + + + (diffX > diffY) + + (diffX > diffY) + + + ? + - + + + + "Left" + + "Left" + + + + + + + "Up" + + "Up" + + + + + + + + + + + + + + return direction + + return direction + + + + + + + + + + function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition) + + function drawConnection(firstObjectID, secondObjec... + + + + + + let firstObject = document.getLayerWithID(firstObjectID) + + let firstObject = document.getLayerWithID(firstObj... + + + + + + + let secondObject = document.getLayerWithID(secondObjectID) + + let secondObject = document.getLayerWithID(secondO... + + + + + + + let connectionPos = getConnectionPos(firstObject, secondObject, localDirection) + + let connectionPos = getConnectionPos(firstObject, ... + + + + + + + let connection = {*} + + let connection = {*} + + + + + + + line: [] + + line: [] + + + + + + + conditionID: [] + + conditionID: [] + + + + + + + type: [] + + type: [] + + + + + + + style: [] // Type + + style: [] // Type + + + + + + + connection.type = + + connection.type = + + + + + + + (type == null) + + (type == null) + + + ? + - + + + + Settings.settingForKey('arrowType') + + Settings.settingForKey('arrowType') + + + + + + + type + + type + + + + + + + (connection.type == "Angled" || connection.type == null) + + (connection.type == "Angled" || connection.type ==... + + + if + + + + + connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection) + + connection.line = drawAngledLine(connectionPos.fir... + + + + + + + (connection.type == "Straight") + + (connection.type == "Straight") + + + if + + + + + connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection) + + connection.line = drawStraightLine(connectionPos.f... + + + + + + + (connection.type == "Curved") + + (connection.type == "Curved") + + + if + + + + + connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection) + + connection.line = drawCurvedLine(connectionPos.fir... + + + + + + + (condition == true) + + (condition == true) + + + if + - + + + + (conditionID != null) + + (conditionID != null) + + + if + - + + + + connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY) + + connection.conditionID = updateCondition(condition... + + + + + + + connection.conditionID = addCondition('#con', connectionPos.middlePosX, connectionPos.middlePosY) + + connection.conditionID = addCondition('#con', conn... + + + + + + + connection.conditionID = null + + connection.conditionID = null + + + + + + + connection.style = styleLine(connection.line, style) + + connection.style = styleLine(connection.line, styl... + + + + + + + addToArrowsGroup(connection.line) + + addToArrowsGroup(connection.line) + + + + + + + + + + + + + + return connection + + return connection + + + + + + + + + + function addToArrowsGroup(line) + + function addToArrowsGroup(line) + + + + + + let currentGroup = checkForGroup('Arrows') + + let currentGroup = checkForGroup('Arrows') + + + + + + + (currentGroup) + + (currentGroup) + + + if + - + + + + currentGroup.addLayers([line]) + + currentGroup.addLayers([line]) + + + + + + + currentGroup.fixGeometryWithOptions(1) + + currentGroup.fixGeometryWithOptions(1) + + + + + + + let Group = require('sketch/dom').Group + + let Group = require('sketch/dom').Group + + + + + + + let group = Group({*}) + + let group = Group({*}) + + + + + + + {*} + + {*} + + + + + + + parent: currentParentGroup + + parent: currentParentGroup + + + + + + + name: 'Arrows' + + name: 'Arrows' + + + + + + + locked: true + + locked: true + + + + + + + layers: [line] + + layers: [line] + + + + + + + group.moveToBack() + + group.moveToBack() + + + + + + + group.adjustToFit() + + group.adjustToFit() + + + + + + + + + + + function addToConditionGroup(condition, x, y) + + function addToConditionGroup(condition, x, y) + + + + + + let conGroup = checkForGroup('Conditions') + + let conGroup = checkForGroup('Conditions') + + + + + + + let arGroup = checkForGroup('Arrows') + + let arGroup = checkForGroup('Arrows') + + + + + + + let arGroupX = + + let arGroupX = + + + + + + + (arGroup != null) + + (arGroup != null) + + + ? + - + + + + 0 + + 0 + + + + + + + let arGroupY = + + let arGroupY = + + + + + + + (arGroup != null) + + (arGroup != null) + + + ? + - + + + + 0 + + 0 + + + + + + + (conGroup) + + (conGroup) + + + if + - + + + + condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX) + + condition.frame.x = x - condition.frame.width / 2 ... + + + + + + + conGroup.frame() + + conGroup.frame() + + + + + + + condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY) + + condition.frame.y = y - condition.frame.height / 2... + + + + + + + conGroup.frame() + + conGroup.frame() + + + + + + + condition.parent = conGroup + + condition.parent = conGroup + + + + + + + conGroup.fixGeometryWithOptions(1) + + conGroup.fixGeometryWithOptions(1) + + + + + + + condition.frame.x = x - condition.frame.width / 2 + + condition.frame.x = x - condition.frame.width / 2 + + + + + + + condition.frame.y = y - condition.frame.height / 2 + + condition.frame.y = y - condition.frame.height / 2 + + + + + + + let Group = require('sketch/dom').Group + + let Group = require('sketch/dom').Group + + + + + + + let group = Group({*}) + + let group = Group({*}) + + + + + + + {*} + + {*} + + + + + + + parent: currentParentGroup + + parent: currentParentGroup + + + + + + + name: 'Conditions' + + name: 'Conditions' + + + + + + + layers: [condition] + + layers: [condition] + + + + + + + group.moveToBack() + + group.moveToBack() + + + + + + + group.adjustToFit() + + group.adjustToFit() + + + + + + + + + + + + + + return condition.id + + return condition.id + + + + + + + + + + function getConnectionsData() + + function getConnectionsData() + + + + + + let dataArray = [] + + let dataArray = [] + + + + + + + (pluginData) + + (pluginData) + + + if + + + + + + + i < pluginData.length + + i < pluginData.length + + + for + + + + i++ + + i++ + + + + + + + dataArray.push(pluginData[i]) + + dataArray.push(pluginData[i]) + + + + + + + + + + + + + + return dataArray + + return dataArray + + + + + + + + + + function findConnectionIndex(firstObjectID, secondObjectID, data) + + function findConnectionIndex(firstObjectID, second... + + + + + + let indexArray = [] + + let indexArray = [] + + + + + + + firstObjectID = String(firstObjectID) + + firstObjectID = String(firstObjectID) + + + + + + + secondObjectID = String(secondObjectID) + + secondObjectID = String(secondObjectID) + + + + + + + (pluginData) + + (pluginData) + + + if + + + + + + + y < data.length + + y < data.length + + + for + + + + y++ + + y++ + + + + + + + (firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject) + + (firstObjectID == data[y].firstObject || firstObje... + + + if + + + + + (secondObjectID == null) + + (secondObjectID == null) + + + if + - + + + + (secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject) + + (secondObjectID == data[y].firstObject || secondOb... + + + if + + + + + indexArray[0] = y + + indexArray[0] = y + + + + + + + indexArray.push(y) + + indexArray.push(y) + + + + + + + + + + + + + + return indexArray + + return indexArray + + + + + + + + + + function setActiveStyleSetting(arrowStylingField) + + function setActiveStyleSetting(arrowStylingField) + + + + + + let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier('arrowStyle', docData, pluginKey) + + let docSettings = context.command.valueForKey_onLa... + + + + + + + let styles = getLayerStyles(null) + + let styles = getLayerStyles(null) + + + + + + + (docSettings) + + (docSettings) + + + if + - + + + + (docSettings != "Default Style") + + (docSettings != "Default Style") + + + if + - + + + + arrowStylingField.addItemWithTitle(docSettings) + + arrowStylingField.addItemWithTitle(docSettings) + + + + + + + arrowStylingField.addItemWithTitle('Default Style') + + arrowStylingField.addItemWithTitle('Default Style'... + + + + + + + + + i < styles.length + + i < styles.length + + + for + + + + i++ + + i++ + + + + + + + (styles[i].name() != docSettings) + + (styles[i].name() != docSettings) + + + if + + + + + arrowStylingField.addItemWithTitle(styles[i].name()) + + arrowStylingField.addItemWithTitle(styles[i].name(... + + + + + + + arrowStylingField.addItemWithTitle('Default Style') + + arrowStylingField.addItemWithTitle('Default Style'... + + + + + + + + + i < styles.length + + i < styles.length + + + for + + + + i++ + + i++ + + + + + + + arrowStylingField.addItemWithTitle(styles[i].name()) + + arrowStylingField.addItemWithTitle(styles[i].name(... + + + + + + + arrowStylingField.addItemWithTitle('Default Style') + + arrowStylingField.addItemWithTitle('Default Style'... + + + + + + + + + i < styles.length + + i < styles.length + + + for + + + + i++ + + i++ + + + + + + + arrowStylingField.addItemWithTitle(styles[i].name()) + + arrowStylingField.addItemWithTitle(styles[i].name(... + + + + + + + + + + + function setActiveTypeSetting(arrowTypeField) + + function setActiveTypeSetting(arrowTypeField) + + + + + + let docTypeSettings = Settings.settingForKey('arrowType') + + let docTypeSettings = Settings.settingForKey('arro... + + + + + + + (docTypeSettings) + + (docTypeSettings) + + + if + - + + + + (docTypeSettings == "Angled") + + (docTypeSettings == "Angled") + + + if + + + + + arrowTypeField.addItemWithTitle('Angled') + + arrowTypeField.addItemWithTitle('Angled') + + + + + + + arrowTypeField.lastItem() + + arrowTypeField.lastItem() + + + + + + + .setState(1) + + .setState(1) + + + + + + + arrowTypeField.addItemWithTitle('Curved') + + arrowTypeField.addItemWithTitle('Curved') + + + + + + + arrowTypeField.lastItem() + + arrowTypeField.lastItem() + + + + + + + .setState(0) + + .setState(0) + + + + + + + arrowTypeField.addItemWithTitle('Straight') + + arrowTypeField.addItemWithTitle('Straight') + + + + + + + arrowTypeField.lastItem() + + arrowTypeField.lastItem() + + + + + + + .setState(0) + + .setState(0) + + + + + + + (docTypeSettings == "Curved") + + (docTypeSettings == "Curved") + + + if + + + + + arrowTypeField.addItemWithTitle('Curved') + + arrowTypeField.addItemWithTitle('Curved') + + + + + + + arrowTypeField.lastItem() + + arrowTypeField.lastItem() + + + + + + + .setState(1) + + .setState(1) + + + + + + + arrowTypeField.addItemWithTitle('Straight') + + arrowTypeField.addItemWithTitle('Straight') + + + + + + + arrowTypeField.lastItem() + + arrowTypeField.lastItem() + + + + + + + .setState(0) + + .setState(0) + + + + + + + arrowTypeField.addItemWithTitle('Angled') + + arrowTypeField.addItemWithTitle('Angled') + + + + + + + arrowTypeField.lastItem() + + arrowTypeField.lastItem() + + + + + + + .setState(0) + + .setState(0) + + + + + + + (docTypeSettings == "Straight") + + (docTypeSettings == "Straight") + + + if + + + + + arrowTypeField.addItemWithTitle('Straight') + + arrowTypeField.addItemWithTitle('Straight') + + + + + + + arrowTypeField.lastItem() + + arrowTypeField.lastItem() + + + + + + + .setState(1) + + .setState(1) + + + + + + + arrowTypeField.addItemWithTitle('Angled') + + arrowTypeField.addItemWithTitle('Angled') + + + + + + + arrowTypeField.lastItem() + + arrowTypeField.lastItem() + + + + + + + .setState(0) + + .setState(0) + + + + + + + arrowTypeField.addItemWithTitle('Curved') + + arrowTypeField.addItemWithTitle('Curved') + + + + + + + arrowTypeField.lastItem() + + arrowTypeField.lastItem() + + + + + + + .setState(0) + + .setState(0) + + + + + + + arrowTypeField.addItemWithTitle('Angled') + + arrowTypeField.addItemWithTitle('Angled') + + + + + + + arrowTypeField.addItemWithTitle('Curved') + + arrowTypeField.addItemWithTitle('Curved') + + + + + + + arrowTypeField.addItemWithTitle('Straight') + + arrowTypeField.addItemWithTitle('Straight') + + + + + + + + + + + function deleteConnectionFromData(connectionIndex) + + function deleteConnectionFromData(connectionIndex) + + + + + + let newConnections = [] + + let newConnections = [] + + + + + + + (pluginData) + + (pluginData) + + + if + + + + + let connections = pluginData + + let connections = pluginData + + + + + + + + + i < connections.length + + i < connections.length + + + for + + + + i++ + + i++ + + + + + + + (i != connectionIndex) + + (i != connectionIndex) + + + if + + + + + newConnections.push(connections[i]) + + newConnections.push(connections[i]) + + + + + + + + + + + + + + return newConnections + + return newConnections + + + + + + + + + + function deleteLine(lineID) + + function deleteLine(lineID) + + + + + + let lineObject = document.getLayerWithID(lineID) + + let lineObject = document.getLayerWithID(lineID) + + + + + + + (lineObject) + + (lineObject) + + + if + + + + + selectedGroup = lineObject.parent + + selectedGroup = lineObject.parent + + + + + + + lineObject.remove() + + lineObject.remove() + + + + + + + (selectedGroup.layers.length == 0) + + (selectedGroup.layers.length == 0) + + + if + + + + + selectedGroup.remove() + + selectedGroup.remove() + + + + + + + + + + + function updateSpacing(sourceObjectID, childObjectID, direction) + + function updateSpacing(sourceObjectID, childObject... + + + + + + let sourceObject = document.getLayerWithID(sourceObjectID) + + let sourceObject = document.getLayerWithID(sourceO... + + + + + + + let childObject = document.getLayerWithID(childObjectID) + + let childObject = document.getLayerWithID(childObj... + + + + + + + (Settings.settingForKey("arrowSpacing") && Settings.settingForKey("arrowSpacing") != 0) + + (Settings.settingForKey("arrowSpacing") && Setting... + + + if + + + + + Settings.settingForKey('arrowSpacing') + + Settings.settingForKey('arrowSpacing') + + + + + + + let currentSpacing = Settings.settingForKey('arrowSpacing') + + let currentSpacing = Settings.settingForKey('arrow... + + + + + + + (direction == "Right") + + (direction == "Right") + + + if + + + + + childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing + + childObject.frame.x = sourceObject.frame.x + sourc... + + + + + + + (direction == "Down") + + (direction == "Down") + + + if + + + + + childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing + + childObject.frame.y = sourceObject.frame.y + sourc... + + + + + + + (direction == "Left") + + (direction == "Left") + + + if + + + + + childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing + + childObject.frame.x = sourceObject.frame.x - child... + + + + + + + (direction == "Up") + + (direction == "Up") + + + if + + + + + childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing + + childObject.frame.y = sourceObject.frame.y - child... + + + + + + + + + + + function autoAlignLayer(sourceObjectID, childObjectID, direction) + + function autoAlignLayer(sourceObjectID, childObjec... + + + + + + let sourceObject = document.getLayerWithID(sourceObjectID) + + let sourceObject = document.getLayerWithID(sourceO... + + + + + + + let childObject = document.getLayerWithID(childObjectID) + + let childObject = document.getLayerWithID(childObj... + + + + + + + (Settings.settingForKey("autoAlign")) + + (Settings.settingForKey("autoAlign")) + + + if + + + + + (Settings.settingForKey("autoAlign") == true) + + (Settings.settingForKey("autoAlign") == true) + + + if + + + + + (direction == "Right" || direction == "Left") + + (direction == "Right" || direction == "Left") + + + if + + + + + sourceMidY = sourceObject.frame.y + sourceObject.frame.height / 2 + + sourceMidY = sourceObject.frame.y + sourceObject.f... + + + + + + + childMidY = childObject.frame.y + childObject.frame.height / 2 + + childMidY = childObject.frame.y + childObject.fram... + + + + + + + diff = sourceMidY - childMidY + + diff = sourceMidY - childMidY + + + + + + + (diff > -6 && diff < 6) + + (diff > -6 && diff < 6) + + + if + + + + + childObject.frame.y = childObject.frame.y + diff + + childObject.frame.y = childObject.frame.y + diff + + + + + + + (direction == "Down" || direction == "Up") + + (direction == "Down" || direction == "Up") + + + if + + + + + sourceMidX = sourceObject.frame.x + sourceObject.frame.width / 2 + + sourceMidX = sourceObject.frame.x + sourceObject.f... + + + + + + + childMidX = childObject.frame.x + childObject.frame.width / 2 + + childMidX = childObject.frame.x + childObject.fram... + + + + + + + diff = sourceMidX - childMidX + + diff = sourceMidX - childMidX + + + + + + + (diff > -6 && diff < 6) + + (diff > -6 && diff < 6) + + + if + + + + + childObject.frame.x = childObject.frame.x + diff + + childObject.frame.x = childObject.frame.x + diff + + + + + + + + + + + function defineSourceObject(firstObjectID, secondObjectID, direction) + + function defineSourceObject(firstObjectID, secondO... + + + + + + let firstObject = document.getLayerWithID(firstObjectID) + + let firstObject = document.getLayerWithID(firstObj... + + + + + + + let secondObject = document.getLayerWithID(secondObjectID) + + let secondObject = document.getLayerWithID(secondO... + + + + + + + (direction == "Right") + + (direction == "Right") + + + if + + + + + (firstObject.frame.x <= secondObject.frame.x) + + (firstObject.frame.x <= secondObject.frame.x) + + + if + - + + + + sourceObjectID = firstObject.id + + sourceObjectID = firstObject.id + + + + + + + sourceObjectID = secondObject.id + + sourceObjectID = secondObject.id + + + + + + + (direction == "Down") + + (direction == "Down") + + + if + + + + + (firstObject.frame.y <= secondObject.frame.y) + + (firstObject.frame.y <= secondObject.frame.y) + + + if + - + + + + sourceObjectID = firstObject.id + + sourceObjectID = firstObject.id + + + + + + + sourceObjectID = secondObject.id + + sourceObjectID = secondObject.id + + + + + + + (direction == "Left") + + (direction == "Left") + + + if + + + + + (firstObject.frame.x <= secondObject.frame.x) + + (firstObject.frame.x <= secondObject.frame.x) + + + if + - + + + + sourceObjectID = secondObject.id + + sourceObjectID = secondObject.id + + + + + + + sourceObjectID = firstObject.id + + sourceObjectID = firstObject.id + + + + + + + (direction == "Up") + + (direction == "Up") + + + if + + + + + (firstObject.frame.y <= secondObject.frame.y) + + (firstObject.frame.y <= secondObject.frame.y) + + + if + - + + + + sourceObjectID = secondObject.id + + sourceObjectID = secondObject.id + + + + + + + sourceObjectID = firstObject.id + + sourceObjectID = firstObject.id + + + + + + + + + + + + + + return sourceObjectID + + return sourceObjectID + + + + + + + + + + function getSourceObjectFromSelection(selection, direction) + + function getSourceObjectFromSelection(selection, d... + + + + + + let sourceObjectID = [object Object] + + let sourceObjectID = [object Object] + + + + + + + (direction != "Auto") + + (direction != "Auto") + + + if + + + + + + + g < selection.count() + + g < selection.count() + + + for + + + + g++ + + g++ + + + + + + + sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction) + + sourceObjectID = defineSourceObject(sourceObjectID... + + + + + + + + + + + + + + return sourceObjectID + + return sourceObjectID + + + + + + + + + + function alertSetup(alert, viewWidth, viewHeight) + + function alertSetup(alert, viewWidth, viewHeight) + + + + + + alert.setMessageText('Arrow Plugin Settings') + + alert.setMessageText('Arrow Plugin Settings') + + + + + + + alert.addButtonWithTitle('Update Settings') + + alert.addButtonWithTitle('Update Settings') + + + + + + + alert.addButtonWithTitle('Cancel') + + alert.addButtonWithTitle('Cancel') + + + + + + + + + + + + + + return alert + + return alert + + + + + + + + + + function alertLabel(message, state, x, y, width, height) + + function alertLabel(message, state, x, y, width, h... + + + + + + let infoLabel = [object Object] + + let infoLabel = [object Object] + + + + + + + infoLabel.setStringValue(message) + + infoLabel.setStringValue(message) + + + + + + + infoLabel.setSelectable(false) + + infoLabel.setSelectable(false) + + + + + + + infoLabel.setDrawsBackground(false) + + infoLabel.setDrawsBackground(false) + + + + + + + infoLabel.setBezeled(false) + + infoLabel.setBezeled(false) + + + + + + + (state == false) + + (state == false) + + + if + + + + + infoLabel.textColor = NSColor.disabledControlTextColor() + + infoLabel.textColor = NSColor.disabledControlTextC... + + + + + + + + + + + + + + return infoLabel + + return infoLabel + + + + + + + + + + function alertCheckbox(message, state, x, y, width, height) + + function alertCheckbox(message, state, x, y, width... + + + + + + let checkbox = [object Object] + + let checkbox = [object Object] + + + + + + + checkbox.setButtonType(NSSwitchButton) + + checkbox.setButtonType(NSSwitchButton) + + + + + + + checkbox.setBezelStyle(0) + + checkbox.setBezelStyle(0) + + + + + + + checkbox.setTitle(message) + + checkbox.setTitle(message) + + + + + + + (Settings.settingForKey("autoAlign")) + + (Settings.settingForKey("autoAlign")) + + + if + - + + + + let currentState = Settings.settingForKey('autoAlign') + + let currentState = Settings.settingForKey('autoAli... + + + + + + + checkbox.setState(currentState) + + checkbox.setState(currentState) + + + + + + + checkbox.setState(state) + + checkbox.setState(state) + + + + + + + + + + + + + + return checkbox + + return checkbox + + + + + + + + + + function getLayerStyles(name) + + function getLayerStyles(name) + + + + + + let allStyles = docData.allLayerStyles() + + let allStyles = docData.allLayerStyles() + + + + + + + let keyword = "$arrow" + + let keyword = "$arrow" + + + + + + + let styles = [] + + let styles = [] + + + + + + + + + i < allStyles.count() + + i < allStyles.count() + + + for + + + + i++ + + i++ + + + + + + + (name == null) + + (name == null) + + + if + - + + + + (allStyles[i].name().includes(keyword)) + + (allStyles[i].name().includes(keyword)) + + + if + + + + + allStyles[i].name() + + allStyles[i].name() + + + + + + + styles.push(allStyles[i]) + + styles.push(allStyles[i]) + + + + + + + (allStyles[i].name() == name) + + (allStyles[i].name() == name) + + + if + + + + + styles.push(allStyles[i]) + + styles.push(allStyles[i]) + + + + + + + + + + + + + + return styles + + return styles + + + + + + + + + + function start(context, direction, isCondition) + + function start(context, direction, isCondition) + + + + + + let selection = context.selection + + let selection = context.selection + + + + + + + (selection.count() > 1 && selection[0].class() != "MSArtboardGroup") + + (selection.count() > 1 && selection[0].class() != ... + + + if + - + + + + let sourceObjectID = getSourceObjectFromSelection(selection, direction) + + let sourceObjectID = getSourceObjectFromSelection(... + + + + + + + let currentConnectionsData = newConnectionsData + + let currentConnectionsData = newConnectionsData + + + + + + + + + g < selection.count() + + g < selection.count() + + + for + + + + g++ + + g++ + + + + + + + (selection[g].objectID() != sourceObjectID) + + (selection[g].objectID() != sourceObjectID) + + + if + + + + + let connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), currentConnectionsData) + + let connectionIndex = findConnectionIndex(sourceOb... + + + + + + + (connectionIndex.length == 0) + + (connectionIndex.length == 0) + + + if + - + + + + createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition) + + createArrow(sourceObjectID, selection[g].objectID(... + + + + + + + sketch.UI.message('New connection is created 🚀') + + sketch.UI.message('New connection is created 🚀') + + + + + + + updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex) + + updateArrow(sourceObjectID, selection[g].objectID(... + + + + + + + sketch.UI.message('Current connection is updated 🤘') + + sketch.UI.message('Current connection is updated �... + + + + + + + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, 'arrowConnections', docData, pluginKey) + + context.command.setValue_forKey_onLayer_forPluginI... + + + + + + + sketch.UI.message('Please select more than two layers. Artboards are coming soon 🥳') + + sketch.UI.message('Please select more than two lay... + + + + + + + + + + + function addCondition(keyword, x, y) + + function addCondition(keyword, x, y) + + + + + + let libraries = sketch.getLibraries() + + let libraries = sketch.getLibraries() + + + + + + + + + g < libraries.length + + g < libraries.length + + + for + + + + g++ + + g++ + + + + + + + symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document) + + symbolReferences = libraries[g].getImportableSymbo... + + + + + + + + + i < symbolReferences.length + + i < symbolReferences.length + + + for + + + + i++ + + i++ + + + + + + + (symbolReferences[i].name.includes(keyword)) + + (symbolReferences[i].name.includes(keyword)) + + + if + + + + + libraryObject = symbolReferences[i] + + libraryObject = symbolReferences[i] + + + + + + + (libraryObject == null) + + (libraryObject == null) + + + if + - + + + + symbol = null + + symbol = null + + + + + + + UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as "#condition" so it will be added here') + + UI.alert('Condition symbol is not found', 'If you ... + + + + + + + let symbolMaster = libraryObject.import() + + let symbolMaster = libraryObject.import() + + + + + + + symbol = symbolMaster.createNewInstance() + + symbol = symbolMaster.createNewInstance() + + + + + + + symbol = addToConditionGroup(symbol, x, y) + + symbol = addToConditionGroup(symbol, x, y) + + + + + + + + + + + + + + return symbol + + return symbol + + + + + + + + + + function updateCondition(conditionID, x, y) + + function updateCondition(conditionID, x, y) + + + + + + let condition = document.getLayerWithID(conditionID) + + let condition = document.getLayerWithID(conditionI... + + + + + + + let conGroup = checkForGroup('Conditions') + + let conGroup = checkForGroup('Conditions') + + + + + + + let arGroup = checkForGroup('Arrows') + + let arGroup = checkForGroup('Arrows') + + + + + + + let arGroupX = + + let arGroupX = + + + + + + + (arGroup != null) + + (arGroup != null) + + + ? + - + + + + 0 + + 0 + + + + + + + let arGroupY = + + let arGroupY = + + + + + + + (arGroup != null) + + (arGroup != null) + + + ? + - + + + + 0 + + 0 + + + + + + + (conGroup) + + (conGroup) + + + if + - + + + + condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX) + + condition.frame.x = x - condition.frame.width / 2 ... + + + + + + + conGroup.frame() + + conGroup.frame() + + + + + + + condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY) + + condition.frame.y = y - condition.frame.height / 2... + + + + + + + conGroup.frame() + + conGroup.frame() + + + + + + + conGroup.fixGeometryWithOptions(1) + + conGroup.fixGeometryWithOptions(1) + + + + + + + condition.frame.x = x - condition.frame.width / 2 + + condition.frame.x = x - condition.frame.width / 2 + + + + + + + condition.frame.y = y - condition.frame.height / 2 + + condition.frame.y = y - condition.frame.height / 2 + + + + + + + + + + + + + + return condition.id + + return condition.id + + + + + + + + + + function getConnectionPos(firstObject, secondObject, direction) + + function getConnectionPos(firstObject, secondObjec... + + + + + + let firstObjectAbsPos = firstObject.frame.changeBasis({*}) + + let firstObjectAbsPos = firstObject.frame.changeBa... + + + + + + + {*} + + {*} + + + + + + + from: firstObject.parent + + from: firstObject.parent + + + + + + + to: currentParentGroup + + to: currentParentGroup + + + + + + + let secondObjectAbsPos = secondObject.frame.changeBasis({*}) + + let secondObjectAbsPos = secondObject.frame.change... + + + + + + + {*} + + {*} + + + + + + + from: secondObject.parent + + from: secondObject.parent + + + + + + + to: currentParentGroup + + to: currentParentGroup + + + + + + + let currentGroup = checkForGroup('Arrows') + + let currentGroup = checkForGroup('Arrows') + + + + + + + (currentGroup) + + (currentGroup) + + + if + - + + + + diffX = [object Object] + + diffX = [object Object] + + + + + + + currentGroup.frame() + + currentGroup.frame() + + + + + + + diffY = [object Object] + + diffY = [object Object] + + + + + + + currentGroup.frame() + + currentGroup.frame() + + + + + + + diffX = 0 + + diffX = 0 + + + + + + + diffY = 0 + + diffY = 0 + + + + + + + let connectionPos = {*} + + let connectionPos = {*} + + + + + + + firstLayerPosX: null + + firstLayerPosX: null + + + + + + + firstLayerPosY: null + + firstLayerPosY: null + + + + + + + secondLayerPosX: null + + secondLayerPosX: null + + + + + + + secondLayerPosY: null + + secondLayerPosY: null + + + + + + + middlePosX: null + + middlePosX: null + + + + + + + middlePosY: null // Getting all the positions + + middlePosY: null // Getting all the positions + + + + + + + (direction == "Up") + + (direction == "Up") + + + if + + + + + connectionPos.firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX + + connectionPos.firstLayerPosX = firstObjectAbsPos.x... + + + + + + + connectionPos.firstLayerPosY = firstObjectAbsPos.y - diffY + + connectionPos.firstLayerPosY = firstObjectAbsPos.y... + + + + + + + connectionPos.secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX + + connectionPos.secondLayerPosX = secondObjectAbsPos... + + + + + + + connectionPos.secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height - diffY + + connectionPos.secondLayerPosY = secondObjectAbsPos... + + + + + + + connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2 + + connectionPos.middlePosX = (connectionPos.firstLay... + + + + + + + connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2 + + connectionPos.middlePosY = (connectionPos.firstLay... + + + + + + + (direction == "Right") + + (direction == "Right") + + + if + + + + + connectionPos.firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width - diffX + + connectionPos.firstLayerPosX = firstObjectAbsPos.x... + + + + + + + connectionPos.firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY + + connectionPos.firstLayerPosY = firstObjectAbsPos.y... + + + + + + + connectionPos.secondLayerPosX = secondObjectAbsPos.x - diffX + + connectionPos.secondLayerPosX = secondObjectAbsPos... + + + + + + + connectionPos.secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY + + connectionPos.secondLayerPosY = secondObjectAbsPos... + + + + + + + connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2 + + connectionPos.middlePosX = (connectionPos.firstLay... + + + + + + + connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2 + + connectionPos.middlePosY = (connectionPos.firstLay... + + + + + + + (direction == "Down") + + (direction == "Down") + + + if + + + + + connectionPos.firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX + + connectionPos.firstLayerPosX = firstObjectAbsPos.x... + + + + + + + connectionPos.firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height - diffY + + connectionPos.firstLayerPosY = firstObjectAbsPos.y... + + + + + + + connectionPos.secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX + + connectionPos.secondLayerPosX = secondObjectAbsPos... + + + + + + + connectionPos.secondLayerPosY = secondObjectAbsPos.y - diffY + + connectionPos.secondLayerPosY = secondObjectAbsPos... + + + + + + + connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2 + + connectionPos.middlePosX = (connectionPos.firstLay... + + + + + + + connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2 + + connectionPos.middlePosY = (connectionPos.firstLay... + + + + + + + (direction == "Left") + + (direction == "Left") + + + if + + + + + connectionPos.firstLayerPosX = firstObjectAbsPos.x - diffX + + connectionPos.firstLayerPosX = firstObjectAbsPos.x... + + + + + + + connectionPos.firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY + + connectionPos.firstLayerPosY = firstObjectAbsPos.y... + + + + + + + connectionPos.secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width - diffX + + connectionPos.secondLayerPosX = secondObjectAbsPos... + + + + + + + connectionPos.secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY + + connectionPos.secondLayerPosY = secondObjectAbsPos... + + + + + + + connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2 + + connectionPos.middlePosX = (connectionPos.firstLay... + + + + + + + connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2 + + connectionPos.middlePosY = (connectionPos.firstLay... + + + + + + + + + + + + + + return connectionPos + + return connectionPos + + + + + + + + + + function drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction) + + function drawStraightLine(firstLayerPosX, firstLay... + + + + + + let path = NSBezierPath.bezierPath() + + let path = NSBezierPath.bezierPath() + + + + + + + (direction == "Up") + + (direction == "Up") + + + if + + + + + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)) + + path.moveToPoint(NSMakePoint(firstLayerPosX, first... + + + + + + + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)) + + path.lineToPoint(NSMakePoint(secondLayerPosX, seco... + + + + + + + (direction == "Right") + + (direction == "Right") + + + if + + + + + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)) + + path.moveToPoint(NSMakePoint(firstLayerPosX, first... + + + + + + + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)) + + path.lineToPoint(NSMakePoint(secondLayerPosX, seco... + + + + + + + (direction == "Down") + + (direction == "Down") + + + if + + + + + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)) + + path.moveToPoint(NSMakePoint(firstLayerPosX, first... + + + + + + + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)) + + path.lineToPoint(NSMakePoint(secondLayerPosX, seco... + + + + + + + (direction == "Left") + + (direction == "Left") + + + if + + + + + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)) + + path.moveToPoint(NSMakePoint(firstLayerPosX, first... + + + + + + + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)) + + path.lineToPoint(NSMakePoint(secondLayerPosX, seco... + + + + + + + let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) + + let line = MSShapeGroup.layerWithPath(MSPath.pathW... + + + + + + + line.setName('Straight Arrow') + + line.setName('Straight Arrow') + + + + + + + + + + + + + + return line + + return line + + + + + + + + + + function drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction) + + function drawAngledLine(firstLayerPosX, firstLayer... + + + + + + let path = NSBezierPath.bezierPath() + + let path = NSBezierPath.bezierPath() + + + + + + + (direction == "Up") + + (direction == "Up") + + + if + + + + + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)) + + path.moveToPoint(NSMakePoint(firstLayerPosX, first... + + + + + + + path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)) + + path.lineToPoint(NSMakePoint(firstLayerPosX, middl... + + + + + + + path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)) + + path.lineToPoint(NSMakePoint(secondLayerPosX, midd... + + + + + + + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)) + + path.lineToPoint(NSMakePoint(secondLayerPosX, seco... + + + + + + + (direction == "Right") + + (direction == "Right") + + + if + + + + + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)) + + path.moveToPoint(NSMakePoint(firstLayerPosX, first... + + + + + + + path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)) + + path.lineToPoint(NSMakePoint(middlePosX, firstLaye... + + + + + + + path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)) + + path.lineToPoint(NSMakePoint(middlePosX, secondLay... + + + + + + + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)) + + path.lineToPoint(NSMakePoint(secondLayerPosX, seco... + + + + + + + (direction == "Down") + + (direction == "Down") + + + if + + + + + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)) + + path.moveToPoint(NSMakePoint(firstLayerPosX, first... + + + + + + + path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)) + + path.lineToPoint(NSMakePoint(firstLayerPosX, middl... + + + + + + + path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)) + + path.lineToPoint(NSMakePoint(secondLayerPosX, midd... + + + + + + + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)) + + path.lineToPoint(NSMakePoint(secondLayerPosX, seco... + + + + + + + (direction == "Left") + + (direction == "Left") + + + if + + + + + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)) + + path.moveToPoint(NSMakePoint(firstLayerPosX, first... + + + + + + + path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)) + + path.lineToPoint(NSMakePoint(middlePosX, firstLaye... + + + + + + + path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)) + + path.lineToPoint(NSMakePoint(middlePosX, secondLay... + + + + + + + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)) + + path.lineToPoint(NSMakePoint(secondLayerPosX, seco... + + + + + + + let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) + + let line = MSShapeGroup.layerWithPath(MSPath.pathW... + + + + + + + let points = [object Object] + + let points = [object Object] + + + + + + + points[1].cornerRadius = 20 + + points[1].cornerRadius = 20 + + + + + + + points[2].cornerRadius = 20 + + points[2].cornerRadius = 20 + + + + + + + line.setName('Angled Arrow') + + line.setName('Angled Arrow') + + + + + + + + + + + + + + return line + + return line + + + + + + + + + + function drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction) + + function drawCurvedLine(firstLayerPosX, firstLayer... + + + + + + let path = NSBezierPath.bezierPath() + + let path = NSBezierPath.bezierPath() + + + + + + + (direction == "Up") + + (direction == "Up") + + + if + + + + + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)) + + path.moveToPoint(NSMakePoint(firstLayerPosX, first... + + + + + + + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)) + + path.lineToPoint(NSMakePoint(secondLayerPosX, seco... + + + + + + + line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) + + line = MSShapeGroup.layerWithPath(MSPath.pathWithB... + + + + + + + let points = [object Object] + + let points = [object Object] + + + + + + + points[0].curveMode = 4 + + points[0].curveMode = 4 + + + + + + + points[1].curveMode = 4 + + points[1].curveMode = 4 + + + + + + + points[0].hasCurveFrom = true + + points[0].hasCurveFrom = true + + + + + + + points[1].hasCurveTo = true + + points[1].hasCurveTo = true + + + + + + + (firstLayerPosX < secondLayerPosX) + + (firstLayerPosX < secondLayerPosX) + + + if + - + + + + points[0].curveFrom = {*} + + points[0].curveFrom = {*} + + + + + + + x: 0 + + x: 0 + + + + + + + y: 0.5 + + y: 0.5 + + + + + + + points[0].curveTo = {*} + + points[0].curveTo = {*} + + + + + + + x: -0.5 + + x: -0.5 + + + + + + + y: 1 + + y: 1 + + + + + + + points[1].curveFrom = {*} + + points[1].curveFrom = {*} + + + + + + + x: 1 + + x: 1 + + + + + + + y: 1 + + y: 1 + + + + + + + points[1].curveTo = {*} + + points[1].curveTo = {*} + + + + + + + x: 1 + + x: 1 + + + + + + + y: 0.5 + + y: 0.5 + + + + + + + points[0].curveFrom = {*} + + points[0].curveFrom = {*} + + + + + + + x: 1 + + x: 1 + + + + + + + y: 0.5 + + y: 0.5 + + + + + + + points[0].curveTo = {*} + + points[0].curveTo = {*} + + + + + + + x: -0.5 + + x: -0.5 + + + + + + + y: 1 + + y: 1 + + + + + + + points[1].curveFrom = {*} + + points[1].curveFrom = {*} + + + + + + + x: 1 + + x: 1 + + + + + + + y: 1 + + y: 1 + + + + + + + points[1].curveTo = {*} + + points[1].curveTo = {*} + + + + + + + x: 0 + + x: 0 + + + + + + + y: 0.5 + + y: 0.5 + + + + + + + (direction == "Right") + + (direction == "Right") + + + if + + + + + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)) + + path.moveToPoint(NSMakePoint(firstLayerPosX, first... + + + + + + + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)) + + path.lineToPoint(NSMakePoint(secondLayerPosX, seco... + + + + + + + line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) + + line = MSShapeGroup.layerWithPath(MSPath.pathWithB... + + + + + + + let points = [object Object] + + let points = [object Object] + + + + + + + points[0].curveMode = 4 + + points[0].curveMode = 4 + + + + + + + points[1].curveMode = 4 + + points[1].curveMode = 4 + + + + + + + points[0].hasCurveFrom = true + + points[0].hasCurveFrom = true + + + + + + + points[1].hasCurveTo = true + + points[1].hasCurveTo = true + + + + + + + (firstLayerPosY < secondLayerPosY) + + (firstLayerPosY < secondLayerPosY) + + + if + - + + + + points[0].curveFrom = {*} + + points[0].curveFrom = {*} + + + + + + + x: 0.5 + + x: 0.5 + + + + + + + y: 0 + + y: 0 + + + + + + + points[0].curveTo = {*} + + points[0].curveTo = {*} + + + + + + + x: -0.5 + + x: -0.5 + + + + + + + y: 1 + + y: 1 + + + + + + + points[1].curveFrom = {*} + + points[1].curveFrom = {*} + + + + + + + x: 1 + + x: 1 + + + + + + + y: 1 + + y: 1 + + + + + + + points[1].curveTo = {*} + + points[1].curveTo = {*} + + + + + + + x: 0.5 + + x: 0.5 + + + + + + + y: 1 + + y: 1 + + + + + + + points[0].curveFrom = {*} + + points[0].curveFrom = {*} + + + + + + + x: 0.5 + + x: 0.5 + + + + + + + y: 1 + + y: 1 + + + + + + + points[0].curveTo = {*} + + points[0].curveTo = {*} + + + + + + + x: -0.5 + + x: -0.5 + + + + + + + y: 1 + + y: 1 + + + + + + + points[1].curveFrom = {*} + + points[1].curveFrom = {*} + + + + + + + x: 1 + + x: 1 + + + + + + + y: 1 + + y: 1 + + + + + + + points[1].curveTo = {*} + + points[1].curveTo = {*} + + + + + + + x: 0.5 + + x: 0.5 + + + + + + + y: 0 + + y: 0 + + + + + + + (direction == "Down") + + (direction == "Down") + + + if + + + + + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)) + + path.moveToPoint(NSMakePoint(firstLayerPosX, first... + + + + + + + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)) + + path.lineToPoint(NSMakePoint(secondLayerPosX, seco... + + + + + + + line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) + + line = MSShapeGroup.layerWithPath(MSPath.pathWithB... + + + + + + + let points = [object Object] + + let points = [object Object] + + + + + + + points[0].curveMode = 4 + + points[0].curveMode = 4 + + + + + + + points[1].curveMode = 4 + + points[1].curveMode = 4 + + + + + + + points[0].hasCurveFrom = true + + points[0].hasCurveFrom = true + + + + + + + points[1].hasCurveTo = true + + points[1].hasCurveTo = true + + + + + + + (firstLayerPosX < secondLayerPosX) + + (firstLayerPosX < secondLayerPosX) + + + if + - + + + + points[0].curveFrom = {*} + + points[0].curveFrom = {*} + + + + + + + x: 0 + + x: 0 + + + + + + + y: 0.5 + + y: 0.5 + + + + + + + points[0].curveTo = {*} + + points[0].curveTo = {*} + + + + + + + x: -0.5 + + x: -0.5 + + + + + + + y: 1 + + y: 1 + + + + + + + points[1].curveFrom = {*} + + points[1].curveFrom = {*} + + + + + + + x: 1 + + x: 1 + + + + + + + y: 1 + + y: 1 + + + + + + + points[1].curveTo = {*} + + points[1].curveTo = {*} + + + + + + + x: 1 + + x: 1 + + + + + + + y: 0.5 + + y: 0.5 + + + + + + + points[0].curveFrom = {*} + + points[0].curveFrom = {*} + + + + + + + x: 1 + + x: 1 + + + + + + + y: 0.5 + + y: 0.5 + + + + + + + points[0].curveTo = {*} + + points[0].curveTo = {*} + + + + + + + x: -0.5 + + x: -0.5 + + + + + + + y: 1 + + y: 1 + + + + + + + points[1].curveFrom = {*} + + points[1].curveFrom = {*} + + + + + + + x: 1 + + x: 1 + + + + + + + y: 1 + + y: 1 + + + + + + + points[1].curveTo = {*} + + points[1].curveTo = {*} + + + + + + + x: 0 + + x: 0 + + + + + + + y: 0.5 + + y: 0.5 + + + + + + + (direction == "Left") + + (direction == "Left") + + + if + + + + + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)) + + path.moveToPoint(NSMakePoint(firstLayerPosX, first... + + + + + + + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)) + + path.lineToPoint(NSMakePoint(secondLayerPosX, seco... + + + + + + + line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) + + line = MSShapeGroup.layerWithPath(MSPath.pathWithB... + + + + + + + let points = [object Object] + + let points = [object Object] + + + + + + + points[0].curveMode = 4 + + points[0].curveMode = 4 + + + + + + + points[1].curveMode = 4 + + points[1].curveMode = 4 + + + + + + + points[0].hasCurveFrom = true + + points[0].hasCurveFrom = true + + + + + + + points[1].hasCurveTo = true + + points[1].hasCurveTo = true + + + + + + + (firstLayerPosY < secondLayerPosY) + + (firstLayerPosY < secondLayerPosY) + + + if + - + + + + points[0].curveFrom = {*} + + points[0].curveFrom = {*} + + + + + + + x: 0.5 + + x: 0.5 + + + + + + + y: 0 + + y: 0 + + + + + + + points[0].curveTo = {*} + + points[0].curveTo = {*} + + + + + + + x: -0.5 + + x: -0.5 + + + + + + + y: 1 + + y: 1 + + + + + + + points[1].curveFrom = {*} + + points[1].curveFrom = {*} + + + + + + + x: 1 + + x: 1 + + + + + + + y: 1 + + y: 1 + + + + + + + points[1].curveTo = {*} + + points[1].curveTo = {*} + + + + + + + x: 0.5 + + x: 0.5 + + + + + + + y: 1 + + y: 1 + + + + + + + points[0].curveFrom = {*} + + points[0].curveFrom = {*} + + + + + + + x: 0.5 + + x: 0.5 + + + + + + + y: 1 + + y: 1 + + + + + + + points[0].curveTo = {*} + + points[0].curveTo = {*} + + + + + + + x: -0.5 + + x: -0.5 + + + + + + + y: 1 + + y: 1 + + + + + + + points[1].curveFrom = {*} + + points[1].curveFrom = {*} + + + + + + + x: 1 + + x: 1 + + + + + + + y: 1 + + y: 1 + + + + + + + points[1].curveTo = {*} + + points[1].curveTo = {*} + + + + + + + x: 0.5 + + x: 0.5 + + + + + + + y: 0 + + y: 0 + + + + + + + line.setName('Curved Arrow') + + line.setName('Curved Arrow') + + + + + + + + + + + + + + return line + + return line + + + + + + + + + + function styleLine(line, style) + + function styleLine(line, style) + + + + + + (style != null) + + (style != null) + + + if + - + + + + (getLayerStyles(style) != null && style != "Default Style") + + (getLayerStyles(style) != null && style != "Defaul... + + + if + - + + + + localStyle = style + + localStyle = style + + + + + + + let ownStyle = getLayerStyles(style) + + let ownStyle = getLayerStyles(style) + + + + + + + line.sharedStyle = ownStyle[0] + + line.sharedStyle = ownStyle[0] + + + + + + + localStyle = "Default Style" + + localStyle = "Default Style" + + + + + + + let border = [object Object] + + let border = [object Object] + + + + + + + border.color = MSColor.colorWithRGBADictionary({*}) + + border.color = MSColor.colorWithRGBADictionary({*}... + + + + + + + {*} + + {*} + + + + + + + r: 0.89 + + r: 0.89 + + + + + + + g: 0.89 + + g: 0.89 + + + + + + + b: 0.89 + + b: 0.89 + + + + + + + a: 1 + + a: 1 + + + + + + + border.thickness = 2 + + border.thickness = 2 + + + + + + + line.style().endMarkerType = 2 + + line.style().endMarkerType = 2 + + + + + + + line.style() + + line.style() + + + + + + + (context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) != "Default Style") + + (context.command.valueForKey_onLayer_forPluginIden... + + + if + - + + + + localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)) + + localStyle = getLayerStyles(context.command.valueF... + + + + + + + line.sharedStyle = localStyle[0] + + line.sharedStyle = localStyle[0] + + + + + + + localStyle = localStyle[0].name() + + localStyle = localStyle[0].name() + + + + + + + localStyle = "Default Style" + + localStyle = "Default Style" + + + + + + + let border = [object Object] + + let border = [object Object] + + + + + + + border.color = MSColor.colorWithRGBADictionary({*}) + + border.color = MSColor.colorWithRGBADictionary({*}... + + + + + + + {*} + + {*} + + + + + + + r: 0.89 + + r: 0.89 + + + + + + + g: 0.89 + + g: 0.89 + + + + + + + b: 0.89 + + b: 0.89 + + + + + + + a: 1 + + a: 1 + + + + + + + border.thickness = 2 + + border.thickness = 2 + + + + + + + line.style().endMarkerType = 2 + + line.style().endMarkerType = 2 + + + + + + + line.style() + + line.style() + + + + + + + + + + + + + + return localStyle + + return localStyle + + + + + + + Program: source module + + Program: source module + + + + + + + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + + false + + + + false + + + + false + + + + false + + + + false + + + + false + + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + + false + + + + false + + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + + false + + + + false + + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + + false + + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + + false + + + + + + + + + + + + false + + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + + false + + + + false + + + + false + + + + false + + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + + false + + + + + + + + false + + + + false + + + + + + + + false + + + + false + + + + + + + + false + + + + false + + + + + + + + false + + + + false + + + + + + + + false + + + + false + + + + + + + + false + + + + false + + + + + + + + false + + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + + false + + + + + + + + false + + + + false + + + + + + + + false + + + + false + + + + + + + + false + + + + false + + + + + + + + false + + + + false + + + + + + + + false + + + + false + + + + + + + + false + + + + false + + + + + + + + false + + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + + false + + + + + + + + false + + + + false + + + + + + + + false + + + + false + + + + + + + + false + + + + false + + + + + + + + false + + + + false + + + + + + + + false + + + + false + + + + + + + + false + + + + false + + + + + + + + false + + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + + false + + + + + + + + false + + + + false + + + + + + + + false + + + + false + + + + + + + + false + + + + false + + + + + + + + false + + + + false + + + + + + + + false + + + + false + + + + + + + + false + + + + false + + + + + + + + false + + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + + false + + + + false + + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + + false + + + + false + + + + false + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index f801db0..1ac6dd2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -588,6 +588,11 @@ version "1.1.3" resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" +"@sindresorhus/is@^0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" + integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== + "@skpm/babel-preset@0.2.1": version "0.2.1" resolved "https://registry.yarnpkg.com/@skpm/babel-preset/-/babel-preset-0.2.1.tgz#1e0404e058514d72adebe98163b69b0bb1d737e4" @@ -817,6 +822,11 @@ ansi-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -859,6 +869,11 @@ arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= + array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" @@ -907,6 +922,99 @@ author-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/author-regex/-/author-regex-1.0.0.tgz#d08885be6b9bbf9439fe087c76287245f0a81450" +babel-code-frame@7.0.0-beta.3: + version "7.0.0-beta.3" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-7.0.0-beta.3.tgz#1614a91b2ba0e3848559f410bbacd030726899c9" + integrity sha512-flMsJ9eSpShupt2Gwpka84DoMePvE4HlDObzdEc+1iNkacv3+NHlsJ7dMKmbnVA/AT22UhcGEBHwbJLoXWBO6Q== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + +babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-core@^6.26.0, babel-core@^6.26.3: + version "6.26.3" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" + integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.1" + debug "^2.6.9" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.8" + slash "^1.0.0" + source-map "^0.5.7" + +babel-generator@7.0.0-beta.3: + version "7.0.0-beta.3" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-7.0.0-beta.3.tgz#afa85e34c50ef52ccd0ef37f4c4b5e1df65cac04" + integrity sha512-Bok77tKwQZUVaLBRnDGDEaMZ4xEeyvzsgnCRxlVgfKmgn+vPxuka//ug3nrMmmgZ8TAMVPoXzeaAcs47lExrPg== + dependencies: + babel-types "7.0.0-beta.3" + jsesc "^2.5.1" + lodash "^4.2.0" + source-map "^0.5.0" + trim-right "^1.0.1" + +babel-generator@^6.26.0: + version "6.26.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" + integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA== + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.17.4" + source-map "^0.5.7" + trim-right "^1.0.1" + +babel-helper-function-name@7.0.0-beta.3: + version "7.0.0-beta.3" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-7.0.0-beta.3.tgz#e86dd2eb2c09e06e392e79e203fc02427b24c871" + integrity sha512-iMWYqwDarQOVlEGcK1MfbtK9vrFGs5Z4UQsdASJUHdhBp918EM5kndwriiIbhUX8gr2B/CEV/udJkFTrHsjdMQ== + dependencies: + babel-helper-get-function-arity "7.0.0-beta.3" + babel-template "7.0.0-beta.3" + babel-traverse "7.0.0-beta.3" + babel-types "7.0.0-beta.3" + +babel-helper-get-function-arity@7.0.0-beta.3: + version "7.0.0-beta.3" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-7.0.0-beta.3.tgz#61a47709318a31bc2db872f4be9b4c8447198be8" + integrity sha512-ZkYFRMWKx1c9fUW72YNM3eieBG701CMbLjmLLWmJTTPc0F0kddS9Fwok26EAmndUAgD6kFdh7ms3PH94MdGuGQ== + dependencies: + babel-types "7.0.0-beta.3" + +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI= + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-loader@^8.0.4: version "8.0.5" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.5.tgz#225322d7509c2157655840bba52e46b6c2f2fe33" @@ -916,6 +1024,151 @@ babel-loader@^8.0.4: mkdirp "^0.5.1" util.promisify "^1.0.0" +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-add-module-exports@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-0.2.1.tgz#9ae9a1f4a8dc67f0cdec4f4aeda1e43a5ff65e25" + integrity sha1-mumh9KjcZ/DN7E9K7aHkOl/2XiU= + +babel-plugin-syntax-object-rest-spread@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U= + +babel-plugin-transform-es2015-destructuring@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" + integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-spread@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-object-rest-spread@^6.23.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" + integrity sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY= + dependencies: + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-runtime "^6.26.0" + +babel-register@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + integrity sha1-btAhFz4vy0htestFxgCahW9kcHE= + dependencies: + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" + home-or-tmp "^2.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + source-map-support "^0.4.15" + +babel-runtime@^6.22.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-template@7.0.0-beta.3: + version "7.0.0-beta.3" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-7.0.0-beta.3.tgz#ebb877b6070ce9912b0d0c22fcad3372165913a8" + integrity sha512-urJduLja89kSDGqY8ryw8iIwQnMl30IvhMtMNmDD7vBX0l0oylaLgK+7df/9ODX9vR/PhXuif6HYl5HlzAKXMg== + dependencies: + babel-code-frame "7.0.0-beta.3" + babel-traverse "7.0.0-beta.3" + babel-types "7.0.0-beta.3" + babylon "7.0.0-beta.27" + lodash "^4.2.0" + +babel-template@^6.24.1, babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + +babel-traverse@7.0.0-beta.3: + version "7.0.0-beta.3" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-7.0.0-beta.3.tgz#3cf0a45d53d934d85275d8770775d7944fc7c199" + integrity sha512-xyh/aPYuedMAfQlSj2kjHjsEmY5/Dpxs576L05DySAVMrV+ADX6l4mTOLysAEGwJfkePJlDLhFuS6SKaxv1V7w== + dependencies: + babel-code-frame "7.0.0-beta.3" + babel-helper-function-name "7.0.0-beta.3" + babel-types "7.0.0-beta.3" + babylon "7.0.0-beta.27" + debug "^3.0.1" + globals "^10.0.0" + invariant "^2.2.0" + lodash "^4.2.0" + +babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + +babel-types@7.0.0-beta.3: + version "7.0.0-beta.3" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-7.0.0-beta.3.tgz#cd927ca70e0ae8ab05f4aab83778cfb3e6eb20b4" + integrity sha512-36k8J+byAe181OmCMawGhw+DtKO7AwexPVtsPXoMfAkjtZgoCX3bEuHWfdE5sYxRM8dojvtG/+O08M0Z/YDC6w== + dependencies: + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^2.0.0" + +babel-types@^6.25.0, babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babylon@7.0.0-beta.27: + version "7.0.0-beta.27" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.27.tgz#b6edd30ef30619e2f630eb52585fdda84e6542cd" + integrity sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg== + +babylon@7.0.0-beta.42: + version "7.0.0-beta.42" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.42.tgz#67cfabcd4f3ec82999d29031ccdea89d0ba99657" + integrity sha512-h6E/OkkvcBw/JimbL0p8dIaxrcuQn3QmIYGC/GtJlRYif5LTKBYPHXYwqluJpfS/kOXoz0go+9mkmOVC0M+zWw== + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== + balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" @@ -1110,10 +1363,36 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +cacheable-request@^2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-2.1.4.tgz#0d808801b6342ad33c91df9d0b44dc09b91e5c3d" + integrity sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0= + dependencies: + clone-response "1.0.2" + get-stream "3.0.0" + http-cache-semantics "3.8.1" + keyv "3.0.0" + lowercase-keys "1.0.0" + normalize-url "2.0.1" + responselike "1.0.2" + call-me-maybe@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= + camelcase@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" @@ -1122,6 +1401,24 @@ caniuse-lite@^1.0.30000929: version "1.0.30000938" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000938.tgz#b64bf1427438df40183fce910fe24e34feda7a3f" +"chainsaw@>=0.0.7 <0.1": + version "0.0.9" + resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.0.9.tgz#11a05102d1c4c785b6d0415d336d5a3a1612913e" + integrity sha1-EaBRAtHEx4W20EFdM21aOhYSkT4= + dependencies: + traverse ">=0.3.0 <0.4" + +chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + chalk@^2.0.0, chalk@^2.4.1: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -1191,6 +1488,13 @@ cliui@^4.0.0: strip-ansi "^4.0.0" wrap-ansi "^2.0.0" +clone-response@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + dependencies: + mimic-response "^1.0.0" + cocoascript-class@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/cocoascript-class/-/cocoascript-class-0.1.2.tgz#dab25f20389946d9986c1812b88ac3783eec42d3" @@ -1220,6 +1524,11 @@ colors@^1.1.2: version "1.3.3" resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d" +commander@^2.12.1: + version "2.20.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" + integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== + commander@~2.13.0: version "2.13.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" @@ -1263,7 +1572,7 @@ constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" -convert-source-map@^1.1.0: +convert-source-map@^1.1.0, convert-source-map@^1.5.1: version "1.6.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" dependencies: @@ -1284,6 +1593,11 @@ copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" +core-js@^2.4.0, core-js@^2.5.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2" + integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A== + core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -1346,6 +1660,13 @@ crypto-browserify@^3.11.0: randombytes "^2.0.0" randomfill "^1.0.3" +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= + dependencies: + array-find-index "^1.0.1" + cyclist@~0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" @@ -1354,19 +1675,26 @@ date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" -debug@^2.1.2, debug@^2.2.0, debug@^2.3.3: +debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: ms "2.0.0" +debug@^3.0.1: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + debug@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" dependencies: ms "^2.1.1" -decamelize@^1.2.0: +decamelize@^1.1.2, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -1374,10 +1702,22 @@ decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + dependencies: + mimic-response "^1.0.0" + deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" +deepmerge@^1.5.1: + version "1.5.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.5.2.tgz#10499d868844cdad4fee0842df8c7f6f0c95a753" + integrity sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ== + define-properties@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -1414,6 +1754,13 @@ des.js@^1.0.0: inherits "^2.0.1" minimalistic-assert "^1.0.0" +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= + dependencies: + repeating "^2.0.0" + detect-libc@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" @@ -1433,10 +1780,20 @@ dir-glob@2.0.0: arrify "^1.0.1" path-type "^3.0.0" +dom-walk@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" + integrity sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg= + domain-browser@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + duplexify@^3.4.2, duplexify@^3.6.0: version "3.7.1" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" @@ -1486,6 +1843,13 @@ errno@^0.1.3, errno@~0.1.7: dependencies: prr "~1.0.1" +error-ex@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + es-abstract@^1.5.1: version "1.13.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" @@ -1505,7 +1869,7 @@ es-to-primitive@^1.2.0: is-date-object "^1.0.1" is-symbol "^1.0.2" -escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -1643,6 +2007,14 @@ find-cache-dir@^2.0.0: make-dir "^1.0.0" pkg-dir "^3.0.0" +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" @@ -1672,7 +2044,7 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" -from2@^2.1.0: +from2@^2.1.0, from2@^2.1.1: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" dependencies: @@ -1726,6 +2098,16 @@ get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= + +get-stream@3.0.0, get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -1758,10 +2140,28 @@ glob@^7.1.2, glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" +global@^4.3.2: + version "4.4.0" + resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== + dependencies: + min-document "^2.19.0" + process "^0.11.10" + +globals@^10.0.0: + version "10.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-10.4.0.tgz#5c477388b128a9e4c5c5d01c7a2aca68c68b2da7" + integrity sha512-uNUtxIZpGyuaq+5BqGGQHsL4wUlJAXRqOm6g3Y48/CWNGTLONgBibI0lh6lGxjR2HljFYUfszb+mk4WkgMntsA== + globals@^11.1.0: version "11.11.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e" +globals@^9.18.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== + globby@^8.0.1: version "8.0.2" resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d" @@ -1774,18 +2174,60 @@ globby@^8.0.1: pify "^3.0.0" slash "^1.0.0" +got@^8.3.0: + version "8.3.2" + resolved "https://registry.yarnpkg.com/got/-/got-8.3.2.tgz#1d23f64390e97f776cac52e5b936e5f514d2e937" + integrity sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw== + dependencies: + "@sindresorhus/is" "^0.7.0" + cacheable-request "^2.1.1" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + into-stream "^3.1.0" + is-retry-allowed "^1.1.0" + isurl "^1.0.0-alpha5" + lowercase-keys "^1.0.0" + mimic-response "^1.0.0" + p-cancelable "^0.4.0" + p-timeout "^2.0.1" + pify "^3.0.0" + safe-buffer "^5.1.1" + timed-out "^4.0.1" + url-parse-lax "^3.0.0" + url-to-options "^1.0.1" + graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: version "4.1.15" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" +has-symbol-support-x@^1.4.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" + integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== + has-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" +has-to-string-tag-x@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" + integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== + dependencies: + has-symbol-support-x "^1.4.1" + has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -1837,6 +2279,13 @@ hash.js@^1.0.0, hash.js@^1.0.3: inherits "^2.0.3" minimalistic-assert "^1.0.1" +"hashish@>=0.0.2 <0.1": + version "0.0.4" + resolved "https://registry.yarnpkg.com/hashish/-/hashish-0.0.4.tgz#6d60bc6ffaf711b6afd60e426d077988014e6554" + integrity sha1-bWC8b/r3Ebav1g5CbQd5iAFOZVQ= + dependencies: + traverse ">=0.2.4" + hmac-drbg@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -1845,6 +2294,24 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg= + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + +hosted-git-info@^2.1.4: + version "2.7.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" + integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== + +http-cache-semantics@3.8.1: + version "3.8.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" + integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== + https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" @@ -1877,6 +2344,13 @@ imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= + dependencies: + repeating "^2.0.0" + indexof@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" @@ -1900,7 +2374,15 @@ ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" -invariant@^2.2.2: +into-stream@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-3.1.0.tgz#96fb0a936c12babd6ff1752a17d05616abd094c6" + integrity sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY= + dependencies: + from2 "^2.1.1" + p-is-promise "^1.1.0" + +invariant@^2.2.0, invariant@^2.2.2: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" dependencies: @@ -1922,6 +2404,11 @@ is-accessor-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" @@ -1982,6 +2469,13 @@ is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" +is-finite@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= + dependencies: + number-is-nan "^1.0.0" + is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" @@ -2010,6 +2504,16 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" +is-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" + integrity sha1-iVJojF7C/9awPsyF52ngKQMINHA= + +is-plain-obj@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -2022,6 +2526,18 @@ is-regex@^1.0.4: dependencies: has "^1.0.1" +is-retry-allowed@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" + integrity sha1-EaBgVotnM5REAz0BJaYaINVk+zQ= + +is-scoped@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-scoped/-/is-scoped-1.0.0.tgz#449ca98299e713038256289ecb2b540dc437cb30" + integrity sha1-RJypgpnnEwOCViieyytUDcQ3yzA= + dependencies: + scoped-regex "^1.0.0" + is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -2032,6 +2548,11 @@ is-symbol@^1.0.2: dependencies: has-symbols "^1.0.0" +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -2054,10 +2575,23 @@ isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" +isurl@^1.0.0-alpha5: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" + integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== + dependencies: + has-to-string-tag-x "^1.2.0" + is-object "^1.0.1" + js-levenshtein@^1.1.3: version "1.1.6" resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" +js-tokens@^3.0.0, js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -2069,6 +2603,33 @@ js-yaml@^3.10.0: argparse "^1.0.7" esprima "^4.0.0" +js2flowchart@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/js2flowchart/-/js2flowchart-1.1.7.tgz#fe3952e3c409edf780dfc2b1bf6ec6d272915995" + integrity sha512-F/lH3KZs9/5Z0l/78bd6DhDq0NEk/cTACMTNjnSvFZOAAtsixE3vruSPRVhbFMAtLtQUmFCyEx24SgN21fcKLQ== + dependencies: + babel-core "^6.26.3" + babel-generator "7.0.0-beta.3" + babel-plugin-add-module-exports "^0.2.1" + babel-plugin-transform-es2015-destructuring "^6.23.0" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-object-rest-spread "^6.23.0" + babel-traverse "7.0.0-beta.3" + babel-types "^6.25.0" + babylon "7.0.0-beta.42" + commander "^2.12.1" + deepmerge "^1.5.1" + global "^4.3.2" + npm-name-cli "^1.2.0" + remove "^0.1.5" + string-width "^2.1.1" + xml-escape "^1.1.0" + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= + jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -2077,6 +2638,11 @@ jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -2085,6 +2651,11 @@ json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" +json5@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= + json5@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" @@ -2097,6 +2668,13 @@ json5@^2.1.0: dependencies: minimist "^1.2.0" +keyv@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.0.0.tgz#44923ba39e68b12a7cec7df6c3268c031f2ef373" + integrity sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA== + dependencies: + json-buffer "3.0.0" + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -2123,6 +2701,17 @@ lcid@^2.0.0: dependencies: invert-kv "^2.0.0" +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + loader-runner@^2.3.0: version "2.4.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" @@ -2149,10 +2738,22 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" -lodash@^4.17.10, lodash@^4.17.5: +lodash.zip@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.zip/-/lodash.zip-4.2.0.tgz#ec6662e4896408ed4ab6c542a3990b72cc080020" + integrity sha1-7GZi5IlkCO1KtsVCo5kLcswIACA= + +lodash@^4.17.10, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" +log-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" + integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg= + dependencies: + chalk "^1.0.0" + "long@git://github.com/dcodeIO/long.js.git#8181a6b50a2a230f0b2a1e4c4093f9b9d19c8b69": version "4.0.1" resolved "git://github.com/dcodeIO/long.js.git#8181a6b50a2a230f0b2a1e4c4093f9b9d19c8b69" @@ -2163,6 +2764,24 @@ loose-envify@^1.0.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lowercase-keys@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" + integrity sha1-TjNms55/VFfjXxMkvfb4jQv8cwY= + +lowercase-keys@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + lru-cache@^4.1.1: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" @@ -2192,6 +2811,11 @@ map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" @@ -2221,6 +2845,22 @@ memory-fs@^0.4.0, memory-fs@~0.4.1: errno "^0.1.3" readable-stream "^2.0.1" +meow@^3.4.2: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + merge2@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.3.tgz#7ee99dbd69bb6481689253f018488a1b902b0ed5" @@ -2254,6 +2894,18 @@ mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= + dependencies: + dom-walk "^0.1.0" + minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -2272,7 +2924,7 @@ minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" -minimist@^1.2.0: +minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" @@ -2443,6 +3095,16 @@ nopt@^4.0.1: abbrev "1" osenv "^0.1.4" +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" @@ -2453,10 +3115,39 @@ normalize-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" +normalize-url@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6" + integrity sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw== + dependencies: + prepend-http "^2.0.0" + query-string "^5.0.1" + sort-keys "^2.0.0" + npm-bundled@^1.0.1: version "1.0.6" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" +npm-name-cli@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/npm-name-cli/-/npm-name-cli-1.2.0.tgz#fe45ae3442f50092574407db7753a7d4a800d2ac" + integrity sha1-/kWuNEL1AJJXRAfbd1On1KgA0qw= + dependencies: + chalk "^1.1.1" + log-symbols "^1.0.2" + meow "^3.4.2" + npm-name "^3.0.0" + +npm-name@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/npm-name/-/npm-name-3.2.0.tgz#3cd1b88b87ebbbb0327854ef09b6dfa157c6183b" + integrity sha512-9Z9/fOMDbH4oUN1sjALYKEa7n60VzFfeKoHz4v9eMhf5Omi7uf0nq0xzpfSF0Spdyn6jKBwRSMXNExEYFmpLWA== + dependencies: + got "^8.3.0" + is-scoped "^1.0.0" + lodash.zip "^4.0.0" + registry-url "^3.0.0" + npm-packlist@^1.1.6: version "1.3.0" resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.3.0.tgz#7f01e8e44408341379ca98cfd756e7b29bd2626c" @@ -2483,7 +3174,7 @@ number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" -object-assign@*, object-assign@^4.1.0: +object-assign@*, object-assign@^4.0.1, object-assign@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -2540,7 +3231,7 @@ os-locale@^3.0.0: lcid "^2.0.0" mem "^4.0.0" -os-tmpdir@^1.0.0: +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -2551,6 +3242,11 @@ osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" +p-cancelable@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0" + integrity sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ== + p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" @@ -2559,6 +3255,11 @@ p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" +p-is-promise@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" + integrity sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4= + p-is-promise@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.0.0.tgz#7554e3d572109a87e1f3f53f6a7d85d1b194f4c5" @@ -2587,6 +3288,13 @@ p-locate@^3.0.0: dependencies: p-limit "^2.0.0" +p-timeout@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-2.0.1.tgz#d8dd1979595d2dc0139e1fe46b8b646cb3cdf038" + integrity sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA== + dependencies: + p-finally "^1.0.0" + p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" @@ -2624,6 +3332,13 @@ parse-author@2.0.0: dependencies: author-regex "^1.0.0" +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" @@ -2636,11 +3351,18 @@ path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" -path-is-absolute@^1.0.0: +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -2652,6 +3374,15 @@ path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" @@ -2668,10 +3399,27 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + pkg-dir@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" @@ -2688,7 +3436,12 @@ posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" -private@^0.1.6: +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + +private@^0.1.6, private@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" @@ -2761,6 +3514,15 @@ punycode@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" +query-string@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" + integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== + dependencies: + decode-uri-component "^0.2.0" + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -2782,7 +3544,7 @@ randomfill@^1.0.3: randombytes "^2.0.5" safe-buffer "^5.1.0" -rc@^1.2.7: +rc@^1.0.1, rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" dependencies: @@ -2791,6 +3553,23 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + "readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" @@ -2811,6 +3590,14 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + regenerate-unicode-properties@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz#107405afcc4a190ec5ed450ecaa00ed0cafa7a4c" @@ -2821,6 +3608,11 @@ regenerate@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + regenerator-transform@^0.13.3: version "0.13.3" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.13.3.tgz#264bd9ff38a8ce24b06e0636496b2c856b57bcbb" @@ -2853,6 +3645,13 @@ regexpu-core@^4.1.3, regexpu-core@^4.2.0: unicode-match-property-ecmascript "^1.0.4" unicode-match-property-value-ecmascript "^1.0.2" +registry-url@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" + integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= + dependencies: + rc "^1.0.1" + regjsgen@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd" @@ -2867,6 +3666,13 @@ remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" +remove@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/remove/-/remove-0.1.5.tgz#095ffd827d65c9f41ad97d33e416a75811079955" + integrity sha1-CV/9gn1lyfQa2X0z5BanWBEHmVU= + dependencies: + seq ">= 0.3.5" + repeat-element@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" @@ -2875,6 +3681,13 @@ repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= + dependencies: + is-finite "^1.0.0" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -2887,12 +3700,26 @@ resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" +resolve@^1.10.0: + version "1.11.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.1.tgz#ea10d8110376982fef578df8fc30b9ac30a07a3e" + integrity sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw== + dependencies: + path-parse "^1.0.6" + resolve@^1.3.2: version "1.10.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba" dependencies: path-parse "^1.0.6" +responselike@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + dependencies: + lowercase-keys "^1.0.0" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -2955,10 +3782,28 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" +scoped-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/scoped-regex/-/scoped-regex-1.0.0.tgz#a346bb1acd4207ae70bd7c0c7ca9e566b6baddb8" + integrity sha1-o0a7Gs1CB65wvXwMfKnlZra63bg= + +"semver@2 || 3 || 4 || 5": + version "5.7.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" + integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== + semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: version "5.6.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" +"seq@>= 0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/seq/-/seq-0.3.5.tgz#ae02af3a424793d8ccbf212d69174e0c54dffe38" + integrity sha1-rgKvOkJHk9jMvyEtaRdODFTf/jg= + dependencies: + chainsaw ">=0.0.7 <0.1" + hashish ">=0.0.2 <0.1" + serialize-javascript@^1.4.0: version "1.6.1" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.6.1.tgz#4d1f697ec49429a847ca6f442a2a755126c4d879" @@ -3010,6 +3855,11 @@ signal-exit@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" +sketch-module-google-analytics@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/sketch-module-google-analytics/-/sketch-module-google-analytics-0.2.1.tgz#0763562d4179acb86d5d21c3aa1a9c3158e80914" + integrity sha512-/zSu4gTBoUidSCsXgkhoAf11XKaYHcyOZwZzZCHhnBaH2vstFjzlWTooZ6SbcN3Qabmd++tAVoBNRUY4w8YnFg== + sketch-polyfill-fetch@^0.4.3: version "0.4.3" resolved "https://registry.yarnpkg.com/sketch-polyfill-fetch/-/sketch-polyfill-fetch-0.4.3.tgz#6c05b80762ba14cd07185f1520290ccb8654c969" @@ -3047,6 +3897,13 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= + dependencies: + is-plain-obj "^1.0.0" + source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" @@ -3061,6 +3918,13 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" +source-map-support@^0.4.15: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== + dependencies: + source-map "^0.5.6" + source-map-support@~0.5.9: version "0.5.10" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.10.tgz#2214080bc9d51832511ee2bab96e3c2f9353120c" @@ -3072,7 +3936,7 @@ source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" -source-map@^0.5.0, source-map@^0.5.6: +source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" @@ -3080,6 +3944,32 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" +spdx-correct@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" + integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" + integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz#75ecd1a88de8c184ef015eafb51b5b48bfd11bb1" + integrity sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA== + split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -3137,6 +4027,11 @@ stream-shift@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -3176,14 +4071,33 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= + dependencies: + is-utf8 "^0.2.0" + strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= + dependencies: + get-stdin "^4.0.1" + strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -3234,6 +4148,11 @@ through2@^2.0.0: readable-stream "~2.3.6" xtend "~4.0.1" +timed-out@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= + timers-browserify@^2.0.4: version "2.0.10" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae" @@ -3244,6 +4163,11 @@ to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= + to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -3270,6 +4194,21 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" +traverse@>=0.2.4: + version "0.6.6" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" + integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc= + +"traverse@>=0.3.0 <0.4": + version "0.3.9" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" + integrity sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk= + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= + trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" @@ -3367,6 +4306,18 @@ urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= + dependencies: + prepend-http "^2.0.0" + +url-to-options@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" + integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k= + url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" @@ -3401,6 +4352,14 @@ util@^0.11.0: dependencies: inherits "2.0.3" +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + vm-browserify@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" @@ -3490,6 +4449,11 @@ wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" +xml-escape@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/xml-escape/-/xml-escape-1.1.0.tgz#3904c143fa8eb3a0030ec646d2902a2f1b706c44" + integrity sha1-OQTBQ/qOs6ADDsZG0pAqLxtwbEQ= + xtend@^4.0.0, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" From 6e9b9933565ea1e6e504d7cf011c40c501510d52 Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Thu, 4 Jul 2019 22:27:57 +0300 Subject: [PATCH 23/44] removed settings --- .../Contents/Sketch/manifest.json | 2 +- arrows.sketchplugin/Contents/Sketch/script.js | 246 +----------- .../Contents/Sketch/script.js.map | 2 +- .../Contents/Sketch/settings.js | 376 ++++++++++++++++++ .../Contents/Sketch/settings.js.map | 1 + src/manifest.json | 2 +- src/panel.js | 52 +++ src/script.js | 279 +------------ src/settings.js | 376 ++++++++++++++++++ 9 files changed, 810 insertions(+), 526 deletions(-) create mode 100644 arrows.sketchplugin/Contents/Sketch/settings.js create mode 100644 arrows.sketchplugin/Contents/Sketch/settings.js.map create mode 100644 src/panel.js create mode 100644 src/settings.js diff --git a/arrows.sketchplugin/Contents/Sketch/manifest.json b/arrows.sketchplugin/Contents/Sketch/manifest.json index 68a1ec0..740a13a 100644 --- a/arrows.sketchplugin/Contents/Sketch/manifest.json +++ b/arrows.sketchplugin/Contents/Sketch/manifest.json @@ -160,7 +160,7 @@ "name": "Settings", "description": "Provide settings for the arrows", "identifier": "settings", - "script": "script.js", + "script": "settings.js", "icon": "icon.png", "handler": "settings" }, diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index 44656fd..302864f 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -95,7 +95,7 @@ var exports = /*!***********************!*\ !*** ./src/script.js ***! \***********************/ -/*! exports provided: createAutoArrow, createRightArrow, createDownArrow, createLeftArrow, createUpArrow, createRightArrowWithCondition, createDownArrowWithCondition, createLeftArrowWithCondition, createUpArrowWithCondition, updateSelectedArrows, autoUpdateSelectedArrows, updateArtboardArrows, updateAllArrows, deleteAllArrows, deleteArtboardArrows, deleteSelectedArrows, settings, onLayersMoved, panel */ +/*! exports provided: createAutoArrow, createRightArrow, createDownArrow, createLeftArrow, createUpArrow, createRightArrowWithCondition, createDownArrowWithCondition, createLeftArrowWithCondition, createUpArrowWithCondition, updateSelectedArrows, autoUpdateSelectedArrows, updateArtboardArrows, updateAllArrows, deleteAllArrows, deleteArtboardArrows, deleteSelectedArrows */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -116,9 +116,6 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteAllArrows", function() { return deleteAllArrows; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteArtboardArrows", function() { return deleteArtboardArrows; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteSelectedArrows", function() { return deleteSelectedArrows; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "settings", function() { return settings; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "onLayersMoved", function() { return onLayersMoved; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "panel", function() { return panel; }); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); // @@ -386,135 +383,6 @@ function deleteSelectedArrows(context) { } else { sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Select two layers, please 🧐"); } -} -function settings(context) { - var alert = COSAlertWindow.new(); - var viewWidth = 300; - var viewHeight = 450; // Alert window settings - - alert = alertSetup(alert, viewWidth, viewHeight); - var view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight)); - alert.addAccessoryView(view); // Label: Arrow Style - - var arrowStyleLabel = alertLabel("Arrow Style", true, -1, viewHeight - 40, 280, 40); - view.addSubview(arrowStyleLabel); // Select: Arrow Style - - var arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20)); - setActiveStyleSetting(arrowStylingField); - view.addSubview(arrowStylingField); // Label: Arrow Style Info - - var arrowStyleInfoLabel = alertLabel("Add layer style to your document that will contain $arrow name and you will be able to specify it here ", false, -1, viewHeight - 80, 300, 40); - view.addSubview(arrowStyleInfoLabel); // Label: Arrow Type - - var arrowTypeLabel = alertLabel("Arrow Type", true, -1, viewHeight - 130, 280, 40); - view.addSubview(arrowTypeLabel); // Select: Arrow Type - - var arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20)); - setActiveTypeSetting(arrowTypeField); - view.addSubview(arrowTypeField); // Label: Arrow Type Info - - var arrowTypeInfoLabel = alertLabel("Select one of the arrow types. Angled is used by default", false, -1, viewHeight - 170, 300, 40); - view.addSubview(arrowTypeInfoLabel); // Label: Arrow Spacing - - var arrowSpacingLabel = alertLabel("Arrow Spacing", true, -1, viewHeight - 200, 330, 20); - view.addSubview(arrowSpacingLabel); // Label: Arrow Spacing PX - - var arrowSpacingPxLabel = alertLabel("px", true, 90, viewHeight - 220, 330, 20); - view.addSubview(arrowSpacingPxLabel); // Input: Arrow Spacing - - var arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20)); - var formatter = NSNumberFormatter.alloc().init().autorelease(); - arrowSpacingField.setStringValue(String(Settings.settingForKey("arrowSpacing"))); - arrowSpacingField.setFormatter(formatter); - view.addSubview(arrowSpacingField); // Stepper: Arrow Spacing - - var arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20)); - arrowSpacingStepper.setMaxValue(1000); - arrowSpacingStepper.setMinValue(0); - arrowSpacingStepper.setValueWraps(false); - arrowSpacingStepper.setAutorepeat(true); - arrowSpacingStepper.setCOSJSTargetFunction(function (sender) { - var value = 0 + sender.integerValue(); - arrowSpacingField.setStringValue(String(value)); - }); - view.addSubview(arrowSpacingStepper); // view.addSubview(formatter) - // Label: Auto Spacing Info - - var arrowSpacingInfoLabel = alertLabel("The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature ", false, -1, viewHeight - 285, 300, 60); - view.addSubview(arrowSpacingInfoLabel); // Label: Other Settings - - var otherSettingsLabel = alertLabel("Other Settings", true, -1, viewHeight - 330, 280, 40); - view.addSubview(otherSettingsLabel); // Checkbox: Auto-Align - - var checkbox = alertCheckbox("Second layer auto-align", false, -1, viewHeight - 340, 260, 40); - view.addSubview(checkbox); // Label: Auto-Align Info - - var autoAlignInfoLabel = alertLabel("Align the second layer for 5px misalignment with the first one", false, -1, viewHeight - 370, 280, 40); - view.addSubview(autoAlignInfoLabel); // Label: Plugin Info - - var pluginInfoLabel = alertLabel("Made by @faridSabitov with the support of EPAM.com ❤️", true, -1, viewHeight - 420, 280, 40); - view.addSubview(pluginInfoLabel); // Need to check if style is still available - // Show modal and get the results - - var modalResponse = alert.runModal(); - - if (modalResponse == NSAlertFirstButtonReturn) { - // When user clicks on "Update Settings" - // Need to save all this results into the Plugin Settings - context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), "arrowStyle", docData, pluginKey); - Settings.setSettingForKey("arrowType", alert.views()[0].subviews()[4].title()); - Settings.setSettingForKey("arrowSpacing", alert.views()[0].subviews()[8].intValue()); - Settings.setSettingForKey("autoAlign", alert.views()[0].subviews()[12].state()); - UI.message("Settings are updated 🚀"); - } -} -function onLayersMoved(context) { - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Please select more than two layers"); - var action = context.actionContext; -} -function panel(context) { - var ControlBar; - ControlBar = NSPanel.alloc().init(); - ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask); // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1)); - - ControlBar.setTitleVisibility(NSWindowTitleHidden); - ControlBar.setTitlebarAppearsTransparent(true); - ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false); - ControlBar.setMovableByWindowBackground(true); - ControlBar.setHasShadow(true); - ControlBar.setLevel(NSFloatingWindowLevel); // contentView.addSubview(closeButton) - - ControlBar.center(); - ControlBar.makeKeyAndOrderFront(nil); // getImage = function(size, name){ - // var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false; - // suffix = (isRetinaDisplay)? "@2x": "", - // imageURL = NSURL.fileURLWithPath(self.pluginResources + "/icons/" + name + suffix + ".png"), - // image = NSImage.alloc().initWithContentsOfURL(imageURL); - // return image - // }, - // addButton = function(rect, name, callAction){ - // var button = NSButton.alloc().initWithFrame(rect), - // image = getImage(rect.size, name); - // button.setImage(image); - // button.setBordered(false); - // button.sizeToFit(); - // button.setButtonType(NSMomentaryChangeButton); - // button.setCOSJSTargetFunction(callAction); - // button.setAction("callAction:"); - // return button; - // }, - // addImage = function(rect, name){ - // var view = NSImageView.alloc().initWithFrame(rect), - // image = getImage(rect.size, name); - // view.setImage(image); - // return view; - // }, - // closeButton = addButton( NSMakeRect(20, 10, 30, 30), "close-control", - // function(sender){ - // coscript.setShouldKeepAround(false); - // threadDictionary.removeObjectForKey(identifier); - // ControlBar.close(); - // }), } // // Functions // @@ -750,78 +618,6 @@ function findConnectionIndex(firstObjectID, secondObjectID, data) { return indexArray; } -function setActiveStyleSetting(arrowStylingField) { - var docSettings = context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey); - var styles = getLayerStyles(null); - - if (docSettings) { - // We have info about the settings in the current document - if (docSettings != "Default Style") { - // if user specified own option - arrowStylingField.addItemWithTitle(docSettings); - arrowStylingField.addItemWithTitle("Default Style"); - - for (var i = 0; i < styles.length; i++) { - if (styles[i].name() != docSettings) { - arrowStylingField.addItemWithTitle(styles[i].name()); - } - } - } else { - // Need to show the default first - arrowStylingField.addItemWithTitle("Default Style"); - - for (var _i = 0; _i < styles.length; _i++) { - arrowStylingField.addItemWithTitle(styles[_i].name()); - } - } - } else { - arrowStylingField.addItemWithTitle("Default Style"); - - for (var _i2 = 0; _i2 < styles.length; _i2++) { - arrowStylingField.addItemWithTitle(styles[_i2].name()); - } - } -} - -function setActiveTypeSetting(arrowTypeField) { - var docTypeSettings = Settings.settingForKey("arrowType"); - - if (docTypeSettings) { - // We have info about the settings in the current document - if (docTypeSettings == "Angled") { - arrowTypeField.addItemWithTitle("Angled"); - arrowTypeField.lastItem().setState(1); - arrowTypeField.addItemWithTitle("Curved"); - arrowTypeField.lastItem().setState(0); - arrowTypeField.addItemWithTitle("Straight"); - arrowTypeField.lastItem().setState(0); - } - - if (docTypeSettings == "Curved") { - arrowTypeField.addItemWithTitle("Curved"); - arrowTypeField.lastItem().setState(1); - arrowTypeField.addItemWithTitle("Straight"); - arrowTypeField.lastItem().setState(0); - arrowTypeField.addItemWithTitle("Angled"); - arrowTypeField.lastItem().setState(0); - } - - if (docTypeSettings == "Straight") { - arrowTypeField.addItemWithTitle("Straight"); - arrowTypeField.lastItem().setState(1); - arrowTypeField.addItemWithTitle("Angled"); - arrowTypeField.lastItem().setState(0); - arrowTypeField.addItemWithTitle("Curved"); - arrowTypeField.lastItem().setState(0); - } - } else { - // Show default - arrowTypeField.addItemWithTitle("Angled"); - arrowTypeField.addItemWithTitle("Curved"); - arrowTypeField.addItemWithTitle("Straight"); - } -} - function deleteConnectionFromData(connectionIndex) { // Refactored var newConnections = []; @@ -966,45 +762,6 @@ function getSourceObjectFromSelection(selection, direction) { return sourceObjectID; } -function alertSetup(alert, viewWidth, viewHeight) { - // Title - alert.setMessageText("Arrow Plugin Settings"); // Creating dialog buttons - - alert.addButtonWithTitle("Update Settings"); - alert.addButtonWithTitle("Cancel"); - return alert; -} - -function alertLabel(message, state, x, y, width, height) { - var infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height)); - infoLabel.setStringValue(message); - infoLabel.setSelectable(false); - infoLabel.setDrawsBackground(false); - infoLabel.setBezeled(false); - - if (state == false) { - infoLabel.textColor = NSColor.disabledControlTextColor(); - } - - return infoLabel; -} - -function alertCheckbox(message, state, x, y, width, height) { - var checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height)); - checkbox.setButtonType(NSSwitchButton); - checkbox.setBezelStyle(0); - checkbox.setTitle(message); - - if (Settings.settingForKey("autoAlign")) { - var currentState = Settings.settingForKey("autoAlign"); - checkbox.setState(currentState); - } else { - checkbox.setState(state); - } - - return checkbox; -} - function getLayerStyles(name) { // Refactored var allStyles = docData.allLayerStyles(); @@ -1600,7 +1357,6 @@ that['updateAllArrows'] = __skpm_run.bind(this, 'updateAllArrows'); that['deleteSelectedArrows'] = __skpm_run.bind(this, 'deleteSelectedArrows'); that['deleteArtboardArrows'] = __skpm_run.bind(this, 'deleteArtboardArrows'); that['deleteAllArrows'] = __skpm_run.bind(this, 'deleteAllArrows'); -that['settings'] = __skpm_run.bind(this, 'settings'); that['panel'] = __skpm_run.bind(this, 'panel') //# sourceMappingURL=script.js.map \ No newline at end of file diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index 4450aec..f2096ca 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","Settings","pluginKey","document","docData","pluginData","currentParentGroup","newConnectionsData","context","sketch","fromNative","documentData","command","valueForKey_onLayer_forPluginIdentifier","currentPage","currentArtboard","getConnectionsData","actionContext","createAutoArrow","start","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","updateSelectedArrows","selection","count","class","currentConnectionsData","g","objectID","connectionIndex","findConnectionIndex","length","updateArrow","firstObject","secondObject","style","type","direction","line","condition","isCondition","message","setValue_forKey_onLayer_forPluginIdentifier","autoUpdateSelectedArrows","action","movedLayers","Array","from","layers","map","layer","log","id","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","updateArrowsCounter","i","getLayerWithID","sketchObject","parentArtboard","push","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","settingForKey","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","views","subviews","title","setSettingForKey","intValue","state","onLayersMoved","panel","ControlBar","NSPanel","setStyleMask","NSTitledWindowMask","NSFullSizeContentViewWindowMask","setTitleVisibility","NSWindowTitleHidden","setTitlebarAppearsTransparent","setFrame_display","setMovableByWindowBackground","setHasShadow","setLevel","NSFloatingWindowLevel","center","makeKeyAndOrderFront","nil","firstObjectID","secondObjectID","lineID","conditionID","conditionObject","remove","createArrow","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","checkForGroup","groupName","currentGroup","name","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","addLayers","fixGeometryWithOptions","Group","group","parent","locked","moveToBack","adjustToFit","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","dataArray","data","indexArray","docSettings","styles","getLayerStyles","addItemWithTitle","docTypeSettings","lastItem","setState","newConnections","lineObject","selectedGroup","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","defineSourceObject","getSourceObjectFromSelection","setMessageText","addButtonWithTitle","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","allStyles","allLayerStyles","keyword","includes","libraries","getLibraries","libraryObject","symbolReferences","symbol","getImportableSymbolReferencesForDocument","symbolMaster","import","createNewInstance","firstObjectAbsPos","changeBasis","to","secondObjectAbsPos","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","setName","points","cornerRadius","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","localStyle","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","//\n// Variables\n//\n\nimport sketch from 'sketch';\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, newConnectionsData;\nif(context.document){\n //cc:remember place\n document = sketch.fromNative(context.document);\n docData = context.document.documentData();\n pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n newConnectionsData = getConnectionsData();\n} else {\n document = sketch.fromNative(context.actionContext.document);\n //cc:here is bug;well, seems like a bug in logic\n}\n \n//\n// Create Connection Function\n//\n\n\nexport function createAutoArrow(context){start(context, \"Auto\", false);}\nexport function createRightArrow(context){start(context, \"Right\", false);}\nexport function createDownArrow(context){start(context, \"Down\", false);}\nexport function createLeftArrow(context){start(context, \"Left\", false);}\nexport function createUpArrow(context){start(context, \"Up\", false);}\n\nexport function createRightArrowWithCondition(context){start(context, \"Right\", true);}\nexport function createDownArrowWithCondition(context){start(context, \"Down\", true);}\nexport function createLeftArrowWithCondition(context){start(context, \"Left\", true);}\nexport function createUpArrowWithCondition(context){start(context, \"Up\", true);}\n\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n let selection = context.selection;\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let currentConnectionsData = newConnectionsData; // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), currentConnectionsData);\n\n if(connectionIndex.length == 0){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex);\n sketch.UI.message(\"Current connection is updated 🤘\");\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\");\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n \n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\nexport function autoUpdateSelectedArrows(context) { \n const action = context.actionContext;\n\n docData = action.document.documentData();\n pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n newConnectionsData = getConnectionsData();\n\n const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer));\n log(movedLayers[0].id);\n log(movedLayers.length);\n\n // if (movedLayers.filter(layer => (layer.type == 'Artboard' || (layer.type == 'SymbolMaster' && config.arrangeSymbols))).length > 0) {\n // ArrangeArtboards(context)\n // }\n\n let currentConnectionsData = newConnectionsData; // Need to refactor\n\n for(let g = 0; g < movedLayers.length; g++) {\n\n let connectionIndex = findConnectionIndex(movedLayers[0].id, null, currentConnectionsData);\n\n log(\"yes \"+connectionIndex);\n if(connectionIndex.length == 0){\n \n updateArrow(currentConnectionsData[connectionIndex[0]].firstObject, currentConnectionsData[connectionIndex[0]].secondObject, currentConnectionsData[connectionIndex[0]].style, currentConnectionsData[connectionIndex[0]].type, currentConnectionsData[connectionIndex[0]].direction, currentConnectionsData[connectionIndex[0]].line, currentConnectionsData[connectionIndex[0]].condition, currentConnectionsData[connectionIndex[0]].isCondition, connectionIndex[0]);\n sketch.UI.message(\"Current connection is updated 🤘\");\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\");\n }\n \n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n}\n\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection;\n let connections = getConnectionsData();\n let firstObjectArtboard;\n let secondObjectArtboard;\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject);\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID();\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject);\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID();\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i);\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i]);\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows are updated 🚀\");\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\");\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData;\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows are updated 🚀\");\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\");\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows are deleted\");\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\");\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection;\n let firstObject, secondObject;\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData();\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject);\n secondObject = document.getLayerWithID(connections[i].secondObject);\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line);\n newConnectionsData = deleteConnectionFromData(i);\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows from selected artboard are deleted\");\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\");\n }\n } else {\n sketch.UI.message(\"Please select one artboard\");\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection;\n let firstObject, secondObject;\n\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n \n let connections = getConnectionsData() ;\n let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), connections);\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line);\n newConnectionsData = deleteConnectionFromData(connectionIndex);\n const updateArrowsCounter = connections.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject);\n secondObject = document.getLayerWithID(connections[i].secondObject);\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line);\n newConnectionsData = deleteConnectionFromData(i);\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\");\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\");\n }\n}\n\nexport function settings(context) {\n let alert = COSAlertWindow.new();\n const viewWidth = 300;\n const viewHeight = 450;\n \n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight);\n let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight));\n alert.addAccessoryView(view);\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\"Arrow Style\", true, -1, viewHeight-40, 280, 40);\n view.addSubview(arrowStyleLabel);\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20));\n setActiveStyleSetting(arrowStylingField);\n view.addSubview(arrowStylingField);\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\"Add layer style to your document that will contain $arrow name and you will be able to specify it here \", false, -1, viewHeight-80, 300, 40);\n view.addSubview(arrowStyleInfoLabel);\n\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\"Arrow Type\", true, -1, viewHeight-130, 280, 40);\n view.addSubview(arrowTypeLabel);\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20));\n setActiveTypeSetting(arrowTypeField);\n view.addSubview(arrowTypeField);\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\"Select one of the arrow types. Angled is used by default\", false, -1, viewHeight-170, 300, 40);\n view.addSubview(arrowTypeInfoLabel);\n\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\"Arrow Spacing\", true, -1, viewHeight - 200, 330, 20);\n view.addSubview(arrowSpacingLabel);\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\"px\", true, 90, viewHeight - 220, 330, 20);\n view.addSubview(arrowSpacingPxLabel);\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20));\n var formatter = NSNumberFormatter.alloc().init().autorelease();\n arrowSpacingField.setStringValue(String(Settings.settingForKey(\"arrowSpacing\")));\n arrowSpacingField.setFormatter(formatter);\n view.addSubview(arrowSpacingField);\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20));\n arrowSpacingStepper.setMaxValue(1000);\n arrowSpacingStepper.setMinValue(0);\n arrowSpacingStepper.setValueWraps(false);\n arrowSpacingStepper.setAutorepeat(true);\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender){\n var value = 0 + sender.integerValue();\n arrowSpacingField.setStringValue(String(value));\n })\n \n view.addSubview(arrowSpacingStepper);\n // view.addSubview(formatter)\n \n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \", false, -1, viewHeight-285, 300, 60);\n view.addSubview(arrowSpacingInfoLabel);\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\"Other Settings\", true, -1, viewHeight-330, 280, 40);\n view.addSubview(otherSettingsLabel);\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\"Second layer auto-align\", false, -1, viewHeight-340, 260, 40);\n view.addSubview(checkbox);\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\"Align the second layer for 5px misalignment with the first one\", false, -1, viewHeight-370, 280, 40);\n view.addSubview(autoAlignInfoLabel);\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\"Made by @faridSabitov with the support of EPAM.com ❤️\", true, -1, viewHeight-420, 280, 40);\n view.addSubview(pluginInfoLabel);\n\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal();\n\n if(modalResponse == NSAlertFirstButtonReturn){\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), \"arrowStyle\", docData, pluginKey);\n Settings.setSettingForKey(\"arrowType\", alert.views()[0].subviews()[4].title());\n Settings.setSettingForKey(\"arrowSpacing\", alert.views()[0].subviews()[8].intValue());\n Settings.setSettingForKey(\"autoAlign\", alert.views()[0].subviews()[12].state());\n UI.message(\"Settings are updated 🚀\");\n }\n}\n\nexport function onLayersMoved(context) {\n sketch.UI.message(\"Please select more than two layers\");\n const action = context.actionContext ;\n}\n\nexport function panel(context) {\n let ControlBar;\n ControlBar = NSPanel.alloc().init();\n ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask);\n // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1));\n ControlBar.setTitleVisibility(NSWindowTitleHidden);\n ControlBar.setTitlebarAppearsTransparent(true);\n ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false);\n ControlBar.setMovableByWindowBackground(true);\n ControlBar.setHasShadow(true);\n ControlBar.setLevel(NSFloatingWindowLevel);\n\n // contentView.addSubview(closeButton)\n ControlBar.center();\n ControlBar.makeKeyAndOrderFront(nil);\n\n// getImage = function(size, name){\n// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false;\n// suffix = (isRetinaDisplay)? \"@2x\": \"\",\n// imageURL = NSURL.fileURLWithPath(self.pluginResources + \"/icons/\" + name + suffix + \".png\"),\n// image = NSImage.alloc().initWithContentsOfURL(imageURL);\n// return image\n// },\n// addButton = function(rect, name, callAction){\n// var button = NSButton.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n\n// button.setImage(image);\n// button.setBordered(false);\n// button.sizeToFit();\n// button.setButtonType(NSMomentaryChangeButton);\n// button.setCOSJSTargetFunction(callAction);\n// button.setAction(\"callAction:\");\n// return button;\n// },\n// addImage = function(rect, name){\n// var view = NSImageView.alloc().initWithFrame(rect),\n// image = getImage(rect.size, name);\n// view.setImage(image);\n// return view;\n// },\n\n// closeButton = addButton( NSMakeRect(20, 10, 30, 30), \"close-control\",\n// function(sender){\n// coscript.setShouldKeepAround(false);\n// threadDictionary.removeObjectForKey(identifier);\n// ControlBar.close();\n// }),\n\n\n\n}\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let conditionObject = document.getLayerWithID(conditionID);\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID);\n if(conditionID && !isCondition){\n if(conditionObject){conditionObject.remove();}\n }\n \n newConnectionsData = deleteConnectionFromData(connectionIndex);\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition);\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n\n // Need to save this data to the global array\n newConnectionsData.push(connection);\n}\n\nfunction checkForGroup(groupName) { // refactored\n let currentGroup = null;\n\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n\n return currentGroup;\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition){ // Refactored\n // Process of creating new connection \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n // Condition\n if(condition == true){\n if(conditionID != null){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY);\n }\n } else {\n connection.conditionID = null;\n }\n // connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style);\n\n // Add to group\n addToArrowsGroup(connection.line);\n \n return connection\n}\n\nfunction addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\");\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nfunction addToConditionGroup(condition, x, y){ // Refactored\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Conditions',\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n}\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = [];\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i]);\n }\n } \n return dataArray;\n}\n\nfunction findConnectionIndex(firstObjectID, secondObjectID, data){\n let indexArray = [] ;\n firstObjectID = String(firstObjectID);\n secondObjectID = String(secondObjectID);\n \n if(pluginData){\n // If we have database, need to check for connections\n for(let y = 0; y < data.length; y++){\n if(firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject){\n if(secondObjectID == null){\n // When we need to find connection between two objects\n if(secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject){\n indexArray[0] = y;\n } \n } else {\n // When we need to find a connection for one object only\n indexArray.push(y);\n }\n }\n }\n }\n return indexArray;\n}\n\nfunction setActiveStyleSetting(arrowStylingField){\n let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey);\n let styles = getLayerStyles(null);\n\n if(docSettings){\n // We have info about the settings in the current document\n \n if(docSettings != \"Default Style\") {\n // if user specified own option\n arrowStylingField.addItemWithTitle(docSettings);\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for(let i = 0; i < styles.length; i++){\n if(styles[i].name() != docSettings){\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n\n } else {\n // Need to show the default first\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n } else {\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for(let i = 0; i < styles.length; i++){\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n}\n\nfunction setActiveTypeSetting(arrowTypeField){\n let docTypeSettings = Settings.settingForKey(\"arrowType\"); \n\n\n if(docTypeSettings){\n // We have info about the settings in the current document\n \n if(docTypeSettings == \"Angled\"){\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(0);\n } \n\n if(docTypeSettings == \"Curved\"){\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(0);\n } \n\n if(docTypeSettings == \"Straight\"){\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(0);\n } \n } else {\n // Show default\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.addItemWithTitle(\"Straight\");\n }\n\n}\n\nfunction deleteConnectionFromData(connectionIndex){ // Refactored\n let newConnections = [];\n if(pluginData){\n // If we have database\n let connections = pluginData;\n\n for (let i = 0; i < connections.length; i ++) {\n // Updating all connections without deleted one\n if(i != connectionIndex){\n newConnections.push(connections[i]);\n }\n }\n }\n return newConnections;\n}\n\nfunction deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let sourceObjectID;\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n return sourceObjectID;\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID();\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction);\n }\n }\n \n return sourceObjectID;\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight){\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\");\n \n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\");\n alert.addButtonWithTitle(\"Cancel\");\n \n return alert;\n}\n\nfunction alertLabel(message, state, x, y, width, height){\n let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height));\n\n infoLabel.setStringValue(message);\n infoLabel.setSelectable(false);\n infoLabel.setDrawsBackground(false);\n infoLabel.setBezeled(false);\n\n if(state == false){\n infoLabel.textColor = NSColor.disabledControlTextColor();\n }\n\n return infoLabel;\n}\n\nfunction alertCheckbox(message, state, x, y, width, height){\n let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height));\n\n checkbox.setButtonType(NSSwitchButton);\n checkbox.setBezelStyle(0);\n checkbox.setTitle(message);\n if(Settings.settingForKey(\"autoAlign\")){\n let currentState = Settings.settingForKey(\"autoAlign\") ; \n checkbox.setState(currentState);\n } else {\n checkbox.setState(state);\n }\n\n return checkbox;\n}\n\nfunction getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n\n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n\treturn styles;\n}\n\nfunction start(context, direction, isCondition){\n //cc:start#1;Passing all the data\n let selection = context.selection;\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction);\n let currentConnectionsData = newConnectionsData; // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), currentConnectionsData);\n \n if(connectionIndex.length == 0){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition);\n sketch.UI.message(\"New connection is created 🚀\");\n } else {\n // Need to remake the arrow condition\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex);\n sketch.UI.message(\"Current connection is updated 🤘\");\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\nfunction addCondition(keyword, x, y){ // Refactored\n let libraries = sketch.getLibraries();\n let libraryObject, symbolReferences, symbol;\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document);\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n libraryObject = symbolReferences[i];\n }\n }\n }\n\n if(libraryObject == null){\n symbol = null;\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here');\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y);\n }\n\n return symbol;\n}\n\nfunction updateCondition(conditionID, x, y){ // Refactored\n let condition = document.getLayerWithID(conditionID);\n // log (condition)\n let conGroup = checkForGroup(\"Conditions\") ;\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n }\n return condition.id;\n}\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\");\n let diffX, diffY;\n\n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n\n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n\n return connectionPos\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n\n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n\n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n\n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n\n return line;\n}\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n\n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n\n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n\n if(firstLayerPosX 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let currentConnectionsData = newConnectionsData; // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), currentConnectionsData);\n\n if(connectionIndex.length == 0){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex);\n sketch.UI.message(\"Current connection is updated 🤘\");\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\");\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n \n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\nexport function autoUpdateSelectedArrows(context) { \n const action = context.actionContext;\n\n docData = action.document.documentData();\n pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n newConnectionsData = getConnectionsData();\n\n const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer));\n log(movedLayers[0].id);\n log(movedLayers.length);\n\n // if (movedLayers.filter(layer => (layer.type == 'Artboard' || (layer.type == 'SymbolMaster' && config.arrangeSymbols))).length > 0) {\n // ArrangeArtboards(context)\n // }\n\n let currentConnectionsData = newConnectionsData; // Need to refactor\n\n for(let g = 0; g < movedLayers.length; g++) {\n\n let connectionIndex = findConnectionIndex(movedLayers[0].id, null, currentConnectionsData);\n\n log(\"yes \"+connectionIndex);\n if(connectionIndex.length == 0){\n \n updateArrow(currentConnectionsData[connectionIndex[0]].firstObject, currentConnectionsData[connectionIndex[0]].secondObject, currentConnectionsData[connectionIndex[0]].style, currentConnectionsData[connectionIndex[0]].type, currentConnectionsData[connectionIndex[0]].direction, currentConnectionsData[connectionIndex[0]].line, currentConnectionsData[connectionIndex[0]].condition, currentConnectionsData[connectionIndex[0]].isCondition, connectionIndex[0]);\n sketch.UI.message(\"Current connection is updated 🤘\");\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\");\n }\n \n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n}\n\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection;\n let connections = getConnectionsData();\n let firstObjectArtboard;\n let secondObjectArtboard;\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject);\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID();\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject);\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID();\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i);\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i]);\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows are updated 🚀\");\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\");\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData;\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows are updated 🚀\");\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\");\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows are deleted\");\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\");\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection;\n let firstObject, secondObject;\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData();\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject);\n secondObject = document.getLayerWithID(connections[i].secondObject);\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line);\n newConnectionsData = deleteConnectionFromData(i);\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows from selected artboard are deleted\");\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\");\n }\n } else {\n sketch.UI.message(\"Please select one artboard\");\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection;\n let firstObject, secondObject;\n\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n \n let connections = getConnectionsData() ;\n let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), connections);\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line);\n newConnectionsData = deleteConnectionFromData(connectionIndex);\n const updateArrowsCounter = connections.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject);\n secondObject = document.getLayerWithID(connections[i].secondObject);\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line);\n newConnectionsData = deleteConnectionFromData(i);\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\");\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\");\n }\n}\n\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let conditionObject = document.getLayerWithID(conditionID);\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID);\n if(conditionID && !isCondition){\n if(conditionObject){conditionObject.remove();}\n }\n \n newConnectionsData = deleteConnectionFromData(connectionIndex);\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition);\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n\n // Need to save this data to the global array\n newConnectionsData.push(connection);\n}\n\nfunction checkForGroup(groupName) { // refactored\n let currentGroup = null;\n\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n\n return currentGroup;\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition){ // Refactored\n // Process of creating new connection \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n // Condition\n if(condition == true){\n if(conditionID != null){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY);\n }\n } else {\n connection.conditionID = null;\n }\n // connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style);\n\n // Add to group\n addToArrowsGroup(connection.line);\n \n return connection\n}\n\nfunction addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\");\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nfunction addToConditionGroup(condition, x, y){ // Refactored\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Conditions',\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n}\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = [];\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i]);\n }\n } \n return dataArray;\n}\n\nfunction findConnectionIndex(firstObjectID, secondObjectID, data){\n let indexArray = [] ;\n firstObjectID = String(firstObjectID);\n secondObjectID = String(secondObjectID);\n \n if(pluginData){\n // If we have database, need to check for connections\n for(let y = 0; y < data.length; y++){\n if(firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject){\n if(secondObjectID == null){\n // When we need to find connection between two objects\n if(secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject){\n indexArray[0] = y;\n } \n } else {\n // When we need to find a connection for one object only\n indexArray.push(y);\n }\n }\n }\n }\n return indexArray;\n}\n\nfunction deleteConnectionFromData(connectionIndex){ // Refactored\n let newConnections = [];\n if(pluginData){\n // If we have database\n let connections = pluginData;\n\n for (let i = 0; i < connections.length; i ++) {\n // Updating all connections without deleted one\n if(i != connectionIndex){\n newConnections.push(connections[i]);\n }\n }\n }\n return newConnections;\n}\n\nfunction deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let sourceObjectID;\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n return sourceObjectID;\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID();\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction);\n }\n }\n \n return sourceObjectID;\n}\n\nfunction getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n\n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n\treturn styles;\n}\n\nfunction start(context, direction, isCondition){\n //cc:start#1;Passing all the data\n let selection = context.selection;\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction);\n let currentConnectionsData = newConnectionsData; // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), currentConnectionsData);\n \n if(connectionIndex.length == 0){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition);\n sketch.UI.message(\"New connection is created 🚀\");\n } else {\n // Need to remake the arrow condition\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex);\n sketch.UI.message(\"Current connection is updated 🤘\");\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\nfunction addCondition(keyword, x, y){ // Refactored\n let libraries = sketch.getLibraries();\n let libraryObject, symbolReferences, symbol;\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document);\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n libraryObject = symbolReferences[i];\n }\n }\n }\n\n if(libraryObject == null){\n symbol = null;\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here');\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y);\n }\n\n return symbol;\n}\n\nfunction updateCondition(conditionID, x, y){ // Refactored\n let condition = document.getLayerWithID(conditionID);\n // log (condition)\n let conGroup = checkForGroup(\"Conditions\") ;\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n }\n return condition.id;\n}\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\");\n let diffX, diffY;\n\n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n\n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n\n return connectionPos\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n\n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n\n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n\n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n\n return line;\n}\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n\n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n\n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n\n if(firstLayerPosX 1)? true: false; +// suffix = (isRetinaDisplay)? "@2x": "", +// imageURL = NSURL.fileURLWithPath(self.pluginResources + "/icons/" + name + suffix + ".png"), +// image = NSImage.alloc().initWithContentsOfURL(imageURL); +// return image +// }, +// addButton = function(rect, name, callAction){ +// var button = NSButton.alloc().initWithFrame(rect), +// image = getImage(rect.size, name); + +// button.setImage(image); +// button.setBordered(false); +// button.sizeToFit(); +// button.setButtonType(NSMomentaryChangeButton); +// button.setCOSJSTargetFunction(callAction); +// button.setAction("callAction:"); +// return button; +// }, +// addImage = function(rect, name){ +// var view = NSImageView.alloc().initWithFrame(rect), +// image = getImage(rect.size, name); +// view.setImage(image); +// return view; +// }, + +// closeButton = addButton( NSMakeRect(20, 10, 30, 30), "close-control", +// function(sender){ +// coscript.setShouldKeepAround(false); +// threadDictionary.removeObjectForKey(identifier); +// ControlBar.close(); +// }), + + + +} \ No newline at end of file diff --git a/src/script.js b/src/script.js index b8b58af..33a3723 100644 --- a/src/script.js +++ b/src/script.js @@ -252,167 +252,6 @@ export function deleteSelectedArrows(context) { } } -export function settings(context) { - let alert = COSAlertWindow.new(); - const viewWidth = 300; - const viewHeight = 450; - - // Alert window settings - alert = alertSetup(alert, viewWidth, viewHeight); - let view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight)); - alert.addAccessoryView(view); - - // Label: Arrow Style - let arrowStyleLabel = alertLabel("Arrow Style", true, -1, viewHeight-40, 280, 40); - view.addSubview(arrowStyleLabel); - - // Select: Arrow Style - let arrowStylingField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 40, 300, 20)); - setActiveStyleSetting(arrowStylingField); - view.addSubview(arrowStylingField); - - // Label: Arrow Style Info - let arrowStyleInfoLabel = alertLabel("Add layer style to your document that will contain $arrow name and you will be able to specify it here ", false, -1, viewHeight-80, 300, 40); - view.addSubview(arrowStyleInfoLabel); - - - // Label: Arrow Type - let arrowTypeLabel = alertLabel("Arrow Type", true, -1, viewHeight-130, 280, 40); - view.addSubview(arrowTypeLabel); - - // Select: Arrow Type - let arrowTypeField = NSPopUpButton.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 130, 300, 20)); - setActiveTypeSetting(arrowTypeField); - view.addSubview(arrowTypeField); - - // Label: Arrow Type Info - let arrowTypeInfoLabel = alertLabel("Select one of the arrow types. Angled is used by default", false, -1, viewHeight-170, 300, 40); - view.addSubview(arrowTypeInfoLabel); - - - // Label: Arrow Spacing - let arrowSpacingLabel = alertLabel("Arrow Spacing", true, -1, viewHeight - 200, 330, 20); - view.addSubview(arrowSpacingLabel); - - // Label: Arrow Spacing PX - let arrowSpacingPxLabel = alertLabel("px", true, 90, viewHeight - 220, 330, 20); - view.addSubview(arrowSpacingPxLabel); - - // Input: Arrow Spacing - let arrowSpacingField = NSTextField.alloc().initWithFrame(NSMakeRect(-2, viewHeight - 220, 80, 20)); - var formatter = NSNumberFormatter.alloc().init().autorelease(); - arrowSpacingField.setStringValue(String(Settings.settingForKey("arrowSpacing"))); - arrowSpacingField.setFormatter(formatter); - view.addSubview(arrowSpacingField); - - // Stepper: Arrow Spacing - let arrowSpacingStepper = NSStepper.alloc().initWithFrame(NSMakeRect(70, viewHeight - 220, 20, 20)); - arrowSpacingStepper.setMaxValue(1000); - arrowSpacingStepper.setMinValue(0); - arrowSpacingStepper.setValueWraps(false); - arrowSpacingStepper.setAutorepeat(true); - arrowSpacingStepper.setCOSJSTargetFunction(function(sender){ - var value = 0 + sender.integerValue(); - arrowSpacingField.setStringValue(String(value)); - }) - - view.addSubview(arrowSpacingStepper); - // view.addSubview(formatter) - - // Label: Auto Spacing Info - let arrowSpacingInfoLabel = alertLabel("The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature ", false, -1, viewHeight-285, 300, 60); - view.addSubview(arrowSpacingInfoLabel); - - // Label: Other Settings - let otherSettingsLabel = alertLabel("Other Settings", true, -1, viewHeight-330, 280, 40); - view.addSubview(otherSettingsLabel); - - // Checkbox: Auto-Align - let checkbox = alertCheckbox("Second layer auto-align", false, -1, viewHeight-340, 260, 40); - view.addSubview(checkbox); - - // Label: Auto-Align Info - let autoAlignInfoLabel = alertLabel("Align the second layer for 5px misalignment with the first one", false, -1, viewHeight-370, 280, 40); - view.addSubview(autoAlignInfoLabel); - - // Label: Plugin Info - let pluginInfoLabel = alertLabel("Made by @faridSabitov with the support of EPAM.com ❤️", true, -1, viewHeight-420, 280, 40); - view.addSubview(pluginInfoLabel); - - - // Need to check if style is still available - - // Show modal and get the results - let modalResponse = alert.runModal(); - - if(modalResponse == NSAlertFirstButtonReturn){ - // When user clicks on "Update Settings" - // Need to save all this results into the Plugin Settings - context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), "arrowStyle", docData, pluginKey); - Settings.setSettingForKey("arrowType", alert.views()[0].subviews()[4].title()); - Settings.setSettingForKey("arrowSpacing", alert.views()[0].subviews()[8].intValue()); - Settings.setSettingForKey("autoAlign", alert.views()[0].subviews()[12].state()); - UI.message("Settings are updated 🚀"); - } -} - -export function onLayersMoved(context) { - sketch.UI.message("Please select more than two layers"); - const action = context.actionContext ; -} - -export function panel(context) { - let ControlBar; - ControlBar = NSPanel.alloc().init(); - ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask); - // ControlBar.setBackgroundColor(NSColor.colorWithRed_green_blue_alpha(0.99, 0.99, 0.99, 1)); - ControlBar.setTitleVisibility(NSWindowTitleHidden); - ControlBar.setTitlebarAppearsTransparent(true); - ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false); - ControlBar.setMovableByWindowBackground(true); - ControlBar.setHasShadow(true); - ControlBar.setLevel(NSFloatingWindowLevel); - - // contentView.addSubview(closeButton) - ControlBar.center(); - ControlBar.makeKeyAndOrderFront(nil); - -// getImage = function(size, name){ -// var isRetinaDisplay = (NSScreen.mainScreen().backingScaleFactor() > 1)? true: false; -// suffix = (isRetinaDisplay)? "@2x": "", -// imageURL = NSURL.fileURLWithPath(self.pluginResources + "/icons/" + name + suffix + ".png"), -// image = NSImage.alloc().initWithContentsOfURL(imageURL); -// return image -// }, -// addButton = function(rect, name, callAction){ -// var button = NSButton.alloc().initWithFrame(rect), -// image = getImage(rect.size, name); - -// button.setImage(image); -// button.setBordered(false); -// button.sizeToFit(); -// button.setButtonType(NSMomentaryChangeButton); -// button.setCOSJSTargetFunction(callAction); -// button.setAction("callAction:"); -// return button; -// }, -// addImage = function(rect, name){ -// var view = NSImageView.alloc().initWithFrame(rect), -// image = getImage(rect.size, name); -// view.setImage(image); -// return view; -// }, - -// closeButton = addButton( NSMakeRect(20, 10, 30, 30), "close-control", -// function(sender){ -// coscript.setShouldKeepAround(false); -// threadDictionary.removeObjectForKey(identifier); -// ControlBar.close(); -// }), - - - -} // // Functions @@ -633,80 +472,6 @@ function findConnectionIndex(firstObjectID, secondObjectID, data){ return indexArray; } -function setActiveStyleSetting(arrowStylingField){ - let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey); - let styles = getLayerStyles(null); - - if(docSettings){ - // We have info about the settings in the current document - - if(docSettings != "Default Style") { - // if user specified own option - arrowStylingField.addItemWithTitle(docSettings); - arrowStylingField.addItemWithTitle("Default Style"); - for(let i = 0; i < styles.length; i++){ - if(styles[i].name() != docSettings){ - arrowStylingField.addItemWithTitle(styles[i].name()); - } - } - - } else { - // Need to show the default first - arrowStylingField.addItemWithTitle("Default Style"); - for(let i = 0; i < styles.length; i++){ - arrowStylingField.addItemWithTitle(styles[i].name()); - } - } - } else { - arrowStylingField.addItemWithTitle("Default Style"); - for(let i = 0; i < styles.length; i++){ - arrowStylingField.addItemWithTitle(styles[i].name()); - } - } -} - -function setActiveTypeSetting(arrowTypeField){ - let docTypeSettings = Settings.settingForKey("arrowType"); - - - if(docTypeSettings){ - // We have info about the settings in the current document - - if(docTypeSettings == "Angled"){ - arrowTypeField.addItemWithTitle("Angled"); - arrowTypeField.lastItem().setState(1); - arrowTypeField.addItemWithTitle("Curved"); - arrowTypeField.lastItem().setState(0); - arrowTypeField.addItemWithTitle("Straight"); - arrowTypeField.lastItem().setState(0); - } - - if(docTypeSettings == "Curved"){ - arrowTypeField.addItemWithTitle("Curved"); - arrowTypeField.lastItem().setState(1); - arrowTypeField.addItemWithTitle("Straight"); - arrowTypeField.lastItem().setState(0); - arrowTypeField.addItemWithTitle("Angled"); - arrowTypeField.lastItem().setState(0); - } - - if(docTypeSettings == "Straight"){ - arrowTypeField.addItemWithTitle("Straight"); - arrowTypeField.lastItem().setState(1); - arrowTypeField.addItemWithTitle("Angled"); - arrowTypeField.lastItem().setState(0); - arrowTypeField.addItemWithTitle("Curved"); - arrowTypeField.lastItem().setState(0); - } - } else { - // Show default - arrowTypeField.addItemWithTitle("Angled"); - arrowTypeField.addItemWithTitle("Curved"); - arrowTypeField.addItemWithTitle("Straight"); - } - -} - function deleteConnectionFromData(connectionIndex){ // Refactored let newConnections = []; if(pluginData){ @@ -838,48 +603,6 @@ function getSourceObjectFromSelection(selection, direction){ //Refactored return sourceObjectID; } -function alertSetup(alert, viewWidth, viewHeight){ - // Title - alert.setMessageText("Arrow Plugin Settings"); - - // Creating dialog buttons - alert.addButtonWithTitle("Update Settings"); - alert.addButtonWithTitle("Cancel"); - - return alert; -} - -function alertLabel(message, state, x, y, width, height){ - let infoLabel = NSTextField.alloc().initWithFrame(NSMakeRect(x, y, width, height)); - - infoLabel.setStringValue(message); - infoLabel.setSelectable(false); - infoLabel.setDrawsBackground(false); - infoLabel.setBezeled(false); - - if(state == false){ - infoLabel.textColor = NSColor.disabledControlTextColor(); - } - - return infoLabel; -} - -function alertCheckbox(message, state, x, y, width, height){ - let checkbox = NSButton.alloc().initWithFrame(NSMakeRect(x, y, width, height)); - - checkbox.setButtonType(NSSwitchButton); - checkbox.setBezelStyle(0); - checkbox.setTitle(message); - if(Settings.settingForKey("autoAlign")){ - let currentState = Settings.settingForKey("autoAlign") ; - checkbox.setState(currentState); - } else { - checkbox.setState(state); - } - - return checkbox; -} - function getLayerStyles(name) { // Refactored let allStyles = docData.allLayerStyles(); let keyword = "$arrow"; @@ -907,7 +630,7 @@ function start(context, direction, isCondition){ for(let g = 0; g < selection.count(); g++) { if(selection[g].objectID() != sourceObjectID){ // Then need to create or update connection arrow with each selection - let connectionIndex = findConpm install [-g] js-dependency-visualizernnectionIndex(sourceObjectID, selection[g].objectID(), currentConnectionsData); + let connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), currentConnectionsData); if(connectionIndex.length == 0){ // There is no connection with this two objects in our database diff --git a/src/settings.js b/src/settings.js new file mode 100644 index 0000000..3cd3fd5 --- /dev/null +++ b/src/settings.js @@ -0,0 +1,376 @@ +import sketch from "sketch"; +let UI = require("sketch/ui"); +var Settings = require("sketch/settings"); + +const pluginKey = "flowArrows"; + +let docData, pluginData, currentParentGroup, newConnectionsData; + +let document = sketch.fromNative(context.document); +docData = context.document.documentData(); +pluginData = context.command.valueForKey_onLayer_forPluginIdentifier( + "arrowConnections", + docData, + pluginKey +); + +export function settings(context) { + let alert = COSAlertWindow.new(); + const viewWidth = 300; + const viewHeight = 450; + + // Alert window settings + alert = alertSetup(alert, viewWidth, viewHeight); + let view = NSView.alloc().initWithFrame( + NSMakeRect(0, 0, viewWidth, viewHeight) + ); + alert.addAccessoryView(view); + + // Label: Arrow Style + let arrowStyleLabel = alertLabel( + "Arrow Style", + true, + -1, + viewHeight - 40, + 280, + 40 + ); + view.addSubview(arrowStyleLabel); + + // Select: Arrow Style + let arrowStylingField = NSPopUpButton.alloc().initWithFrame( + NSMakeRect(-2, viewHeight - 40, 300, 20) + ); + setActiveStyleSetting(arrowStylingField); + view.addSubview(arrowStylingField); + + // Label: Arrow Style Info + let arrowStyleInfoLabel = alertLabel( + "Add layer style to your document that will contain $arrow name and you will be able to specify it here ", + false, + -1, + viewHeight - 80, + 300, + 40 + ); + view.addSubview(arrowStyleInfoLabel); + + // Label: Arrow Type + let arrowTypeLabel = alertLabel( + "Arrow Type", + true, + -1, + viewHeight - 130, + 280, + 40 + ); + view.addSubview(arrowTypeLabel); + + // Select: Arrow Type + let arrowTypeField = NSPopUpButton.alloc().initWithFrame( + NSMakeRect(-2, viewHeight - 130, 300, 20) + ); + setActiveTypeSetting(arrowTypeField); + view.addSubview(arrowTypeField); + + // Label: Arrow Type Info + let arrowTypeInfoLabel = alertLabel( + "Select one of the arrow types. Angled is used by default", + false, + -1, + viewHeight - 170, + 300, + 40 + ); + view.addSubview(arrowTypeInfoLabel); + + // Label: Arrow Spacing + let arrowSpacingLabel = alertLabel( + "Arrow Spacing", + true, + -1, + viewHeight - 200, + 330, + 20 + ); + view.addSubview(arrowSpacingLabel); + + // Label: Arrow Spacing PX + let arrowSpacingPxLabel = alertLabel( + "px", + true, + 90, + viewHeight - 220, + 330, + 20 + ); + view.addSubview(arrowSpacingPxLabel); + + // Input: Arrow Spacing + let arrowSpacingField = NSTextField.alloc().initWithFrame( + NSMakeRect(-2, viewHeight - 220, 80, 20) + ); + var formatter = NSNumberFormatter.alloc() + .init() + .autorelease(); + arrowSpacingField.setStringValue( + String(Settings.settingForKey("arrowSpacing")) + ); + arrowSpacingField.setFormatter(formatter); + view.addSubview(arrowSpacingField); + + // Stepper: Arrow Spacing + let arrowSpacingStepper = NSStepper.alloc().initWithFrame( + NSMakeRect(70, viewHeight - 220, 20, 20) + ); + arrowSpacingStepper.setMaxValue(1000); + arrowSpacingStepper.setMinValue(0); + arrowSpacingStepper.setValueWraps(false); + arrowSpacingStepper.setAutorepeat(true); + arrowSpacingStepper.setCOSJSTargetFunction(function(sender) { + var value = 0 + sender.integerValue(); + arrowSpacingField.setStringValue(String(value)); + }); + + view.addSubview(arrowSpacingStepper); + // view.addSubview(formatter) + + // Label: Auto Spacing Info + let arrowSpacingInfoLabel = alertLabel( + "The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature ", + false, + -1, + viewHeight - 285, + 300, + 60 + ); + view.addSubview(arrowSpacingInfoLabel); + + // Label: Other Settings + let otherSettingsLabel = alertLabel( + "Other Settings", + true, + -1, + viewHeight - 330, + 280, + 40 + ); + view.addSubview(otherSettingsLabel); + + // Checkbox: Auto-Align + let checkbox = alertCheckbox( + "Second layer auto-align", + false, + -1, + viewHeight - 340, + 260, + 40 + ); + view.addSubview(checkbox); + + // Label: Auto-Align Info + let autoAlignInfoLabel = alertLabel( + "Align the second layer for 5px misalignment with the first one", + false, + -1, + viewHeight - 370, + 280, + 40 + ); + view.addSubview(autoAlignInfoLabel); + + // Label: Plugin Info + let pluginInfoLabel = alertLabel( + "Made by @faridSabitov with the support of EPAM.com ❤️", + true, + -1, + viewHeight - 420, + 280, + 40 + ); + view.addSubview(pluginInfoLabel); + + // Need to check if style is still available + + // Show modal and get the results + let modalResponse = alert.runModal(); + + if (modalResponse == NSAlertFirstButtonReturn) { + // When user clicks on "Update Settings" + // Need to save all this results into the Plugin Settings + context.command.setValue_forKey_onLayer_forPluginIdentifier( + alert + .views()[0] + .subviews()[1] + .title(), + "arrowStyle", + docData, + pluginKey + ); + Settings.setSettingForKey( + "arrowType", + alert + .views()[0] + .subviews()[4] + .title() + ); + Settings.setSettingForKey( + "arrowSpacing", + alert + .views()[0] + .subviews()[8] + .intValue() + ); + Settings.setSettingForKey( + "autoAlign", + alert + .views()[0] + .subviews()[12] + .state() + ); + UI.message("Settings are updated 🚀"); + } +} + +// Functions + +function setActiveStyleSetting(arrowStylingField) { + let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier( + "arrowStyle", + docData, + pluginKey + ); + let styles = getLayerStyles(null); + + if (docSettings) { + // We have info about the settings in the current document + + if (docSettings != "Default Style") { + // if user specified own option + arrowStylingField.addItemWithTitle(docSettings); + arrowStylingField.addItemWithTitle("Default Style"); + for (let i = 0; i < styles.length; i++) { + if (styles[i].name() != docSettings) { + arrowStylingField.addItemWithTitle(styles[i].name()); + } + } + } else { + // Need to show the default first + arrowStylingField.addItemWithTitle("Default Style"); + for (let i = 0; i < styles.length; i++) { + arrowStylingField.addItemWithTitle(styles[i].name()); + } + } + } else { + arrowStylingField.addItemWithTitle("Default Style"); + for (let i = 0; i < styles.length; i++) { + arrowStylingField.addItemWithTitle(styles[i].name()); + } + } +} + +function setActiveTypeSetting(arrowTypeField) { + let docTypeSettings = Settings.settingForKey("arrowType"); + + if (docTypeSettings) { + // We have info about the settings in the current document + + if (docTypeSettings == "Angled") { + arrowTypeField.addItemWithTitle("Angled"); + arrowTypeField.lastItem().setState(1); + arrowTypeField.addItemWithTitle("Curved"); + arrowTypeField.lastItem().setState(0); + arrowTypeField.addItemWithTitle("Straight"); + arrowTypeField.lastItem().setState(0); + } + + if (docTypeSettings == "Curved") { + arrowTypeField.addItemWithTitle("Curved"); + arrowTypeField.lastItem().setState(1); + arrowTypeField.addItemWithTitle("Straight"); + arrowTypeField.lastItem().setState(0); + arrowTypeField.addItemWithTitle("Angled"); + arrowTypeField.lastItem().setState(0); + } + + if (docTypeSettings == "Straight") { + arrowTypeField.addItemWithTitle("Straight"); + arrowTypeField.lastItem().setState(1); + arrowTypeField.addItemWithTitle("Angled"); + arrowTypeField.lastItem().setState(0); + arrowTypeField.addItemWithTitle("Curved"); + arrowTypeField.lastItem().setState(0); + } + } else { + // Show default + arrowTypeField.addItemWithTitle("Angled"); + arrowTypeField.addItemWithTitle("Curved"); + arrowTypeField.addItemWithTitle("Straight"); + } +} + +function alertSetup(alert, viewWidth, viewHeight) { + // Title + alert.setMessageText("Arrow Plugin Settings"); + + // Creating dialog buttons + alert.addButtonWithTitle("Update Settings"); + alert.addButtonWithTitle("Cancel"); + + return alert; +} + +function alertLabel(message, state, x, y, width, height) { + let infoLabel = NSTextField.alloc().initWithFrame( + NSMakeRect(x, y, width, height) + ); + + infoLabel.setStringValue(message); + infoLabel.setSelectable(false); + infoLabel.setDrawsBackground(false); + infoLabel.setBezeled(false); + + if (state == false) { + infoLabel.textColor = NSColor.disabledControlTextColor(); + } + + return infoLabel; +} + +function alertCheckbox(message, state, x, y, width, height) { + let checkbox = NSButton.alloc().initWithFrame( + NSMakeRect(x, y, width, height) + ); + + checkbox.setButtonType(NSSwitchButton); + checkbox.setBezelStyle(0); + checkbox.setTitle(message); + if (Settings.settingForKey("autoAlign")) { + let currentState = Settings.settingForKey("autoAlign"); + checkbox.setState(currentState); + } else { + checkbox.setState(state); + } + + return checkbox; +} + +function getLayerStyles(name) { + // Duplicate + let allStyles = docData.allLayerStyles(); + let keyword = "$arrow"; + let styles = []; + + for (let i = 0; i < allStyles.count(); i++) { + if (name == null) { + if (allStyles[i].name().includes(keyword)) { + styles.push(allStyles[i]); + } + } else { + if (allStyles[i].name() == name) { + styles.push(allStyles[i]); + } + } + } + return styles; +} From ff76e505bea36c91b32f4476529403f342927008 Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Thu, 4 Jul 2019 22:45:26 +0300 Subject: [PATCH 24/44] separated draw script --- arrows.sketchplugin/Contents/Sketch/draw.js | 727 ++++++ .../Contents/Sketch/draw.js.map | 1 + arrows.sketchplugin/Contents/Sketch/script.js | 1947 +++++++++-------- .../Contents/Sketch/script.js.map | 2 +- src/draw.js | 497 +++++ src/script.js | 478 +--- 6 files changed, 2219 insertions(+), 1433 deletions(-) create mode 100644 arrows.sketchplugin/Contents/Sketch/draw.js create mode 100644 arrows.sketchplugin/Contents/Sketch/draw.js.map create mode 100644 src/draw.js diff --git a/arrows.sketchplugin/Contents/Sketch/draw.js b/arrows.sketchplugin/Contents/Sketch/draw.js new file mode 100644 index 0000000..ff20cbd --- /dev/null +++ b/arrows.sketchplugin/Contents/Sketch/draw.js @@ -0,0 +1,727 @@ +var that = this; +function __skpm_run (key, context) { + that.context = context; + +var exports = +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = "./src/draw.js"); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./src/draw.js": +/*!*********************!*\ + !*** ./src/draw.js ***! + \*********************/ +/*! exports provided: drawConnection */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "drawConnection", function() { return drawConnection; }); +// Main Function +function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition) { + // Refactored + // Process of creating new connection + var firstObject = document.getLayerWithID(firstObjectID); + var secondObject = document.getLayerWithID(secondObjectID); + var connectionPos = getConnectionPos(firstObject, secondObject, localDirection); + var connection = { + line: [], + conditionID: [], + type: [], + style: [] // Type + + }; + connection.type = type == null ? Settings.settingForKey("arrowType") : type; + + if (connection.type == "Angled" || connection.type == null) { + connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection); + } + + if (connection.type == "Straight") { + connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection); + } + + if (connection.type == "Curved") { + connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection); + } // Condition + + + if (condition == true) { + if (conditionID != null) { + connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY); + } else { + connection.conditionID = addCondition("#con", connectionPos.middlePosX, connectionPos.middlePosY); + } + } else { + connection.conditionID = null; + } // connection.conditionID = condition != false ? connection.conditionID = addCondition("#con", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null + // Style + + + connection.style = styleLine(connection.line, style); // Add to group + + addToArrowsGroup(connection.line); + return connection; +} // Positions + +function getConnectionPos(firstObject, secondObject, direction) { + // Refactored + var firstObjectAbsPos = firstObject.frame.changeBasis({ + from: firstObject.parent, + to: currentParentGroup + }); + var secondObjectAbsPos = secondObject.frame.changeBasis({ + from: secondObject.parent, + to: currentParentGroup + }); + var currentGroup = checkForGroup("Arrows"); + var diffX, diffY; + + if (currentGroup) { + diffX = currentGroup.frame().x(); + diffY = currentGroup.frame().y(); + } else { + diffX = 0; + diffY = 0; + } + + var connectionPos = { + firstLayerPosX: null, + firstLayerPosY: null, + secondLayerPosX: null, + secondLayerPosY: null, + middlePosX: null, + middlePosY: null // Getting all the positions + + }; + + if (direction == "Up") { + // First Layer Position Start Point Position + connectionPos.firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; + connectionPos.firstLayerPosY = firstObjectAbsPos.y - diffY; // Second Layer Position End Point Position + + connectionPos.secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; + connectionPos.secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height - diffY; // Middle Points + + connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; + connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; + } + + if (direction == "Right") { + // First Layer Position Start Point Position + connectionPos.firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width - diffX; + connectionPos.firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position + + connectionPos.secondLayerPosX = secondObjectAbsPos.x - diffX; + connectionPos.secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points + + connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; + connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; + } + + if (direction == "Down") { + // First Layer Position Start Point Position + connectionPos.firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; + connectionPos.firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height - diffY; // Second Layer Position End Point Position + + connectionPos.secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; + connectionPos.secondLayerPosY = secondObjectAbsPos.y - diffY; // Middle Points + + connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; + connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; + } + + if (direction == "Left") { + // First Layer Position Start Point Position + connectionPos.firstLayerPosX = firstObjectAbsPos.x - diffX; + connectionPos.firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position + + connectionPos.secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width - diffX; + connectionPos.secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points + + connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; + connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; + } + + return connectionPos; +} // Drawing Types + + +function drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction) { + // Refactored + var path = NSBezierPath.bezierPath(); + + if (direction == "Up") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + if (direction == "Right") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + if (direction == "Down") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + if (direction == "Left") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + var line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + var points = line.layers().firstObject().points(); + points[1].cornerRadius = 20; + points[2].cornerRadius = 20; + line.setName("Angled Arrow"); + return line; +} + +function drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction) { + // Refactored + var path = NSBezierPath.bezierPath(); + + if (direction == "Up") { + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + if (direction == "Right") { + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + if (direction == "Down") { + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + if (direction == "Left") { + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + var line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + line.setName("Straight Arrow"); + return line; +} + +function drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction) { + // Refactored + var path = NSBezierPath.bezierPath(); + var line; + + if (direction == "Up") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line + + line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + var points = line.layers().firstObject().points(); + points[0].curveMode = 4; + points[1].curveMode = 4; + points[0].hasCurveFrom = true; + points[1].hasCurveTo = true; + + if (firstLayerPosX < secondLayerPosX) { + points[0].curveFrom = { + x: 0, + y: 0.5 + }; + points[0].curveTo = { + x: -0.5, + y: 1 + }; + points[1].curveFrom = { + x: 1, + y: 1 + }; + points[1].curveTo = { + x: 1, + y: 0.5 + }; + } else { + points[0].curveFrom = { + x: 1, + y: 0.5 + }; + points[0].curveTo = { + x: -0.5, + y: 1 + }; + points[1].curveFrom = { + x: 1, + y: 1 + }; + points[1].curveTo = { + x: 0, + y: 0.5 + }; + } + } + + if (direction == "Right") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line + + line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + + var _points = line.layers().firstObject().points(); + + _points[0].curveMode = 4; + _points[1].curveMode = 4; + _points[0].hasCurveFrom = true; + _points[1].hasCurveTo = true; + + if (firstLayerPosY < secondLayerPosY) { + _points[0].curveFrom = { + x: 0.5, + y: 0 + }; + _points[0].curveTo = { + x: -0.5, + y: 1 + }; + _points[1].curveFrom = { + x: 1, + y: 1 + }; + _points[1].curveTo = { + x: 0.5, + y: 1 + }; + } else { + _points[0].curveFrom = { + x: 0.5, + y: 1 + }; + _points[0].curveTo = { + x: -0.5, + y: 1 + }; + _points[1].curveFrom = { + x: 1, + y: 1 + }; + _points[1].curveTo = { + x: 0.5, + y: 0 + }; + } + } + + if (direction == "Down") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line + + line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + + var _points2 = line.layers().firstObject().points(); + + _points2[0].curveMode = 4; + _points2[1].curveMode = 4; + _points2[0].hasCurveFrom = true; + _points2[1].hasCurveTo = true; + + if (firstLayerPosX < secondLayerPosX) { + _points2[0].curveFrom = { + x: 0, + y: 0.5 + }; + _points2[0].curveTo = { + x: -0.5, + y: 1 + }; + _points2[1].curveFrom = { + x: 1, + y: 1 + }; + _points2[1].curveTo = { + x: 1, + y: 0.5 + }; + } else { + _points2[0].curveFrom = { + x: 1, + y: 0.5 + }; + _points2[0].curveTo = { + x: -0.5, + y: 1 + }; + _points2[1].curveFrom = { + x: 1, + y: 1 + }; + _points2[1].curveTo = { + x: 0, + y: 0.5 + }; + } + } + + if (direction == "Left") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line + + line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + + var _points3 = line.layers().firstObject().points(); + + _points3[0].curveMode = 4; + _points3[1].curveMode = 4; + _points3[0].hasCurveFrom = true; + _points3[1].hasCurveTo = true; + + if (firstLayerPosY < secondLayerPosY) { + _points3[0].curveFrom = { + x: 0.5, + y: 0 + }; + _points3[0].curveTo = { + x: -0.5, + y: 1 + }; + _points3[1].curveFrom = { + x: 1, + y: 1 + }; + _points3[1].curveTo = { + x: 0.5, + y: 1 + }; + } else { + _points3[0].curveFrom = { + x: 0.5, + y: 1 + }; + _points3[0].curveTo = { + x: -0.5, + y: 1 + }; + _points3[1].curveFrom = { + x: 1, + y: 1 + }; + _points3[1].curveTo = { + x: 0.5, + y: 0 + }; + } + } // Providing Settings for the arrow + + + line.setName("Curved Arrow"); + return line; +} // Conditions + + +function addCondition(keyword, x, y) { + // Refactored + var libraries = sketch.getLibraries(); + var libraryObject, symbolReferences, symbol; + + for (var g = 0; g < libraries.length; g++) { + symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document); + + for (var i = 0; i < symbolReferences.length; i++) { + if (symbolReferences[i].name.includes(keyword)) { + libraryObject = symbolReferences[i]; + } + } + } + + if (libraryObject == null) { + symbol = null; + UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as "#condition" so it will be added here'); + } else { + var symbolMaster = libraryObject.import(); + symbol = symbolMaster.createNewInstance(); + symbol = addToConditionGroup(symbol, x, y); + } + + return symbol; +} + +function addToConditionGroup(condition, x, y) { + // Refactored + var conGroup = checkForGroup("Conditions"); + var arGroup = checkForGroup("Arrows"); + var arGroupX = arGroup != null ? arGroup.frame().x() : 0; + var arGroupY = arGroup != null ? arGroup.frame().y() : 0; + + if (conGroup) { + condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX); + condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY); + condition.parent = conGroup; + conGroup.fixGeometryWithOptions(1); + } else { + condition.frame.x = x - condition.frame.width / 2; + condition.frame.y = y - condition.frame.height / 2; + + var Group = __webpack_require__(/*! sketch/dom */ "sketch/dom").Group; + + var group = new Group({ + parent: currentParentGroup, + name: 'Conditions', + layers: [condition] + }); + group.moveToBack(); + group.adjustToFit(); + } + + return condition.id; +} + +function updateCondition(conditionID, x, y) { + // Refactored + var condition = document.getLayerWithID(conditionID); // log (condition) + + var conGroup = checkForGroup("Conditions"); + var arGroup = checkForGroup("Arrows"); + var arGroupX = arGroup != null ? arGroup.frame().x() : 0; + var arGroupY = arGroup != null ? arGroup.frame().y() : 0; + + if (conGroup) { + condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX); + condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY); + conGroup.fixGeometryWithOptions(1); + } else { + condition.frame.x = x - condition.frame.width / 2; + condition.frame.y = y - condition.frame.height / 2; + } + + return condition.id; +} // Style + + +function styleLine(line, style) { + // Refactored + var localStyle; + + if (style != null) { + // For updates + if (getLayerStyles(style) != null && style != "Default Style") { + // If style is specified + localStyle = style; + var ownStyle = getLayerStyles(style); + line.sharedStyle = ownStyle[0]; + } else { + // if there is no specific style + localStyle = "Default Style"; + var border = line.style().addStylePartOfType(1); + border.color = MSColor.colorWithRGBADictionary({ + r: 0.89, + g: 0.89, + b: 0.89, + a: 1 + }); + border.thickness = 2; + line.style().endMarkerType = 2; + } + } else { + // For creating new + if (context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) != "Default Style") { + // we have settins almost all the time and it's not default + localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)); + line.sharedStyle = localStyle[0]; + localStyle = localStyle[0].name(); + } else { + localStyle = "Default Style"; + + var _border = line.style().addStylePartOfType(1); + + _border.color = MSColor.colorWithRGBADictionary({ + r: 0.89, + g: 0.89, + b: 0.89, + a: 1 + }); + _border.thickness = 2; + line.style().endMarkerType = 2; + } + } + + return localStyle; +} + +function getLayerStyles(name) { + // Refactored + var allStyles = docData.allLayerStyles(); + var keyword = "$arrow"; + var styles = []; + + for (var i = 0; i < allStyles.count(); i++) { + if (name == null) { + if (allStyles[i].name().includes(keyword)) { + styles.push(allStyles[i]); + } + } else { + if (allStyles[i].name() == name) { + styles.push(allStyles[i]); + } + } + } + + return styles; +} // Groups + + +function addToArrowsGroup(line) { + var currentGroup = checkForGroup("Arrows"); + + if (currentGroup) { + currentGroup.addLayers([line]); + currentGroup.fixGeometryWithOptions(1); + } else { + var Group = __webpack_require__(/*! sketch/dom */ "sketch/dom").Group; + + var group = new Group({ + parent: currentParentGroup, + name: 'Arrows', + locked: true, + layers: [line] + }); + group.moveToBack(); + group.adjustToFit(); + } +} + +function checkForGroup(groupName) { + // refactored + var currentGroup = null; // Checking all the groups that we have + + for (var i = 0; i < currentParentGroup.layers().count(); i++) { + if (currentParentGroup.layers()[i].name() == groupName) { + currentGroup = currentParentGroup.layers()[i]; + } + } + + return currentGroup; +} + +/***/ }), + +/***/ "sketch/dom": +/*!*****************************!*\ + !*** external "sketch/dom" ***! + \*****************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = require("sketch/dom"); + +/***/ }) + +/******/ }); + if (key === 'default' && typeof exports === 'function') { + exports(context); + } else { + exports[key](context); + } +} +that['deleteAllArrows'] = __skpm_run.bind(this, 'deleteAllArrows'); +that['onRun'] = __skpm_run.bind(this, 'default') + +//# sourceMappingURL=draw.js.map \ No newline at end of file diff --git a/arrows.sketchplugin/Contents/Sketch/draw.js.map b/arrows.sketchplugin/Contents/Sketch/draw.js.map new file mode 100644 index 0000000..31faa87 --- /dev/null +++ b/arrows.sketchplugin/Contents/Sketch/draw.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/draw.js","webpack://exports/external \"sketch/dom\""],"names":["drawConnection","firstObjectID","secondObjectID","style","type","localDirection","conditionID","condition","firstObject","document","getLayerWithID","secondObject","connectionPos","getConnectionPos","connection","line","Settings","settingForKey","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","direction","firstObjectAbsPos","frame","changeBasis","from","parent","to","currentParentGroup","secondObjectAbsPos","currentGroup","checkForGroup","diffX","diffY","x","y","width","height","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","layers","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","keyword","libraries","sketch","getLibraries","libraryObject","symbolReferences","symbol","g","length","getImportableSymbolReferencesForDocument","i","name","includes","UI","alert","symbolMaster","import","createNewInstance","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","fixGeometryWithOptions","Group","require","group","moveToBack","adjustToFit","id","localStyle","getLayerStyles","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","context","command","valueForKey_onLayer_forPluginIdentifier","docData","pluginKey","allStyles","allLayerStyles","styles","count","push","addLayers","locked","groupName"],"mappings":"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","file":"draw.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/draw.js\");\n","// Main Function\n\nexport function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition){ // Refactored\n // Process of creating new connection \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n // Condition\n if(condition == true){\n if(conditionID != null){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY);\n }\n } else {\n connection.conditionID = null;\n }\n // connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style);\n\n // Add to group\n addToArrowsGroup(connection.line);\n \n return connection\n}\n\n// Positions\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\");\n let diffX, diffY;\n \n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n \n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n \n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n return connectionPos\n}\n\n// Drawing Types\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n \n return line;\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n \n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n \n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n \n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n \n if(firstLayerPosX Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here');\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y);\n }\n \n return symbol;\n}\n\nfunction addToConditionGroup(condition, x, y){ // Refactored\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n \n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Conditions',\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n}\n\nfunction updateCondition(conditionID, x, y){ // Refactored\nlet condition = document.getLayerWithID(conditionID);\n// log (condition)\nlet conGroup = checkForGroup(\"Conditions\") ;\nlet arGroup = checkForGroup(\"Arrows\");\nlet arGroupX = arGroup != null ? arGroup.frame().x() : 0;\nlet arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\nif(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n} else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n}\nreturn condition.id;\n}\n\n// Style\n\nfunction styleLine(line, style){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey));\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nfunction getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}\n \n// Groups\n\nfunction addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\");\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nfunction checkForGroup(groupName) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n \n return currentGroup;\n}","module.exports = require(\"sketch/dom\");"],"sourceRoot":""} \ No newline at end of file diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index 302864f..9c8f365 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -91,463 +91,468 @@ var exports = /************************************************************************/ /******/ ({ -/***/ "./src/script.js": -/*!***********************!*\ - !*** ./src/script.js ***! - \***********************/ -/*! exports provided: createAutoArrow, createRightArrow, createDownArrow, createLeftArrow, createUpArrow, createRightArrowWithCondition, createDownArrowWithCondition, createLeftArrowWithCondition, createUpArrowWithCondition, updateSelectedArrows, autoUpdateSelectedArrows, updateArtboardArrows, updateAllArrows, deleteAllArrows, deleteArtboardArrows, deleteSelectedArrows */ +/***/ "./src/draw.js": +/*!*********************!*\ + !*** ./src/draw.js ***! + \*********************/ +/*! exports provided: drawConnection */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createAutoArrow", function() { return createAutoArrow; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createRightArrow", function() { return createRightArrow; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createDownArrow", function() { return createDownArrow; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createLeftArrow", function() { return createLeftArrow; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createUpArrow", function() { return createUpArrow; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createRightArrowWithCondition", function() { return createRightArrowWithCondition; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createDownArrowWithCondition", function() { return createDownArrowWithCondition; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createLeftArrowWithCondition", function() { return createLeftArrowWithCondition; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createUpArrowWithCondition", function() { return createUpArrowWithCondition; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateSelectedArrows", function() { return updateSelectedArrows; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "autoUpdateSelectedArrows", function() { return autoUpdateSelectedArrows; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateArtboardArrows", function() { return updateArtboardArrows; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAllArrows", function() { return updateAllArrows; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteAllArrows", function() { return deleteAllArrows; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteArtboardArrows", function() { return deleteArtboardArrows; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteSelectedArrows", function() { return deleteSelectedArrows; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "drawConnection", function() { return drawConnection; }); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); -// -// Variables -// -var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); - var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); var pluginKey = "flowArrows"; -var document; -var docData, pluginData, currentParentGroup, newConnectionsData; +var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); +var docData = context.document.documentData(); // let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); -if (context.document) { - //cc:remember place - document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); - docData = context.document.documentData(); - pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); - currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards +var currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // Main Function - newConnectionsData = getConnectionsData(); -} else { - document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.actionContext.document); //cc:here is bug;well, seems like a bug in logic -} // -// Create Connection Function -// +function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition) { + // Refactored + // Process of creating new connection + var firstObject = document.getLayerWithID(firstObjectID); + var secondObject = document.getLayerWithID(secondObjectID); + var connectionPos = getConnectionPos(firstObject, secondObject, localDirection); + var connection = { + line: [], + conditionID: [], + type: [], + style: [] // Type + }; + connection.type = type == null ? Settings.settingForKey("arrowType") : type; -function createAutoArrow(context) { - start(context, "Auto", false); -} -function createRightArrow(context) { - start(context, "Right", false); -} -function createDownArrow(context) { - start(context, "Down", false); -} -function createLeftArrow(context) { - start(context, "Left", false); -} -function createUpArrow(context) { - start(context, "Up", false); -} -function createRightArrowWithCondition(context) { - start(context, "Right", true); -} -function createDownArrowWithCondition(context) { - start(context, "Down", true); -} -function createLeftArrowWithCondition(context) { - start(context, "Left", true); -} -function createUpArrowWithCondition(context) { - start(context, "Up", true); -} // -// Plugin Commands -// + if (connection.type == "Angled" || connection.type == null) { + connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection); + } -function updateSelectedArrows(context) { - var selection = context.selection; + if (connection.type == "Straight") { + connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection); + } - if (selection.count() > 1 && selection[0].class() != "MSArtboardGroup") { - // Need to find source object by ID first - var currentConnectionsData = newConnectionsData; // Need to refactor + if (connection.type == "Curved") { + connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection); + } // Condition - for (var g = 0; g < selection.count(); g++) { - if (selection[g].objectID() != selection[0].objectID()) { - // Then need to create or update connection arrow with each selection - var connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), currentConnectionsData); - if (connectionIndex.length == 0) { - updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex); - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Current connection is updated 🤘"); - } else { - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is no connection between selected layers on the plugin data"); - } - } + if (condition == true) { + if (conditionID != null) { + connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY); + } else { + connection.conditionID = addCondition("#con", connectionPos.middlePosX, connectionPos.middlePosY); } - - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); } else { - // When user didn't select anything - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Please select more than two layers. Artboards are coming soon 🥳"); - } -} -function autoUpdateSelectedArrows(context) { - var action = context.actionContext; - docData = action.document.documentData(); - pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); - currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards + connection.conditionID = null; + } // connection.conditionID = condition != false ? connection.conditionID = addCondition("#con", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null + // Style - newConnectionsData = getConnectionsData(); - var movedLayers = Array.from(context.actionContext.layers).map(function (layer) { - return sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(layer); - }); - log(movedLayers[0].id); - log(movedLayers.length); // if (movedLayers.filter(layer => (layer.type == 'Artboard' || (layer.type == 'SymbolMaster' && config.arrangeSymbols))).length > 0) { - // ArrangeArtboards(context) - // } - var currentConnectionsData = newConnectionsData; // Need to refactor + connection.style = styleLine(connection.line, style); // Add to group - for (var g = 0; g < movedLayers.length; g++) { - var connectionIndex = findConnectionIndex(movedLayers[0].id, null, currentConnectionsData); - log("yes " + connectionIndex); + addToArrowsGroup(connection.line); + return connection; +} // Positions - if (connectionIndex.length == 0) { - updateArrow(currentConnectionsData[connectionIndex[0]].firstObject, currentConnectionsData[connectionIndex[0]].secondObject, currentConnectionsData[connectionIndex[0]].style, currentConnectionsData[connectionIndex[0]].type, currentConnectionsData[connectionIndex[0]].direction, currentConnectionsData[connectionIndex[0]].line, currentConnectionsData[connectionIndex[0]].condition, currentConnectionsData[connectionIndex[0]].isCondition, connectionIndex[0]); - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Current connection is updated 🤘"); - } else { - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is no connection between selected layers on the plugin data"); - } +function getConnectionPos(firstObject, secondObject, direction) { + // Refactored + var firstObjectAbsPos = firstObject.frame.changeBasis({ + from: firstObject.parent, + to: currentParentGroup + }); + var secondObjectAbsPos = secondObject.frame.changeBasis({ + from: secondObject.parent, + to: currentParentGroup + }); + var currentGroup = checkForGroup("Arrows"); + var diffX, diffY; + + if (currentGroup) { + diffX = currentGroup.frame().x(); + diffY = currentGroup.frame().y(); + } else { + diffX = 0; + diffY = 0; } - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); -} -function updateArtboardArrows(context) { - // TODO: Need to show amount of updated arrows and deleted ones - var selection = context.selection; - var connections = getConnectionsData(); - var firstObjectArtboard; - var secondObjectArtboard; + var connectionPos = { + firstLayerPosX: null, + firstLayerPosY: null, + secondLayerPosX: null, + secondLayerPosY: null, + middlePosX: null, + middlePosY: null // Getting all the positions - if (connections.length > 0) { - // We have connections in database - var updateArrowsCounter = connections.length; + }; - for (var i = 0; i < updateArrowsCounter; i++) { - // Need to check if the element is selected globally or from the artboard - firstObjectArtboard = document.getLayerWithID(connections[i].firstObject); - firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID(); - secondObjectArtboard = document.getLayerWithID(connections[i].secondObject); - secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID(); + if (direction == "Up") { + // First Layer Position Start Point Position + connectionPos.firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; + connectionPos.firstLayerPosY = firstObjectAbsPos.y - diffY; // Second Layer Position End Point Position - if (selection.count() == 1 && selection[0].class() == "MSArtboardGroup") { - // Need to go through each connection and update arrow position for specific artboard - if (firstObjectArtboard == selection[0].objectID()) { - if (secondObjectArtboard == selection[0].objectID()) { - updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i); - } else { - newConnectionsData.push(connections[i]); - } - } else { - // If not just saving it - newConnectionsData.push(connections[i]); - } - } - } + connectionPos.secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; + connectionPos.secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height - diffY; // Middle Points - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows are updated 🚀"); - } else { - // We don't have any connections to update - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is nothing to update"); + connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; + connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; } -} -function updateAllArrows(context) { - // TODO - // TODO: Need to show amount of updated arrows and deleted ones - var currentConnectionsData = newConnectionsData; - if (currentConnectionsData.length > 0) { - // We have connections in database - var updateArrowsCounter = currentConnectionsData.length; + if (direction == "Right") { + // First Layer Position Start Point Position + connectionPos.firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width - diffX; + connectionPos.firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position - for (var i = 0; i < updateArrowsCounter; i++) { - // Need to go through each connection and update arrow position without artboards - // Need to check if current object don't have the parrent - updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i); - } + connectionPos.secondLayerPosX = secondObjectAbsPos.x - diffX; + connectionPos.secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows are updated 🚀"); - } else { - // We don't have any connections to update - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is nothing to update"); + connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; + connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; } -} -function deleteAllArrows(context) { - if (newConnectionsData.length > 0) { - // We have connections in database - for (var i = 0; i < newConnectionsData.length; i++) { - // Need to go through each connection and update arrow position - deleteLine(newConnectionsData[i].line); - } - context.command.setValue_forKey_onLayer_forPluginIdentifier(null, "arrowConnections", docData, pluginKey); - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows are deleted"); - } else { - // We don't have any connections to update - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is nothing to delete"); - } -} -function deleteArtboardArrows(context) { - var selection = context.selection; - var firstObject, secondObject; // Need to delete all the arrows only from selected artboard - - if (selection.count() == 1 && selection[0].class() == "MSArtboardGroup") { - var connections = getConnectionsData(); - - if (connections.length > 0) { - // We have connections in database - var updateArrowsCounter = connections.length; - - for (var i = 0; i < updateArrowsCounter; i++) { - // Need to go through each connection and check if it placed on selected artboard - firstObject = document.getLayerWithID(connections[i].firstObject); - secondObject = document.getLayerWithID(connections[i].secondObject); + if (direction == "Down") { + // First Layer Position Start Point Position + connectionPos.firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; + connectionPos.firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height - diffY; // Second Layer Position End Point Position - if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()) { - if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()) { - deleteLine(connections[i].line); - newConnectionsData = deleteConnectionFromData(i); - } - } - } + connectionPos.secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; + connectionPos.secondLayerPosY = secondObjectAbsPos.y - diffY; // Middle Points - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows from selected artboard are deleted"); - } else { - // We don't have any connections to update - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is nothing to delete"); - } - } else { - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Please select one artboard"); + connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; + connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; } -} -function deleteSelectedArrows(context) { - var selection = context.selection; - var firstObject, secondObject; - if (selection.count() == 2) { - for (var g = 0; g < selection.count(); g++) { - if (selection[g].objectID() != selection[0].objectID()) { - // It will never check 3rd connection - var connections = getConnectionsData(); - var connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), connections); + if (direction == "Left") { + // First Layer Position Start Point Position + connectionPos.firstLayerPosX = firstObjectAbsPos.x - diffX; + connectionPos.firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position - if (connectionIndex != null) { - // We have connections in database - deleteLine(connections[connectionIndex].line); - newConnectionsData = deleteConnectionFromData(connectionIndex); - var updateArrowsCounter = connections.length; + connectionPos.secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width - diffX; + connectionPos.secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points - for (var i = 0; i < updateArrowsCounter; i++) { - // Need to go through each connection and check if it placed on selected artboard - firstObject = document.getLayerWithID(connections[i].firstObject); - secondObject = document.getLayerWithID(connections[i].secondObject); + connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; + connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; + } - if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()) { - if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()) { - deleteLine(connections[i].line); - newConnectionsData = deleteConnectionFromData(i); - } - } - } + return connectionPos; +} // Drawing Types - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows from selected layers are deleted ✌️"); - } - } - } - } else { - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Select two layers, please 🧐"); - } -} // -// Functions -// -function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { +function drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction) { // Refactored - // Need to check if we have the layers with such IDs - var firstObject = document.getLayerWithID(firstObjectID); - var secondObject = document.getLayerWithID(secondObjectID); - var conditionObject = document.getLayerWithID(conditionID); // Need to delete data first, because we will have a new line - - deleteLine(lineID); + var path = NSBezierPath.bezierPath(); - if (conditionID && !isCondition) { - if (conditionObject) { - conditionObject.remove(); - } + if (direction == "Up") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); } - newConnectionsData = deleteConnectionFromData(connectionIndex); - - if (firstObject && secondObject) { - // If we have all the objects, we can recreate the line - createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition); + if (direction == "Right") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); } -} - -function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { - // Refactored - var localDirection = direction == "Auto" ? getDirection(firstObjectID, secondObjectID) : direction; // Main Operations based on the settings - - updateSpacing(firstObjectID, secondObjectID, localDirection); - autoAlignLayer(firstObjectID, secondObjectID, localDirection); // Making an Arrow - var arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition); // Storage for current connection + if (direction == "Down") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } - var connection = { - firstObject: firstObjectID, - secondObject: secondObjectID, - style: arrow.style, - condition: arrow.conditionID, - isCondition: isCondition, - type: arrow.type, - direction: localDirection, - line: arrow.line.objectID() // Need to save this data to the global array + if (direction == "Left") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } - }; - newConnectionsData.push(connection); + var line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + var points = line.layers().firstObject().points(); + points[1].cornerRadius = 20; + points[2].cornerRadius = 20; + line.setName("Angled Arrow"); + return line; } -function checkForGroup(groupName) { - // refactored - var currentGroup = null; // Checking all the groups that we have +function drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction) { + // Refactored + var path = NSBezierPath.bezierPath(); - for (var i = 0; i < currentParentGroup.layers().count(); i++) { - if (currentParentGroup.layers()[i].name() == groupName) { - currentGroup = currentParentGroup.layers()[i]; - } + if (direction == "Up") { + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); } - return currentGroup; -} + if (direction == "Right") { + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } -function getDirection(firstObjectID, secondObjectID) { - // Refactored - // Get direction from the source object - var firstObject = document.getLayerWithID(firstObjectID); - var secondObject = document.getLayerWithID(secondObjectID); - var firstObjectMidX = firstObject.frame.x + firstObject.frame.width / 2; - var firstObjectMidY = firstObject.frame.y + firstObject.frame.height / 2; - var secondObjectMidX = secondObject.frame.x + secondObject.frame.width / 2; - var secondObjectMidY = secondObject.frame.y + secondObject.frame.height / 2; - var diffX = firstObjectMidX - secondObjectMidX; - var diffY = firstObjectMidY - secondObjectMidY; - var absDiffX = Math.abs(diffX); - var absDiffY = Math.abs(diffY); - var direction; + if (direction == "Down") { + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } - if (secondObjectMidX > firstObjectMidX) { - // Right Half - if (secondObjectMidY > firstObjectMidY) { - // Bottom quarter - direction = diffX > diffY ? "Down" : "Right"; - } else { - // Top quarter - direction = absDiffX > absDiffY ? "Right" : "Up"; - } - } else { - // Left Half - if (secondObjectMidY > firstObjectMidY) { - // Bottom quarter - direction = absDiffX > absDiffY ? "Left" : "Down"; - } else { - // Top quarter - direction = diffX > diffY ? "Left" : "Up"; - } + if (direction == "Left") { + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); } - return direction; + var line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + line.setName("Straight Arrow"); + return line; } -function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition) { +function drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction) { // Refactored - // Process of creating new connection - var firstObject = document.getLayerWithID(firstObjectID); - var secondObject = document.getLayerWithID(secondObjectID); - var connectionPos = getConnectionPos(firstObject, secondObject, localDirection); - var connection = { - line: [], - conditionID: [], - type: [], - style: [] // Type - - }; - connection.type = type == null ? Settings.settingForKey("arrowType") : type; - - if (connection.type == "Angled" || connection.type == null) { - connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection); - } - - if (connection.type == "Straight") { - connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection); - } + var path = NSBezierPath.bezierPath(); + var line; - if (connection.type == "Curved") { - connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection); - } // Condition + if (direction == "Up") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line + line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + var points = line.layers().firstObject().points(); + points[0].curveMode = 4; + points[1].curveMode = 4; + points[0].hasCurveFrom = true; + points[1].hasCurveTo = true; - if (condition == true) { - if (conditionID != null) { - connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY); + if (firstLayerPosX < secondLayerPosX) { + points[0].curveFrom = { + x: 0, + y: 0.5 + }; + points[0].curveTo = { + x: -0.5, + y: 1 + }; + points[1].curveFrom = { + x: 1, + y: 1 + }; + points[1].curveTo = { + x: 1, + y: 0.5 + }; } else { - connection.conditionID = addCondition("#con", connectionPos.middlePosX, connectionPos.middlePosY); + points[0].curveFrom = { + x: 1, + y: 0.5 + }; + points[0].curveTo = { + x: -0.5, + y: 1 + }; + points[1].curveFrom = { + x: 1, + y: 1 + }; + points[1].curveTo = { + x: 0, + y: 0.5 + }; } - } else { - connection.conditionID = null; - } // connection.conditionID = condition != false ? connection.conditionID = addCondition("#con", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null - // Style + } + if (direction == "Right") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line - connection.style = styleLine(connection.line, style); // Add to group + line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - addToArrowsGroup(connection.line); - return connection; -} + var _points = line.layers().firstObject().points(); -function addToArrowsGroup(line) { - var currentGroup = checkForGroup("Arrows"); + _points[0].curveMode = 4; + _points[1].curveMode = 4; + _points[0].hasCurveFrom = true; + _points[1].hasCurveTo = true; - if (currentGroup) { - currentGroup.addLayers([line]); - currentGroup.fixGeometryWithOptions(1); - } else { - var Group = __webpack_require__(/*! sketch/dom */ "sketch/dom").Group; + if (firstLayerPosY < secondLayerPosY) { + _points[0].curveFrom = { + x: 0.5, + y: 0 + }; + _points[0].curveTo = { + x: -0.5, + y: 1 + }; + _points[1].curveFrom = { + x: 1, + y: 1 + }; + _points[1].curveTo = { + x: 0.5, + y: 1 + }; + } else { + _points[0].curveFrom = { + x: 0.5, + y: 1 + }; + _points[0].curveTo = { + x: -0.5, + y: 1 + }; + _points[1].curveFrom = { + x: 1, + y: 1 + }; + _points[1].curveTo = { + x: 0.5, + y: 0 + }; + } + } - var group = new Group({ - parent: currentParentGroup, - name: 'Arrows', - locked: true, - layers: [line] - }); - group.moveToBack(); - group.adjustToFit(); + if (direction == "Down") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line + + line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + + var _points2 = line.layers().firstObject().points(); + + _points2[0].curveMode = 4; + _points2[1].curveMode = 4; + _points2[0].hasCurveFrom = true; + _points2[1].hasCurveTo = true; + + if (firstLayerPosX < secondLayerPosX) { + _points2[0].curveFrom = { + x: 0, + y: 0.5 + }; + _points2[0].curveTo = { + x: -0.5, + y: 1 + }; + _points2[1].curveFrom = { + x: 1, + y: 1 + }; + _points2[1].curveTo = { + x: 1, + y: 0.5 + }; + } else { + _points2[0].curveFrom = { + x: 1, + y: 0.5 + }; + _points2[0].curveTo = { + x: -0.5, + y: 1 + }; + _points2[1].curveFrom = { + x: 1, + y: 1 + }; + _points2[1].curveTo = { + x: 0, + y: 0.5 + }; + } + } + + if (direction == "Left") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line + + line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + + var _points3 = line.layers().firstObject().points(); + + _points3[0].curveMode = 4; + _points3[1].curveMode = 4; + _points3[0].hasCurveFrom = true; + _points3[1].hasCurveTo = true; + + if (firstLayerPosY < secondLayerPosY) { + _points3[0].curveFrom = { + x: 0.5, + y: 0 + }; + _points3[0].curveTo = { + x: -0.5, + y: 1 + }; + _points3[1].curveFrom = { + x: 1, + y: 1 + }; + _points3[1].curveTo = { + x: 0.5, + y: 1 + }; + } else { + _points3[0].curveFrom = { + x: 0.5, + y: 1 + }; + _points3[0].curveTo = { + x: -0.5, + y: 1 + }; + _points3[1].curveFrom = { + x: 1, + y: 1 + }; + _points3[1].curveTo = { + x: 0.5, + y: 0 + }; + } + } // Providing Settings for the arrow + + + line.setName("Curved Arrow"); + return line; +} // Conditions + + +function addCondition(keyword, x, y) { + // Refactored + var libraries = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.getLibraries(); + var libraryObject, symbolReferences, symbol; + + for (var g = 0; g < libraries.length; g++) { + symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document); + + for (var i = 0; i < symbolReferences.length; i++) { + if (symbolReferences[i].name.includes(keyword)) { + libraryObject = symbolReferences[i]; + } + } + } + + if (libraryObject == null) { + symbol = null; + UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as "#condition" so it will be added here'); + } else { + var symbolMaster = libraryObject.import(); + symbol = symbolMaster.createNewInstance(); + symbol = addToConditionGroup(symbol, x, y); } + + return symbol; } function addToConditionGroup(condition, x, y) { @@ -580,186 +585,76 @@ function addToConditionGroup(condition, x, y) { return condition.id; } -function getConnectionsData() { - //Refactored - var dataArray = []; - - if (pluginData) { - for (var i = 0; i < pluginData.length; i++) { - dataArray.push(pluginData[i]); - } - } +function updateCondition(conditionID, x, y) { + // Refactored + var condition = document.getLayerWithID(conditionID); // log (condition) - return dataArray; -} + var conGroup = checkForGroup("Conditions"); + var arGroup = checkForGroup("Arrows"); + var arGroupX = arGroup != null ? arGroup.frame().x() : 0; + var arGroupY = arGroup != null ? arGroup.frame().y() : 0; -function findConnectionIndex(firstObjectID, secondObjectID, data) { - var indexArray = []; - firstObjectID = String(firstObjectID); - secondObjectID = String(secondObjectID); - - if (pluginData) { - // If we have database, need to check for connections - for (var y = 0; y < data.length; y++) { - if (firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject) { - if (secondObjectID == null) { - // When we need to find connection between two objects - if (secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject) { - indexArray[0] = y; - } - } else { - // When we need to find a connection for one object only - indexArray.push(y); - } - } - } - } - - return indexArray; -} - -function deleteConnectionFromData(connectionIndex) { - // Refactored - var newConnections = []; - - if (pluginData) { - // If we have database - var connections = pluginData; - - for (var i = 0; i < connections.length; i++) { - // Updating all connections without deleted one - if (i != connectionIndex) { - newConnections.push(connections[i]); - } - } - } - - return newConnections; -} - -function deleteLine(lineID) { - // refactored - var lineObject = document.getLayerWithID(lineID); - var selectedGroup; - - if (lineObject) { - selectedGroup = lineObject.parent; - lineObject.remove(); - - if (selectedGroup.layers.length == 0) { - selectedGroup.remove(); - } - } -} - -function updateSpacing(sourceObjectID, childObjectID, direction) { - var sourceObject = document.getLayerWithID(sourceObjectID); - var childObject = document.getLayerWithID(childObjectID); - - if (Settings.settingForKey("arrowSpacing") && Settings.settingForKey("arrowSpacing") != 0) { - var currentSpacing = Settings.settingForKey("arrowSpacing"); - - if (direction == "Right") { - childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing; - } - - if (direction == "Down") { - childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing; - } - - if (direction == "Left") { - childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing; - } - - if (direction == "Up") { - childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing; - } - } -} - -function autoAlignLayer(sourceObjectID, childObjectID, direction) { - var sourceObject = document.getLayerWithID(sourceObjectID); - var childObject = document.getLayerWithID(childObjectID); - var sourceMidY, childMidY, sourceMidX, childMidX, diff; - - if (Settings.settingForKey("autoAlign")) { - if (Settings.settingForKey("autoAlign") == true) { - // If user turned on Auto-Align settings - if (direction == "Right" || direction == "Left") { - sourceMidY = sourceObject.frame.y + sourceObject.frame.height / 2; - childMidY = childObject.frame.y + childObject.frame.height / 2; - diff = sourceMidY - childMidY; - - if (diff > -6 && diff < 6) { - childObject.frame.y = childObject.frame.y + diff; - } - } - - if (direction == "Down" || direction == "Up") { - sourceMidX = sourceObject.frame.x + sourceObject.frame.width / 2; - childMidX = childObject.frame.x + childObject.frame.width / 2; - diff = sourceMidX - childMidX; - - if (diff > -6 && diff < 6) { - childObject.frame.x = childObject.frame.x + diff; - } - } - } + if (conGroup) { + condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX); + condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY); + conGroup.fixGeometryWithOptions(1); + } else { + condition.frame.x = x - condition.frame.width / 2; + condition.frame.y = y - condition.frame.height / 2; } -} -function defineSourceObject(firstObjectID, secondObjectID, direction) { - //Refactored - var firstObject = document.getLayerWithID(firstObjectID); - var secondObject = document.getLayerWithID(secondObjectID); - var sourceObjectID; + return condition.id; +} // Style - if (direction == "Right") { - if (firstObject.frame.x <= secondObject.frame.x) { - sourceObjectID = firstObject.id; - } else { - sourceObjectID = secondObject.id; - } - } - if (direction == "Down") { - if (firstObject.frame.y <= secondObject.frame.y) { - sourceObjectID = firstObject.id; - } else { - sourceObjectID = secondObject.id; - } - } +function styleLine(line, style) { + // Refactored + var localStyle; - if (direction == "Left") { - if (firstObject.frame.x <= secondObject.frame.x) { - sourceObjectID = secondObject.id; + if (style != null) { + // For updates + if (getLayerStyles(style) != null && style != "Default Style") { + // If style is specified + localStyle = style; + var ownStyle = getLayerStyles(style); + line.sharedStyle = ownStyle[0]; } else { - sourceObjectID = firstObject.id; + // if there is no specific style + localStyle = "Default Style"; + var border = line.style().addStylePartOfType(1); + border.color = MSColor.colorWithRGBADictionary({ + r: 0.89, + g: 0.89, + b: 0.89, + a: 1 + }); + border.thickness = 2; + line.style().endMarkerType = 2; } - } - - if (direction == "Up") { - if (firstObject.frame.y <= secondObject.frame.y) { - sourceObjectID = secondObject.id; + } else { + // For creating new + if (context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) != "Default Style") { + // we have settins almost all the time and it's not default + localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)); + line.sharedStyle = localStyle[0]; + localStyle = localStyle[0].name(); } else { - sourceObjectID = firstObject.id; - } - } - - return sourceObjectID; -} + localStyle = "Default Style"; -function getSourceObjectFromSelection(selection, direction) { - //Refactored - var sourceObjectID = selection.firstObject().objectID(); + var _border = line.style().addStylePartOfType(1); - if (direction != "Auto") { - for (var g = 0; g < selection.count(); g++) { - sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction); + _border.color = MSColor.colorWithRGBADictionary({ + r: 0.89, + g: 0.89, + b: 0.89, + a: 1 + }); + _border.thickness = 2; + line.style().endMarkerType = 2; } } - return sourceObjectID; + return localStyle; } function getLayerStyles(name) { @@ -781,504 +676,640 @@ function getLayerStyles(name) { } return styles; -} - -function start(context, direction, isCondition) { - //cc:start#1;Passing all the data - var selection = context.selection; - - if (selection.count() > 1 && selection[0].class() != "MSArtboardGroup") { - // Need to find source object by ID first - var sourceObjectID = getSourceObjectFromSelection(selection, direction); - var currentConnectionsData = newConnectionsData; // Need to refactor +} // Groups - for (var g = 0; g < selection.count(); g++) { - if (selection[g].objectID() != sourceObjectID) { - // Then need to create or update connection arrow with each selection - var connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), currentConnectionsData); - if (connectionIndex.length == 0) { - // There is no connection with this two objects in our database - createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition); - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("New connection is created 🚀"); - } else { - // Need to remake the arrow condition - updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex); - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Current connection is updated 🤘"); - } - } - } +function addToArrowsGroup(line) { + var currentGroup = checkForGroup("Arrows"); - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); + if (currentGroup) { + currentGroup.addLayers([line]); + currentGroup.fixGeometryWithOptions(1); } else { - // When user didn't select anything - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Please select more than two layers. Artboards are coming soon 🥳"); + var Group = __webpack_require__(/*! sketch/dom */ "sketch/dom").Group; + + var group = new Group({ + parent: currentParentGroup, + name: 'Arrows', + locked: true, + layers: [line] + }); + group.moveToBack(); + group.adjustToFit(); } } -function addCondition(keyword, x, y) { - // Refactored - var libraries = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.getLibraries(); - var libraryObject, symbolReferences, symbol; - - for (var g = 0; g < libraries.length; g++) { - symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document); +function checkForGroup(groupName) { + // refactored + var currentGroup = null; // Checking all the groups that we have - for (var i = 0; i < symbolReferences.length; i++) { - if (symbolReferences[i].name.includes(keyword)) { - libraryObject = symbolReferences[i]; - } + for (var i = 0; i < currentParentGroup.layers().count(); i++) { + if (currentParentGroup.layers()[i].name() == groupName) { + currentGroup = currentParentGroup.layers()[i]; } } - if (libraryObject == null) { - symbol = null; - UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as "#condition" so it will be added here'); - } else { - var symbolMaster = libraryObject.import(); - symbol = symbolMaster.createNewInstance(); - symbol = addToConditionGroup(symbol, x, y); - } - - return symbol; -} - -function updateCondition(conditionID, x, y) { - // Refactored - var condition = document.getLayerWithID(conditionID); // log (condition) - - var conGroup = checkForGroup("Conditions"); - var arGroup = checkForGroup("Arrows"); - var arGroupX = arGroup != null ? arGroup.frame().x() : 0; - var arGroupY = arGroup != null ? arGroup.frame().y() : 0; - - if (conGroup) { - condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX); - condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY); - conGroup.fixGeometryWithOptions(1); - } else { - condition.frame.x = x - condition.frame.width / 2; - condition.frame.y = y - condition.frame.height / 2; - } - - return condition.id; + return currentGroup; } -function getConnectionPos(firstObject, secondObject, direction) { - // Refactored - var firstObjectAbsPos = firstObject.frame.changeBasis({ - from: firstObject.parent, - to: currentParentGroup - }); - var secondObjectAbsPos = secondObject.frame.changeBasis({ - from: secondObject.parent, - to: currentParentGroup - }); - var currentGroup = checkForGroup("Arrows"); - var diffX, diffY; +/***/ }), - if (currentGroup) { - diffX = currentGroup.frame().x(); - diffY = currentGroup.frame().y(); - } else { - diffX = 0; - diffY = 0; - } +/***/ "./src/script.js": +/*!***********************!*\ + !*** ./src/script.js ***! + \***********************/ +/*! exports provided: createAutoArrow, createRightArrow, createDownArrow, createLeftArrow, createUpArrow, createRightArrowWithCondition, createDownArrowWithCondition, createLeftArrowWithCondition, createUpArrowWithCondition, updateSelectedArrows, autoUpdateSelectedArrows, updateArtboardArrows, updateAllArrows, deleteAllArrows, deleteArtboardArrows, deleteSelectedArrows */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { - var connectionPos = { - firstLayerPosX: null, - firstLayerPosY: null, - secondLayerPosX: null, - secondLayerPosY: null, - middlePosX: null, - middlePosY: null // Getting all the positions +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createAutoArrow", function() { return createAutoArrow; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createRightArrow", function() { return createRightArrow; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createDownArrow", function() { return createDownArrow; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createLeftArrow", function() { return createLeftArrow; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createUpArrow", function() { return createUpArrow; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createRightArrowWithCondition", function() { return createRightArrowWithCondition; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createDownArrowWithCondition", function() { return createDownArrowWithCondition; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createLeftArrowWithCondition", function() { return createLeftArrowWithCondition; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createUpArrowWithCondition", function() { return createUpArrowWithCondition; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateSelectedArrows", function() { return updateSelectedArrows; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "autoUpdateSelectedArrows", function() { return autoUpdateSelectedArrows; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateArtboardArrows", function() { return updateArtboardArrows; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAllArrows", function() { return updateAllArrows; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteAllArrows", function() { return deleteAllArrows; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteArtboardArrows", function() { return deleteArtboardArrows; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteSelectedArrows", function() { return deleteSelectedArrows; }); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _draw_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./draw.js */ "./src/draw.js"); +// +// Variables +// - }; - if (direction == "Up") { - // First Layer Position Start Point Position - connectionPos.firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; - connectionPos.firstLayerPosY = firstObjectAbsPos.y - diffY; // Second Layer Position End Point Position +var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); - connectionPos.secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; - connectionPos.secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height - diffY; // Middle Points +var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); - connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; - connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; - } +var pluginKey = "flowArrows"; +var document; +var docData, pluginData, currentParentGroup, newConnectionsData; - if (direction == "Right") { - // First Layer Position Start Point Position - connectionPos.firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width - diffX; - connectionPos.firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position +if (context.document) { + //cc:remember place + document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); + docData = context.document.documentData(); + pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); + currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards - connectionPos.secondLayerPosX = secondObjectAbsPos.x - diffX; - connectionPos.secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points + newConnectionsData = getConnectionsData(); +} else { + document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.actionContext.document); //cc:here is bug;well, seems like a bug in logic +} // +// Create Connection Function +// - connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; - connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; - } - if (direction == "Down") { - // First Layer Position Start Point Position - connectionPos.firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; - connectionPos.firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height - diffY; // Second Layer Position End Point Position +function createAutoArrow(context) { + start(context, "Auto", false); +} +function createRightArrow(context) { + start(context, "Right", false); +} +function createDownArrow(context) { + start(context, "Down", false); +} +function createLeftArrow(context) { + start(context, "Left", false); +} +function createUpArrow(context) { + start(context, "Up", false); +} +function createRightArrowWithCondition(context) { + start(context, "Right", true); +} +function createDownArrowWithCondition(context) { + start(context, "Down", true); +} +function createLeftArrowWithCondition(context) { + start(context, "Left", true); +} +function createUpArrowWithCondition(context) { + start(context, "Up", true); +} // +// Plugin Commands +// - connectionPos.secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; - connectionPos.secondLayerPosY = secondObjectAbsPos.y - diffY; // Middle Points +function updateSelectedArrows(context) { + var selection = context.selection; - connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; - connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; - } + if (selection.count() > 1 && selection[0].class() != "MSArtboardGroup") { + // Need to find source object by ID first + var currentConnectionsData = newConnectionsData; // Need to refactor - if (direction == "Left") { - // First Layer Position Start Point Position - connectionPos.firstLayerPosX = firstObjectAbsPos.x - diffX; - connectionPos.firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position + for (var g = 0; g < selection.count(); g++) { + if (selection[g].objectID() != selection[0].objectID()) { + // Then need to create or update connection arrow with each selection + var connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), currentConnectionsData); - connectionPos.secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width - diffX; - connectionPos.secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points + if (connectionIndex.length == 0) { + updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex); + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Current connection is updated 🤘"); + } else { + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is no connection between selected layers on the plugin data"); + } + } + } - connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; - connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); + } else { + // When user didn't select anything + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Please select more than two layers. Artboards are coming soon 🥳"); } - - return connectionPos; } +function autoUpdateSelectedArrows(context) { + var action = context.actionContext; + docData = action.document.documentData(); + pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); + currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards -function drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction) { - // Refactored - var path = NSBezierPath.bezierPath(); - - if (direction == "Up") { - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } + newConnectionsData = getConnectionsData(); + var movedLayers = Array.from(context.actionContext.layers).map(function (layer) { + return sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(layer); + }); + log(movedLayers[0].id); + log(movedLayers.length); // if (movedLayers.filter(layer => (layer.type == 'Artboard' || (layer.type == 'SymbolMaster' && config.arrangeSymbols))).length > 0) { + // ArrangeArtboards(context) + // } - if (direction == "Right") { - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } + var currentConnectionsData = newConnectionsData; // Need to refactor - if (direction == "Down") { - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } + for (var g = 0; g < movedLayers.length; g++) { + var connectionIndex = findConnectionIndex(movedLayers[0].id, null, currentConnectionsData); + log("yes " + connectionIndex); - if (direction == "Left") { - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + if (connectionIndex.length == 0) { + updateArrow(currentConnectionsData[connectionIndex[0]].firstObject, currentConnectionsData[connectionIndex[0]].secondObject, currentConnectionsData[connectionIndex[0]].style, currentConnectionsData[connectionIndex[0]].type, currentConnectionsData[connectionIndex[0]].direction, currentConnectionsData[connectionIndex[0]].line, currentConnectionsData[connectionIndex[0]].condition, currentConnectionsData[connectionIndex[0]].isCondition, connectionIndex[0]); + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Current connection is updated 🤘"); + } else { + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is no connection between selected layers on the plugin data"); + } } - var line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - line.setName("Straight Arrow"); - return line; + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); } +function updateArtboardArrows(context) { + // TODO: Need to show amount of updated arrows and deleted ones + var selection = context.selection; + var connections = getConnectionsData(); + var firstObjectArtboard; + var secondObjectArtboard; -function drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction) { - // Refactored - var path = NSBezierPath.bezierPath(); + if (connections.length > 0) { + // We have connections in database + var updateArrowsCounter = connections.length; - if (direction == "Up") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + for (var i = 0; i < updateArrowsCounter; i++) { + // Need to check if the element is selected globally or from the artboard + firstObjectArtboard = document.getLayerWithID(connections[i].firstObject); + firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID(); + secondObjectArtboard = document.getLayerWithID(connections[i].secondObject); + secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID(); + + if (selection.count() == 1 && selection[0].class() == "MSArtboardGroup") { + // Need to go through each connection and update arrow position for specific artboard + if (firstObjectArtboard == selection[0].objectID()) { + if (secondObjectArtboard == selection[0].objectID()) { + updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i); + } else { + newConnectionsData.push(connections[i]); + } + } else { + // If not just saving it + newConnectionsData.push(connections[i]); + } + } + } + + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows are updated 🚀"); + } else { + // We don't have any connections to update + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is nothing to update"); } +} +function updateAllArrows(context) { + // TODO + // TODO: Need to show amount of updated arrows and deleted ones + var currentConnectionsData = newConnectionsData; - if (direction == "Right") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + if (currentConnectionsData.length > 0) { + // We have connections in database + var updateArrowsCounter = currentConnectionsData.length; + + for (var i = 0; i < updateArrowsCounter; i++) { + // Need to go through each connection and update arrow position without artboards + // Need to check if current object don't have the parrent + updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i); + } + + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows are updated 🚀"); + } else { + // We don't have any connections to update + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is nothing to update"); } +} +function deleteAllArrows(context) { + if (newConnectionsData.length > 0) { + // We have connections in database + for (var i = 0; i < newConnectionsData.length; i++) { + // Need to go through each connection and update arrow position + deleteLine(newConnectionsData[i].line); + } - if (direction == "Down") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + context.command.setValue_forKey_onLayer_forPluginIdentifier(null, "arrowConnections", docData, pluginKey); + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows are deleted"); + } else { + // We don't have any connections to update + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is nothing to delete"); } +} +function deleteArtboardArrows(context) { + var selection = context.selection; + var firstObject, secondObject; // Need to delete all the arrows only from selected artboard - if (direction == "Left") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + if (selection.count() == 1 && selection[0].class() == "MSArtboardGroup") { + var connections = getConnectionsData(); + + if (connections.length > 0) { + // We have connections in database + var updateArrowsCounter = connections.length; + + for (var i = 0; i < updateArrowsCounter; i++) { + // Need to go through each connection and check if it placed on selected artboard + firstObject = document.getLayerWithID(connections[i].firstObject); + secondObject = document.getLayerWithID(connections[i].secondObject); + + if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()) { + if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()) { + deleteLine(connections[i].line); + newConnectionsData = deleteConnectionFromData(i); + } + } + } + + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows from selected artboard are deleted"); + } else { + // We don't have any connections to update + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is nothing to delete"); + } + } else { + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Please select one artboard"); } +} +function deleteSelectedArrows(context) { + var selection = context.selection; + var firstObject, secondObject; - var line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - var points = line.layers().firstObject().points(); - points[1].cornerRadius = 20; - points[2].cornerRadius = 20; - line.setName("Angled Arrow"); - return line; + if (selection.count() == 2) { + for (var g = 0; g < selection.count(); g++) { + if (selection[g].objectID() != selection[0].objectID()) { + // It will never check 3rd connection + var connections = getConnectionsData(); + var connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), connections); + + if (connectionIndex != null) { + // We have connections in database + deleteLine(connections[connectionIndex].line); + newConnectionsData = deleteConnectionFromData(connectionIndex); + var updateArrowsCounter = connections.length; + + for (var i = 0; i < updateArrowsCounter; i++) { + // Need to go through each connection and check if it placed on selected artboard + firstObject = document.getLayerWithID(connections[i].firstObject); + secondObject = document.getLayerWithID(connections[i].secondObject); + + if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()) { + if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()) { + deleteLine(connections[i].line); + newConnectionsData = deleteConnectionFromData(i); + } + } + } + + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows from selected layers are deleted ✌️"); + } + } + } + } else { + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Select two layers, please 🧐"); + } +} // +// Functions +// + + + +function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { + // Refactored + // Need to check if we have the layers with such IDs + var firstObject = document.getLayerWithID(firstObjectID); + var secondObject = document.getLayerWithID(secondObjectID); + var conditionObject = document.getLayerWithID(conditionID); // Need to delete data first, because we will have a new line + + deleteLine(lineID); + + if (conditionID && !isCondition) { + if (conditionObject) { + conditionObject.remove(); + } + } + + newConnectionsData = deleteConnectionFromData(connectionIndex); + + if (firstObject && secondObject) { + // If we have all the objects, we can recreate the line + createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition); + } } -function drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction) { +function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored - var path = NSBezierPath.bezierPath(); - var line; + var localDirection = direction == "Auto" ? getDirection(firstObjectID, secondObjectID) : direction; // Main Operations based on the settings - if (direction == "Up") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line + updateSpacing(firstObjectID, secondObjectID, localDirection); + autoAlignLayer(firstObjectID, secondObjectID, localDirection); // Making an Arrow - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - var points = line.layers().firstObject().points(); - points[0].curveMode = 4; - points[1].curveMode = 4; - points[0].hasCurveFrom = true; - points[1].hasCurveTo = true; + var arrow = Object(_draw_js__WEBPACK_IMPORTED_MODULE_1__["drawConnection"])(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition); // Storage for current connection - if (firstLayerPosX < secondLayerPosX) { - points[0].curveFrom = { - x: 0, - y: 0.5 - }; - points[0].curveTo = { - x: -0.5, - y: 1 - }; - points[1].curveFrom = { - x: 1, - y: 1 - }; - points[1].curveTo = { - x: 1, - y: 0.5 - }; + var connection = { + firstObject: firstObjectID, + secondObject: secondObjectID, + style: arrow.style, + condition: arrow.conditionID, + isCondition: isCondition, + type: arrow.type, + direction: localDirection, + line: arrow.line.objectID() // Need to save this data to the global array + + }; + newConnectionsData.push(connection); +} + +function getDirection(firstObjectID, secondObjectID) { + // Refactored + // Get direction from the source object + var firstObject = document.getLayerWithID(firstObjectID); + var secondObject = document.getLayerWithID(secondObjectID); + var firstObjectMidX = firstObject.frame.x + firstObject.frame.width / 2; + var firstObjectMidY = firstObject.frame.y + firstObject.frame.height / 2; + var secondObjectMidX = secondObject.frame.x + secondObject.frame.width / 2; + var secondObjectMidY = secondObject.frame.y + secondObject.frame.height / 2; + var diffX = firstObjectMidX - secondObjectMidX; + var diffY = firstObjectMidY - secondObjectMidY; + var absDiffX = Math.abs(diffX); + var absDiffY = Math.abs(diffY); + var direction; + + if (secondObjectMidX > firstObjectMidX) { + // Right Half + if (secondObjectMidY > firstObjectMidY) { + // Bottom quarter + direction = diffX > diffY ? "Down" : "Right"; } else { - points[0].curveFrom = { - x: 1, - y: 0.5 - }; - points[0].curveTo = { - x: -0.5, - y: 1 - }; - points[1].curveFrom = { - x: 1, - y: 1 - }; - points[1].curveTo = { - x: 0, - y: 0.5 - }; + // Top quarter + direction = absDiffX > absDiffY ? "Right" : "Up"; + } + } else { + // Left Half + if (secondObjectMidY > firstObjectMidY) { + // Bottom quarter + direction = absDiffX > absDiffY ? "Left" : "Down"; + } else { + // Top quarter + direction = diffX > diffY ? "Left" : "Up"; + } + } + + return direction; +} + +function getConnectionsData() { + //Refactored + var dataArray = []; + + if (pluginData) { + for (var i = 0; i < pluginData.length; i++) { + dataArray.push(pluginData[i]); } } - if (direction == "Right") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line + return dataArray; +} + +function findConnectionIndex(firstObjectID, secondObjectID, data) { + var indexArray = []; + firstObjectID = String(firstObjectID); + secondObjectID = String(secondObjectID); + + if (pluginData) { + // If we have database, need to check for connections + for (var y = 0; y < data.length; y++) { + if (firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject) { + if (secondObjectID == null) { + // When we need to find connection between two objects + if (secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject) { + indexArray[0] = y; + } + } else { + // When we need to find a connection for one object only + indexArray.push(y); + } + } + } + } + + return indexArray; +} + +function deleteConnectionFromData(connectionIndex) { + // Refactored + var newConnections = []; + + if (pluginData) { + // If we have database + var connections = pluginData; + + for (var i = 0; i < connections.length; i++) { + // Updating all connections without deleted one + if (i != connectionIndex) { + newConnections.push(connections[i]); + } + } + } + + return newConnections; +} + +function deleteLine(lineID) { + // refactored + var lineObject = document.getLayerWithID(lineID); + var selectedGroup; + + if (lineObject) { + selectedGroup = lineObject.parent; + lineObject.remove(); + + if (selectedGroup.layers.length == 0) { + selectedGroup.remove(); + } + } +} + +function updateSpacing(sourceObjectID, childObjectID, direction) { + var sourceObject = document.getLayerWithID(sourceObjectID); + var childObject = document.getLayerWithID(childObjectID); + + if (Settings.settingForKey("arrowSpacing") && Settings.settingForKey("arrowSpacing") != 0) { + var currentSpacing = Settings.settingForKey("arrowSpacing"); + + if (direction == "Right") { + childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing; + } + + if (direction == "Down") { + childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing; + } + + if (direction == "Left") { + childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing; + } + + if (direction == "Up") { + childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing; + } + } +} + +function autoAlignLayer(sourceObjectID, childObjectID, direction) { + var sourceObject = document.getLayerWithID(sourceObjectID); + var childObject = document.getLayerWithID(childObjectID); + var sourceMidY, childMidY, sourceMidX, childMidX, diff; + + if (Settings.settingForKey("autoAlign")) { + if (Settings.settingForKey("autoAlign") == true) { + // If user turned on Auto-Align settings + if (direction == "Right" || direction == "Left") { + sourceMidY = sourceObject.frame.y + sourceObject.frame.height / 2; + childMidY = childObject.frame.y + childObject.frame.height / 2; + diff = sourceMidY - childMidY; + + if (diff > -6 && diff < 6) { + childObject.frame.y = childObject.frame.y + diff; + } + } - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + if (direction == "Down" || direction == "Up") { + sourceMidX = sourceObject.frame.x + sourceObject.frame.width / 2; + childMidX = childObject.frame.x + childObject.frame.width / 2; + diff = sourceMidX - childMidX; - var _points = line.layers().firstObject().points(); + if (diff > -6 && diff < 6) { + childObject.frame.x = childObject.frame.x + diff; + } + } + } + } +} - _points[0].curveMode = 4; - _points[1].curveMode = 4; - _points[0].hasCurveFrom = true; - _points[1].hasCurveTo = true; +function defineSourceObject(firstObjectID, secondObjectID, direction) { + //Refactored + var firstObject = document.getLayerWithID(firstObjectID); + var secondObject = document.getLayerWithID(secondObjectID); + var sourceObjectID; - if (firstLayerPosY < secondLayerPosY) { - _points[0].curveFrom = { - x: 0.5, - y: 0 - }; - _points[0].curveTo = { - x: -0.5, - y: 1 - }; - _points[1].curveFrom = { - x: 1, - y: 1 - }; - _points[1].curveTo = { - x: 0.5, - y: 1 - }; + if (direction == "Right") { + if (firstObject.frame.x <= secondObject.frame.x) { + sourceObjectID = firstObject.id; } else { - _points[0].curveFrom = { - x: 0.5, - y: 1 - }; - _points[0].curveTo = { - x: -0.5, - y: 1 - }; - _points[1].curveFrom = { - x: 1, - y: 1 - }; - _points[1].curveTo = { - x: 0.5, - y: 0 - }; + sourceObjectID = secondObject.id; } } if (direction == "Down") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line - - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - - var _points2 = line.layers().firstObject().points(); - - _points2[0].curveMode = 4; - _points2[1].curveMode = 4; - _points2[0].hasCurveFrom = true; - _points2[1].hasCurveTo = true; - - if (firstLayerPosX < secondLayerPosX) { - _points2[0].curveFrom = { - x: 0, - y: 0.5 - }; - _points2[0].curveTo = { - x: -0.5, - y: 1 - }; - _points2[1].curveFrom = { - x: 1, - y: 1 - }; - _points2[1].curveTo = { - x: 1, - y: 0.5 - }; + if (firstObject.frame.y <= secondObject.frame.y) { + sourceObjectID = firstObject.id; } else { - _points2[0].curveFrom = { - x: 1, - y: 0.5 - }; - _points2[0].curveTo = { - x: -0.5, - y: 1 - }; - _points2[1].curveFrom = { - x: 1, - y: 1 - }; - _points2[1].curveTo = { - x: 0, - y: 0.5 - }; + sourceObjectID = secondObject.id; } } if (direction == "Left") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line + if (firstObject.frame.x <= secondObject.frame.x) { + sourceObjectID = secondObject.id; + } else { + sourceObjectID = firstObject.id; + } + } - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + if (direction == "Up") { + if (firstObject.frame.y <= secondObject.frame.y) { + sourceObjectID = secondObject.id; + } else { + sourceObjectID = firstObject.id; + } + } - var _points3 = line.layers().firstObject().points(); + return sourceObjectID; +} - _points3[0].curveMode = 4; - _points3[1].curveMode = 4; - _points3[0].hasCurveFrom = true; - _points3[1].hasCurveTo = true; +function getSourceObjectFromSelection(selection, direction) { + //Refactored + var sourceObjectID = selection.firstObject().objectID(); - if (firstLayerPosY < secondLayerPosY) { - _points3[0].curveFrom = { - x: 0.5, - y: 0 - }; - _points3[0].curveTo = { - x: -0.5, - y: 1 - }; - _points3[1].curveFrom = { - x: 1, - y: 1 - }; - _points3[1].curveTo = { - x: 0.5, - y: 1 - }; - } else { - _points3[0].curveFrom = { - x: 0.5, - y: 1 - }; - _points3[0].curveTo = { - x: -0.5, - y: 1 - }; - _points3[1].curveFrom = { - x: 1, - y: 1 - }; - _points3[1].curveTo = { - x: 0.5, - y: 0 - }; + if (direction != "Auto") { + for (var g = 0; g < selection.count(); g++) { + sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction); } - } // Providing Settings for the arrow - + } - line.setName("Curved Arrow"); - return line; + return sourceObjectID; } -function styleLine(line, style) { - // Refactored - var localStyle; +function start(context, direction, isCondition) { + //cc:start#1;Passing all the data + var selection = context.selection; - if (style != null) { - // For updates - if (getLayerStyles(style) != null && style != "Default Style") { - // If style is specified - localStyle = style; - var ownStyle = getLayerStyles(style); - line.sharedStyle = ownStyle[0]; - } else { - // if there is no specific style - localStyle = "Default Style"; - var border = line.style().addStylePartOfType(1); - border.color = MSColor.colorWithRGBADictionary({ - r: 0.89, - g: 0.89, - b: 0.89, - a: 1 - }); - border.thickness = 2; - line.style().endMarkerType = 2; - } - } else { - // For creating new - if (context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) != "Default Style") { - // we have settins almost all the time and it's not default - localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)); - line.sharedStyle = localStyle[0]; - localStyle = localStyle[0].name(); - } else { - localStyle = "Default Style"; + if (selection.count() > 1 && selection[0].class() != "MSArtboardGroup") { + // Need to find source object by ID first + var sourceObjectID = getSourceObjectFromSelection(selection, direction); + var currentConnectionsData = newConnectionsData; // Need to refactor - var _border = line.style().addStylePartOfType(1); + for (var g = 0; g < selection.count(); g++) { + if (selection[g].objectID() != sourceObjectID) { + // Then need to create or update connection arrow with each selection + var connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), currentConnectionsData); - _border.color = MSColor.colorWithRGBADictionary({ - r: 0.89, - g: 0.89, - b: 0.89, - a: 1 - }); - _border.thickness = 2; - line.style().endMarkerType = 2; + if (connectionIndex.length == 0) { + // There is no connection with this two objects in our database + createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition); + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("New connection is created 🚀"); + } else { + // Need to remake the arrow condition + updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex); + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Current connection is updated 🤘"); + } + } } - } - return localStyle; + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); + } else { + // When user didn't select anything + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Please select more than two layers. Artboards are coming soon 🥳"); + } } // const track = require("sketch-module-google-analytics") // track("UA-138226597-1", "event", { // ec: "command", diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index f2096ca..c6bbccf 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","Settings","pluginKey","document","docData","pluginData","currentParentGroup","newConnectionsData","context","sketch","fromNative","documentData","command","valueForKey_onLayer_forPluginIdentifier","currentPage","currentArtboard","getConnectionsData","actionContext","createAutoArrow","start","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","updateSelectedArrows","selection","count","class","currentConnectionsData","g","objectID","connectionIndex","findConnectionIndex","length","updateArrow","firstObject","secondObject","style","type","direction","line","condition","isCondition","message","setValue_forKey_onLayer_forPluginIdentifier","autoUpdateSelectedArrows","action","movedLayers","Array","from","layers","map","layer","log","id","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","updateArrowsCounter","i","getLayerWithID","sketchObject","parentArtboard","push","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","firstObjectID","secondObjectID","lineID","conditionID","conditionObject","remove","createArrow","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","checkForGroup","groupName","currentGroup","name","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","connectionPos","getConnectionPos","settingForKey","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","addLayers","fixGeometryWithOptions","Group","group","parent","locked","moveToBack","adjustToFit","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","dataArray","data","indexArray","String","newConnections","lineObject","selectedGroup","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","defineSourceObject","getSourceObjectFromSelection","getLayerStyles","allStyles","allLayerStyles","keyword","styles","includes","libraries","getLibraries","libraryObject","symbolReferences","symbol","getImportableSymbolReferencesForDocument","alert","symbolMaster","import","createNewInstance","firstObjectAbsPos","changeBasis","to","secondObjectAbsPos","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","setName","points","cornerRadius","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","localStyle","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","//\n// Variables\n//\n\nimport sketch from 'sketch';\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, newConnectionsData;\nif(context.document){\n //cc:remember place\n document = sketch.fromNative(context.document);\n docData = context.document.documentData();\n pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n newConnectionsData = getConnectionsData();\n} else {\n document = sketch.fromNative(context.actionContext.document);\n //cc:here is bug;well, seems like a bug in logic\n}\n \n//\n// Create Connection Function\n//\n\n\nexport function createAutoArrow(context){start(context, \"Auto\", false);}\nexport function createRightArrow(context){start(context, \"Right\", false);}\nexport function createDownArrow(context){start(context, \"Down\", false);}\nexport function createLeftArrow(context){start(context, \"Left\", false);}\nexport function createUpArrow(context){start(context, \"Up\", false);}\n\nexport function createRightArrowWithCondition(context){start(context, \"Right\", true);}\nexport function createDownArrowWithCondition(context){start(context, \"Down\", true);}\nexport function createLeftArrowWithCondition(context){start(context, \"Left\", true);}\nexport function createUpArrowWithCondition(context){start(context, \"Up\", true);}\n\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n let selection = context.selection;\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let currentConnectionsData = newConnectionsData; // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), currentConnectionsData);\n\n if(connectionIndex.length == 0){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex);\n sketch.UI.message(\"Current connection is updated 🤘\");\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\");\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n \n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\nexport function autoUpdateSelectedArrows(context) { \n const action = context.actionContext;\n\n docData = action.document.documentData();\n pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n newConnectionsData = getConnectionsData();\n\n const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer));\n log(movedLayers[0].id);\n log(movedLayers.length);\n\n // if (movedLayers.filter(layer => (layer.type == 'Artboard' || (layer.type == 'SymbolMaster' && config.arrangeSymbols))).length > 0) {\n // ArrangeArtboards(context)\n // }\n\n let currentConnectionsData = newConnectionsData; // Need to refactor\n\n for(let g = 0; g < movedLayers.length; g++) {\n\n let connectionIndex = findConnectionIndex(movedLayers[0].id, null, currentConnectionsData);\n\n log(\"yes \"+connectionIndex);\n if(connectionIndex.length == 0){\n \n updateArrow(currentConnectionsData[connectionIndex[0]].firstObject, currentConnectionsData[connectionIndex[0]].secondObject, currentConnectionsData[connectionIndex[0]].style, currentConnectionsData[connectionIndex[0]].type, currentConnectionsData[connectionIndex[0]].direction, currentConnectionsData[connectionIndex[0]].line, currentConnectionsData[connectionIndex[0]].condition, currentConnectionsData[connectionIndex[0]].isCondition, connectionIndex[0]);\n sketch.UI.message(\"Current connection is updated 🤘\");\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\");\n }\n \n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n}\n\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection;\n let connections = getConnectionsData();\n let firstObjectArtboard;\n let secondObjectArtboard;\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject);\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID();\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject);\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID();\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i);\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i]);\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows are updated 🚀\");\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\");\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData;\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows are updated 🚀\");\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\");\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows are deleted\");\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\");\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection;\n let firstObject, secondObject;\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData();\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject);\n secondObject = document.getLayerWithID(connections[i].secondObject);\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line);\n newConnectionsData = deleteConnectionFromData(i);\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows from selected artboard are deleted\");\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\");\n }\n } else {\n sketch.UI.message(\"Please select one artboard\");\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection;\n let firstObject, secondObject;\n\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n \n let connections = getConnectionsData() ;\n let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), connections);\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line);\n newConnectionsData = deleteConnectionFromData(connectionIndex);\n const updateArrowsCounter = connections.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject);\n secondObject = document.getLayerWithID(connections[i].secondObject);\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line);\n newConnectionsData = deleteConnectionFromData(i);\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\");\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\");\n }\n}\n\n\n//\n// Functions\n//\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let conditionObject = document.getLayerWithID(conditionID);\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID);\n if(conditionID && !isCondition){\n if(conditionObject){conditionObject.remove();}\n }\n \n newConnectionsData = deleteConnectionFromData(connectionIndex);\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition);\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n\n // Need to save this data to the global array\n newConnectionsData.push(connection);\n}\n\nfunction checkForGroup(groupName) { // refactored\n let currentGroup = null;\n\n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n\n return currentGroup;\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition){ // Refactored\n // Process of creating new connection \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n // Condition\n if(condition == true){\n if(conditionID != null){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY);\n }\n } else {\n connection.conditionID = null;\n }\n // connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style);\n\n // Add to group\n addToArrowsGroup(connection.line);\n \n return connection\n}\n\nfunction addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\");\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nfunction addToConditionGroup(condition, x, y){ // Refactored\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Conditions',\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n}\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = [];\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i]);\n }\n } \n return dataArray;\n}\n\nfunction findConnectionIndex(firstObjectID, secondObjectID, data){\n let indexArray = [] ;\n firstObjectID = String(firstObjectID);\n secondObjectID = String(secondObjectID);\n \n if(pluginData){\n // If we have database, need to check for connections\n for(let y = 0; y < data.length; y++){\n if(firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject){\n if(secondObjectID == null){\n // When we need to find connection between two objects\n if(secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject){\n indexArray[0] = y;\n } \n } else {\n // When we need to find a connection for one object only\n indexArray.push(y);\n }\n }\n }\n }\n return indexArray;\n}\n\nfunction deleteConnectionFromData(connectionIndex){ // Refactored\n let newConnections = [];\n if(pluginData){\n // If we have database\n let connections = pluginData;\n\n for (let i = 0; i < connections.length; i ++) {\n // Updating all connections without deleted one\n if(i != connectionIndex){\n newConnections.push(connections[i]);\n }\n }\n }\n return newConnections;\n}\n\nfunction deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let sourceObjectID;\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n return sourceObjectID;\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID();\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction);\n }\n }\n \n return sourceObjectID;\n}\n\nfunction getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n\n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n\treturn styles;\n}\n\nfunction start(context, direction, isCondition){\n //cc:start#1;Passing all the data\n let selection = context.selection;\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction);\n let currentConnectionsData = newConnectionsData; // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), currentConnectionsData);\n \n if(connectionIndex.length == 0){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition);\n sketch.UI.message(\"New connection is created 🚀\");\n } else {\n // Need to remake the arrow condition\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex);\n sketch.UI.message(\"Current connection is updated 🤘\");\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\nfunction addCondition(keyword, x, y){ // Refactored\n let libraries = sketch.getLibraries();\n let libraryObject, symbolReferences, symbol;\n\n for(let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document);\n for(let i = 0; i < symbolReferences.length; i++) {\n if(symbolReferences[i].name.includes(keyword)){\n libraryObject = symbolReferences[i];\n }\n }\n }\n\n if(libraryObject == null){\n symbol = null;\n UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here');\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y);\n }\n\n return symbol;\n}\n\nfunction updateCondition(conditionID, x, y){ // Refactored\n let condition = document.getLayerWithID(conditionID);\n // log (condition)\n let conGroup = checkForGroup(\"Conditions\") ;\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n }\n return condition.id;\n}\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\");\n let diffX, diffY;\n\n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n\n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n\n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n\n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n\n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n\n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n\n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n\n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n\n return connectionPos\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n\n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n\n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n\n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n\n return line;\n}\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n\n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n\n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n\n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n\n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n\n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n\n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n\n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n\n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n\n if(firstLayerPosX Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here');\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y);\n }\n \n return symbol;\n}\n\nfunction addToConditionGroup(condition, x, y){ // Refactored\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n \n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Conditions',\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n}\n\nfunction updateCondition(conditionID, x, y){ // Refactored\nlet condition = document.getLayerWithID(conditionID);\n// log (condition)\nlet conGroup = checkForGroup(\"Conditions\") ;\nlet arGroup = checkForGroup(\"Arrows\");\nlet arGroupX = arGroup != null ? arGroup.frame().x() : 0;\nlet arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\nif(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n} else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n}\nreturn condition.id;\n}\n\n// Style\n\nfunction styleLine(line, style){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey));\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nfunction getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}\n \n// Groups\n\nfunction addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\");\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nfunction checkForGroup(groupName) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n \n return currentGroup;\n}","//\n// Variables\n//\n\nimport sketch from 'sketch';\n\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, newConnectionsData;\nif(context.document){\n //cc:remember place\n document = sketch.fromNative(context.document);\n docData = context.document.documentData();\n pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n newConnectionsData = getConnectionsData();\n} else {\n document = sketch.fromNative(context.actionContext.document);\n //cc:here is bug;well, seems like a bug in logic\n}\n \n//\n// Create Connection Function\n//\n\n\nexport function createAutoArrow(context){start(context, \"Auto\", false);}\nexport function createRightArrow(context){start(context, \"Right\", false);}\nexport function createDownArrow(context){start(context, \"Down\", false);}\nexport function createLeftArrow(context){start(context, \"Left\", false);}\nexport function createUpArrow(context){start(context, \"Up\", false);}\n\nexport function createRightArrowWithCondition(context){start(context, \"Right\", true);}\nexport function createDownArrowWithCondition(context){start(context, \"Down\", true);}\nexport function createLeftArrowWithCondition(context){start(context, \"Left\", true);}\nexport function createUpArrowWithCondition(context){start(context, \"Up\", true);}\n\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n let selection = context.selection;\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let currentConnectionsData = newConnectionsData; // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), currentConnectionsData);\n\n if(connectionIndex.length == 0){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex);\n sketch.UI.message(\"Current connection is updated 🤘\");\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\");\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n \n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\nexport function autoUpdateSelectedArrows(context) { \n const action = context.actionContext;\n\n docData = action.document.documentData();\n pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n newConnectionsData = getConnectionsData();\n\n const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer));\n log(movedLayers[0].id);\n log(movedLayers.length);\n\n // if (movedLayers.filter(layer => (layer.type == 'Artboard' || (layer.type == 'SymbolMaster' && config.arrangeSymbols))).length > 0) {\n // ArrangeArtboards(context)\n // }\n\n let currentConnectionsData = newConnectionsData; // Need to refactor\n\n for(let g = 0; g < movedLayers.length; g++) {\n\n let connectionIndex = findConnectionIndex(movedLayers[0].id, null, currentConnectionsData);\n\n log(\"yes \"+connectionIndex);\n if(connectionIndex.length == 0){\n \n updateArrow(currentConnectionsData[connectionIndex[0]].firstObject, currentConnectionsData[connectionIndex[0]].secondObject, currentConnectionsData[connectionIndex[0]].style, currentConnectionsData[connectionIndex[0]].type, currentConnectionsData[connectionIndex[0]].direction, currentConnectionsData[connectionIndex[0]].line, currentConnectionsData[connectionIndex[0]].condition, currentConnectionsData[connectionIndex[0]].isCondition, connectionIndex[0]);\n sketch.UI.message(\"Current connection is updated 🤘\");\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\");\n }\n \n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n}\n\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection;\n let connections = getConnectionsData();\n let firstObjectArtboard;\n let secondObjectArtboard;\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject);\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID();\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject);\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID();\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i);\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i]);\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows are updated 🚀\");\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\");\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData;\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows are updated 🚀\");\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\");\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows are deleted\");\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\");\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection;\n let firstObject, secondObject;\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData();\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject);\n secondObject = document.getLayerWithID(connections[i].secondObject);\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line);\n newConnectionsData = deleteConnectionFromData(i);\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows from selected artboard are deleted\");\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\");\n }\n } else {\n sketch.UI.message(\"Please select one artboard\");\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection;\n let firstObject, secondObject;\n\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n \n let connections = getConnectionsData() ;\n let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), connections);\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line);\n newConnectionsData = deleteConnectionFromData(connectionIndex);\n const updateArrowsCounter = connections.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject);\n secondObject = document.getLayerWithID(connections[i].secondObject);\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line);\n newConnectionsData = deleteConnectionFromData(i);\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\");\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\");\n }\n}\n\n\n//\n// Functions\n//\n\nimport { drawConnection } from \"./draw.js\";\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let conditionObject = document.getLayerWithID(conditionID);\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID);\n if(conditionID && !isCondition){\n if(conditionObject){conditionObject.remove();}\n }\n \n newConnectionsData = deleteConnectionFromData(connectionIndex);\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition);\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n\n // Need to save this data to the global array\n newConnectionsData.push(connection);\n}\n\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = [];\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i]);\n }\n } \n return dataArray;\n}\n\nfunction findConnectionIndex(firstObjectID, secondObjectID, data){\n let indexArray = [] ;\n firstObjectID = String(firstObjectID);\n secondObjectID = String(secondObjectID);\n \n if(pluginData){\n // If we have database, need to check for connections\n for(let y = 0; y < data.length; y++){\n if(firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject){\n if(secondObjectID == null){\n // When we need to find connection between two objects\n if(secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject){\n indexArray[0] = y;\n } \n } else {\n // When we need to find a connection for one object only\n indexArray.push(y);\n }\n }\n }\n }\n return indexArray;\n}\n\nfunction deleteConnectionFromData(connectionIndex){ // Refactored\n let newConnections = [];\n if(pluginData){\n // If we have database\n let connections = pluginData;\n\n for (let i = 0; i < connections.length; i ++) {\n // Updating all connections without deleted one\n if(i != connectionIndex){\n newConnections.push(connections[i]);\n }\n }\n }\n return newConnections;\n}\n\nfunction deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let sourceObjectID;\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n return sourceObjectID;\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID();\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction);\n }\n }\n \n return sourceObjectID;\n}\n\nfunction start(context, direction, isCondition){\n //cc:start#1;Passing all the data\n let selection = context.selection;\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction);\n let currentConnectionsData = newConnectionsData; // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), currentConnectionsData);\n \n if(connectionIndex.length == 0){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition);\n sketch.UI.message(\"New connection is created 🚀\");\n } else {\n // Need to remake the arrow condition\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex);\n sketch.UI.message(\"Current connection is updated 🤘\");\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\n\n\n\n// const track = require(\"sketch-module-google-analytics\")\n// track(\"UA-138226597-1\", \"event\", {\n// ec: \"command\", \n// ea: \"start\", \n// ev: \"my-command\"\n// });\n\n\n\n\n\n","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/src/draw.js b/src/draw.js new file mode 100644 index 0000000..3dabb5d --- /dev/null +++ b/src/draw.js @@ -0,0 +1,497 @@ +import sketch from 'sketch'; +var Settings = require('sketch/settings'); + +const pluginKey = "flowArrows"; +let document = sketch.fromNative(context.document); + + +let docData = context.document.documentData(); +// let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); +let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); + +// Main Function + +export function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition){ // Refactored + // Process of creating new connection + let firstObject = document.getLayerWithID(firstObjectID); + let secondObject = document.getLayerWithID(secondObjectID); + let connectionPos = getConnectionPos(firstObject, secondObject, localDirection); + let connection = { + line: [], + conditionID: [], + type: [], + style: [] + } + + // Type + connection.type = type == null ? Settings.settingForKey("arrowType") : type; + if(connection.type == "Angled" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);} + if(connection.type == "Straight"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);} + if(connection.type == "Curved"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);} + + // Condition + if(condition == true){ + if(conditionID != null){ + connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY); + } else { + connection.conditionID = addCondition("#con", connectionPos.middlePosX, connectionPos.middlePosY); + } + } else { + connection.conditionID = null; + } + // connection.conditionID = condition != false ? connection.conditionID = addCondition("#con", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null + + // Style + connection.style = styleLine(connection.line, style); + + // Add to group + addToArrowsGroup(connection.line); + + return connection +} + +// Positions + +function getConnectionPos(firstObject, secondObject, direction){ // Refactored + + let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup}); + let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup}); + let currentGroup = checkForGroup("Arrows"); + let diffX, diffY; + + if(currentGroup){ + diffX = currentGroup.frame().x(); + diffY = currentGroup.frame().y(); + } else { + diffX = 0; + diffY = 0; + } + + let connectionPos = { + firstLayerPosX: null, + firstLayerPosY: null, + secondLayerPosX: null, + secondLayerPosY: null, + middlePosX: null, + middlePosY: null + } + + // Getting all the positions + if(direction == "Up"){ + // First Layer Position Start Point Position + connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX; + connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY; + + // Second Layer Position End Point Position + connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX; + connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY; + + // Middle Points + connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2; + connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2; + } + + if(direction == "Right"){ + // First Layer Position Start Point Position + connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX; + connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY; + + // Second Layer Position End Point Position + connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX; + connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY; + + // Middle Points + connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2; + connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2; + } + + if(direction == "Down"){ + // First Layer Position Start Point Position + connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX; + connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY; + + // Second Layer Position End Point Position + connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX; + connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY; + + // Middle Points + connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2; + connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2; + } + + if(direction == "Left"){ + // First Layer Position Start Point Position + connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX; + connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY; + + // Second Layer Position End Point Position + connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX; + connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY; + + // Middle Points + connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2; + connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2; + } + + return connectionPos +} + +// Drawing Types + +function drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored + let path = NSBezierPath.bezierPath(); + + if(direction == "Up"){ + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + if(direction == "Right"){ + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + if(direction == "Down"){ + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + if(direction == "Left"){ + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + let points = line.layers().firstObject().points(); + points[1].cornerRadius = 20; + points[2].cornerRadius = 20; + line.setName("Angled Arrow"); + + return line; +} + +function drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored + let path = NSBezierPath.bezierPath(); + + if(direction == "Up"){ + path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)); + } + + if(direction == "Right"){ + path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)); + } + + if(direction == "Down"){ + path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)); + } + + if(direction == "Left"){ + path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)); + } + + let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + line.setName("Straight Arrow"); + + return line; +} + +function drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored + let path = NSBezierPath.bezierPath(); + let line; + + if(direction == "Up"){ + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)); + + // Painting the line + line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + let points = line.layers().firstObject().points(); + + points[0].curveMode = 4; + points[1].curveMode = 4; + points[0].hasCurveFrom = true; + points[1].hasCurveTo = true; + + if(firstLayerPosX Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as "#condition" so it will be added here'); + } else { + let symbolMaster = libraryObject.import(); + symbol = symbolMaster.createNewInstance(); + symbol = addToConditionGroup(symbol, x, y); + } + + return symbol; +} + +function addToConditionGroup(condition, x, y){ // Refactored + let conGroup = checkForGroup("Conditions"); + let arGroup = checkForGroup("Arrows"); + let arGroupX = arGroup != null ? arGroup.frame().x() : 0; + let arGroupY = arGroup != null ? arGroup.frame().y() : 0; + + if(conGroup){ + condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX); + condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY); + condition.parent = conGroup; + conGroup.fixGeometryWithOptions(1); + } else { + condition.frame.x = x - condition.frame.width / 2; + condition.frame.y = y - condition.frame.height / 2; + let Group = require('sketch/dom').Group; + let group = new Group({ + parent: currentParentGroup, + name: 'Conditions', + layers: [condition] + }); + group.moveToBack(); + group.adjustToFit(); + } + return condition.id; +} + +function updateCondition(conditionID, x, y){ // Refactored +let condition = document.getLayerWithID(conditionID); +// log (condition) +let conGroup = checkForGroup("Conditions") ; +let arGroup = checkForGroup("Arrows"); +let arGroupX = arGroup != null ? arGroup.frame().x() : 0; +let arGroupY = arGroup != null ? arGroup.frame().y() : 0; + +if(conGroup){ + condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX); + condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY); + conGroup.fixGeometryWithOptions(1); +} else { + condition.frame.x = x - condition.frame.width / 2; + condition.frame.y = y - condition.frame.height / 2; +} +return condition.id; +} + +// Style + +function styleLine(line, style){ // Refactored + let localStyle; + + if(style != null){ + // For updates + if(getLayerStyles(style) != null && style != "Default Style"){ + // If style is specified + localStyle = style; + let ownStyle = getLayerStyles(style); + line.sharedStyle = ownStyle[0]; + } else { + // if there is no specific style + localStyle = "Default Style"; + let border = line.style().addStylePartOfType(1); + border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1}); + border.thickness = 2; + line.style().endMarkerType = 2; + } + } else { + // For creating new + if(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) != "Default Style"){ + // we have settins almost all the time and it's not default + localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)); + line.sharedStyle = localStyle[0]; + localStyle = localStyle[0].name(); + } else { + localStyle = "Default Style"; + let border = line.style().addStylePartOfType(1); + border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1}); + border.thickness = 2; + line.style().endMarkerType = 2; + } + } + + return localStyle; +} + +function getLayerStyles(name) { // Refactored + let allStyles = docData.allLayerStyles(); + let keyword = "$arrow"; + let styles = []; + + for(let i = 0; i < allStyles.count(); i++){ + if(name == null) { + if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);} + } else { + if(allStyles[i].name() == name){styles.push(allStyles[i]);} + } + } + return styles; +} + +// Groups + +function addToArrowsGroup(line){ + let currentGroup = checkForGroup("Arrows"); + if(currentGroup){ + currentGroup.addLayers([line]); + currentGroup.fixGeometryWithOptions(1); + } else { + let Group = require('sketch/dom').Group; + let group = new Group({ + parent: currentParentGroup, + name: 'Arrows', + locked: true, + layers: [line] + }); + group.moveToBack(); + group.adjustToFit(); + } +} + +function checkForGroup(groupName) { // refactored + let currentGroup = null; + + // Checking all the groups that we have + for(let i = 0; i < currentParentGroup.layers().count(); i++){ + if(currentParentGroup.layers()[i].name() == groupName) { + currentGroup = currentParentGroup.layers()[i]; + } + } + + return currentGroup; +} \ No newline at end of file diff --git a/src/script.js b/src/script.js index 33a3723..46e0f72 100644 --- a/src/script.js +++ b/src/script.js @@ -3,6 +3,8 @@ // import sketch from 'sketch'; + + let UI = require('sketch/ui') ; var Settings = require('sketch/settings'); @@ -257,6 +259,8 @@ export function deleteSelectedArrows(context) { // Functions // +import { drawConnection } from "./draw.js"; + function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored // Need to check if we have the layers with such IDs let firstObject = document.getLayerWithID(firstObjectID); @@ -303,19 +307,6 @@ function createArrow(firstObjectID, secondObjectID, style, type, direction, cond newConnectionsData.push(connection); } -function checkForGroup(groupName) { // refactored - let currentGroup = null; - - // Checking all the groups that we have - for(let i = 0; i < currentParentGroup.layers().count(); i++){ - if(currentParentGroup.layers()[i].name() == groupName) { - currentGroup = currentParentGroup.layers()[i]; - } - } - - return currentGroup; -} - function getDirection(firstObjectID, secondObjectID){ // Refactored // Get direction from the source object const firstObject = document.getLayerWithID(firstObjectID); @@ -354,89 +345,6 @@ function getDirection(firstObjectID, secondObjectID){ // Refactored return direction; } -function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition){ // Refactored - // Process of creating new connection - let firstObject = document.getLayerWithID(firstObjectID); - let secondObject = document.getLayerWithID(secondObjectID); - let connectionPos = getConnectionPos(firstObject, secondObject, localDirection); - let connection = { - line: [], - conditionID: [], - type: [], - style: [] - } - - // Type - connection.type = type == null ? Settings.settingForKey("arrowType") : type; - if(connection.type == "Angled" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);} - if(connection.type == "Straight"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);} - if(connection.type == "Curved"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);} - - // Condition - if(condition == true){ - if(conditionID != null){ - connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY); - } else { - connection.conditionID = addCondition("#con", connectionPos.middlePosX, connectionPos.middlePosY); - } - } else { - connection.conditionID = null; - } - // connection.conditionID = condition != false ? connection.conditionID = addCondition("#con", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null - - // Style - connection.style = styleLine(connection.line, style); - - // Add to group - addToArrowsGroup(connection.line); - - return connection -} - -function addToArrowsGroup(line){ - let currentGroup = checkForGroup("Arrows"); - if(currentGroup){ - currentGroup.addLayers([line]); - currentGroup.fixGeometryWithOptions(1); - } else { - let Group = require('sketch/dom').Group; - let group = new Group({ - parent: currentParentGroup, - name: 'Arrows', - locked: true, - layers: [line] - }); - group.moveToBack(); - group.adjustToFit(); - } -} - -function addToConditionGroup(condition, x, y){ // Refactored - let conGroup = checkForGroup("Conditions"); - let arGroup = checkForGroup("Arrows"); - let arGroupX = arGroup != null ? arGroup.frame().x() : 0; - let arGroupY = arGroup != null ? arGroup.frame().y() : 0; - - if(conGroup){ - condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX); - condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY); - condition.parent = conGroup; - conGroup.fixGeometryWithOptions(1); - } else { - condition.frame.x = x - condition.frame.width / 2; - condition.frame.y = y - condition.frame.height / 2; - let Group = require('sketch/dom').Group; - let group = new Group({ - parent: currentParentGroup, - name: 'Conditions', - layers: [condition] - }); - group.moveToBack(); - group.adjustToFit(); - } - return condition.id; -} - function getConnectionsData(){ //Refactored let dataArray = []; @@ -603,21 +511,6 @@ function getSourceObjectFromSelection(selection, direction){ //Refactored return sourceObjectID; } -function getLayerStyles(name) { // Refactored - let allStyles = docData.allLayerStyles(); - let keyword = "$arrow"; - let styles = []; - - for(let i = 0; i < allStyles.count(); i++){ - if(name == null) { - if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);} - } else { - if(allStyles[i].name() == name){styles.push(allStyles[i]);} - } - } - return styles; -} - function start(context, direction, isCondition){ //cc:start#1;Passing all the data let selection = context.selection; @@ -650,369 +543,6 @@ function start(context, direction, isCondition){ } } -function addCondition(keyword, x, y){ // Refactored - let libraries = sketch.getLibraries(); - let libraryObject, symbolReferences, symbol; - - for(let g = 0; g < libraries.length; g++) { - symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document); - for(let i = 0; i < symbolReferences.length; i++) { - if(symbolReferences[i].name.includes(keyword)){ - libraryObject = symbolReferences[i]; - } - } - } - - if(libraryObject == null){ - symbol = null; - UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as "#condition" so it will be added here'); - } else { - let symbolMaster = libraryObject.import(); - symbol = symbolMaster.createNewInstance(); - symbol = addToConditionGroup(symbol, x, y); - } - - return symbol; -} - -function updateCondition(conditionID, x, y){ // Refactored - let condition = document.getLayerWithID(conditionID); - // log (condition) - let conGroup = checkForGroup("Conditions") ; - let arGroup = checkForGroup("Arrows"); - let arGroupX = arGroup != null ? arGroup.frame().x() : 0; - let arGroupY = arGroup != null ? arGroup.frame().y() : 0; - - if(conGroup){ - condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX); - condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY); - conGroup.fixGeometryWithOptions(1); - } else { - condition.frame.x = x - condition.frame.width / 2; - condition.frame.y = y - condition.frame.height / 2; - } - return condition.id; -} - -function getConnectionPos(firstObject, secondObject, direction){ // Refactored - - let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup}); - let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup}); - let currentGroup = checkForGroup("Arrows"); - let diffX, diffY; - - if(currentGroup){ - diffX = currentGroup.frame().x(); - diffY = currentGroup.frame().y(); - } else { - diffX = 0; - diffY = 0; - } - - let connectionPos = { - firstLayerPosX: null, - firstLayerPosY: null, - secondLayerPosX: null, - secondLayerPosY: null, - middlePosX: null, - middlePosY: null - } - - // Getting all the positions - if(direction == "Up"){ - // First Layer Position Start Point Position - connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX; - connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY; - - // Second Layer Position End Point Position - connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX; - connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY; - - // Middle Points - connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2; - connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2; - } - - if(direction == "Right"){ - // First Layer Position Start Point Position - connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX; - connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY; - - // Second Layer Position End Point Position - connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX; - connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY; - - // Middle Points - connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2; - connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2; - } - - if(direction == "Down"){ - // First Layer Position Start Point Position - connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX; - connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY; - - // Second Layer Position End Point Position - connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX; - connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY; - - // Middle Points - connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2; - connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2; - } - - if(direction == "Left"){ - // First Layer Position Start Point Position - connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX; - connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY; - - // Second Layer Position End Point Position - connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX; - connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY; - - // Middle Points - connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2; - connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2; - } - - return connectionPos -} - -function drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored - let path = NSBezierPath.bezierPath(); - - if(direction == "Up"){ - path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)); - } - - if(direction == "Right"){ - path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)); - } - - if(direction == "Down"){ - path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)); - } - - if(direction == "Left"){ - path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)); - } - - let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - line.setName("Straight Arrow"); - - return line; -} - -function drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored - let path = NSBezierPath.bezierPath(); - - if(direction == "Up"){ - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - if(direction == "Right"){ - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - if(direction == "Down"){ - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - if(direction == "Left"){ - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - let points = line.layers().firstObject().points(); - points[1].cornerRadius = 20; - points[2].cornerRadius = 20; - line.setName("Angled Arrow"); - - return line; -} - -function drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored - let path = NSBezierPath.bezierPath(); - let line; - - if(direction == "Up"){ - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY)); - - // Painting the line - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - let points = line.layers().firstObject().points(); - - points[0].curveMode = 4; - points[1].curveMode = 4; - points[0].hasCurveFrom = true; - points[1].hasCurveTo = true; - - if(firstLayerPosX Date: Thu, 4 Jul 2019 22:58:33 +0300 Subject: [PATCH 25/44] separated create arrow --- arrows.sketchplugin/Contents/Sketch/script.js | 287 ++++++++++-------- .../Contents/Sketch/script.js.map | 2 +- src/createArrow.js | 144 +++++++++ src/script.js | 116 +------ 4 files changed, 312 insertions(+), 237 deletions(-) create mode 100644 src/createArrow.js diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index 9c8f365..c011e3b 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -91,6 +91,168 @@ var exports = /************************************************************************/ /******/ ({ +/***/ "./src/createArrow.js": +/*!****************************!*\ + !*** ./src/createArrow.js ***! + \****************************/ +/*! exports provided: createArrow */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createArrow", function() { return createArrow; }); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _draw_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./draw.js */ "./src/draw.js"); + + +var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); + +var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); + +var pluginKey = "flowArrows"; +var document; +var docData, pluginData, currentParentGroup, newConnectionsData; +document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); +docData = context.document.documentData(); +pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); +currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards + +newConnectionsData = getConnectionsData(); + +function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { + // Refactored + var localDirection = direction == "Auto" ? getDirection(firstObjectID, secondObjectID) : direction; // Main Operations based on the settings + + updateSpacing(firstObjectID, secondObjectID, localDirection); + autoAlignLayer(firstObjectID, secondObjectID, localDirection); // Making an Arrow + + var arrow = Object(_draw_js__WEBPACK_IMPORTED_MODULE_1__["drawConnection"])(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition); // Storage for current connection + + var connection = { + firstObject: firstObjectID, + secondObject: secondObjectID, + style: arrow.style, + condition: arrow.conditionID, + isCondition: isCondition, + type: arrow.type, + direction: localDirection, + line: arrow.line.objectID() // Need to save this data to the global array + + }; + newConnectionsData.push(connection); + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); +} + +function getConnectionsData() { + //Refactored + var dataArray = []; + + if (pluginData) { + for (var i = 0; i < pluginData.length; i++) { + dataArray.push(pluginData[i]); + } + } + + return dataArray; +} + +function getDirection(firstObjectID, secondObjectID) { + // Refactored + // Get direction from the source object + var firstObject = document.getLayerWithID(firstObjectID); + var secondObject = document.getLayerWithID(secondObjectID); + var firstObjectMidX = firstObject.frame.x + firstObject.frame.width / 2; + var firstObjectMidY = firstObject.frame.y + firstObject.frame.height / 2; + var secondObjectMidX = secondObject.frame.x + secondObject.frame.width / 2; + var secondObjectMidY = secondObject.frame.y + secondObject.frame.height / 2; + var diffX = firstObjectMidX - secondObjectMidX; + var diffY = firstObjectMidY - secondObjectMidY; + var absDiffX = Math.abs(diffX); + var absDiffY = Math.abs(diffY); + var direction; + + if (secondObjectMidX > firstObjectMidX) { + // Right Half + if (secondObjectMidY > firstObjectMidY) { + // Bottom quarter + direction = diffX > diffY ? "Down" : "Right"; + } else { + // Top quarter + direction = absDiffX > absDiffY ? "Right" : "Up"; + } + } else { + // Left Half + if (secondObjectMidY > firstObjectMidY) { + // Bottom quarter + direction = absDiffX > absDiffY ? "Left" : "Down"; + } else { + // Top quarter + direction = diffX > diffY ? "Left" : "Up"; + } + } + + return direction; +} + +function updateSpacing(sourceObjectID, childObjectID, direction) { + var sourceObject = document.getLayerWithID(sourceObjectID); + var childObject = document.getLayerWithID(childObjectID); + + if (Settings.settingForKey("arrowSpacing") && Settings.settingForKey("arrowSpacing") != 0) { + var currentSpacing = Settings.settingForKey("arrowSpacing"); + + if (direction == "Right") { + childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing; + } + + if (direction == "Down") { + childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing; + } + + if (direction == "Left") { + childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing; + } + + if (direction == "Up") { + childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing; + } + } +} + +function autoAlignLayer(sourceObjectID, childObjectID, direction) { + var sourceObject = document.getLayerWithID(sourceObjectID); + var childObject = document.getLayerWithID(childObjectID); + var sourceMidY, childMidY, sourceMidX, childMidX, diff; + + if (Settings.settingForKey("autoAlign")) { + if (Settings.settingForKey("autoAlign") == true) { + // If user turned on Auto-Align settings + if (direction == "Right" || direction == "Left") { + sourceMidY = sourceObject.frame.y + sourceObject.frame.height / 2; + childMidY = childObject.frame.y + childObject.frame.height / 2; + diff = sourceMidY - childMidY; + + if (diff > -6 && diff < 6) { + childObject.frame.y = childObject.frame.y + diff; + } + } + + if (direction == "Down" || direction == "Up") { + sourceMidX = sourceObject.frame.x + sourceObject.frame.width / 2; + childMidX = childObject.frame.x + childObject.frame.width / 2; + diff = sourceMidX - childMidX; + + if (diff > -6 && diff < 6) { + childObject.frame.x = childObject.frame.x + diff; + } + } + } + } +} + +/***/ }), + /***/ "./src/draw.js": /*!*********************!*\ !*** ./src/draw.js ***! @@ -741,7 +903,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteSelectedArrows", function() { return deleteSelectedArrows; }); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _draw_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./draw.js */ "./src/draw.js"); +/* harmony import */ var _createArrow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./createArrow.js */ "./src/createArrow.js"); // // Variables // @@ -1011,8 +1173,6 @@ function deleteSelectedArrows(context) { // Functions // - - function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored // Need to check if we have the layers with such IDs @@ -1032,70 +1192,11 @@ function updateArrow(firstObjectID, secondObjectID, style, type, direction, line if (firstObject && secondObject) { // If we have all the objects, we can recreate the line - createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition); + Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_1__["createArrow"])(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition); } } -function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { - // Refactored - var localDirection = direction == "Auto" ? getDirection(firstObjectID, secondObjectID) : direction; // Main Operations based on the settings - - updateSpacing(firstObjectID, secondObjectID, localDirection); - autoAlignLayer(firstObjectID, secondObjectID, localDirection); // Making an Arrow - - var arrow = Object(_draw_js__WEBPACK_IMPORTED_MODULE_1__["drawConnection"])(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition); // Storage for current connection - - var connection = { - firstObject: firstObjectID, - secondObject: secondObjectID, - style: arrow.style, - condition: arrow.conditionID, - isCondition: isCondition, - type: arrow.type, - direction: localDirection, - line: arrow.line.objectID() // Need to save this data to the global array - - }; - newConnectionsData.push(connection); -} - -function getDirection(firstObjectID, secondObjectID) { - // Refactored - // Get direction from the source object - var firstObject = document.getLayerWithID(firstObjectID); - var secondObject = document.getLayerWithID(secondObjectID); - var firstObjectMidX = firstObject.frame.x + firstObject.frame.width / 2; - var firstObjectMidY = firstObject.frame.y + firstObject.frame.height / 2; - var secondObjectMidX = secondObject.frame.x + secondObject.frame.width / 2; - var secondObjectMidY = secondObject.frame.y + secondObject.frame.height / 2; - var diffX = firstObjectMidX - secondObjectMidX; - var diffY = firstObjectMidY - secondObjectMidY; - var absDiffX = Math.abs(diffX); - var absDiffY = Math.abs(diffY); - var direction; - - if (secondObjectMidX > firstObjectMidX) { - // Right Half - if (secondObjectMidY > firstObjectMidY) { - // Bottom quarter - direction = diffX > diffY ? "Down" : "Right"; - } else { - // Top quarter - direction = absDiffX > absDiffY ? "Right" : "Up"; - } - } else { - // Left Half - if (secondObjectMidY > firstObjectMidY) { - // Bottom quarter - direction = absDiffX > absDiffY ? "Left" : "Down"; - } else { - // Top quarter - direction = diffX > diffY ? "Left" : "Up"; - } - } - return direction; -} function getConnectionsData() { //Refactored @@ -1169,62 +1270,6 @@ function deleteLine(lineID) { } } -function updateSpacing(sourceObjectID, childObjectID, direction) { - var sourceObject = document.getLayerWithID(sourceObjectID); - var childObject = document.getLayerWithID(childObjectID); - - if (Settings.settingForKey("arrowSpacing") && Settings.settingForKey("arrowSpacing") != 0) { - var currentSpacing = Settings.settingForKey("arrowSpacing"); - - if (direction == "Right") { - childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing; - } - - if (direction == "Down") { - childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing; - } - - if (direction == "Left") { - childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing; - } - - if (direction == "Up") { - childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing; - } - } -} - -function autoAlignLayer(sourceObjectID, childObjectID, direction) { - var sourceObject = document.getLayerWithID(sourceObjectID); - var childObject = document.getLayerWithID(childObjectID); - var sourceMidY, childMidY, sourceMidX, childMidX, diff; - - if (Settings.settingForKey("autoAlign")) { - if (Settings.settingForKey("autoAlign") == true) { - // If user turned on Auto-Align settings - if (direction == "Right" || direction == "Left") { - sourceMidY = sourceObject.frame.y + sourceObject.frame.height / 2; - childMidY = childObject.frame.y + childObject.frame.height / 2; - diff = sourceMidY - childMidY; - - if (diff > -6 && diff < 6) { - childObject.frame.y = childObject.frame.y + diff; - } - } - - if (direction == "Down" || direction == "Up") { - sourceMidX = sourceObject.frame.x + sourceObject.frame.width / 2; - childMidX = childObject.frame.x + childObject.frame.width / 2; - diff = sourceMidX - childMidX; - - if (diff > -6 && diff < 6) { - childObject.frame.x = childObject.frame.x + diff; - } - } - } - } -} - function defineSourceObject(firstObjectID, secondObjectID, direction) { //Refactored var firstObject = document.getLayerWithID(firstObjectID); @@ -1295,7 +1340,7 @@ function start(context, direction, isCondition) { if (connectionIndex.length == 0) { // There is no connection with this two objects in our database - createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition); + Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_1__["createArrow"])(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition); sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("New connection is created 🚀"); } else { // Need to remake the arrow condition @@ -1304,8 +1349,6 @@ function start(context, direction, isCondition) { } } } - - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); } else { // When user didn't select anything sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Please select more than two layers. Artboards are coming soon 🥳"); diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index c6bbccf..aff2e9f 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/draw.js","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["Settings","require","pluginKey","document","sketch","fromNative","context","docData","documentData","currentParentGroup","currentPage","currentArtboard","drawConnection","firstObjectID","secondObjectID","style","type","localDirection","conditionID","condition","firstObject","getLayerWithID","secondObject","connectionPos","getConnectionPos","connection","line","settingForKey","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","direction","firstObjectAbsPos","frame","changeBasis","from","parent","to","secondObjectAbsPos","currentGroup","checkForGroup","diffX","diffY","x","y","width","height","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","layers","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","g","length","getImportableSymbolReferencesForDocument","i","name","includes","UI","alert","symbolMaster","import","createNewInstance","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","fixGeometryWithOptions","Group","group","moveToBack","adjustToFit","id","localStyle","getLayerStyles","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","command","valueForKey_onLayer_forPluginIdentifier","allStyles","allLayerStyles","styles","count","push","addLayers","locked","groupName","pluginData","newConnectionsData","getConnectionsData","actionContext","createAutoArrow","start","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","updateSelectedArrows","selection","class","currentConnectionsData","objectID","connectionIndex","findConnectionIndex","updateArrow","isCondition","message","setValue_forKey_onLayer_forPluginIdentifier","autoUpdateSelectedArrows","action","movedLayers","Array","map","layer","log","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","updateArrowsCounter","sketchObject","parentArtboard","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","lineID","conditionObject","remove","createArrow","getDirection","updateSpacing","autoAlignLayer","arrow","firstObjectMidX","firstObjectMidY","secondObjectMidX","secondObjectMidY","absDiffX","Math","abs","absDiffY","dataArray","data","indexArray","String","newConnections","lineObject","selectedGroup","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","defineSourceObject","getSourceObjectFromSelection"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch';\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\n\n\nlet docData = context.document.documentData();\n// let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n// Main Function\n\nexport function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition){ // Refactored\n // Process of creating new connection \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n // Condition\n if(condition == true){\n if(conditionID != null){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY);\n }\n } else {\n connection.conditionID = null;\n }\n // connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style);\n\n // Add to group\n addToArrowsGroup(connection.line);\n \n return connection\n}\n\n// Positions\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\");\n let diffX, diffY;\n \n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n \n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n \n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n return connectionPos\n}\n\n// Drawing Types\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n \n return line;\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n \n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n \n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n \n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n \n if(firstLayerPosX Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here');\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y);\n }\n \n return symbol;\n}\n\nfunction addToConditionGroup(condition, x, y){ // Refactored\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n \n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Conditions',\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n}\n\nfunction updateCondition(conditionID, x, y){ // Refactored\nlet condition = document.getLayerWithID(conditionID);\n// log (condition)\nlet conGroup = checkForGroup(\"Conditions\") ;\nlet arGroup = checkForGroup(\"Arrows\");\nlet arGroupX = arGroup != null ? arGroup.frame().x() : 0;\nlet arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\nif(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n} else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n}\nreturn condition.id;\n}\n\n// Style\n\nfunction styleLine(line, style){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey));\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nfunction getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}\n \n// Groups\n\nfunction addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\");\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nfunction checkForGroup(groupName) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n \n return currentGroup;\n}","//\n// Variables\n//\n\nimport sketch from 'sketch';\n\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, newConnectionsData;\nif(context.document){\n //cc:remember place\n document = sketch.fromNative(context.document);\n docData = context.document.documentData();\n pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n newConnectionsData = getConnectionsData();\n} else {\n document = sketch.fromNative(context.actionContext.document);\n //cc:here is bug;well, seems like a bug in logic\n}\n \n//\n// Create Connection Function\n//\n\n\nexport function createAutoArrow(context){start(context, \"Auto\", false);}\nexport function createRightArrow(context){start(context, \"Right\", false);}\nexport function createDownArrow(context){start(context, \"Down\", false);}\nexport function createLeftArrow(context){start(context, \"Left\", false);}\nexport function createUpArrow(context){start(context, \"Up\", false);}\n\nexport function createRightArrowWithCondition(context){start(context, \"Right\", true);}\nexport function createDownArrowWithCondition(context){start(context, \"Down\", true);}\nexport function createLeftArrowWithCondition(context){start(context, \"Left\", true);}\nexport function createUpArrowWithCondition(context){start(context, \"Up\", true);}\n\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n let selection = context.selection;\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let currentConnectionsData = newConnectionsData; // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), currentConnectionsData);\n\n if(connectionIndex.length == 0){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex);\n sketch.UI.message(\"Current connection is updated 🤘\");\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\");\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n \n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\nexport function autoUpdateSelectedArrows(context) { \n const action = context.actionContext;\n\n docData = action.document.documentData();\n pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n newConnectionsData = getConnectionsData();\n\n const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer));\n log(movedLayers[0].id);\n log(movedLayers.length);\n\n // if (movedLayers.filter(layer => (layer.type == 'Artboard' || (layer.type == 'SymbolMaster' && config.arrangeSymbols))).length > 0) {\n // ArrangeArtboards(context)\n // }\n\n let currentConnectionsData = newConnectionsData; // Need to refactor\n\n for(let g = 0; g < movedLayers.length; g++) {\n\n let connectionIndex = findConnectionIndex(movedLayers[0].id, null, currentConnectionsData);\n\n log(\"yes \"+connectionIndex);\n if(connectionIndex.length == 0){\n \n updateArrow(currentConnectionsData[connectionIndex[0]].firstObject, currentConnectionsData[connectionIndex[0]].secondObject, currentConnectionsData[connectionIndex[0]].style, currentConnectionsData[connectionIndex[0]].type, currentConnectionsData[connectionIndex[0]].direction, currentConnectionsData[connectionIndex[0]].line, currentConnectionsData[connectionIndex[0]].condition, currentConnectionsData[connectionIndex[0]].isCondition, connectionIndex[0]);\n sketch.UI.message(\"Current connection is updated 🤘\");\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\");\n }\n \n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n}\n\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection;\n let connections = getConnectionsData();\n let firstObjectArtboard;\n let secondObjectArtboard;\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject);\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID();\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject);\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID();\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i);\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i]);\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows are updated 🚀\");\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\");\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData;\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows are updated 🚀\");\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\");\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows are deleted\");\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\");\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection;\n let firstObject, secondObject;\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData();\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject);\n secondObject = document.getLayerWithID(connections[i].secondObject);\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line);\n newConnectionsData = deleteConnectionFromData(i);\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows from selected artboard are deleted\");\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\");\n }\n } else {\n sketch.UI.message(\"Please select one artboard\");\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection;\n let firstObject, secondObject;\n\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n \n let connections = getConnectionsData() ;\n let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), connections);\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line);\n newConnectionsData = deleteConnectionFromData(connectionIndex);\n const updateArrowsCounter = connections.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject);\n secondObject = document.getLayerWithID(connections[i].secondObject);\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line);\n newConnectionsData = deleteConnectionFromData(i);\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\");\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\");\n }\n}\n\n\n//\n// Functions\n//\n\nimport { drawConnection } from \"./draw.js\";\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let conditionObject = document.getLayerWithID(conditionID);\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID);\n if(conditionID && !isCondition){\n if(conditionObject){conditionObject.remove();}\n }\n \n newConnectionsData = deleteConnectionFromData(connectionIndex);\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition);\n } \n}\n\nfunction createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n\n // Need to save this data to the global array\n newConnectionsData.push(connection);\n}\n\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = [];\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i]);\n }\n } \n return dataArray;\n}\n\nfunction findConnectionIndex(firstObjectID, secondObjectID, data){\n let indexArray = [] ;\n firstObjectID = String(firstObjectID);\n secondObjectID = String(secondObjectID);\n \n if(pluginData){\n // If we have database, need to check for connections\n for(let y = 0; y < data.length; y++){\n if(firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject){\n if(secondObjectID == null){\n // When we need to find connection between two objects\n if(secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject){\n indexArray[0] = y;\n } \n } else {\n // When we need to find a connection for one object only\n indexArray.push(y);\n }\n }\n }\n }\n return indexArray;\n}\n\nfunction deleteConnectionFromData(connectionIndex){ // Refactored\n let newConnections = [];\n if(pluginData){\n // If we have database\n let connections = pluginData;\n\n for (let i = 0; i < connections.length; i ++) {\n // Updating all connections without deleted one\n if(i != connectionIndex){\n newConnections.push(connections[i]);\n }\n }\n }\n return newConnections;\n}\n\nfunction deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let sourceObjectID;\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n return sourceObjectID;\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID();\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction);\n }\n }\n \n return sourceObjectID;\n}\n\nfunction start(context, direction, isCondition){\n //cc:start#1;Passing all the data\n let selection = context.selection;\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction);\n let currentConnectionsData = newConnectionsData; // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), currentConnectionsData);\n \n if(connectionIndex.length == 0){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition);\n sketch.UI.message(\"New connection is created 🚀\");\n } else {\n // Need to remake the arrow condition\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex);\n sketch.UI.message(\"Current connection is updated 🤘\");\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\n\n\n\n// const track = require(\"sketch-module-google-analytics\")\n// track(\"UA-138226597-1\", \"event\", {\n// ec: \"command\", \n// ea: \"start\", \n// ev: \"my-command\"\n// });\n\n\n\n\n\n","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/createArrow.js","webpack://exports/./src/draw.js","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","Settings","pluginKey","document","docData","pluginData","currentParentGroup","newConnectionsData","sketch","fromNative","context","documentData","command","valueForKey_onLayer_forPluginIdentifier","currentPage","currentArtboard","getConnectionsData","createArrow","firstObjectID","secondObjectID","style","type","direction","conditionID","isCondition","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","firstObject","secondObject","condition","line","objectID","push","setValue_forKey_onLayer_forPluginIdentifier","dataArray","i","length","getLayerWithID","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","sourceObjectID","childObjectID","sourceObject","childObject","settingForKey","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","currentGroup","checkForGroup","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","layers","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","g","getImportableSymbolReferencesForDocument","name","includes","alert","symbolMaster","import","createNewInstance","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","fixGeometryWithOptions","Group","group","moveToBack","adjustToFit","id","localStyle","getLayerStyles","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","allStyles","allLayerStyles","styles","count","addLayers","locked","groupName","actionContext","createAutoArrow","start","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","updateSelectedArrows","selection","class","currentConnectionsData","connectionIndex","findConnectionIndex","updateArrow","message","autoUpdateSelectedArrows","action","movedLayers","Array","map","layer","log","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","updateArrowsCounter","sketchObject","parentArtboard","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","lineID","conditionObject","remove","data","indexArray","String","newConnections","lineObject","selectedGroup","defineSourceObject","getSourceObjectFromSelection"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, newConnectionsData;\n\ndocument = sketch.fromNative(context.document);\ndocData = context.document.documentData();\npluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\ncurrentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\nnewConnectionsData = getConnectionsData();\n\nimport { drawConnection } from \"./draw.js\";\n\nexport function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n\n // Need to save this data to the global array\n newConnectionsData.push(connection);\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n}\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = [];\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i]);\n }\n } \n return dataArray;\n }\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}","import sketch from 'sketch';\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\n\n\nlet docData = context.document.documentData();\n// let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n// Main Function\n\nexport function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition){ // Refactored\n // Process of creating new connection \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n // Condition\n if(condition == true){\n if(conditionID != null){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY);\n }\n } else {\n connection.conditionID = null;\n }\n // connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style);\n\n // Add to group\n addToArrowsGroup(connection.line);\n \n return connection\n}\n\n// Positions\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\");\n let diffX, diffY;\n \n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n \n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n \n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n return connectionPos\n}\n\n// Drawing Types\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n \n return line;\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n \n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n \n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n \n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n \n if(firstLayerPosX Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here');\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y);\n }\n \n return symbol;\n}\n\nfunction addToConditionGroup(condition, x, y){ // Refactored\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n \n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Conditions',\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n}\n\nfunction updateCondition(conditionID, x, y){ // Refactored\nlet condition = document.getLayerWithID(conditionID);\n// log (condition)\nlet conGroup = checkForGroup(\"Conditions\") ;\nlet arGroup = checkForGroup(\"Arrows\");\nlet arGroupX = arGroup != null ? arGroup.frame().x() : 0;\nlet arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\nif(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n} else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n}\nreturn condition.id;\n}\n\n// Style\n\nfunction styleLine(line, style){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey));\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nfunction getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}\n \n// Groups\n\nfunction addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\");\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nfunction checkForGroup(groupName) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n \n return currentGroup;\n}","//\n// Variables\n//\n\nimport sketch from 'sketch';\n\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, newConnectionsData;\nif(context.document){\n //cc:remember place\n document = sketch.fromNative(context.document);\n docData = context.document.documentData();\n pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n newConnectionsData = getConnectionsData();\n} else {\n document = sketch.fromNative(context.actionContext.document);\n //cc:here is bug;well, seems like a bug in logic\n}\n \n//\n// Create Connection Function\n//\n\n\nexport function createAutoArrow(context){start(context, \"Auto\", false);}\nexport function createRightArrow(context){start(context, \"Right\", false);}\nexport function createDownArrow(context){start(context, \"Down\", false);}\nexport function createLeftArrow(context){start(context, \"Left\", false);}\nexport function createUpArrow(context){start(context, \"Up\", false);}\n\nexport function createRightArrowWithCondition(context){start(context, \"Right\", true);}\nexport function createDownArrowWithCondition(context){start(context, \"Down\", true);}\nexport function createLeftArrowWithCondition(context){start(context, \"Left\", true);}\nexport function createUpArrowWithCondition(context){start(context, \"Up\", true);}\n\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n let selection = context.selection;\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let currentConnectionsData = newConnectionsData; // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), currentConnectionsData);\n\n if(connectionIndex.length == 0){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex);\n sketch.UI.message(\"Current connection is updated 🤘\");\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\");\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n \n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\nexport function autoUpdateSelectedArrows(context) { \n const action = context.actionContext;\n\n docData = action.document.documentData();\n pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n newConnectionsData = getConnectionsData();\n\n const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer));\n log(movedLayers[0].id);\n log(movedLayers.length);\n\n // if (movedLayers.filter(layer => (layer.type == 'Artboard' || (layer.type == 'SymbolMaster' && config.arrangeSymbols))).length > 0) {\n // ArrangeArtboards(context)\n // }\n\n let currentConnectionsData = newConnectionsData; // Need to refactor\n\n for(let g = 0; g < movedLayers.length; g++) {\n\n let connectionIndex = findConnectionIndex(movedLayers[0].id, null, currentConnectionsData);\n\n log(\"yes \"+connectionIndex);\n if(connectionIndex.length == 0){\n \n updateArrow(currentConnectionsData[connectionIndex[0]].firstObject, currentConnectionsData[connectionIndex[0]].secondObject, currentConnectionsData[connectionIndex[0]].style, currentConnectionsData[connectionIndex[0]].type, currentConnectionsData[connectionIndex[0]].direction, currentConnectionsData[connectionIndex[0]].line, currentConnectionsData[connectionIndex[0]].condition, currentConnectionsData[connectionIndex[0]].isCondition, connectionIndex[0]);\n sketch.UI.message(\"Current connection is updated 🤘\");\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\");\n }\n \n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection;\n let connections = getConnectionsData();\n let firstObjectArtboard;\n let secondObjectArtboard;\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject);\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID();\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject);\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID();\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i);\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i]);\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows are updated 🚀\");\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\");\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData;\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows are updated 🚀\");\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\");\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows are deleted\");\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\");\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection;\n let firstObject, secondObject;\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData();\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject);\n secondObject = document.getLayerWithID(connections[i].secondObject);\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line);\n newConnectionsData = deleteConnectionFromData(i);\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows from selected artboard are deleted\");\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\");\n }\n } else {\n sketch.UI.message(\"Please select one artboard\");\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection;\n let firstObject, secondObject;\n\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n \n let connections = getConnectionsData() ;\n let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), connections);\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line);\n newConnectionsData = deleteConnectionFromData(connectionIndex);\n const updateArrowsCounter = connections.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject);\n secondObject = document.getLayerWithID(connections[i].secondObject);\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line);\n newConnectionsData = deleteConnectionFromData(i);\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\");\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\");\n }\n}\n\n\n//\n// Functions\n//\n\n\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let conditionObject = document.getLayerWithID(conditionID);\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID);\n if(conditionID && !isCondition){\n if(conditionObject){conditionObject.remove();}\n }\n \n newConnectionsData = deleteConnectionFromData(connectionIndex);\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition);\n } \n}\n\nimport { createArrow } from \"./createArrow.js\";\n\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = [];\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i]);\n }\n } \n return dataArray;\n}\n\nfunction findConnectionIndex(firstObjectID, secondObjectID, data){\n let indexArray = [] ;\n firstObjectID = String(firstObjectID);\n secondObjectID = String(secondObjectID);\n \n if(pluginData){\n // If we have database, need to check for connections\n for(let y = 0; y < data.length; y++){\n if(firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject){\n if(secondObjectID == null){\n // When we need to find connection between two objects\n if(secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject){\n indexArray[0] = y;\n } \n } else {\n // When we need to find a connection for one object only\n indexArray.push(y);\n }\n }\n }\n }\n return indexArray;\n}\n\nfunction deleteConnectionFromData(connectionIndex){ // Refactored\n let newConnections = [];\n if(pluginData){\n // If we have database\n let connections = pluginData;\n\n for (let i = 0; i < connections.length; i ++) {\n // Updating all connections without deleted one\n if(i != connectionIndex){\n newConnections.push(connections[i]);\n }\n }\n }\n return newConnections;\n}\n\nfunction deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n\n\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let sourceObjectID;\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n return sourceObjectID;\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID();\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction);\n }\n }\n \n return sourceObjectID;\n}\n\nfunction start(context, direction, isCondition){\n //cc:start#1;Passing all the data\n let selection = context.selection;\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction);\n let currentConnectionsData = newConnectionsData; // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), currentConnectionsData);\n \n if(connectionIndex.length == 0){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition);\n sketch.UI.message(\"New connection is created 🚀\");\n } else {\n // Need to remake the arrow condition\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex);\n sketch.UI.message(\"Current connection is updated 🤘\");\n }\n }\n }\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\n\n// const track = require(\"sketch-module-google-analytics\")\n// track(\"UA-138226597-1\", \"event\", {\n// ec: \"command\", \n// ea: \"start\", \n// ev: \"my-command\"\n// });\n\n\n\n\n\n","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/src/createArrow.js b/src/createArrow.js new file mode 100644 index 0000000..3e0a240 --- /dev/null +++ b/src/createArrow.js @@ -0,0 +1,144 @@ +import sketch from 'sketch'; + +let UI = require('sketch/ui') ; +var Settings = require('sketch/settings'); + +const pluginKey = "flowArrows"; +let document; + +let docData, pluginData, currentParentGroup, newConnectionsData; + +document = sketch.fromNative(context.document); +docData = context.document.documentData(); +pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); +currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards +newConnectionsData = getConnectionsData(); + +import { drawConnection } from "./draw.js"; + +export function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored + let localDirection = direction == "Auto" ? getDirection(firstObjectID, secondObjectID) : direction; + + // Main Operations based on the settings + updateSpacing(firstObjectID, secondObjectID, localDirection); + autoAlignLayer(firstObjectID, secondObjectID, localDirection); + + // Making an Arrow + let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition); + + // Storage for current connection + let connection = { + firstObject : firstObjectID, + secondObject : secondObjectID, + style : arrow.style, + condition : arrow.conditionID, + isCondition : isCondition, + type : arrow.type, + direction: localDirection, + line : arrow.line.objectID() + } + + // Need to save this data to the global array + newConnectionsData.push(connection); + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); +} + +function getConnectionsData(){ //Refactored + let dataArray = []; + + if(pluginData){ + for (let i = 0; i < pluginData.length; i ++) { + dataArray.push(pluginData[i]); + } + } + return dataArray; + } + +function getDirection(firstObjectID, secondObjectID){ // Refactored + // Get direction from the source object + const firstObject = document.getLayerWithID(firstObjectID); + const secondObject = document.getLayerWithID(secondObjectID); + const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2; + const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2; + const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2; + const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2; + + const diffX = firstObjectMidX - secondObjectMidX; + const diffY = firstObjectMidY - secondObjectMidY; + const absDiffX = Math.abs(diffX); + const absDiffY = Math.abs(diffY); + let direction; + + if(secondObjectMidX > firstObjectMidX){ + // Right Half + if(secondObjectMidY > firstObjectMidY){ + // Bottom quarter + direction = diffX > diffY ? "Down" : "Right"; + } else { + // Top quarter + direction = absDiffX > absDiffY ? "Right" : "Up"; + } + } else { + // Left Half + if(secondObjectMidY > firstObjectMidY){ + // Bottom quarter + direction = absDiffX > absDiffY ? "Left" : "Down"; + } else { + // Top quarter + direction = diffX > diffY ? "Left" : "Up"; + } + } + + return direction; +} + +function updateSpacing(sourceObjectID, childObjectID, direction){ + let sourceObject = document.getLayerWithID(sourceObjectID); + let childObject = document.getLayerWithID(childObjectID); + + if(Settings.settingForKey("arrowSpacing") && Settings.settingForKey("arrowSpacing") != 0){ + let currentSpacing = Settings.settingForKey("arrowSpacing"); + + if(direction == "Right"){ + childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing; + } + + if(direction == "Down"){ + childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing; + } + + if(direction == "Left"){ + childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing; + } + + if(direction == "Up"){ + childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing; + } + } +} + +function autoAlignLayer(sourceObjectID, childObjectID, direction){ + let sourceObject = document.getLayerWithID(sourceObjectID); + let childObject = document.getLayerWithID(childObjectID); + let sourceMidY, childMidY, sourceMidX, childMidX, diff; + + if(Settings.settingForKey("autoAlign")){ + if(Settings.settingForKey("autoAlign") == true){ + // If user turned on Auto-Align settings + + if(direction == "Right" || direction == "Left"){ + sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2; + childMidY = childObject.frame.y + childObject.frame.height/2; + diff = sourceMidY - childMidY; + if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;} + } + + if(direction == "Down" || direction == "Up"){ + sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2; + childMidX = childObject.frame.x + childObject.frame.width/2; + diff = sourceMidX - childMidX; + if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;} + } + } + } +} \ No newline at end of file diff --git a/src/script.js b/src/script.js index 46e0f72..1ae1340 100644 --- a/src/script.js +++ b/src/script.js @@ -107,7 +107,6 @@ export function autoUpdateSelectedArrows(context) { context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); } - export function updateArtboardArrows(context) { // TODO: Need to show amount of updated arrows and deleted ones let selection = context.selection; @@ -259,7 +258,7 @@ export function deleteSelectedArrows(context) { // Functions // -import { drawConnection } from "./draw.js"; + function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored // Need to check if we have the layers with such IDs @@ -281,69 +280,8 @@ function updateArrow(firstObjectID, secondObjectID, style, type, direction, line } } -function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored - let localDirection = direction == "Auto" ? getDirection(firstObjectID, secondObjectID) : direction; - - // Main Operations based on the settings - updateSpacing(firstObjectID, secondObjectID, localDirection); - autoAlignLayer(firstObjectID, secondObjectID, localDirection); - - // Making an Arrow - let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition); - - // Storage for current connection - let connection = { - firstObject : firstObjectID, - secondObject : secondObjectID, - style : arrow.style, - condition : arrow.conditionID, - isCondition : isCondition, - type : arrow.type, - direction: localDirection, - line : arrow.line.objectID() - } - - // Need to save this data to the global array - newConnectionsData.push(connection); -} - -function getDirection(firstObjectID, secondObjectID){ // Refactored - // Get direction from the source object - const firstObject = document.getLayerWithID(firstObjectID); - const secondObject = document.getLayerWithID(secondObjectID); - const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2; - const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2; - const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2; - const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2; - - const diffX = firstObjectMidX - secondObjectMidX; - const diffY = firstObjectMidY - secondObjectMidY; - const absDiffX = Math.abs(diffX); - const absDiffY = Math.abs(diffY); - let direction; - - if(secondObjectMidX > firstObjectMidX){ - // Right Half - if(secondObjectMidY > firstObjectMidY){ - // Bottom quarter - direction = diffX > diffY ? "Down" : "Right"; - } else { - // Top quarter - direction = absDiffX > absDiffY ? "Right" : "Up"; - } - } else { - // Left Half - if(secondObjectMidY > firstObjectMidY){ - // Bottom quarter - direction = absDiffX > absDiffY ? "Left" : "Down"; - } else { - // Top quarter - direction = diffX > diffY ? "Left" : "Up"; - } - } +import { createArrow } from "./createArrow.js"; - return direction; -} function getConnectionsData(){ //Refactored let dataArray = []; @@ -408,56 +346,7 @@ function deleteLine(lineID){ // refactored } } -function updateSpacing(sourceObjectID, childObjectID, direction){ - let sourceObject = document.getLayerWithID(sourceObjectID); - let childObject = document.getLayerWithID(childObjectID); - - if(Settings.settingForKey("arrowSpacing") && Settings.settingForKey("arrowSpacing") != 0){ - let currentSpacing = Settings.settingForKey("arrowSpacing"); - - if(direction == "Right"){ - childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing; - } - - if(direction == "Down"){ - childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing; - } - - if(direction == "Left"){ - childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing; - } - - if(direction == "Up"){ - childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing; - } - } -} - -function autoAlignLayer(sourceObjectID, childObjectID, direction){ - let sourceObject = document.getLayerWithID(sourceObjectID); - let childObject = document.getLayerWithID(childObjectID); - let sourceMidY, childMidY, sourceMidX, childMidX, diff; - if(Settings.settingForKey("autoAlign")){ - if(Settings.settingForKey("autoAlign") == true){ - // If user turned on Auto-Align settings - - if(direction == "Right" || direction == "Left"){ - sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2; - childMidY = childObject.frame.y + childObject.frame.height/2; - diff = sourceMidY - childMidY; - if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;} - } - - if(direction == "Down" || direction == "Up"){ - sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2; - childMidX = childObject.frame.x + childObject.frame.width/2; - diff = sourceMidX - childMidX; - if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;} - } - } - } -} function defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored let firstObject = document.getLayerWithID(firstObjectID); @@ -536,7 +425,6 @@ function start(context, direction, isCondition){ } } } - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); } else { // When user didn't select anything sketch.UI.message("Please select more than two layers. Artboards are coming soon 🥳"); From 319ff796c74b2e2221b8b5e2dac03e2ffa41ac48 Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Thu, 4 Jul 2019 23:45:21 +0300 Subject: [PATCH 26/44] refactoring update flow (broken version) --- arrows.sketchplugin/Contents/Sketch/script.js | 1308 +---------------- .../Contents/Sketch/script.js.map | 2 +- src/script.js | 373 +++-- src/updateArrow.js | 79 + 4 files changed, 264 insertions(+), 1498 deletions(-) create mode 100644 src/updateArrow.js diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index c011e3b..0756ed8 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -91,1318 +91,14 @@ var exports = /************************************************************************/ /******/ ({ -/***/ "./src/createArrow.js": -/*!****************************!*\ - !*** ./src/createArrow.js ***! - \****************************/ -/*! exports provided: createArrow */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createArrow", function() { return createArrow; }); -/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); -/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _draw_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./draw.js */ "./src/draw.js"); - - -var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); - -var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); - -var pluginKey = "flowArrows"; -var document; -var docData, pluginData, currentParentGroup, newConnectionsData; -document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); -docData = context.document.documentData(); -pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); -currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards - -newConnectionsData = getConnectionsData(); - -function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { - // Refactored - var localDirection = direction == "Auto" ? getDirection(firstObjectID, secondObjectID) : direction; // Main Operations based on the settings - - updateSpacing(firstObjectID, secondObjectID, localDirection); - autoAlignLayer(firstObjectID, secondObjectID, localDirection); // Making an Arrow - - var arrow = Object(_draw_js__WEBPACK_IMPORTED_MODULE_1__["drawConnection"])(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition); // Storage for current connection - - var connection = { - firstObject: firstObjectID, - secondObject: secondObjectID, - style: arrow.style, - condition: arrow.conditionID, - isCondition: isCondition, - type: arrow.type, - direction: localDirection, - line: arrow.line.objectID() // Need to save this data to the global array - - }; - newConnectionsData.push(connection); - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); -} - -function getConnectionsData() { - //Refactored - var dataArray = []; - - if (pluginData) { - for (var i = 0; i < pluginData.length; i++) { - dataArray.push(pluginData[i]); - } - } - - return dataArray; -} - -function getDirection(firstObjectID, secondObjectID) { - // Refactored - // Get direction from the source object - var firstObject = document.getLayerWithID(firstObjectID); - var secondObject = document.getLayerWithID(secondObjectID); - var firstObjectMidX = firstObject.frame.x + firstObject.frame.width / 2; - var firstObjectMidY = firstObject.frame.y + firstObject.frame.height / 2; - var secondObjectMidX = secondObject.frame.x + secondObject.frame.width / 2; - var secondObjectMidY = secondObject.frame.y + secondObject.frame.height / 2; - var diffX = firstObjectMidX - secondObjectMidX; - var diffY = firstObjectMidY - secondObjectMidY; - var absDiffX = Math.abs(diffX); - var absDiffY = Math.abs(diffY); - var direction; - - if (secondObjectMidX > firstObjectMidX) { - // Right Half - if (secondObjectMidY > firstObjectMidY) { - // Bottom quarter - direction = diffX > diffY ? "Down" : "Right"; - } else { - // Top quarter - direction = absDiffX > absDiffY ? "Right" : "Up"; - } - } else { - // Left Half - if (secondObjectMidY > firstObjectMidY) { - // Bottom quarter - direction = absDiffX > absDiffY ? "Left" : "Down"; - } else { - // Top quarter - direction = diffX > diffY ? "Left" : "Up"; - } - } - - return direction; -} - -function updateSpacing(sourceObjectID, childObjectID, direction) { - var sourceObject = document.getLayerWithID(sourceObjectID); - var childObject = document.getLayerWithID(childObjectID); - - if (Settings.settingForKey("arrowSpacing") && Settings.settingForKey("arrowSpacing") != 0) { - var currentSpacing = Settings.settingForKey("arrowSpacing"); - - if (direction == "Right") { - childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing; - } - - if (direction == "Down") { - childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing; - } - - if (direction == "Left") { - childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing; - } - - if (direction == "Up") { - childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing; - } - } -} - -function autoAlignLayer(sourceObjectID, childObjectID, direction) { - var sourceObject = document.getLayerWithID(sourceObjectID); - var childObject = document.getLayerWithID(childObjectID); - var sourceMidY, childMidY, sourceMidX, childMidX, diff; - - if (Settings.settingForKey("autoAlign")) { - if (Settings.settingForKey("autoAlign") == true) { - // If user turned on Auto-Align settings - if (direction == "Right" || direction == "Left") { - sourceMidY = sourceObject.frame.y + sourceObject.frame.height / 2; - childMidY = childObject.frame.y + childObject.frame.height / 2; - diff = sourceMidY - childMidY; - - if (diff > -6 && diff < 6) { - childObject.frame.y = childObject.frame.y + diff; - } - } - - if (direction == "Down" || direction == "Up") { - sourceMidX = sourceObject.frame.x + sourceObject.frame.width / 2; - childMidX = childObject.frame.x + childObject.frame.width / 2; - diff = sourceMidX - childMidX; - - if (diff > -6 && diff < 6) { - childObject.frame.x = childObject.frame.x + diff; - } - } - } - } -} - -/***/ }), - -/***/ "./src/draw.js": -/*!*********************!*\ - !*** ./src/draw.js ***! - \*********************/ -/*! exports provided: drawConnection */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "drawConnection", function() { return drawConnection; }); -/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); -/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); - - -var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); - -var pluginKey = "flowArrows"; -var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); -var docData = context.document.documentData(); // let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); - -var currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // Main Function - -function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition) { - // Refactored - // Process of creating new connection - var firstObject = document.getLayerWithID(firstObjectID); - var secondObject = document.getLayerWithID(secondObjectID); - var connectionPos = getConnectionPos(firstObject, secondObject, localDirection); - var connection = { - line: [], - conditionID: [], - type: [], - style: [] // Type - - }; - connection.type = type == null ? Settings.settingForKey("arrowType") : type; - - if (connection.type == "Angled" || connection.type == null) { - connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection); - } - - if (connection.type == "Straight") { - connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection); - } - - if (connection.type == "Curved") { - connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection); - } // Condition - - - if (condition == true) { - if (conditionID != null) { - connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY); - } else { - connection.conditionID = addCondition("#con", connectionPos.middlePosX, connectionPos.middlePosY); - } - } else { - connection.conditionID = null; - } // connection.conditionID = condition != false ? connection.conditionID = addCondition("#con", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null - // Style - - - connection.style = styleLine(connection.line, style); // Add to group - - addToArrowsGroup(connection.line); - return connection; -} // Positions - -function getConnectionPos(firstObject, secondObject, direction) { - // Refactored - var firstObjectAbsPos = firstObject.frame.changeBasis({ - from: firstObject.parent, - to: currentParentGroup - }); - var secondObjectAbsPos = secondObject.frame.changeBasis({ - from: secondObject.parent, - to: currentParentGroup - }); - var currentGroup = checkForGroup("Arrows"); - var diffX, diffY; - - if (currentGroup) { - diffX = currentGroup.frame().x(); - diffY = currentGroup.frame().y(); - } else { - diffX = 0; - diffY = 0; - } - - var connectionPos = { - firstLayerPosX: null, - firstLayerPosY: null, - secondLayerPosX: null, - secondLayerPosY: null, - middlePosX: null, - middlePosY: null // Getting all the positions - - }; - - if (direction == "Up") { - // First Layer Position Start Point Position - connectionPos.firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; - connectionPos.firstLayerPosY = firstObjectAbsPos.y - diffY; // Second Layer Position End Point Position - - connectionPos.secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; - connectionPos.secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height - diffY; // Middle Points - - connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; - connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; - } - - if (direction == "Right") { - // First Layer Position Start Point Position - connectionPos.firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width - diffX; - connectionPos.firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position - - connectionPos.secondLayerPosX = secondObjectAbsPos.x - diffX; - connectionPos.secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points - - connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; - connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; - } - - if (direction == "Down") { - // First Layer Position Start Point Position - connectionPos.firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; - connectionPos.firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height - diffY; // Second Layer Position End Point Position - - connectionPos.secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; - connectionPos.secondLayerPosY = secondObjectAbsPos.y - diffY; // Middle Points - - connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; - connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; - } - - if (direction == "Left") { - // First Layer Position Start Point Position - connectionPos.firstLayerPosX = firstObjectAbsPos.x - diffX; - connectionPos.firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position - - connectionPos.secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width - diffX; - connectionPos.secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points - - connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; - connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; - } - - return connectionPos; -} // Drawing Types - - -function drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction) { - // Refactored - var path = NSBezierPath.bezierPath(); - - if (direction == "Up") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - if (direction == "Right") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - if (direction == "Down") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - if (direction == "Left") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - var line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - var points = line.layers().firstObject().points(); - points[1].cornerRadius = 20; - points[2].cornerRadius = 20; - line.setName("Angled Arrow"); - return line; -} - -function drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction) { - // Refactored - var path = NSBezierPath.bezierPath(); - - if (direction == "Up") { - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - if (direction == "Right") { - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - if (direction == "Down") { - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - if (direction == "Left") { - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - var line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - line.setName("Straight Arrow"); - return line; -} - -function drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction) { - // Refactored - var path = NSBezierPath.bezierPath(); - var line; - - if (direction == "Up") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line - - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - var points = line.layers().firstObject().points(); - points[0].curveMode = 4; - points[1].curveMode = 4; - points[0].hasCurveFrom = true; - points[1].hasCurveTo = true; - - if (firstLayerPosX < secondLayerPosX) { - points[0].curveFrom = { - x: 0, - y: 0.5 - }; - points[0].curveTo = { - x: -0.5, - y: 1 - }; - points[1].curveFrom = { - x: 1, - y: 1 - }; - points[1].curveTo = { - x: 1, - y: 0.5 - }; - } else { - points[0].curveFrom = { - x: 1, - y: 0.5 - }; - points[0].curveTo = { - x: -0.5, - y: 1 - }; - points[1].curveFrom = { - x: 1, - y: 1 - }; - points[1].curveTo = { - x: 0, - y: 0.5 - }; - } - } - - if (direction == "Right") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line - - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - - var _points = line.layers().firstObject().points(); - - _points[0].curveMode = 4; - _points[1].curveMode = 4; - _points[0].hasCurveFrom = true; - _points[1].hasCurveTo = true; - - if (firstLayerPosY < secondLayerPosY) { - _points[0].curveFrom = { - x: 0.5, - y: 0 - }; - _points[0].curveTo = { - x: -0.5, - y: 1 - }; - _points[1].curveFrom = { - x: 1, - y: 1 - }; - _points[1].curveTo = { - x: 0.5, - y: 1 - }; - } else { - _points[0].curveFrom = { - x: 0.5, - y: 1 - }; - _points[0].curveTo = { - x: -0.5, - y: 1 - }; - _points[1].curveFrom = { - x: 1, - y: 1 - }; - _points[1].curveTo = { - x: 0.5, - y: 0 - }; - } - } - - if (direction == "Down") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line - - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - - var _points2 = line.layers().firstObject().points(); - - _points2[0].curveMode = 4; - _points2[1].curveMode = 4; - _points2[0].hasCurveFrom = true; - _points2[1].hasCurveTo = true; - - if (firstLayerPosX < secondLayerPosX) { - _points2[0].curveFrom = { - x: 0, - y: 0.5 - }; - _points2[0].curveTo = { - x: -0.5, - y: 1 - }; - _points2[1].curveFrom = { - x: 1, - y: 1 - }; - _points2[1].curveTo = { - x: 1, - y: 0.5 - }; - } else { - _points2[0].curveFrom = { - x: 1, - y: 0.5 - }; - _points2[0].curveTo = { - x: -0.5, - y: 1 - }; - _points2[1].curveFrom = { - x: 1, - y: 1 - }; - _points2[1].curveTo = { - x: 0, - y: 0.5 - }; - } - } - - if (direction == "Left") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line - - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - - var _points3 = line.layers().firstObject().points(); - - _points3[0].curveMode = 4; - _points3[1].curveMode = 4; - _points3[0].hasCurveFrom = true; - _points3[1].hasCurveTo = true; - - if (firstLayerPosY < secondLayerPosY) { - _points3[0].curveFrom = { - x: 0.5, - y: 0 - }; - _points3[0].curveTo = { - x: -0.5, - y: 1 - }; - _points3[1].curveFrom = { - x: 1, - y: 1 - }; - _points3[1].curveTo = { - x: 0.5, - y: 1 - }; - } else { - _points3[0].curveFrom = { - x: 0.5, - y: 1 - }; - _points3[0].curveTo = { - x: -0.5, - y: 1 - }; - _points3[1].curveFrom = { - x: 1, - y: 1 - }; - _points3[1].curveTo = { - x: 0.5, - y: 0 - }; - } - } // Providing Settings for the arrow - - - line.setName("Curved Arrow"); - return line; -} // Conditions - - -function addCondition(keyword, x, y) { - // Refactored - var libraries = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.getLibraries(); - var libraryObject, symbolReferences, symbol; - - for (var g = 0; g < libraries.length; g++) { - symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document); - - for (var i = 0; i < symbolReferences.length; i++) { - if (symbolReferences[i].name.includes(keyword)) { - libraryObject = symbolReferences[i]; - } - } - } - - if (libraryObject == null) { - symbol = null; - UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as "#condition" so it will be added here'); - } else { - var symbolMaster = libraryObject.import(); - symbol = symbolMaster.createNewInstance(); - symbol = addToConditionGroup(symbol, x, y); - } - - return symbol; -} - -function addToConditionGroup(condition, x, y) { - // Refactored - var conGroup = checkForGroup("Conditions"); - var arGroup = checkForGroup("Arrows"); - var arGroupX = arGroup != null ? arGroup.frame().x() : 0; - var arGroupY = arGroup != null ? arGroup.frame().y() : 0; - - if (conGroup) { - condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX); - condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY); - condition.parent = conGroup; - conGroup.fixGeometryWithOptions(1); - } else { - condition.frame.x = x - condition.frame.width / 2; - condition.frame.y = y - condition.frame.height / 2; - - var Group = __webpack_require__(/*! sketch/dom */ "sketch/dom").Group; - - var group = new Group({ - parent: currentParentGroup, - name: 'Conditions', - layers: [condition] - }); - group.moveToBack(); - group.adjustToFit(); - } - - return condition.id; -} - -function updateCondition(conditionID, x, y) { - // Refactored - var condition = document.getLayerWithID(conditionID); // log (condition) - - var conGroup = checkForGroup("Conditions"); - var arGroup = checkForGroup("Arrows"); - var arGroupX = arGroup != null ? arGroup.frame().x() : 0; - var arGroupY = arGroup != null ? arGroup.frame().y() : 0; - - if (conGroup) { - condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX); - condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY); - conGroup.fixGeometryWithOptions(1); - } else { - condition.frame.x = x - condition.frame.width / 2; - condition.frame.y = y - condition.frame.height / 2; - } - - return condition.id; -} // Style - - -function styleLine(line, style) { - // Refactored - var localStyle; - - if (style != null) { - // For updates - if (getLayerStyles(style) != null && style != "Default Style") { - // If style is specified - localStyle = style; - var ownStyle = getLayerStyles(style); - line.sharedStyle = ownStyle[0]; - } else { - // if there is no specific style - localStyle = "Default Style"; - var border = line.style().addStylePartOfType(1); - border.color = MSColor.colorWithRGBADictionary({ - r: 0.89, - g: 0.89, - b: 0.89, - a: 1 - }); - border.thickness = 2; - line.style().endMarkerType = 2; - } - } else { - // For creating new - if (context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) != "Default Style") { - // we have settins almost all the time and it's not default - localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)); - line.sharedStyle = localStyle[0]; - localStyle = localStyle[0].name(); - } else { - localStyle = "Default Style"; - - var _border = line.style().addStylePartOfType(1); - - _border.color = MSColor.colorWithRGBADictionary({ - r: 0.89, - g: 0.89, - b: 0.89, - a: 1 - }); - _border.thickness = 2; - line.style().endMarkerType = 2; - } - } - - return localStyle; -} - -function getLayerStyles(name) { - // Refactored - var allStyles = docData.allLayerStyles(); - var keyword = "$arrow"; - var styles = []; - - for (var i = 0; i < allStyles.count(); i++) { - if (name == null) { - if (allStyles[i].name().includes(keyword)) { - styles.push(allStyles[i]); - } - } else { - if (allStyles[i].name() == name) { - styles.push(allStyles[i]); - } - } - } - - return styles; -} // Groups - - -function addToArrowsGroup(line) { - var currentGroup = checkForGroup("Arrows"); - - if (currentGroup) { - currentGroup.addLayers([line]); - currentGroup.fixGeometryWithOptions(1); - } else { - var Group = __webpack_require__(/*! sketch/dom */ "sketch/dom").Group; - - var group = new Group({ - parent: currentParentGroup, - name: 'Arrows', - locked: true, - layers: [line] - }); - group.moveToBack(); - group.adjustToFit(); - } -} - -function checkForGroup(groupName) { - // refactored - var currentGroup = null; // Checking all the groups that we have - - for (var i = 0; i < currentParentGroup.layers().count(); i++) { - if (currentParentGroup.layers()[i].name() == groupName) { - currentGroup = currentParentGroup.layers()[i]; - } - } - - return currentGroup; -} - -/***/ }), - /***/ "./src/script.js": /*!***********************!*\ !*** ./src/script.js ***! \***********************/ -/*! exports provided: createAutoArrow, createRightArrow, createDownArrow, createLeftArrow, createUpArrow, createRightArrowWithCondition, createDownArrowWithCondition, createLeftArrowWithCondition, createUpArrowWithCondition, updateSelectedArrows, autoUpdateSelectedArrows, updateArtboardArrows, updateAllArrows, deleteAllArrows, deleteArtboardArrows, deleteSelectedArrows */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createAutoArrow", function() { return createAutoArrow; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createRightArrow", function() { return createRightArrow; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createDownArrow", function() { return createDownArrow; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createLeftArrow", function() { return createLeftArrow; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createUpArrow", function() { return createUpArrow; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createRightArrowWithCondition", function() { return createRightArrowWithCondition; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createDownArrowWithCondition", function() { return createDownArrowWithCondition; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createLeftArrowWithCondition", function() { return createLeftArrowWithCondition; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createUpArrowWithCondition", function() { return createUpArrowWithCondition; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateSelectedArrows", function() { return updateSelectedArrows; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "autoUpdateSelectedArrows", function() { return autoUpdateSelectedArrows; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateArtboardArrows", function() { return updateArtboardArrows; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAllArrows", function() { return updateAllArrows; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteAllArrows", function() { return deleteAllArrows; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteArtboardArrows", function() { return deleteArtboardArrows; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteSelectedArrows", function() { return deleteSelectedArrows; }); -/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); -/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _createArrow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./createArrow.js */ "./src/createArrow.js"); -// -// Variables -// - - -var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); - -var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); - -var pluginKey = "flowArrows"; -var document; -var docData, pluginData, currentParentGroup, newConnectionsData; - -if (context.document) { - //cc:remember place - document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); - docData = context.document.documentData(); - pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); - currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards - - newConnectionsData = getConnectionsData(); -} else { - document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.actionContext.document); //cc:here is bug;well, seems like a bug in logic -} // -// Create Connection Function -// - - -function createAutoArrow(context) { - start(context, "Auto", false); -} -function createRightArrow(context) { - start(context, "Right", false); -} -function createDownArrow(context) { - start(context, "Down", false); -} -function createLeftArrow(context) { - start(context, "Left", false); -} -function createUpArrow(context) { - start(context, "Up", false); -} -function createRightArrowWithCondition(context) { - start(context, "Right", true); -} -function createDownArrowWithCondition(context) { - start(context, "Down", true); -} -function createLeftArrowWithCondition(context) { - start(context, "Left", true); -} -function createUpArrowWithCondition(context) { - start(context, "Up", true); -} // -// Plugin Commands -// - -function updateSelectedArrows(context) { - var selection = context.selection; - - if (selection.count() > 1 && selection[0].class() != "MSArtboardGroup") { - // Need to find source object by ID first - var currentConnectionsData = newConnectionsData; // Need to refactor - - for (var g = 0; g < selection.count(); g++) { - if (selection[g].objectID() != selection[0].objectID()) { - // Then need to create or update connection arrow with each selection - var connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), currentConnectionsData); - - if (connectionIndex.length == 0) { - updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex); - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Current connection is updated 🤘"); - } else { - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is no connection between selected layers on the plugin data"); - } - } - } - - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); - } else { - // When user didn't select anything - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Please select more than two layers. Artboards are coming soon 🥳"); - } -} -function autoUpdateSelectedArrows(context) { - var action = context.actionContext; - docData = action.document.documentData(); - pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); - currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards - - newConnectionsData = getConnectionsData(); - var movedLayers = Array.from(context.actionContext.layers).map(function (layer) { - return sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(layer); - }); - log(movedLayers[0].id); - log(movedLayers.length); // if (movedLayers.filter(layer => (layer.type == 'Artboard' || (layer.type == 'SymbolMaster' && config.arrangeSymbols))).length > 0) { - // ArrangeArtboards(context) - // } - - var currentConnectionsData = newConnectionsData; // Need to refactor - - for (var g = 0; g < movedLayers.length; g++) { - var connectionIndex = findConnectionIndex(movedLayers[0].id, null, currentConnectionsData); - log("yes " + connectionIndex); - - if (connectionIndex.length == 0) { - updateArrow(currentConnectionsData[connectionIndex[0]].firstObject, currentConnectionsData[connectionIndex[0]].secondObject, currentConnectionsData[connectionIndex[0]].style, currentConnectionsData[connectionIndex[0]].type, currentConnectionsData[connectionIndex[0]].direction, currentConnectionsData[connectionIndex[0]].line, currentConnectionsData[connectionIndex[0]].condition, currentConnectionsData[connectionIndex[0]].isCondition, connectionIndex[0]); - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Current connection is updated 🤘"); - } else { - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is no connection between selected layers on the plugin data"); - } - } - - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); -} -function updateArtboardArrows(context) { - // TODO: Need to show amount of updated arrows and deleted ones - var selection = context.selection; - var connections = getConnectionsData(); - var firstObjectArtboard; - var secondObjectArtboard; - - if (connections.length > 0) { - // We have connections in database - var updateArrowsCounter = connections.length; - - for (var i = 0; i < updateArrowsCounter; i++) { - // Need to check if the element is selected globally or from the artboard - firstObjectArtboard = document.getLayerWithID(connections[i].firstObject); - firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID(); - secondObjectArtboard = document.getLayerWithID(connections[i].secondObject); - secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID(); - - if (selection.count() == 1 && selection[0].class() == "MSArtboardGroup") { - // Need to go through each connection and update arrow position for specific artboard - if (firstObjectArtboard == selection[0].objectID()) { - if (secondObjectArtboard == selection[0].objectID()) { - updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i); - } else { - newConnectionsData.push(connections[i]); - } - } else { - // If not just saving it - newConnectionsData.push(connections[i]); - } - } - } - - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows are updated 🚀"); - } else { - // We don't have any connections to update - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is nothing to update"); - } -} -function updateAllArrows(context) { - // TODO - // TODO: Need to show amount of updated arrows and deleted ones - var currentConnectionsData = newConnectionsData; - - if (currentConnectionsData.length > 0) { - // We have connections in database - var updateArrowsCounter = currentConnectionsData.length; - - for (var i = 0; i < updateArrowsCounter; i++) { - // Need to go through each connection and update arrow position without artboards - // Need to check if current object don't have the parrent - updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i); - } - - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows are updated 🚀"); - } else { - // We don't have any connections to update - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is nothing to update"); - } -} -function deleteAllArrows(context) { - if (newConnectionsData.length > 0) { - // We have connections in database - for (var i = 0; i < newConnectionsData.length; i++) { - // Need to go through each connection and update arrow position - deleteLine(newConnectionsData[i].line); - } - - context.command.setValue_forKey_onLayer_forPluginIdentifier(null, "arrowConnections", docData, pluginKey); - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows are deleted"); - } else { - // We don't have any connections to update - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is nothing to delete"); - } -} -function deleteArtboardArrows(context) { - var selection = context.selection; - var firstObject, secondObject; // Need to delete all the arrows only from selected artboard - - if (selection.count() == 1 && selection[0].class() == "MSArtboardGroup") { - var connections = getConnectionsData(); - - if (connections.length > 0) { - // We have connections in database - var updateArrowsCounter = connections.length; - - for (var i = 0; i < updateArrowsCounter; i++) { - // Need to go through each connection and check if it placed on selected artboard - firstObject = document.getLayerWithID(connections[i].firstObject); - secondObject = document.getLayerWithID(connections[i].secondObject); - - if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()) { - if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()) { - deleteLine(connections[i].line); - newConnectionsData = deleteConnectionFromData(i); - } - } - } - - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows from selected artboard are deleted"); - } else { - // We don't have any connections to update - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is nothing to delete"); - } - } else { - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Please select one artboard"); - } -} -function deleteSelectedArrows(context) { - var selection = context.selection; - var firstObject, secondObject; - - if (selection.count() == 2) { - for (var g = 0; g < selection.count(); g++) { - if (selection[g].objectID() != selection[0].objectID()) { - // It will never check 3rd connection - var connections = getConnectionsData(); - var connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), connections); - - if (connectionIndex != null) { - // We have connections in database - deleteLine(connections[connectionIndex].line); - newConnectionsData = deleteConnectionFromData(connectionIndex); - var updateArrowsCounter = connections.length; - - for (var i = 0; i < updateArrowsCounter; i++) { - // Need to go through each connection and check if it placed on selected artboard - firstObject = document.getLayerWithID(connections[i].firstObject); - secondObject = document.getLayerWithID(connections[i].secondObject); - - if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()) { - if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()) { - deleteLine(connections[i].line); - newConnectionsData = deleteConnectionFromData(i); - } - } - } - - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows from selected layers are deleted ✌️"); - } - } - } - } else { - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Select two layers, please 🧐"); - } -} // -// Functions -// - -function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { - // Refactored - // Need to check if we have the layers with such IDs - var firstObject = document.getLayerWithID(firstObjectID); - var secondObject = document.getLayerWithID(secondObjectID); - var conditionObject = document.getLayerWithID(conditionID); // Need to delete data first, because we will have a new line - - deleteLine(lineID); - - if (conditionID && !isCondition) { - if (conditionObject) { - conditionObject.remove(); - } - } - - newConnectionsData = deleteConnectionFromData(connectionIndex); - - if (firstObject && secondObject) { - // If we have all the objects, we can recreate the line - Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_1__["createArrow"])(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition); - } -} - - - -function getConnectionsData() { - //Refactored - var dataArray = []; - - if (pluginData) { - for (var i = 0; i < pluginData.length; i++) { - dataArray.push(pluginData[i]); - } - } - - return dataArray; -} - -function findConnectionIndex(firstObjectID, secondObjectID, data) { - var indexArray = []; - firstObjectID = String(firstObjectID); - secondObjectID = String(secondObjectID); - - if (pluginData) { - // If we have database, need to check for connections - for (var y = 0; y < data.length; y++) { - if (firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject) { - if (secondObjectID == null) { - // When we need to find connection between two objects - if (secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject) { - indexArray[0] = y; - } - } else { - // When we need to find a connection for one object only - indexArray.push(y); - } - } - } - } - - return indexArray; -} - -function deleteConnectionFromData(connectionIndex) { - // Refactored - var newConnections = []; - - if (pluginData) { - // If we have database - var connections = pluginData; - - for (var i = 0; i < connections.length; i++) { - // Updating all connections without deleted one - if (i != connectionIndex) { - newConnections.push(connections[i]); - } - } - } - - return newConnections; -} - -function deleteLine(lineID) { - // refactored - var lineObject = document.getLayerWithID(lineID); - var selectedGroup; - - if (lineObject) { - selectedGroup = lineObject.parent; - lineObject.remove(); - - if (selectedGroup.layers.length == 0) { - selectedGroup.remove(); - } - } -} - -function defineSourceObject(firstObjectID, secondObjectID, direction) { - //Refactored - var firstObject = document.getLayerWithID(firstObjectID); - var secondObject = document.getLayerWithID(secondObjectID); - var sourceObjectID; - - if (direction == "Right") { - if (firstObject.frame.x <= secondObject.frame.x) { - sourceObjectID = firstObject.id; - } else { - sourceObjectID = secondObject.id; - } - } - - if (direction == "Down") { - if (firstObject.frame.y <= secondObject.frame.y) { - sourceObjectID = firstObject.id; - } else { - sourceObjectID = secondObject.id; - } - } - - if (direction == "Left") { - if (firstObject.frame.x <= secondObject.frame.x) { - sourceObjectID = secondObject.id; - } else { - sourceObjectID = firstObject.id; - } - } - - if (direction == "Up") { - if (firstObject.frame.y <= secondObject.frame.y) { - sourceObjectID = secondObject.id; - } else { - sourceObjectID = firstObject.id; - } - } - - return sourceObjectID; -} - -function getSourceObjectFromSelection(selection, direction) { - //Refactored - var sourceObjectID = selection.firstObject().objectID(); - - if (direction != "Auto") { - for (var g = 0; g < selection.count(); g++) { - sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction); - } - } - - return sourceObjectID; -} - -function start(context, direction, isCondition) { - //cc:start#1;Passing all the data - var selection = context.selection; - - if (selection.count() > 1 && selection[0].class() != "MSArtboardGroup") { - // Need to find source object by ID first - var sourceObjectID = getSourceObjectFromSelection(selection, direction); - var currentConnectionsData = newConnectionsData; // Need to refactor - - for (var g = 0; g < selection.count(); g++) { - if (selection[g].objectID() != sourceObjectID) { - // Then need to create or update connection arrow with each selection - var connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), currentConnectionsData); - - if (connectionIndex.length == 0) { - // There is no connection with this two objects in our database - Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_1__["createArrow"])(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition); - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("New connection is created 🚀"); - } else { - // Need to remake the arrow condition - updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex); - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Current connection is updated 🤘"); - } - } - } - } else { - // When user didn't select anything - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Please select more than two layers. Artboards are coming soon 🥳"); - } -} // const track = require("sketch-module-google-analytics") -// track("UA-138226597-1", "event", { -// ec: "command", -// ea: "start", -// ev: "my-command" -// }); - -/***/ }), - -/***/ "sketch": -/*!*************************!*\ - !*** external "sketch" ***! - \*************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = require("sketch"); - -/***/ }), - -/***/ "sketch/dom": -/*!*****************************!*\ - !*** external "sketch/dom" ***! - \*****************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = require("sketch/dom"); - -/***/ }), - -/***/ "sketch/settings": -/*!**********************************!*\ - !*** external "sketch/settings" ***! - \**********************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = require("sketch/settings"); - -/***/ }), - -/***/ "sketch/ui": -/*!****************************!*\ - !*** external "sketch/ui" ***! - \****************************/ -/*! no static exports found */ +/*! exports provided: createAutoArrow, createRightArrow, createDownArrow, createLeftArrow, createUpArrow, createRightArrowWithCondition, createDownArrowWithCondition, createLeftArrowWithCondition, createUpArrowWithCondition, autoUpdateSelectedArrows, updateSelectedArrows, updateArtboardArrows, updateAllArrows, deleteSelectedArrows, deleteArtboardArrows, deleteAllArrows */ /***/ (function(module, exports) { -module.exports = require("sketch/ui"); +throw new Error("Module build failed (from ./node_modules/babel-loader/lib/index.js):\nSyntaxError: /Users/faridsabitov/Sketch-Connection-Flow-Arrows/src/script.js: Unexpected token (255:0)\n\n\u001b[0m \u001b[90m 253 | \u001b[39m sketch\u001b[33m.\u001b[39m\u001b[33mUI\u001b[39m\u001b[33m.\u001b[39mmessage(\u001b[32m\"There is nothing to delete\"\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m\n\u001b[0m \u001b[90m 254 | \u001b[39m }\u001b[0m\n\u001b[0m\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 255 | \u001b[39m}\u001b[0m\n\u001b[0m \u001b[90m | \u001b[39m\u001b[31m\u001b[1m^\u001b[22m\u001b[39m\u001b[0m\n\u001b[0m \u001b[90m 256 | \u001b[39m\u001b[0m\n\u001b[0m \u001b[90m 257 | \u001b[39m\u001b[36mfunction\u001b[39m update(context\u001b[33m,\u001b[39m level\u001b[33m,\u001b[39m isUpdate) {\u001b[0m\n\u001b[0m \u001b[90m 258 | \u001b[39m \u001b[90m// 1 - selection level\u001b[39m\u001b[0m\n at Object.raise (/Users/faridsabitov/Sketch-Connection-Flow-Arrows/node_modules/@babel/parser/lib/index.js:3851:17)\n at Object.unexpected (/Users/faridsabitov/Sketch-Connection-Flow-Arrows/node_modules/@babel/parser/lib/index.js:5167:16)\n at Object.parseExprAtom (/Users/faridsabitov/Sketch-Connection-Flow-Arrows/node_modules/@babel/parser/lib/index.js:6328:20)\n at Object.parseExprAtom (/Users/faridsabitov/Sketch-Connection-Flow-Arrows/node_modules/@babel/parser/lib/index.js:3570:20)\n at Object.parseExprSubscripts (/Users/faridsabitov/Sketch-Connection-Flow-Arrows/node_modules/@babel/parser/lib/index.js:5914:23)\n at Object.parseMaybeUnary (/Users/faridsabitov/Sketch-Connection-Flow-Arrows/node_modules/@babel/parser/lib/index.js:5894:21)\n at Object.parseExprOps (/Users/faridsabitov/Sketch-Connection-Flow-Arrows/node_modules/@babel/parser/lib/index.js:5781:23)\n at Object.parseMaybeConditional (/Users/faridsabitov/Sketch-Connection-Flow-Arrows/node_modules/@babel/parser/lib/index.js:5754:23)\n at Object.parseMaybeAssign (/Users/faridsabitov/Sketch-Connection-Flow-Arrows/node_modules/@babel/parser/lib/index.js:5701:21)\n at Object.parseExpression (/Users/faridsabitov/Sketch-Connection-Flow-Arrows/node_modules/@babel/parser/lib/index.js:5649:23)\n at Object.parseStatementContent (/Users/faridsabitov/Sketch-Connection-Flow-Arrows/node_modules/@babel/parser/lib/index.js:7420:23)\n at Object.parseStatement (/Users/faridsabitov/Sketch-Connection-Flow-Arrows/node_modules/@babel/parser/lib/index.js:7291:17)\n at Object.parseBlockOrModuleBlockBody (/Users/faridsabitov/Sketch-Connection-Flow-Arrows/node_modules/@babel/parser/lib/index.js:7868:25)\n at Object.parseBlockBody (/Users/faridsabitov/Sketch-Connection-Flow-Arrows/node_modules/@babel/parser/lib/index.js:7855:10)\n at Object.parseTopLevel (/Users/faridsabitov/Sketch-Connection-Flow-Arrows/node_modules/@babel/parser/lib/index.js:7220:10)\n at Object.parse (/Users/faridsabitov/Sketch-Connection-Flow-Arrows/node_modules/@babel/parser/lib/index.js:8863:17)"); /***/ }) diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index aff2e9f..5aa1298 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/createArrow.js","webpack://exports/./src/draw.js","webpack://exports/./src/script.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","Settings","pluginKey","document","docData","pluginData","currentParentGroup","newConnectionsData","sketch","fromNative","context","documentData","command","valueForKey_onLayer_forPluginIdentifier","currentPage","currentArtboard","getConnectionsData","createArrow","firstObjectID","secondObjectID","style","type","direction","conditionID","isCondition","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","firstObject","secondObject","condition","line","objectID","push","setValue_forKey_onLayer_forPluginIdentifier","dataArray","i","length","getLayerWithID","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","sourceObjectID","childObjectID","sourceObject","childObject","settingForKey","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","currentGroup","checkForGroup","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","layers","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","g","getImportableSymbolReferencesForDocument","name","includes","alert","symbolMaster","import","createNewInstance","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","fixGeometryWithOptions","Group","group","moveToBack","adjustToFit","id","localStyle","getLayerStyles","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","allStyles","allLayerStyles","styles","count","addLayers","locked","groupName","actionContext","createAutoArrow","start","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","updateSelectedArrows","selection","class","currentConnectionsData","connectionIndex","findConnectionIndex","updateArrow","message","autoUpdateSelectedArrows","action","movedLayers","Array","map","layer","log","updateArtboardArrows","connections","firstObjectArtboard","secondObjectArtboard","updateArrowsCounter","sketchObject","parentArtboard","updateAllArrows","deleteAllArrows","deleteLine","deleteArtboardArrows","deleteConnectionFromData","deleteSelectedArrows","lineID","conditionObject","remove","data","indexArray","String","newConnections","lineObject","selectedGroup","defineSourceObject","getSourceObjectFromSelection"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, newConnectionsData;\n\ndocument = sketch.fromNative(context.document);\ndocData = context.document.documentData();\npluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\ncurrentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\nnewConnectionsData = getConnectionsData();\n\nimport { drawConnection } from \"./draw.js\";\n\nexport function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n\n // Need to save this data to the global array\n newConnectionsData.push(connection);\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n}\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = [];\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i]);\n }\n } \n return dataArray;\n }\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}","import sketch from 'sketch';\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\n\n\nlet docData = context.document.documentData();\n// let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n// Main Function\n\nexport function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition){ // Refactored\n // Process of creating new connection \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n // Condition\n if(condition == true){\n if(conditionID != null){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY);\n }\n } else {\n connection.conditionID = null;\n }\n // connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style);\n\n // Add to group\n addToArrowsGroup(connection.line);\n \n return connection\n}\n\n// Positions\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\");\n let diffX, diffY;\n \n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n \n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n \n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n return connectionPos\n}\n\n// Drawing Types\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n \n return line;\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n \n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n \n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n \n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n \n if(firstLayerPosX Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here');\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y);\n }\n \n return symbol;\n}\n\nfunction addToConditionGroup(condition, x, y){ // Refactored\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n \n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Conditions',\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n}\n\nfunction updateCondition(conditionID, x, y){ // Refactored\nlet condition = document.getLayerWithID(conditionID);\n// log (condition)\nlet conGroup = checkForGroup(\"Conditions\") ;\nlet arGroup = checkForGroup(\"Arrows\");\nlet arGroupX = arGroup != null ? arGroup.frame().x() : 0;\nlet arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\nif(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n} else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n}\nreturn condition.id;\n}\n\n// Style\n\nfunction styleLine(line, style){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey));\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nfunction getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}\n \n// Groups\n\nfunction addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\");\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nfunction checkForGroup(groupName) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n \n return currentGroup;\n}","//\n// Variables\n//\n\nimport sketch from 'sketch';\n\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, newConnectionsData;\nif(context.document){\n //cc:remember place\n document = sketch.fromNative(context.document);\n docData = context.document.documentData();\n pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n newConnectionsData = getConnectionsData();\n} else {\n document = sketch.fromNative(context.actionContext.document);\n //cc:here is bug;well, seems like a bug in logic\n}\n \n//\n// Create Connection Function\n//\n\n\nexport function createAutoArrow(context){start(context, \"Auto\", false);}\nexport function createRightArrow(context){start(context, \"Right\", false);}\nexport function createDownArrow(context){start(context, \"Down\", false);}\nexport function createLeftArrow(context){start(context, \"Left\", false);}\nexport function createUpArrow(context){start(context, \"Up\", false);}\n\nexport function createRightArrowWithCondition(context){start(context, \"Right\", true);}\nexport function createDownArrowWithCondition(context){start(context, \"Down\", true);}\nexport function createLeftArrowWithCondition(context){start(context, \"Left\", true);}\nexport function createUpArrowWithCondition(context){start(context, \"Up\", true);}\n\n//\n// Plugin Commands\n//\n\nexport function updateSelectedArrows(context) {\n let selection = context.selection;\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let currentConnectionsData = newConnectionsData; // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), currentConnectionsData);\n\n if(connectionIndex.length == 0){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex);\n sketch.UI.message(\"Current connection is updated 🤘\");\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\");\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n \n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\nexport function autoUpdateSelectedArrows(context) { \n const action = context.actionContext;\n\n docData = action.document.documentData();\n pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n newConnectionsData = getConnectionsData();\n\n const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer));\n log(movedLayers[0].id);\n log(movedLayers.length);\n\n // if (movedLayers.filter(layer => (layer.type == 'Artboard' || (layer.type == 'SymbolMaster' && config.arrangeSymbols))).length > 0) {\n // ArrangeArtboards(context)\n // }\n\n let currentConnectionsData = newConnectionsData; // Need to refactor\n\n for(let g = 0; g < movedLayers.length; g++) {\n\n let connectionIndex = findConnectionIndex(movedLayers[0].id, null, currentConnectionsData);\n\n log(\"yes \"+connectionIndex);\n if(connectionIndex.length == 0){\n \n updateArrow(currentConnectionsData[connectionIndex[0]].firstObject, currentConnectionsData[connectionIndex[0]].secondObject, currentConnectionsData[connectionIndex[0]].style, currentConnectionsData[connectionIndex[0]].type, currentConnectionsData[connectionIndex[0]].direction, currentConnectionsData[connectionIndex[0]].line, currentConnectionsData[connectionIndex[0]].condition, currentConnectionsData[connectionIndex[0]].isCondition, connectionIndex[0]);\n sketch.UI.message(\"Current connection is updated 🤘\");\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\");\n }\n \n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n}\n\nexport function updateArtboardArrows(context) {\n // TODO: Need to show amount of updated arrows and deleted ones\n let selection = context.selection;\n let connections = getConnectionsData();\n let firstObjectArtboard;\n let secondObjectArtboard;\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to check if the element is selected globally or from the artboard\n firstObjectArtboard = document.getLayerWithID(connections[i].firstObject);\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID();\n\n secondObjectArtboard = document.getLayerWithID(connections[i].secondObject);\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID();\n\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n // Need to go through each connection and update arrow position for specific artboard\n \n if (firstObjectArtboard == selection[0].objectID()){\n if (secondObjectArtboard == selection[0].objectID()){\n updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i);\n } else {newConnectionsData.push(connections[i])}\n } else {\n // If not just saving it\n newConnectionsData.push(connections[i]);\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows are updated 🚀\");\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\");\n }\n}\n\nexport function updateAllArrows(context) { // TODO\n // TODO: Need to show amount of updated arrows and deleted ones\n let currentConnectionsData = newConnectionsData;\n if(currentConnectionsData.length > 0){\n // We have connections in database\n const updateArrowsCounter = currentConnectionsData.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and update arrow position without artboards\n // Need to check if current object don't have the parrent\n updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows are updated 🚀\");\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to update\");\n }\n}\n\nexport function deleteAllArrows(context) {\n\n if(newConnectionsData.length > 0){\n // We have connections in database\n for (let i = 0; i < newConnectionsData.length; i ++) {\n // Need to go through each connection and update arrow position\n deleteLine(newConnectionsData[i].line);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(null, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows are deleted\");\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\");\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection;\n let firstObject, secondObject;\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData();\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject);\n secondObject = document.getLayerWithID(connections[i].secondObject);\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line);\n newConnectionsData = deleteConnectionFromData(i);\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows from selected artboard are deleted\");\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\");\n }\n } else {\n sketch.UI.message(\"Please select one artboard\");\n }\n}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection;\n let firstObject, secondObject;\n\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n \n let connections = getConnectionsData() ;\n let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), connections);\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line);\n newConnectionsData = deleteConnectionFromData(connectionIndex);\n const updateArrowsCounter = connections.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject);\n secondObject = document.getLayerWithID(connections[i].secondObject);\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line);\n newConnectionsData = deleteConnectionFromData(i);\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\");\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\");\n }\n}\n\n\n//\n// Functions\n//\n\n\n\nfunction updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let conditionObject = document.getLayerWithID(conditionID);\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID);\n if(conditionID && !isCondition){\n if(conditionObject){conditionObject.remove();}\n }\n \n newConnectionsData = deleteConnectionFromData(connectionIndex);\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition);\n } \n}\n\nimport { createArrow } from \"./createArrow.js\";\n\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = [];\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i]);\n }\n } \n return dataArray;\n}\n\nfunction findConnectionIndex(firstObjectID, secondObjectID, data){\n let indexArray = [] ;\n firstObjectID = String(firstObjectID);\n secondObjectID = String(secondObjectID);\n \n if(pluginData){\n // If we have database, need to check for connections\n for(let y = 0; y < data.length; y++){\n if(firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject){\n if(secondObjectID == null){\n // When we need to find connection between two objects\n if(secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject){\n indexArray[0] = y;\n } \n } else {\n // When we need to find a connection for one object only\n indexArray.push(y);\n }\n }\n }\n }\n return indexArray;\n}\n\nfunction deleteConnectionFromData(connectionIndex){ // Refactored\n let newConnections = [];\n if(pluginData){\n // If we have database\n let connections = pluginData;\n\n for (let i = 0; i < connections.length; i ++) {\n // Updating all connections without deleted one\n if(i != connectionIndex){\n newConnections.push(connections[i]);\n }\n }\n }\n return newConnections;\n}\n\nfunction deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n\n\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let sourceObjectID;\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n return sourceObjectID;\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID();\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction);\n }\n }\n \n return sourceObjectID;\n}\n\nfunction start(context, direction, isCondition){\n //cc:start#1;Passing all the data\n let selection = context.selection;\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction);\n let currentConnectionsData = newConnectionsData; // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), currentConnectionsData);\n \n if(connectionIndex.length == 0){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition);\n sketch.UI.message(\"New connection is created 🚀\");\n } else {\n // Need to remake the arrow condition\n updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex);\n sketch.UI.message(\"Current connection is updated 🤘\");\n }\n }\n }\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\n\n// const track = require(\"sketch-module-google-analytics\")\n// track(\"UA-138226597-1\", \"event\", {\n// ec: \"command\", \n// ea: \"start\", \n// ev: \"my-command\"\n// });\n\n\n\n\n\n","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap"],"names":[],"mappings":";;;;;;AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n"],"sourceRoot":""} \ No newline at end of file diff --git a/src/script.js b/src/script.js index 1ae1340..3e54ef2 100644 --- a/src/script.js +++ b/src/script.js @@ -29,19 +29,55 @@ if(context.document){ // -export function createAutoArrow(context){start(context, "Auto", false);} -export function createRightArrow(context){start(context, "Right", false);} -export function createDownArrow(context){start(context, "Down", false);} -export function createLeftArrow(context){start(context, "Left", false);} -export function createUpArrow(context){start(context, "Up", false);} +export function createAutoArrow(context){create(context, "Auto", false);} +export function createRightArrow(context){create(context, "Right", false);} +export function createDownArrow(context){create(context, "Down", false);} +export function createLeftArrow(context){create(context, "Left", false);} +export function createUpArrow(context){create(context, "Up", false);} -export function createRightArrowWithCondition(context){start(context, "Right", true);} -export function createDownArrowWithCondition(context){start(context, "Down", true);} -export function createLeftArrowWithCondition(context){start(context, "Left", true);} -export function createUpArrowWithCondition(context){start(context, "Up", true);} +export function createRightArrowWithCondition(context){create(context, "Right", true);} +export function createDownArrowWithCondition(context){create(context, "Down", true);} +export function createLeftArrowWithCondition(context){create(context, "Left", true);} +export function createUpArrowWithCondition(context){create(context, "Up", true);} +export function autoUpdateSelectedArrows(context) { + // const action = context.actionContext; + + // docData = action.document.documentData(); + // pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); + // currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards + // newConnectionsData = getConnectionsData(); + + // const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer)); + // log(movedLayers[0].id); + // log(movedLayers.length); + + // // if (movedLayers.filter(layer => (layer.type == 'Artboard' || (layer.type == 'SymbolMaster' && config.arrangeSymbols))).length > 0) { + // // ArrangeArtboards(context) + // // } + + // let currentConnectionsData = newConnectionsData; // Need to refactor + + // for(let g = 0; g < movedLayers.length; g++) { + + // let connectionIndex = findConnectionIndex(movedLayers[0].id, null, currentConnectionsData); + + // log("yes "+connectionIndex); + // if(connectionIndex.length == 0){ + + // updateArrow(currentConnectionsData[connectionIndex[0]].firstObject, currentConnectionsData[connectionIndex[0]].secondObject, currentConnectionsData[connectionIndex[0]].style, currentConnectionsData[connectionIndex[0]].type, currentConnectionsData[connectionIndex[0]].direction, currentConnectionsData[connectionIndex[0]].line, currentConnectionsData[connectionIndex[0]].condition, currentConnectionsData[connectionIndex[0]].isCondition, connectionIndex[0]); + // sketch.UI.message("Current connection is updated 🤘"); + // } else { + // sketch.UI.message("There is no connection between selected layers on the plugin data"); + // } + + // } + // context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); +} + + // -// Plugin Commands +// Update Connection Function // export function updateSelectedArrows(context) { @@ -72,41 +108,6 @@ export function updateSelectedArrows(context) { } } -export function autoUpdateSelectedArrows(context) { - const action = context.actionContext; - - docData = action.document.documentData(); - pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); - currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards - newConnectionsData = getConnectionsData(); - - const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer)); - log(movedLayers[0].id); - log(movedLayers.length); - - // if (movedLayers.filter(layer => (layer.type == 'Artboard' || (layer.type == 'SymbolMaster' && config.arrangeSymbols))).length > 0) { - // ArrangeArtboards(context) - // } - - let currentConnectionsData = newConnectionsData; // Need to refactor - - for(let g = 0; g < movedLayers.length; g++) { - - let connectionIndex = findConnectionIndex(movedLayers[0].id, null, currentConnectionsData); - - log("yes "+connectionIndex); - if(connectionIndex.length == 0){ - - updateArrow(currentConnectionsData[connectionIndex[0]].firstObject, currentConnectionsData[connectionIndex[0]].secondObject, currentConnectionsData[connectionIndex[0]].style, currentConnectionsData[connectionIndex[0]].type, currentConnectionsData[connectionIndex[0]].direction, currentConnectionsData[connectionIndex[0]].line, currentConnectionsData[connectionIndex[0]].condition, currentConnectionsData[connectionIndex[0]].isCondition, connectionIndex[0]); - sketch.UI.message("Current connection is updated 🤘"); - } else { - sketch.UI.message("There is no connection between selected layers on the plugin data"); - } - - } - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); -} - export function updateArtboardArrows(context) { // TODO: Need to show amount of updated arrows and deleted ones let selection = context.selection; @@ -165,19 +166,42 @@ export function updateAllArrows(context) { // TODO } } -export function deleteAllArrows(context) { +export function deleteSelectedArrows(context) { + let selection = context.selection; + let firstObject, secondObject; - if(newConnectionsData.length > 0){ - // We have connections in database - for (let i = 0; i < newConnectionsData.length; i ++) { - // Need to go through each connection and update arrow position - deleteLine(newConnectionsData[i].line); + if(selection.count() == 2){ + + for(let g = 0; g < selection.count(); g++) { + + if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection + + let connections = getConnectionsData() ; + let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), connections); + + if(connectionIndex != null){ + // We have connections in database + deleteLine(connections[connectionIndex].line); + newConnectionsData = deleteConnectionFromData(connectionIndex); + const updateArrowsCounter = connections.length; + for (let i = 0; i < updateArrowsCounter; i ++) { + // Need to go through each connection and check if it placed on selected artboard + firstObject = document.getLayerWithID(connections[i].firstObject); + secondObject = document.getLayerWithID(connections[i].secondObject); + if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){ + if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){ + deleteLine(connections[i].line); + newConnectionsData = deleteConnectionFromData(i); + } + } + } + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); + sketch.UI.message("All arrows from selected layers are deleted ✌️"); + } + } } - context.command.setValue_forKey_onLayer_forPluginIdentifier(null, "arrowConnections", docData, pluginKey); - sketch.UI.message("All arrows are deleted"); } else { - // We don't have any connections to update - sketch.UI.message("There is nothing to delete"); + sketch.UI.message("Select two layers, please 🧐"); } } @@ -214,74 +238,60 @@ export function deleteArtboardArrows(context) { } } -export function deleteSelectedArrows(context) { - let selection = context.selection; - let firstObject, secondObject; +export function deleteAllArrows(context) {update(context, 3, false);} - if(selection.count() == 2){ - - for(let g = 0; g < selection.count(); g++) { - - if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection - - let connections = getConnectionsData() ; - let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), connections); - - if(connectionIndex != null){ - // We have connections in database - deleteLine(connections[connectionIndex].line); - newConnectionsData = deleteConnectionFromData(connectionIndex); - const updateArrowsCounter = connections.length; - for (let i = 0; i < updateArrowsCounter; i ++) { - // Need to go through each connection and check if it placed on selected artboard - firstObject = document.getLayerWithID(connections[i].firstObject); - secondObject = document.getLayerWithID(connections[i].secondObject); - if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){ - if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){ - deleteLine(connections[i].line); - newConnectionsData = deleteConnectionFromData(i); - } - } - } - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); - sketch.UI.message("All arrows from selected layers are deleted ✌️"); - } - } + if(newConnectionsData.length > 0){ + // We have connections in database + for (let i = 0; i < newConnectionsData.length; i ++) { + // Need to go through each connection and update arrow position + deleteLine(newConnectionsData[i].line); } + context.command.setValue_forKey_onLayer_forPluginIdentifier(null, "arrowConnections", docData, pluginKey); + sketch.UI.message("All arrows are deleted"); } else { - sketch.UI.message("Select two layers, please 🧐"); + // We don't have any connections to update + sketch.UI.message("There is nothing to delete"); } } +function update(context, level, isUpdate) { + // 1 - selection level + // 2 - artboard level + // 3 - document level -// -// Functions -// - - - -function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored - // Need to check if we have the layers with such IDs - let firstObject = document.getLayerWithID(firstObjectID); - let secondObject = document.getLayerWithID(secondObjectID); - let conditionObject = document.getLayerWithID(conditionID); - - // Need to delete data first, because we will have a new line - deleteLine(lineID); - if(conditionID && !isCondition){ - if(conditionObject){conditionObject.remove();} + if(level == 3){ + } - - newConnectionsData = deleteConnectionFromData(connectionIndex); - if(firstObject && secondObject){ - // If we have all the objects, we can recreate the line - createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition); - } + // let selection = context.selection; + // if(selection.count() > 1 && selection[0].class() != "MSArtboardGroup"){ + // // Need to find source object by ID first + // let currentConnectionsData = newConnectionsData; // Need to refactor + + // for(let g = 0; g < selection.count(); g++) { + // if(selection[g].objectID() != selection[0].objectID()){ + // // Then need to create or update connection arrow with each selection + // let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), currentConnectionsData); + + // if(connectionIndex.length == 0){ + // updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex); + // sketch.UI.message("Current connection is updated 🤘"); + // } else { + // sketch.UI.message("There is no connection between selected layers on the plugin data"); + // } + // } + // } + // context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); + + // } else { + // // When user didn't select anything + // sketch.UI.message("Please select more than two layers. Artboards are coming soon 🥳"); + // } } -import { createArrow } from "./createArrow.js"; - +// +// Data +// function getConnectionsData(){ //Refactored let dataArray = []; @@ -294,60 +304,60 @@ function getConnectionsData(){ //Refactored return dataArray; } -function findConnectionIndex(firstObjectID, secondObjectID, data){ - let indexArray = [] ; - firstObjectID = String(firstObjectID); - secondObjectID = String(secondObjectID); - - if(pluginData){ - // If we have database, need to check for connections - for(let y = 0; y < data.length; y++){ - if(firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject){ - if(secondObjectID == null){ - // When we need to find connection between two objects - if(secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject){ - indexArray[0] = y; - } - } else { - // When we need to find a connection for one object only - indexArray.push(y); - } - } - } - } - return indexArray; -} -function deleteConnectionFromData(connectionIndex){ // Refactored - let newConnections = []; - if(pluginData){ - // If we have database - let connections = pluginData; +// +// Functions +// + +import { createArrow } from "./createArrow.js"; +import { updateArrow } from "./updateArrow.js"; + + +function create(context, direction, isCondition){ + //cc:create#1;Passing all the data + let selection = context.selection; - for (let i = 0; i < connections.length; i ++) { - // Updating all connections without deleted one - if(i != connectionIndex){ - newConnections.push(connections[i]); + if(selection.count() > 1 && selection[0].class() != "MSArtboardGroup"){ + // Need to find source object by ID first + let sourceObjectID = getSourceObjectFromSelection(selection, direction); + let currentConnectionsData = newConnectionsData; // Need to refactor + + for(let g = 0; g < selection.count(); g++) { + if(selection[g].objectID() != sourceObjectID){ + // Then need to create or update connection arrow with each selection + let connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), currentConnectionsData); + + if(connectionIndex.length == 0){ + // There is no connection with this two objects in our database + createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition); + sketch.UI.message("New connection is created 🚀"); + } else { + // Need to remake the arrow condition + if(updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex)){ + createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].condition, isCondition); + } + sketch.UI.message("Current connection is updated 🤘"); + } } } + } else { + // When user didn't select anything + sketch.UI.message("Please select more than two layers. Artboards are coming soon 🥳"); } - return newConnections; } -function deleteLine(lineID){ // refactored - let lineObject = document.getLayerWithID(lineID); - let selectedGroup; - if(lineObject){ - selectedGroup = lineObject.parent; - lineObject.remove(); - if(selectedGroup.layers.length == 0){ - selectedGroup.remove(); +function getSourceObjectFromSelection(selection, direction){ //Refactored + let sourceObjectID = selection.firstObject().objectID(); + + if(direction != "Auto"){ + for(let g = 0; g < selection.count(); g++) { + sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction); } } + + return sourceObjectID; } - - function defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored let firstObject = document.getLayerWithID(firstObjectID); let secondObject = document.getLayerWithID(secondObjectID); @@ -388,54 +398,35 @@ function defineSourceObject(firstObjectID, secondObjectID, direction){ //Refacto return sourceObjectID; } -function getSourceObjectFromSelection(selection, direction){ //Refactored - let sourceObjectID = selection.firstObject().objectID(); +function findConnectionIndex(firstObjectID, secondObjectID, data){ + let indexArray = [] ; + firstObjectID = String(firstObjectID); + secondObjectID = String(secondObjectID); - if(direction != "Auto"){ - for(let g = 0; g < selection.count(); g++) { - sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction); - } - } - - return sourceObjectID; -} - -function start(context, direction, isCondition){ - //cc:start#1;Passing all the data - let selection = context.selection; - - if(selection.count() > 1 && selection[0].class() != "MSArtboardGroup"){ - // Need to find source object by ID first - let sourceObjectID = getSourceObjectFromSelection(selection, direction); - let currentConnectionsData = newConnectionsData; // Need to refactor - - for(let g = 0; g < selection.count(); g++) { - if(selection[g].objectID() != sourceObjectID){ - // Then need to create or update connection arrow with each selection - let connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), currentConnectionsData); - - if(connectionIndex.length == 0){ - // There is no connection with this two objects in our database - createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition); - sketch.UI.message("New connection is created 🚀"); + if(pluginData){ + // If we have database, need to check for connections + for(let y = 0; y < data.length; y++){ + if(firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject){ + if(secondObjectID == null){ + // When we need to find connection between two objects + if(secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject){ + indexArray[0] = y; + } } else { - // Need to remake the arrow condition - updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex); - sketch.UI.message("Current connection is updated 🤘"); + // When we need to find a connection for one object only + indexArray.push(y); } } } - } else { - // When user didn't select anything - sketch.UI.message("Please select more than two layers. Artboards are coming soon 🥳"); } + return indexArray; } // const track = require("sketch-module-google-analytics") // track("UA-138226597-1", "event", { // ec: "command", -// ea: "start", +// ea: "create", // ev: "my-command" // }); diff --git a/src/updateArrow.js b/src/updateArrow.js new file mode 100644 index 0000000..0c35db2 --- /dev/null +++ b/src/updateArrow.js @@ -0,0 +1,79 @@ +import sketch from 'sketch'; + +let UI = require('sketch/ui') ; +var Settings = require('sketch/settings'); + +const pluginKey = "flowArrows"; +let document; + +let docData, pluginData, currentParentGroup, newConnectionsData; + +document = sketch.fromNative(context.document); +docData = context.document.documentData(); +pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); +currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards +newConnectionsData = getConnectionsData(); + +export function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored + // Need to check if we have the layers with such IDs + let firstObject = document.getLayerWithID(firstObjectID); + let secondObject = document.getLayerWithID(secondObjectID); + let conditionObject = document.getLayerWithID(conditionID); + let result = false; + + // Need to delete data first, because we will have a new line + deleteLine(lineID); + if(conditionID && !isCondition){ + if(conditionObject){conditionObject.remove();} + } + + newConnectionsData = deleteConnectionFromData(connectionIndex); + + if(firstObject && secondObject){ + // If we have all the objects, we can recreate the line + result = true; + } + + log("Result "+result) + + return result; +} + +function deleteLine(lineID){ // refactored + let lineObject = document.getLayerWithID(lineID); + let selectedGroup; + if(lineObject){ + selectedGroup = lineObject.parent; + lineObject.remove(); + if(selectedGroup.layers.length == 0){ + selectedGroup.remove(); + } + } +} + +function deleteConnectionFromData(connectionIndex){ // Refactored + let newConnections = []; + if(pluginData){ + // If we have database + let connections = pluginData; + + for (let i = 0; i < connections.length; i ++) { + // Updating all connections without deleted one + if(i != connectionIndex){ + newConnections.push(connections[i]); + } + } + } + return newConnections; +} + +function getConnectionsData(){ //Refactored + let dataArray = []; + + if(pluginData){ + for (let i = 0; i < pluginData.length; i ++) { + dataArray.push(pluginData[i]); + } + } + return dataArray; +} \ No newline at end of file From d951f927015ea5a4ec31964e39c79ff7ae9d3060 Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Fri, 5 Jul 2019 09:40:46 +0300 Subject: [PATCH 27/44] updating the "update" flow (not working code) --- arrows.sketchplugin/Contents/Sketch/script.js | 1357 ++++++++++++++++- .../Contents/Sketch/script.js.map | 2 +- src/script.js | 82 +- src/updateArrow.js | 68 +- 4 files changed, 1424 insertions(+), 85 deletions(-) diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index 0756ed8..33e6c82 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -91,14 +91,1369 @@ var exports = /************************************************************************/ /******/ ({ +/***/ "./src/createArrow.js": +/*!****************************!*\ + !*** ./src/createArrow.js ***! + \****************************/ +/*! exports provided: createArrow */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createArrow", function() { return createArrow; }); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _draw_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./draw.js */ "./src/draw.js"); + + +var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); + +var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); + +var pluginKey = "flowArrows"; +var document; +var docData, pluginData, currentParentGroup, newConnectionsData; +document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); +docData = context.document.documentData(); +pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); +currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards + +newConnectionsData = getConnectionsData(); + +function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { + // Refactored + var localDirection = direction == "Auto" ? getDirection(firstObjectID, secondObjectID) : direction; // Main Operations based on the settings + + updateSpacing(firstObjectID, secondObjectID, localDirection); + autoAlignLayer(firstObjectID, secondObjectID, localDirection); // Making an Arrow + + var arrow = Object(_draw_js__WEBPACK_IMPORTED_MODULE_1__["drawConnection"])(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition); // Storage for current connection + + var connection = { + firstObject: firstObjectID, + secondObject: secondObjectID, + style: arrow.style, + condition: arrow.conditionID, + isCondition: isCondition, + type: arrow.type, + direction: localDirection, + line: arrow.line.objectID() // Need to save this data to the global array + + }; + newConnectionsData.push(connection); + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); +} + +function getConnectionsData() { + //Refactored + var dataArray = []; + + if (pluginData) { + for (var i = 0; i < pluginData.length; i++) { + dataArray.push(pluginData[i]); + } + } + + return dataArray; +} + +function getDirection(firstObjectID, secondObjectID) { + // Refactored + // Get direction from the source object + var firstObject = document.getLayerWithID(firstObjectID); + var secondObject = document.getLayerWithID(secondObjectID); + var firstObjectMidX = firstObject.frame.x + firstObject.frame.width / 2; + var firstObjectMidY = firstObject.frame.y + firstObject.frame.height / 2; + var secondObjectMidX = secondObject.frame.x + secondObject.frame.width / 2; + var secondObjectMidY = secondObject.frame.y + secondObject.frame.height / 2; + var diffX = firstObjectMidX - secondObjectMidX; + var diffY = firstObjectMidY - secondObjectMidY; + var absDiffX = Math.abs(diffX); + var absDiffY = Math.abs(diffY); + var direction; + + if (secondObjectMidX > firstObjectMidX) { + // Right Half + if (secondObjectMidY > firstObjectMidY) { + // Bottom quarter + direction = diffX > diffY ? "Down" : "Right"; + } else { + // Top quarter + direction = absDiffX > absDiffY ? "Right" : "Up"; + } + } else { + // Left Half + if (secondObjectMidY > firstObjectMidY) { + // Bottom quarter + direction = absDiffX > absDiffY ? "Left" : "Down"; + } else { + // Top quarter + direction = diffX > diffY ? "Left" : "Up"; + } + } + + return direction; +} + +function updateSpacing(sourceObjectID, childObjectID, direction) { + var sourceObject = document.getLayerWithID(sourceObjectID); + var childObject = document.getLayerWithID(childObjectID); + + if (Settings.settingForKey("arrowSpacing") && Settings.settingForKey("arrowSpacing") != 0) { + var currentSpacing = Settings.settingForKey("arrowSpacing"); + + if (direction == "Right") { + childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing; + } + + if (direction == "Down") { + childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing; + } + + if (direction == "Left") { + childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing; + } + + if (direction == "Up") { + childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing; + } + } +} + +function autoAlignLayer(sourceObjectID, childObjectID, direction) { + var sourceObject = document.getLayerWithID(sourceObjectID); + var childObject = document.getLayerWithID(childObjectID); + var sourceMidY, childMidY, sourceMidX, childMidX, diff; + + if (Settings.settingForKey("autoAlign")) { + if (Settings.settingForKey("autoAlign") == true) { + // If user turned on Auto-Align settings + if (direction == "Right" || direction == "Left") { + sourceMidY = sourceObject.frame.y + sourceObject.frame.height / 2; + childMidY = childObject.frame.y + childObject.frame.height / 2; + diff = sourceMidY - childMidY; + + if (diff > -6 && diff < 6) { + childObject.frame.y = childObject.frame.y + diff; + } + } + + if (direction == "Down" || direction == "Up") { + sourceMidX = sourceObject.frame.x + sourceObject.frame.width / 2; + childMidX = childObject.frame.x + childObject.frame.width / 2; + diff = sourceMidX - childMidX; + + if (diff > -6 && diff < 6) { + childObject.frame.x = childObject.frame.x + diff; + } + } + } + } +} + +/***/ }), + +/***/ "./src/draw.js": +/*!*********************!*\ + !*** ./src/draw.js ***! + \*********************/ +/*! exports provided: drawConnection */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "drawConnection", function() { return drawConnection; }); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); + + +var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); + +var pluginKey = "flowArrows"; +var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); +var docData = context.document.documentData(); // let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); + +var currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // Main Function + +function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition) { + // Refactored + // Process of creating new connection + var firstObject = document.getLayerWithID(firstObjectID); + var secondObject = document.getLayerWithID(secondObjectID); + var connectionPos = getConnectionPos(firstObject, secondObject, localDirection); + var connection = { + line: [], + conditionID: [], + type: [], + style: [] // Type + + }; + connection.type = type == null ? Settings.settingForKey("arrowType") : type; + + if (connection.type == "Angled" || connection.type == null) { + connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection); + } + + if (connection.type == "Straight") { + connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection); + } + + if (connection.type == "Curved") { + connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection); + } // Condition + + + if (condition == true) { + if (conditionID != null) { + connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY); + } else { + connection.conditionID = addCondition("#con", connectionPos.middlePosX, connectionPos.middlePosY); + } + } else { + connection.conditionID = null; + } // connection.conditionID = condition != false ? connection.conditionID = addCondition("#con", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null + // Style + + + connection.style = styleLine(connection.line, style); // Add to group + + addToArrowsGroup(connection.line); + return connection; +} // Positions + +function getConnectionPos(firstObject, secondObject, direction) { + // Refactored + var firstObjectAbsPos = firstObject.frame.changeBasis({ + from: firstObject.parent, + to: currentParentGroup + }); + var secondObjectAbsPos = secondObject.frame.changeBasis({ + from: secondObject.parent, + to: currentParentGroup + }); + var currentGroup = checkForGroup("Arrows"); + var diffX, diffY; + + if (currentGroup) { + diffX = currentGroup.frame().x(); + diffY = currentGroup.frame().y(); + } else { + diffX = 0; + diffY = 0; + } + + var connectionPos = { + firstLayerPosX: null, + firstLayerPosY: null, + secondLayerPosX: null, + secondLayerPosY: null, + middlePosX: null, + middlePosY: null // Getting all the positions + + }; + + if (direction == "Up") { + // First Layer Position Start Point Position + connectionPos.firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; + connectionPos.firstLayerPosY = firstObjectAbsPos.y - diffY; // Second Layer Position End Point Position + + connectionPos.secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; + connectionPos.secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height - diffY; // Middle Points + + connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; + connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; + } + + if (direction == "Right") { + // First Layer Position Start Point Position + connectionPos.firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width - diffX; + connectionPos.firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position + + connectionPos.secondLayerPosX = secondObjectAbsPos.x - diffX; + connectionPos.secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points + + connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; + connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; + } + + if (direction == "Down") { + // First Layer Position Start Point Position + connectionPos.firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; + connectionPos.firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height - diffY; // Second Layer Position End Point Position + + connectionPos.secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; + connectionPos.secondLayerPosY = secondObjectAbsPos.y - diffY; // Middle Points + + connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; + connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; + } + + if (direction == "Left") { + // First Layer Position Start Point Position + connectionPos.firstLayerPosX = firstObjectAbsPos.x - diffX; + connectionPos.firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position + + connectionPos.secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width - diffX; + connectionPos.secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points + + connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; + connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; + } + + return connectionPos; +} // Drawing Types + + +function drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction) { + // Refactored + var path = NSBezierPath.bezierPath(); + + if (direction == "Up") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + if (direction == "Right") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + if (direction == "Down") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + if (direction == "Left") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + var line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + var points = line.layers().firstObject().points(); + points[1].cornerRadius = 20; + points[2].cornerRadius = 20; + line.setName("Angled Arrow"); + return line; +} + +function drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction) { + // Refactored + var path = NSBezierPath.bezierPath(); + + if (direction == "Up") { + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + if (direction == "Right") { + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + if (direction == "Down") { + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + if (direction == "Left") { + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + var line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + line.setName("Straight Arrow"); + return line; +} + +function drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction) { + // Refactored + var path = NSBezierPath.bezierPath(); + var line; + + if (direction == "Up") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line + + line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + var points = line.layers().firstObject().points(); + points[0].curveMode = 4; + points[1].curveMode = 4; + points[0].hasCurveFrom = true; + points[1].hasCurveTo = true; + + if (firstLayerPosX < secondLayerPosX) { + points[0].curveFrom = { + x: 0, + y: 0.5 + }; + points[0].curveTo = { + x: -0.5, + y: 1 + }; + points[1].curveFrom = { + x: 1, + y: 1 + }; + points[1].curveTo = { + x: 1, + y: 0.5 + }; + } else { + points[0].curveFrom = { + x: 1, + y: 0.5 + }; + points[0].curveTo = { + x: -0.5, + y: 1 + }; + points[1].curveFrom = { + x: 1, + y: 1 + }; + points[1].curveTo = { + x: 0, + y: 0.5 + }; + } + } + + if (direction == "Right") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line + + line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + + var _points = line.layers().firstObject().points(); + + _points[0].curveMode = 4; + _points[1].curveMode = 4; + _points[0].hasCurveFrom = true; + _points[1].hasCurveTo = true; + + if (firstLayerPosY < secondLayerPosY) { + _points[0].curveFrom = { + x: 0.5, + y: 0 + }; + _points[0].curveTo = { + x: -0.5, + y: 1 + }; + _points[1].curveFrom = { + x: 1, + y: 1 + }; + _points[1].curveTo = { + x: 0.5, + y: 1 + }; + } else { + _points[0].curveFrom = { + x: 0.5, + y: 1 + }; + _points[0].curveTo = { + x: -0.5, + y: 1 + }; + _points[1].curveFrom = { + x: 1, + y: 1 + }; + _points[1].curveTo = { + x: 0.5, + y: 0 + }; + } + } + + if (direction == "Down") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line + + line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + + var _points2 = line.layers().firstObject().points(); + + _points2[0].curveMode = 4; + _points2[1].curveMode = 4; + _points2[0].hasCurveFrom = true; + _points2[1].hasCurveTo = true; + + if (firstLayerPosX < secondLayerPosX) { + _points2[0].curveFrom = { + x: 0, + y: 0.5 + }; + _points2[0].curveTo = { + x: -0.5, + y: 1 + }; + _points2[1].curveFrom = { + x: 1, + y: 1 + }; + _points2[1].curveTo = { + x: 1, + y: 0.5 + }; + } else { + _points2[0].curveFrom = { + x: 1, + y: 0.5 + }; + _points2[0].curveTo = { + x: -0.5, + y: 1 + }; + _points2[1].curveFrom = { + x: 1, + y: 1 + }; + _points2[1].curveTo = { + x: 0, + y: 0.5 + }; + } + } + + if (direction == "Left") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line + + line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + + var _points3 = line.layers().firstObject().points(); + + _points3[0].curveMode = 4; + _points3[1].curveMode = 4; + _points3[0].hasCurveFrom = true; + _points3[1].hasCurveTo = true; + + if (firstLayerPosY < secondLayerPosY) { + _points3[0].curveFrom = { + x: 0.5, + y: 0 + }; + _points3[0].curveTo = { + x: -0.5, + y: 1 + }; + _points3[1].curveFrom = { + x: 1, + y: 1 + }; + _points3[1].curveTo = { + x: 0.5, + y: 1 + }; + } else { + _points3[0].curveFrom = { + x: 0.5, + y: 1 + }; + _points3[0].curveTo = { + x: -0.5, + y: 1 + }; + _points3[1].curveFrom = { + x: 1, + y: 1 + }; + _points3[1].curveTo = { + x: 0.5, + y: 0 + }; + } + } // Providing Settings for the arrow + + + line.setName("Curved Arrow"); + return line; +} // Conditions + + +function addCondition(keyword, x, y) { + // Refactored + var libraries = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.getLibraries(); + var libraryObject, symbolReferences, symbol; + + for (var g = 0; g < libraries.length; g++) { + symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document); + + for (var i = 0; i < symbolReferences.length; i++) { + if (symbolReferences[i].name.includes(keyword)) { + libraryObject = symbolReferences[i]; + } + } + } + + if (libraryObject == null) { + symbol = null; + UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as "#condition" so it will be added here'); + } else { + var symbolMaster = libraryObject.import(); + symbol = symbolMaster.createNewInstance(); + symbol = addToConditionGroup(symbol, x, y); + } + + return symbol; +} + +function addToConditionGroup(condition, x, y) { + // Refactored + var conGroup = checkForGroup("Conditions"); + var arGroup = checkForGroup("Arrows"); + var arGroupX = arGroup != null ? arGroup.frame().x() : 0; + var arGroupY = arGroup != null ? arGroup.frame().y() : 0; + + if (conGroup) { + condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX); + condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY); + condition.parent = conGroup; + conGroup.fixGeometryWithOptions(1); + } else { + condition.frame.x = x - condition.frame.width / 2; + condition.frame.y = y - condition.frame.height / 2; + + var Group = __webpack_require__(/*! sketch/dom */ "sketch/dom").Group; + + var group = new Group({ + parent: currentParentGroup, + name: 'Conditions', + layers: [condition] + }); + group.moveToBack(); + group.adjustToFit(); + } + + return condition.id; +} + +function updateCondition(conditionID, x, y) { + // Refactored + var condition = document.getLayerWithID(conditionID); // log (condition) + + var conGroup = checkForGroup("Conditions"); + var arGroup = checkForGroup("Arrows"); + var arGroupX = arGroup != null ? arGroup.frame().x() : 0; + var arGroupY = arGroup != null ? arGroup.frame().y() : 0; + + if (conGroup) { + condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX); + condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY); + conGroup.fixGeometryWithOptions(1); + } else { + condition.frame.x = x - condition.frame.width / 2; + condition.frame.y = y - condition.frame.height / 2; + } + + return condition.id; +} // Style + + +function styleLine(line, style) { + // Refactored + var localStyle; + + if (style != null) { + // For updates + if (getLayerStyles(style) != null && style != "Default Style") { + // If style is specified + localStyle = style; + var ownStyle = getLayerStyles(style); + line.sharedStyle = ownStyle[0]; + } else { + // if there is no specific style + localStyle = "Default Style"; + var border = line.style().addStylePartOfType(1); + border.color = MSColor.colorWithRGBADictionary({ + r: 0.89, + g: 0.89, + b: 0.89, + a: 1 + }); + border.thickness = 2; + line.style().endMarkerType = 2; + } + } else { + // For creating new + if (context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) != "Default Style") { + // we have settins almost all the time and it's not default + localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)); + line.sharedStyle = localStyle[0]; + localStyle = localStyle[0].name(); + } else { + localStyle = "Default Style"; + + var _border = line.style().addStylePartOfType(1); + + _border.color = MSColor.colorWithRGBADictionary({ + r: 0.89, + g: 0.89, + b: 0.89, + a: 1 + }); + _border.thickness = 2; + line.style().endMarkerType = 2; + } + } + + return localStyle; +} + +function getLayerStyles(name) { + // Refactored + var allStyles = docData.allLayerStyles(); + var keyword = "$arrow"; + var styles = []; + + for (var i = 0; i < allStyles.count(); i++) { + if (name == null) { + if (allStyles[i].name().includes(keyword)) { + styles.push(allStyles[i]); + } + } else { + if (allStyles[i].name() == name) { + styles.push(allStyles[i]); + } + } + } + + return styles; +} // Groups + + +function addToArrowsGroup(line) { + var currentGroup = checkForGroup("Arrows"); + + if (currentGroup) { + currentGroup.addLayers([line]); + currentGroup.fixGeometryWithOptions(1); + } else { + var Group = __webpack_require__(/*! sketch/dom */ "sketch/dom").Group; + + var group = new Group({ + parent: currentParentGroup, + name: 'Arrows', + locked: true, + layers: [line] + }); + group.moveToBack(); + group.adjustToFit(); + } +} + +function checkForGroup(groupName) { + // refactored + var currentGroup = null; // Checking all the groups that we have + + for (var i = 0; i < currentParentGroup.layers().count(); i++) { + if (currentParentGroup.layers()[i].name() == groupName) { + currentGroup = currentParentGroup.layers()[i]; + } + } + + return currentGroup; +} + +/***/ }), + /***/ "./src/script.js": /*!***********************!*\ !*** ./src/script.js ***! \***********************/ /*! exports provided: createAutoArrow, createRightArrow, createDownArrow, createLeftArrow, createUpArrow, createRightArrowWithCondition, createDownArrowWithCondition, createLeftArrowWithCondition, createUpArrowWithCondition, autoUpdateSelectedArrows, updateSelectedArrows, updateArtboardArrows, updateAllArrows, deleteSelectedArrows, deleteArtboardArrows, deleteAllArrows */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createAutoArrow", function() { return createAutoArrow; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createRightArrow", function() { return createRightArrow; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createDownArrow", function() { return createDownArrow; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createLeftArrow", function() { return createLeftArrow; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createUpArrow", function() { return createUpArrow; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createRightArrowWithCondition", function() { return createRightArrowWithCondition; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createDownArrowWithCondition", function() { return createDownArrowWithCondition; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createLeftArrowWithCondition", function() { return createLeftArrowWithCondition; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createUpArrowWithCondition", function() { return createUpArrowWithCondition; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "autoUpdateSelectedArrows", function() { return autoUpdateSelectedArrows; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateSelectedArrows", function() { return updateSelectedArrows; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateArtboardArrows", function() { return updateArtboardArrows; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAllArrows", function() { return updateAllArrows; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteSelectedArrows", function() { return deleteSelectedArrows; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteArtboardArrows", function() { return deleteArtboardArrows; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteAllArrows", function() { return deleteAllArrows; }); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _createArrow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./createArrow.js */ "./src/createArrow.js"); +/* harmony import */ var _updateArrow_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./updateArrow.js */ "./src/updateArrow.js"); +// +// Variables +// + + +var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); + +var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); + +var pluginKey = "flowArrows"; +var document; +var docData, pluginData, currentParentGroup, newConnectionsData; + +if (context.document) { + //cc:remember place + document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); + docData = context.document.documentData(); + pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); + currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards + + newConnectionsData = getConnectionsData(); +} else { + document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.actionContext.document); //cc:here is bug;well, seems like a bug in logic +} // +// Create Connection Function +// + + +function createAutoArrow(context) { + create(context, "Auto", false); +} +function createRightArrow(context) { + create(context, "Right", false); +} +function createDownArrow(context) { + create(context, "Down", false); +} +function createLeftArrow(context) { + create(context, "Left", false); +} +function createUpArrow(context) { + create(context, "Up", false); +} +function createRightArrowWithCondition(context) { + create(context, "Right", true); +} +function createDownArrowWithCondition(context) { + create(context, "Down", true); +} +function createLeftArrowWithCondition(context) { + create(context, "Left", true); +} +function createUpArrowWithCondition(context) { + create(context, "Up", true); +} +function autoUpdateSelectedArrows(context) {} // const action = context.actionContext; +// docData = action.document.documentData(); +// pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); +// currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards +// newConnectionsData = getConnectionsData(); +// const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer)); +// log(movedLayers[0].id); +// log(movedLayers.length); +// // if (movedLayers.filter(layer => (layer.type == 'Artboard' || (layer.type == 'SymbolMaster' && config.arrangeSymbols))).length > 0) { +// // ArrangeArtboards(context) +// // } +// let currentConnectionsData = newConnectionsData; // Need to refactor +// for(let g = 0; g < movedLayers.length; g++) { +// let connectionIndex = findConnectionIndex(movedLayers[0].id, null, currentConnectionsData); +// log("yes "+connectionIndex); +// if(connectionIndex.length == 0){ +// updateArrow(currentConnectionsData[connectionIndex[0]].firstObject, currentConnectionsData[connectionIndex[0]].secondObject, currentConnectionsData[connectionIndex[0]].style, currentConnectionsData[connectionIndex[0]].type, currentConnectionsData[connectionIndex[0]].direction, currentConnectionsData[connectionIndex[0]].line, currentConnectionsData[connectionIndex[0]].condition, currentConnectionsData[connectionIndex[0]].isCondition, connectionIndex[0]); +// sketch.UI.message("Current connection is updated 🤘"); +// } else { +// sketch.UI.message("There is no connection between selected layers on the plugin data"); +// } +// } +// context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); +// +// Update Connection Function +// + +function updateSelectedArrows(context) { + var selection = context.selection; + + if (selection.count() > 1 && selection[0].class() != "MSArtboardGroup") { + // Need to find source object by ID first + var currentConnectionsData = newConnectionsData; // Need to refactor + + for (var g = 0; g < selection.count(); g++) { + if (selection[g].objectID() != selection[0].objectID()) { + // Then need to create or update connection arrow with each selection + var connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), currentConnectionsData); + + if (connectionIndex.length == 0) { + Object(_updateArrow_js__WEBPACK_IMPORTED_MODULE_2__["updateArrow"])(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex); + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Current connection is updated 🤘"); + } else { + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is no connection between selected layers on the plugin data"); + } + } + } + + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); + } else { + // When user didn't select anything + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Please select more than two layers. Artboards are coming soon 🥳"); + } +} +function updateArtboardArrows(context) { + Object(_updateArrow_js__WEBPACK_IMPORTED_MODULE_2__["update"])(context, 2, false); +} +function updateAllArrows(context) { + Object(_updateArrow_js__WEBPACK_IMPORTED_MODULE_2__["update"])(context, 3, true); +} +function deleteSelectedArrows(context) { + var selection = context.selection; + var firstObject, secondObject; + + if (selection.count() == 2) { + for (var g = 0; g < selection.count(); g++) { + if (selection[g].objectID() != selection[0].objectID()) { + // It will never check 3rd connection + var connections = getConnectionsData(); + var connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), connections); + + if (connectionIndex != null) { + // We have connections in database + deleteLine(connections[connectionIndex].line); + newConnectionsData = deleteConnectionFromData(connectionIndex); + var updateArrowsCounter = connections.length; + + for (var i = 0; i < updateArrowsCounter; i++) { + // Need to go through each connection and check if it placed on selected artboard + firstObject = document.getLayerWithID(connections[i].firstObject); + secondObject = document.getLayerWithID(connections[i].secondObject); + + if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()) { + if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()) { + deleteLine(connections[i].line); + newConnectionsData = deleteConnectionFromData(i); + } + } + } + + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows from selected layers are deleted ✌️"); + } + } + } + } else { + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Select two layers, please 🧐"); + } +} +function deleteArtboardArrows(context) { + var selection = context.selection; + var firstObject, secondObject; // Need to delete all the arrows only from selected artboard + + if (selection.count() == 1 && selection[0].class() == "MSArtboardGroup") { + var connections = getConnectionsData(); + + if (connections.length > 0) { + // We have connections in database + var updateArrowsCounter = connections.length; + + for (var i = 0; i < updateArrowsCounter; i++) { + // Need to go through each connection and check if it placed on selected artboard + firstObject = document.getLayerWithID(connections[i].firstObject); + secondObject = document.getLayerWithID(connections[i].secondObject); + + if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()) { + if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()) { + deleteLine(connections[i].line); + newConnectionsData = deleteConnectionFromData(i); + } + } + } + + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows from selected artboard are deleted"); + } else { + // We don't have any connections to update + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is nothing to delete"); + } + } else { + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Please select one artboard"); + } +} +function deleteAllArrows(context) { + Object(_updateArrow_js__WEBPACK_IMPORTED_MODULE_2__["update"])(context, 3, false); +} // let selection = context.selection; +// if(selection.count() > 1 && selection[0].class() != "MSArtboardGroup"){ +// // Need to find source object by ID first +// let currentConnectionsData = newConnectionsData; // Need to refactor +// for(let g = 0; g < selection.count(); g++) { +// if(selection[g].objectID() != selection[0].objectID()){ +// // Then need to create or update connection arrow with each selection +// let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), currentConnectionsData); +// if(connectionIndex.length == 0){ +// updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex); +// sketch.UI.message("Current connection is updated 🤘"); +// } else { +// sketch.UI.message("There is no connection between selected layers on the plugin data"); +// } +// } +// } +// context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); +// } else { +// // When user didn't select anything +// sketch.UI.message("Please select more than two layers. Artboards are coming soon 🥳"); +// } +// +// Data +// + +function getConnectionsData() { + //Refactored + var dataArray = []; + + if (pluginData) { + for (var i = 0; i < pluginData.length; i++) { + dataArray.push(pluginData[i]); + } + } + + return dataArray; +} // +// Functions +// + + + + + + +function create(context, direction, isCondition) { + //cc:create#1;Passing all the data + var selection = context.selection; + + if (selection.count() > 1 && selection[0].class() != "MSArtboardGroup") { + // Need to find source object by ID first + var sourceObjectID = getSourceObjectFromSelection(selection, direction); + var currentConnectionsData = newConnectionsData; // Need to refactor + + for (var g = 0; g < selection.count(); g++) { + if (selection[g].objectID() != sourceObjectID) { + // Then need to create or update connection arrow with each selection + var connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), currentConnectionsData); + + if (connectionIndex.length == 0) { + // There is no connection with this two objects in our database + Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_1__["createArrow"])(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition); + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("New connection is created 🚀"); + } else { + // Need to remake the arrow condition + if (Object(_updateArrow_js__WEBPACK_IMPORTED_MODULE_2__["updateArrow"])(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex)) { + Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_1__["createArrow"])(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].condition, isCondition); + } + + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Current connection is updated 🤘"); + } + } + } + } else { + // When user didn't select anything + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Please select more than two layers. Artboards are coming soon 🥳"); + } +} + +function getSourceObjectFromSelection(selection, direction) { + //Refactored + var sourceObjectID = selection.firstObject().objectID(); + + if (direction != "Auto") { + for (var g = 0; g < selection.count(); g++) { + sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction); + } + } + + return sourceObjectID; +} + +function defineSourceObject(firstObjectID, secondObjectID, direction) { + //Refactored + var firstObject = document.getLayerWithID(firstObjectID); + var secondObject = document.getLayerWithID(secondObjectID); + var sourceObjectID; + + if (direction == "Right") { + if (firstObject.frame.x <= secondObject.frame.x) { + sourceObjectID = firstObject.id; + } else { + sourceObjectID = secondObject.id; + } + } + + if (direction == "Down") { + if (firstObject.frame.y <= secondObject.frame.y) { + sourceObjectID = firstObject.id; + } else { + sourceObjectID = secondObject.id; + } + } + + if (direction == "Left") { + if (firstObject.frame.x <= secondObject.frame.x) { + sourceObjectID = secondObject.id; + } else { + sourceObjectID = firstObject.id; + } + } + + if (direction == "Up") { + if (firstObject.frame.y <= secondObject.frame.y) { + sourceObjectID = secondObject.id; + } else { + sourceObjectID = firstObject.id; + } + } + + return sourceObjectID; +} + +function findConnectionIndex(firstObjectID, secondObjectID, data) { + var indexArray = []; + firstObjectID = String(firstObjectID); + secondObjectID = String(secondObjectID); + + if (pluginData) { + // If we have database, need to check for connections + for (var y = 0; y < data.length; y++) { + if (firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject) { + if (secondObjectID == null) { + // When we need to find connection between two objects + if (secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject) { + indexArray[0] = y; + } + } else { + // When we need to find a connection for one object only + indexArray.push(y); + } + } + } + } + + return indexArray; +} // const track = require("sketch-module-google-analytics") +// track("UA-138226597-1", "event", { +// ec: "command", +// ea: "create", +// ev: "my-command" +// }); + +/***/ }), + +/***/ "./src/updateArrow.js": +/*!****************************!*\ + !*** ./src/updateArrow.js ***! + \****************************/ +/*! exports provided: update, updateArrow */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "update", function() { return update; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateArrow", function() { return updateArrow; }); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); + + +var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); + +var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); + +var pluginKey = "flowArrows"; +var document; +var docData, pluginData, currentParentGroup, connectionsData; +document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); +docData = context.document.documentData(); +pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); +currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards + +connectionsData = getConnectionsData(); +function update(context, level, isUpdate) { + // 1 - selection level + // 2 - artboard level + // 3 - document level + var newConnectionsData = []; + var selection = context.selection; + var firstObjectArtboard; + var secondObjectArtboard; + + if (connectionsData.length > 0) { + for (var i = 0; i < connectionsData.length; i++) { + deleteLine(connectionsData[i].line); + + if (level == 3) { + if (isUpdate) { + updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i); + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows are updated"); + } else { + newConnectionsData = null; + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows are deleted"); + } + } + + if (level == 2) { + firstObjectArtboard = document.getLayerWithID(connectionsData[i].firstObject); + firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID(); + secondObjectArtboard = document.getLayerWithID(connectionsData[i].secondObject); + secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID(); + + if (selection.count() == 1 && selection[0].class() == "MSArtboardGroup") { + if (firstObjectArtboard == selection[0].objectID()) { + if (secondObjectArtboard == selection[0].objectID()) { + updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i); + } else { + newConnectionsData.push(connectionsData[i]); + } + } else { + newConnectionsData.push(connectionsData[i]); + } + } + } + + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows are updated 🚀"); + } + + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); + } else { + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is no arrows"); + } +} +function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { + // Refactored + // Need to check if we have the layers with such IDs + var firstObject = document.getLayerWithID(firstObjectID); + var secondObject = document.getLayerWithID(secondObjectID); + var conditionObject = document.getLayerWithID(conditionID); + var result = false; // Need to delete data first, because we will have a new line + + deleteLine(lineID); + + if (conditionID && !isCondition) { + if (conditionObject) { + conditionObject.remove(); + } + } + + connectionsData = deleteConnectionFromData(connectionIndex); + + if (firstObject && secondObject) { + // If we have all the objects, we can recreate the line + result = true; + } + + return result; +} + +function deleteLine(lineID) { + // refactored + var lineObject = document.getLayerWithID(lineID); + var selectedGroup; + + if (lineObject) { + selectedGroup = lineObject.parent; + lineObject.remove(); + + if (selectedGroup.layers.length == 0) { + selectedGroup.remove(); + } + } +} + +function deleteConnectionFromData(connectionIndex) { + // Refactored + var newConnections = []; + + if (pluginData) { + // If we have database + var connections = pluginData; + + for (var i = 0; i < connections.length; i++) { + // Updating all connections without deleted one + if (i != connectionIndex) { + newConnections.push(connections[i]); + } + } + } + + return newConnections; +} + +function getConnectionsData() { + //Refactored + var dataArray = []; + + if (pluginData) { + for (var i = 0; i < pluginData.length; i++) { + dataArray.push(pluginData[i]); + } + } + + return dataArray; +} + +/***/ }), + +/***/ "sketch": +/*!*************************!*\ + !*** external "sketch" ***! + \*************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = require("sketch"); + +/***/ }), + +/***/ "sketch/dom": +/*!*****************************!*\ + !*** external "sketch/dom" ***! + \*****************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = require("sketch/dom"); + +/***/ }), + +/***/ "sketch/settings": +/*!**********************************!*\ + !*** external "sketch/settings" ***! + \**********************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = require("sketch/settings"); + +/***/ }), + +/***/ "sketch/ui": +/*!****************************!*\ + !*** external "sketch/ui" ***! + \****************************/ +/*! no static exports found */ /***/ (function(module, exports) { -throw new Error("Module build failed (from ./node_modules/babel-loader/lib/index.js):\nSyntaxError: /Users/faridsabitov/Sketch-Connection-Flow-Arrows/src/script.js: Unexpected token (255:0)\n\n\u001b[0m \u001b[90m 253 | \u001b[39m sketch\u001b[33m.\u001b[39m\u001b[33mUI\u001b[39m\u001b[33m.\u001b[39mmessage(\u001b[32m\"There is nothing to delete\"\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m\n\u001b[0m \u001b[90m 254 | \u001b[39m }\u001b[0m\n\u001b[0m\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 255 | \u001b[39m}\u001b[0m\n\u001b[0m \u001b[90m | \u001b[39m\u001b[31m\u001b[1m^\u001b[22m\u001b[39m\u001b[0m\n\u001b[0m \u001b[90m 256 | \u001b[39m\u001b[0m\n\u001b[0m \u001b[90m 257 | \u001b[39m\u001b[36mfunction\u001b[39m update(context\u001b[33m,\u001b[39m level\u001b[33m,\u001b[39m isUpdate) {\u001b[0m\n\u001b[0m \u001b[90m 258 | \u001b[39m \u001b[90m// 1 - selection level\u001b[39m\u001b[0m\n at Object.raise (/Users/faridsabitov/Sketch-Connection-Flow-Arrows/node_modules/@babel/parser/lib/index.js:3851:17)\n at Object.unexpected (/Users/faridsabitov/Sketch-Connection-Flow-Arrows/node_modules/@babel/parser/lib/index.js:5167:16)\n at Object.parseExprAtom (/Users/faridsabitov/Sketch-Connection-Flow-Arrows/node_modules/@babel/parser/lib/index.js:6328:20)\n at Object.parseExprAtom (/Users/faridsabitov/Sketch-Connection-Flow-Arrows/node_modules/@babel/parser/lib/index.js:3570:20)\n at Object.parseExprSubscripts (/Users/faridsabitov/Sketch-Connection-Flow-Arrows/node_modules/@babel/parser/lib/index.js:5914:23)\n at Object.parseMaybeUnary (/Users/faridsabitov/Sketch-Connection-Flow-Arrows/node_modules/@babel/parser/lib/index.js:5894:21)\n at Object.parseExprOps (/Users/faridsabitov/Sketch-Connection-Flow-Arrows/node_modules/@babel/parser/lib/index.js:5781:23)\n at Object.parseMaybeConditional (/Users/faridsabitov/Sketch-Connection-Flow-Arrows/node_modules/@babel/parser/lib/index.js:5754:23)\n at Object.parseMaybeAssign (/Users/faridsabitov/Sketch-Connection-Flow-Arrows/node_modules/@babel/parser/lib/index.js:5701:21)\n at Object.parseExpression (/Users/faridsabitov/Sketch-Connection-Flow-Arrows/node_modules/@babel/parser/lib/index.js:5649:23)\n at Object.parseStatementContent (/Users/faridsabitov/Sketch-Connection-Flow-Arrows/node_modules/@babel/parser/lib/index.js:7420:23)\n at Object.parseStatement (/Users/faridsabitov/Sketch-Connection-Flow-Arrows/node_modules/@babel/parser/lib/index.js:7291:17)\n at Object.parseBlockOrModuleBlockBody (/Users/faridsabitov/Sketch-Connection-Flow-Arrows/node_modules/@babel/parser/lib/index.js:7868:25)\n at Object.parseBlockBody (/Users/faridsabitov/Sketch-Connection-Flow-Arrows/node_modules/@babel/parser/lib/index.js:7855:10)\n at Object.parseTopLevel (/Users/faridsabitov/Sketch-Connection-Flow-Arrows/node_modules/@babel/parser/lib/index.js:7220:10)\n at Object.parse (/Users/faridsabitov/Sketch-Connection-Flow-Arrows/node_modules/@babel/parser/lib/index.js:8863:17)"); +module.exports = require("sketch/ui"); /***/ }) diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index 5aa1298..763296e 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap"],"names":[],"mappings":";;;;;;AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/createArrow.js","webpack://exports/./src/draw.js","webpack://exports/./src/script.js","webpack://exports/./src/updateArrow.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","Settings","pluginKey","document","docData","pluginData","currentParentGroup","newConnectionsData","sketch","fromNative","context","documentData","command","valueForKey_onLayer_forPluginIdentifier","currentPage","currentArtboard","getConnectionsData","createArrow","firstObjectID","secondObjectID","style","type","direction","conditionID","isCondition","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","firstObject","secondObject","condition","line","objectID","push","setValue_forKey_onLayer_forPluginIdentifier","dataArray","i","length","getLayerWithID","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","sourceObjectID","childObjectID","sourceObject","childObject","settingForKey","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","currentGroup","checkForGroup","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","layers","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","g","getImportableSymbolReferencesForDocument","name","includes","alert","symbolMaster","import","createNewInstance","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","fixGeometryWithOptions","Group","group","moveToBack","adjustToFit","id","localStyle","getLayerStyles","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","allStyles","allLayerStyles","styles","count","addLayers","locked","groupName","actionContext","createAutoArrow","create","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","autoUpdateSelectedArrows","updateSelectedArrows","selection","class","currentConnectionsData","connectionIndex","findConnectionIndex","updateArrow","message","updateArtboardArrows","update","updateAllArrows","deleteSelectedArrows","connections","deleteLine","deleteConnectionFromData","updateArrowsCounter","sketchObject","parentArtboard","deleteArtboardArrows","deleteAllArrows","getSourceObjectFromSelection","defineSourceObject","data","indexArray","String","connectionsData","level","isUpdate","firstObjectArtboard","secondObjectArtboard","lineID","conditionObject","result","remove","lineObject","selectedGroup","newConnections"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, newConnectionsData;\n\ndocument = sketch.fromNative(context.document);\ndocData = context.document.documentData();\npluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\ncurrentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\nnewConnectionsData = getConnectionsData();\n\nimport { drawConnection } from \"./draw.js\";\n\nexport function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n\n // Need to save this data to the global array\n newConnectionsData.push(connection);\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n}\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = [];\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i]);\n }\n } \n return dataArray;\n }\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}","import sketch from 'sketch';\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\n\n\nlet docData = context.document.documentData();\n// let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n// Main Function\n\nexport function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition){ // Refactored\n // Process of creating new connection \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n // Condition\n if(condition == true){\n if(conditionID != null){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY);\n }\n } else {\n connection.conditionID = null;\n }\n // connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style);\n\n // Add to group\n addToArrowsGroup(connection.line);\n \n return connection\n}\n\n// Positions\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\");\n let diffX, diffY;\n \n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n \n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n \n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n return connectionPos\n}\n\n// Drawing Types\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n \n return line;\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n \n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n \n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n \n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n \n if(firstLayerPosX Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here');\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y);\n }\n \n return symbol;\n}\n\nfunction addToConditionGroup(condition, x, y){ // Refactored\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n \n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Conditions',\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n}\n\nfunction updateCondition(conditionID, x, y){ // Refactored\nlet condition = document.getLayerWithID(conditionID);\n// log (condition)\nlet conGroup = checkForGroup(\"Conditions\") ;\nlet arGroup = checkForGroup(\"Arrows\");\nlet arGroupX = arGroup != null ? arGroup.frame().x() : 0;\nlet arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\nif(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n} else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n}\nreturn condition.id;\n}\n\n// Style\n\nfunction styleLine(line, style){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey));\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nfunction getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}\n \n// Groups\n\nfunction addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\");\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nfunction checkForGroup(groupName) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n \n return currentGroup;\n}","//\n// Variables\n//\n\nimport sketch from 'sketch';\n\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, newConnectionsData;\nif(context.document){\n //cc:remember place\n document = sketch.fromNative(context.document);\n docData = context.document.documentData();\n pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n newConnectionsData = getConnectionsData();\n} else {\n document = sketch.fromNative(context.actionContext.document);\n //cc:here is bug;well, seems like a bug in logic\n}\n \n//\n// Create Connection Function\n//\n\n\nexport function createAutoArrow(context){create(context, \"Auto\", false);}\nexport function createRightArrow(context){create(context, \"Right\", false);}\nexport function createDownArrow(context){create(context, \"Down\", false);}\nexport function createLeftArrow(context){create(context, \"Left\", false);}\nexport function createUpArrow(context){create(context, \"Up\", false);}\n\nexport function createRightArrowWithCondition(context){create(context, \"Right\", true);}\nexport function createDownArrowWithCondition(context){create(context, \"Down\", true);}\nexport function createLeftArrowWithCondition(context){create(context, \"Left\", true);}\nexport function createUpArrowWithCondition(context){create(context, \"Up\", true);}\n\nexport function autoUpdateSelectedArrows(context) { \n // const action = context.actionContext;\n\n // docData = action.document.documentData();\n // pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n // currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n // newConnectionsData = getConnectionsData();\n\n // const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer));\n // log(movedLayers[0].id);\n // log(movedLayers.length);\n\n // // if (movedLayers.filter(layer => (layer.type == 'Artboard' || (layer.type == 'SymbolMaster' && config.arrangeSymbols))).length > 0) {\n // // ArrangeArtboards(context)\n // // }\n\n // let currentConnectionsData = newConnectionsData; // Need to refactor\n\n // for(let g = 0; g < movedLayers.length; g++) {\n\n // let connectionIndex = findConnectionIndex(movedLayers[0].id, null, currentConnectionsData);\n\n // log(\"yes \"+connectionIndex);\n // if(connectionIndex.length == 0){\n \n // updateArrow(currentConnectionsData[connectionIndex[0]].firstObject, currentConnectionsData[connectionIndex[0]].secondObject, currentConnectionsData[connectionIndex[0]].style, currentConnectionsData[connectionIndex[0]].type, currentConnectionsData[connectionIndex[0]].direction, currentConnectionsData[connectionIndex[0]].line, currentConnectionsData[connectionIndex[0]].condition, currentConnectionsData[connectionIndex[0]].isCondition, connectionIndex[0]);\n // sketch.UI.message(\"Current connection is updated 🤘\");\n // } else {\n // sketch.UI.message(\"There is no connection between selected layers on the plugin data\");\n // }\n \n // }\n // context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n}\n\n \n//\n// Update Connection Function\n//\n\nexport function updateSelectedArrows(context) {\n let selection = context.selection;\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let currentConnectionsData = newConnectionsData; // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), currentConnectionsData);\n\n if(connectionIndex.length == 0){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex);\n sketch.UI.message(\"Current connection is updated 🤘\");\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\");\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n \n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\nexport function updateArtboardArrows(context) {update(context, 2, false);}\n\nexport function updateAllArrows(context) {update(context, 3, true);}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection;\n let firstObject, secondObject;\n\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n \n let connections = getConnectionsData() ;\n let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), connections);\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line);\n newConnectionsData = deleteConnectionFromData(connectionIndex);\n const updateArrowsCounter = connections.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject);\n secondObject = document.getLayerWithID(connections[i].secondObject);\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line);\n newConnectionsData = deleteConnectionFromData(i);\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\");\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\");\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection;\n let firstObject, secondObject;\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData();\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject);\n secondObject = document.getLayerWithID(connections[i].secondObject);\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line);\n newConnectionsData = deleteConnectionFromData(i);\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows from selected artboard are deleted\");\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\");\n }\n } else {\n sketch.UI.message(\"Please select one artboard\");\n }\n}\n\nexport function deleteAllArrows(context) {update(context, 3, false);}\n\n\n\n\n\n // let selection = context.selection;\n // if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // // Need to find source object by ID first\n // let currentConnectionsData = newConnectionsData; // Need to refactor\n\n // for(let g = 0; g < selection.count(); g++) {\n // if(selection[g].objectID() != selection[0].objectID()){\n // // Then need to create or update connection arrow with each selection\n // let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), currentConnectionsData);\n\n // if(connectionIndex.length == 0){\n // updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex);\n // sketch.UI.message(\"Current connection is updated 🤘\");\n // } else {\n // sketch.UI.message(\"There is no connection between selected layers on the plugin data\");\n // }\n // }\n // }\n // context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n \n // } else {\n // // When user didn't select anything\n // sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n // }\n\n\n//\n// Data\n//\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = [];\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i]);\n }\n } \n return dataArray;\n}\n\n\n//\n// Functions\n//\n\nimport { createArrow } from \"./createArrow.js\";\nimport { updateArrow } from \"./updateArrow.js\";\nimport { update } from \"./updateArrow.js\";\n\n\nfunction create(context, direction, isCondition){\n //cc:create#1;Passing all the data\n let selection = context.selection;\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction);\n let currentConnectionsData = newConnectionsData; // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), currentConnectionsData);\n \n if(connectionIndex.length == 0){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition);\n sketch.UI.message(\"New connection is created 🚀\");\n } else {\n // Need to remake the arrow condition\n if(updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex)){\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].condition, isCondition);\n }\n sketch.UI.message(\"Current connection is updated 🤘\");\n }\n }\n }\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID();\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction);\n }\n }\n \n return sourceObjectID;\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let sourceObjectID;\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n return sourceObjectID;\n}\n\nfunction findConnectionIndex(firstObjectID, secondObjectID, data){\n let indexArray = [] ;\n firstObjectID = String(firstObjectID);\n secondObjectID = String(secondObjectID);\n \n if(pluginData){\n // If we have database, need to check for connections\n for(let y = 0; y < data.length; y++){\n if(firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject){\n if(secondObjectID == null){\n // When we need to find connection between two objects\n if(secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject){\n indexArray[0] = y;\n } \n } else {\n // When we need to find a connection for one object only\n indexArray.push(y);\n }\n }\n }\n }\n return indexArray;\n}\n\n\n// const track = require(\"sketch-module-google-analytics\")\n// track(\"UA-138226597-1\", \"event\", {\n// ec: \"command\", \n// ea: \"create\", \n// ev: \"my-command\"\n// });\n\n\n\n\n\n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, connectionsData;\n\ndocument = sketch.fromNative(context.document);\ndocData = context.document.documentData();\npluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\ncurrentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\nconnectionsData = getConnectionsData();\n\n\n\nexport function update(context, level, isUpdate) {\n // 1 - selection level\n // 2 - artboard level\n // 3 - document level\n let newConnectionsData = [];\n let selection = context.selection;\n let firstObjectArtboard;\n let secondObjectArtboard;\n\n\n\n if (connectionsData.length > 0) {\n for (let i = 0; i < connectionsData.length; i++) {\n deleteLine(connectionsData[i].line);\n \n if (level == 3) {\n if(isUpdate){\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n sketch.UI.message(\"All arrows are updated\");\n } else {\n newConnectionsData = null\n sketch.UI.message(\"All arrows are deleted\");\n }\n \n }\n if (level == 2) {\n firstObjectArtboard = document.getLayerWithID(connectionsData[i].firstObject);\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID();\n secondObjectArtboard = document.getLayerWithID(connectionsData[i].secondObject);\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID();\n\n if (selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\") {\n\n if (firstObjectArtboard == selection[0].objectID()) {\n if (secondObjectArtboard == selection[0].objectID()) {\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n }\n }\n sketch.UI.message(\"All arrows are updated 🚀\");\n \n \n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n sketch.UI.message(\"There is no arrows\");\n }\n\n\n\n}\n\nexport function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let conditionObject = document.getLayerWithID(conditionID);\n let result = false;\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID);\n if(conditionID && !isCondition){\n if(conditionObject){conditionObject.remove();}\n }\n \n connectionsData = deleteConnectionFromData(connectionIndex);\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n result = true;\n }\n\n return result;\n}\n\nfunction deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n\nfunction deleteConnectionFromData(connectionIndex){ // Refactored\n let newConnections = [];\n if(pluginData){\n // If we have database\n let connections = pluginData;\n \n for (let i = 0; i < connections.length; i ++) {\n // Updating all connections without deleted one\n if(i != connectionIndex){\n newConnections.push(connections[i]);\n }\n }\n }\n return newConnections;\n}\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = [];\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i]);\n }\n } \n return dataArray;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/src/script.js b/src/script.js index 3e54ef2..9cc7880 100644 --- a/src/script.js +++ b/src/script.js @@ -108,63 +108,9 @@ export function updateSelectedArrows(context) { } } -export function updateArtboardArrows(context) { - // TODO: Need to show amount of updated arrows and deleted ones - let selection = context.selection; - let connections = getConnectionsData(); - let firstObjectArtboard; - let secondObjectArtboard; - - if(connections.length > 0){ - // We have connections in database - const updateArrowsCounter = connections.length; - for (let i = 0; i < updateArrowsCounter; i ++) { - // Need to check if the element is selected globally or from the artboard - firstObjectArtboard = document.getLayerWithID(connections[i].firstObject); - firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID(); - - secondObjectArtboard = document.getLayerWithID(connections[i].secondObject); - secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID(); - - if(selection.count() == 1 && selection[0].class() == "MSArtboardGroup"){ - // Need to go through each connection and update arrow position for specific artboard - - if (firstObjectArtboard == selection[0].objectID()){ - if (secondObjectArtboard == selection[0].objectID()){ - updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i); - } else {newConnectionsData.push(connections[i])} - } else { - // If not just saving it - newConnectionsData.push(connections[i]); - } - } - } - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); - sketch.UI.message("All arrows are updated 🚀"); - } else { - // We don't have any connections to update - sketch.UI.message("There is nothing to update"); - } -} +export function updateArtboardArrows(context) {update(context, 2, false);} -export function updateAllArrows(context) { // TODO - // TODO: Need to show amount of updated arrows and deleted ones - let currentConnectionsData = newConnectionsData; - if(currentConnectionsData.length > 0){ - // We have connections in database - const updateArrowsCounter = currentConnectionsData.length; - for (let i = 0; i < updateArrowsCounter; i ++) { - // Need to go through each connection and update arrow position without artboards - // Need to check if current object don't have the parrent - updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i); - } - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); - sketch.UI.message("All arrows are updated 🚀"); - } else { - // We don't have any connections to update - sketch.UI.message("There is nothing to update"); - } -} +export function updateAllArrows(context) {update(context, 3, true);} export function deleteSelectedArrows(context) { let selection = context.selection; @@ -240,28 +186,9 @@ export function deleteArtboardArrows(context) { export function deleteAllArrows(context) {update(context, 3, false);} - if(newConnectionsData.length > 0){ - // We have connections in database - for (let i = 0; i < newConnectionsData.length; i ++) { - // Need to go through each connection and update arrow position - deleteLine(newConnectionsData[i].line); - } - context.command.setValue_forKey_onLayer_forPluginIdentifier(null, "arrowConnections", docData, pluginKey); - sketch.UI.message("All arrows are deleted"); - } else { - // We don't have any connections to update - sketch.UI.message("There is nothing to delete"); - } -} -function update(context, level, isUpdate) { - // 1 - selection level - // 2 - artboard level - // 3 - document level - if(level == 3){ - - } + // let selection = context.selection; // if(selection.count() > 1 && selection[0].class() != "MSArtboardGroup"){ @@ -287,7 +214,7 @@ function update(context, level, isUpdate) { // // When user didn't select anything // sketch.UI.message("Please select more than two layers. Artboards are coming soon 🥳"); // } -} + // // Data @@ -311,6 +238,7 @@ function getConnectionsData(){ //Refactored import { createArrow } from "./createArrow.js"; import { updateArrow } from "./updateArrow.js"; +import { update } from "./updateArrow.js"; function create(context, direction, isCondition){ diff --git a/src/updateArrow.js b/src/updateArrow.js index 0c35db2..5d9eca7 100644 --- a/src/updateArrow.js +++ b/src/updateArrow.js @@ -6,13 +6,71 @@ var Settings = require('sketch/settings'); const pluginKey = "flowArrows"; let document; -let docData, pluginData, currentParentGroup, newConnectionsData; +let docData, pluginData, currentParentGroup, connectionsData; document = sketch.fromNative(context.document); docData = context.document.documentData(); pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards -newConnectionsData = getConnectionsData(); +connectionsData = getConnectionsData(); + + + +export function update(context, level, isUpdate) { + // 1 - selection level + // 2 - artboard level + // 3 - document level + let newConnectionsData = []; + let selection = context.selection; + let firstObjectArtboard; + let secondObjectArtboard; + + + + if (connectionsData.length > 0) { + for (let i = 0; i < connectionsData.length; i++) { + deleteLine(connectionsData[i].line); + + if (level == 3) { + if(isUpdate){ + updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i); + sketch.UI.message("All arrows are updated"); + } else { + newConnectionsData = null + sketch.UI.message("All arrows are deleted"); + } + } + if (level == 2) { + firstObjectArtboard = document.getLayerWithID(connectionsData[i].firstObject); + firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID(); + secondObjectArtboard = document.getLayerWithID(connectionsData[i].secondObject); + secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID(); + + if (selection.count() == 1 && selection[0].class() == "MSArtboardGroup") { + + if (firstObjectArtboard == selection[0].objectID()) { + if (secondObjectArtboard == selection[0].objectID()) { + updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i); + } else { + newConnectionsData.push(connectionsData[i]); + } + } else { + newConnectionsData.push(connectionsData[i]); + } + } + } + sketch.UI.message("All arrows are updated 🚀"); + + + } + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); + } else { + sketch.UI.message("There is no arrows"); + } + + + +} export function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored // Need to check if we have the layers with such IDs @@ -27,14 +85,12 @@ export function updateArrow(firstObjectID, secondObjectID, style, type, directio if(conditionObject){conditionObject.remove();} } - newConnectionsData = deleteConnectionFromData(connectionIndex); + connectionsData = deleteConnectionFromData(connectionIndex); if(firstObject && secondObject){ // If we have all the objects, we can recreate the line result = true; - } - - log("Result "+result) + } return result; } From d6acfa0186d18f49299edc43ac7f009d55f1ffad Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Fri, 5 Jul 2019 21:33:21 +0300 Subject: [PATCH 28/44] refactoring modules --- arrows.sketchplugin/Contents/Sketch/links.js | 10 +- .../Contents/Sketch/links.js.map | 2 +- arrows.sketchplugin/Contents/Sketch/script.js | 279 +- .../Contents/Sketch/script.js.map | 2 +- .../Contents/Sketch/settings.js | 74 +- .../Contents/Sketch/settings.js.map | 2 +- src/draw.js | 55 +- src/manifest.json | 4 +- src/script.js | 52 +- src/script.js.svg | 20283 ---------------- src/settings.js | 20 +- src/updateArrow.js | 56 - src/{ => utilities}/links.js | 0 src/utilities/styling.js | 58 + 14 files changed, 343 insertions(+), 20554 deletions(-) delete mode 100644 src/script.js.svg rename src/{ => utilities}/links.js (100%) create mode 100644 src/utilities/styling.js diff --git a/arrows.sketchplugin/Contents/Sketch/links.js b/arrows.sketchplugin/Contents/Sketch/links.js index aa00d24..6029204 100644 --- a/arrows.sketchplugin/Contents/Sketch/links.js +++ b/arrows.sketchplugin/Contents/Sketch/links.js @@ -86,15 +86,15 @@ var exports = /******/ /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = "./src/links.js"); +/******/ return __webpack_require__(__webpack_require__.s = "./src/utilities/links.js"); /******/ }) /************************************************************************/ /******/ ({ -/***/ "./src/links.js": -/*!**********************!*\ - !*** ./src/links.js ***! - \**********************/ +/***/ "./src/utilities/links.js": +/*!********************************!*\ + !*** ./src/utilities/links.js ***! + \********************************/ /*! exports provided: default, getLibrary, joinCommunity */ /***/ (function(module, __webpack_exports__, __webpack_require__) { diff --git a/arrows.sketchplugin/Contents/Sketch/links.js.map b/arrows.sketchplugin/Contents/Sketch/links.js.map index da0dfdd..feaa18d 100644 --- a/arrows.sketchplugin/Contents/Sketch/links.js.map +++ b/arrows.sketchplugin/Contents/Sketch/links.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/links.js"],"names":["context","getLibrary","NSWorkspace","sharedWorkspace","openURL","NSURL","URLWithString","joinCommunity"],"mappings":";;;;;;AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;;;;;;;AClFA;AAAA;AAAA;AAAe,yEAASA,OAAT,EAAkB,CAAE;AAE5B,SAASC,UAAT,CAAoBD,OAApB,EAA6B;AAClCE,aAAW,CAACC,eAAZ,GAA8BC,OAA9B,CAAsCC,KAAK,CAACC,aAAN,CAAoB,qDAApB,CAAtC;AACD;AAEM,SAASC,aAAT,CAAuBP,OAAvB,EAAgC;AACrCE,aAAW,CAACC,eAAZ,GAA8BC,OAA9B,CAAsCC,KAAK,CAACC,aAAN,CAAoB,qCAApB,CAAtC;AACD,C","file":"links.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/links.js\");\n","export default function(context) {}\n\nexport function getLibrary(context) {\n NSWorkspace.sharedWorkspace().openURL(NSURL.URLWithString(\"https://github.com/faridsabitov/Sketch-Interactions\"));\n}\n\nexport function joinCommunity(context) {\n NSWorkspace.sharedWorkspace().openURL(NSURL.URLWithString(\"https://spectrum.chat/sketch-arrows\"));\n}"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/utilities/links.js"],"names":["context","getLibrary","NSWorkspace","sharedWorkspace","openURL","NSURL","URLWithString","joinCommunity"],"mappings":";;;;;;AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;;;;;;;AClFA;AAAA;AAAA;AAAe,yEAASA,OAAT,EAAkB,CAAE;AAE5B,SAASC,UAAT,CAAoBD,OAApB,EAA6B;AAClCE,aAAW,CAACC,eAAZ,GAA8BC,OAA9B,CAAsCC,KAAK,CAACC,aAAN,CAAoB,qDAApB,CAAtC;AACD;AAEM,SAASC,aAAT,CAAuBP,OAAvB,EAAgC;AACrCE,aAAW,CAACC,eAAZ,GAA8BC,OAA9B,CAAsCC,KAAK,CAACC,aAAN,CAAoB,qCAApB,CAAtC;AACD,C","file":"links.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/utilities/links.js\");\n","export default function(context) {}\n\nexport function getLibrary(context) {\n NSWorkspace.sharedWorkspace().openURL(NSURL.URLWithString(\"https://github.com/faridsabitov/Sketch-Interactions\"));\n}\n\nexport function joinCommunity(context) {\n NSWorkspace.sharedWorkspace().openURL(NSURL.URLWithString(\"https://spectrum.chat/sketch-arrows\"));\n}"],"sourceRoot":""} \ No newline at end of file diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index 33e6c82..818bf72 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -265,6 +265,8 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "drawConnection", function() { return drawConnection; }); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _utilities_styling_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utilities/styling.js */ "./src/utilities/styling.js"); + var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); @@ -315,7 +317,7 @@ function drawConnection(firstObjectID, secondObjectID, style, type, localDirecti // Style - connection.style = styleLine(connection.line, style); // Add to group + connection.style = Object(_utilities_styling_js__WEBPACK_IMPORTED_MODULE_1__["styleLine"])(connection.line, style); // Add to group addToArrowsGroup(connection.line); return connection; @@ -766,78 +768,6 @@ function updateCondition(conditionID, x, y) { } return condition.id; -} // Style - - -function styleLine(line, style) { - // Refactored - var localStyle; - - if (style != null) { - // For updates - if (getLayerStyles(style) != null && style != "Default Style") { - // If style is specified - localStyle = style; - var ownStyle = getLayerStyles(style); - line.sharedStyle = ownStyle[0]; - } else { - // if there is no specific style - localStyle = "Default Style"; - var border = line.style().addStylePartOfType(1); - border.color = MSColor.colorWithRGBADictionary({ - r: 0.89, - g: 0.89, - b: 0.89, - a: 1 - }); - border.thickness = 2; - line.style().endMarkerType = 2; - } - } else { - // For creating new - if (context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) != "Default Style") { - // we have settins almost all the time and it's not default - localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)); - line.sharedStyle = localStyle[0]; - localStyle = localStyle[0].name(); - } else { - localStyle = "Default Style"; - - var _border = line.style().addStylePartOfType(1); - - _border.color = MSColor.colorWithRGBADictionary({ - r: 0.89, - g: 0.89, - b: 0.89, - a: 1 - }); - _border.thickness = 2; - line.style().endMarkerType = 2; - } - } - - return localStyle; -} - -function getLayerStyles(name) { - // Refactored - var allStyles = docData.allLayerStyles(); - var keyword = "$arrow"; - var styles = []; - - for (var i = 0; i < allStyles.count(); i++) { - if (name == null) { - if (allStyles[i].name().includes(keyword)) { - styles.push(allStyles[i]); - } - } else { - if (allStyles[i].name() == name) { - styles.push(allStyles[i]); - } - } - } - - return styles; } // Groups @@ -880,7 +810,7 @@ function checkForGroup(groupName) { /*!***********************!*\ !*** ./src/script.js ***! \***********************/ -/*! exports provided: createAutoArrow, createRightArrow, createDownArrow, createLeftArrow, createUpArrow, createRightArrowWithCondition, createDownArrowWithCondition, createLeftArrowWithCondition, createUpArrowWithCondition, autoUpdateSelectedArrows, updateSelectedArrows, updateArtboardArrows, updateAllArrows, deleteSelectedArrows, deleteArtboardArrows, deleteAllArrows */ +/*! exports provided: createAutoArrow, createRightArrow, createDownArrow, createLeftArrow, createUpArrow, createRightArrowWithCondition, createDownArrowWithCondition, createLeftArrowWithCondition, createUpArrowWithCondition, autoUpdateSelectedArrows, updateSelectedArrows, updateArtboardArrows, updateAllArrows, deleteSelectedArrows, deleteArtboardArrows, deleteAllArrows, update */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -901,6 +831,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteSelectedArrows", function() { return deleteSelectedArrows; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteArtboardArrows", function() { return deleteArtboardArrows; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteAllArrows", function() { return deleteAllArrows; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "update", function() { return update; }); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _createArrow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./createArrow.js */ "./src/createArrow.js"); @@ -1015,10 +946,10 @@ function updateSelectedArrows(context) { } } function updateArtboardArrows(context) { - Object(_updateArrow_js__WEBPACK_IMPORTED_MODULE_2__["update"])(context, 2, false); + update(context, 2, false); } function updateAllArrows(context) { - Object(_updateArrow_js__WEBPACK_IMPORTED_MODULE_2__["update"])(context, 3, true); + update(context, 3, true); } function deleteSelectedArrows(context) { var selection = context.selection; @@ -1094,7 +1025,7 @@ function deleteArtboardArrows(context) { } } function deleteAllArrows(context) { - Object(_updateArrow_js__WEBPACK_IMPORTED_MODULE_2__["update"])(context, 3, false); + update(context, 3, false); } // let selection = context.selection; // if(selection.count() > 1 && selection[0].class() != "MSArtboardGroup"){ // // Need to find source object by ID first @@ -1139,7 +1070,6 @@ function getConnectionsData() { - function create(context, direction, isCondition) { //cc:create#1;Passing all the data var selection = context.selection; @@ -1174,6 +1104,57 @@ function create(context, direction, isCondition) { } } +function update(context, level, isUpdate) { + // 1 - selection level + // 2 - artboard level + // 3 - document level + var newConnectionsData = []; + var selection = context.selection; + var firstObjectArtboard; + var secondObjectArtboard; + + if (connectionsData.length > 0) { + for (var i = 0; i < connectionsData.length; i++) { + deleteLine(connectionsData[i].line); + + if (level == 3) { + if (isUpdate) { + Object(_updateArrow_js__WEBPACK_IMPORTED_MODULE_2__["updateArrow"])(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i); + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows are updated"); + } else { + newConnectionsData = null; + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows are deleted"); + } + } + + if (level == 2) { + firstObjectArtboard = document.getLayerWithID(connectionsData[i].firstObject); + firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID(); + secondObjectArtboard = document.getLayerWithID(connectionsData[i].secondObject); + secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID(); + + if (selection.count() == 1 && selection[0].class() == "MSArtboardGroup") { + if (firstObjectArtboard == selection[0].objectID()) { + if (secondObjectArtboard == selection[0].objectID()) { + Object(_updateArrow_js__WEBPACK_IMPORTED_MODULE_2__["updateArrow"])(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i); + } else { + newConnectionsData.push(connectionsData[i]); + } + } else { + newConnectionsData.push(connectionsData[i]); + } + } + } + + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows are updated 🚀"); + } + + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); + } else { + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is no arrows"); + } +} + function getSourceObjectFromSelection(selection, direction) { //Refactored var sourceObjectID = selection.firstObject().objectID(); @@ -1264,12 +1245,11 @@ function findConnectionIndex(firstObjectID, secondObjectID, data) { /*!****************************!*\ !*** ./src/updateArrow.js ***! \****************************/ -/*! exports provided: update, updateArrow */ +/*! exports provided: updateArrow */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "update", function() { return update; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateArrow", function() { return updateArrow; }); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); @@ -1288,56 +1268,6 @@ pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConne currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards connectionsData = getConnectionsData(); -function update(context, level, isUpdate) { - // 1 - selection level - // 2 - artboard level - // 3 - document level - var newConnectionsData = []; - var selection = context.selection; - var firstObjectArtboard; - var secondObjectArtboard; - - if (connectionsData.length > 0) { - for (var i = 0; i < connectionsData.length; i++) { - deleteLine(connectionsData[i].line); - - if (level == 3) { - if (isUpdate) { - updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i); - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows are updated"); - } else { - newConnectionsData = null; - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows are deleted"); - } - } - - if (level == 2) { - firstObjectArtboard = document.getLayerWithID(connectionsData[i].firstObject); - firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID(); - secondObjectArtboard = document.getLayerWithID(connectionsData[i].secondObject); - secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID(); - - if (selection.count() == 1 && selection[0].class() == "MSArtboardGroup") { - if (firstObjectArtboard == selection[0].objectID()) { - if (secondObjectArtboard == selection[0].objectID()) { - updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i); - } else { - newConnectionsData.push(connectionsData[i]); - } - } else { - newConnectionsData.push(connectionsData[i]); - } - } - } - - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows are updated 🚀"); - } - - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); - } else { - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is no arrows"); - } -} function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored // Need to check if we have the layers with such IDs @@ -1413,6 +1343,95 @@ function getConnectionsData() { /***/ }), +/***/ "./src/utilities/styling.js": +/*!**********************************!*\ + !*** ./src/utilities/styling.js ***! + \**********************************/ +/*! exports provided: styleLine, getLayerStyles */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "styleLine", function() { return styleLine; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLayerStyles", function() { return getLayerStyles; }); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); + +var pluginKey = "flowArrows"; +var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); +var docData = context.document.documentData(); +function styleLine(line, style) { + // Refactored + var localStyle; + + if (style != null) { + // For updates + if (getLayerStyles(style) != null && style != "Default Style") { + // If style is specified + localStyle = style; + var ownStyle = getLayerStyles(style); + line.sharedStyle = ownStyle[0]; + } else { + // if there is no specific style + localStyle = "Default Style"; + var border = line.style().addStylePartOfType(1); + border.color = MSColor.colorWithRGBADictionary({ + r: 0.89, + g: 0.89, + b: 0.89, + a: 1 + }); + border.thickness = 2; + line.style().endMarkerType = 2; + } + } else { + // For creating new + if (context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) != "Default Style") { + // we have settins almost all the time and it's not default + localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)); + line.sharedStyle = localStyle[0]; + localStyle = localStyle[0].name(); + } else { + localStyle = "Default Style"; + + var _border = line.style().addStylePartOfType(1); + + _border.color = MSColor.colorWithRGBADictionary({ + r: 0.89, + g: 0.89, + b: 0.89, + a: 1 + }); + _border.thickness = 2; + line.style().endMarkerType = 2; + } + } + + return localStyle; +} +function getLayerStyles(name) { + // Refactored + var allStyles = docData.allLayerStyles(); + var keyword = "$arrow"; + var styles = []; + + for (var i = 0; i < allStyles.count(); i++) { + if (name == null) { + if (allStyles[i].name().includes(keyword)) { + styles.push(allStyles[i]); + } + } else { + if (allStyles[i].name() == name) { + styles.push(allStyles[i]); + } + } + } + + return styles; +} + +/***/ }), + /***/ "sketch": /*!*************************!*\ !*** external "sketch" ***! diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index 763296e..b7d8547 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/createArrow.js","webpack://exports/./src/draw.js","webpack://exports/./src/script.js","webpack://exports/./src/updateArrow.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","Settings","pluginKey","document","docData","pluginData","currentParentGroup","newConnectionsData","sketch","fromNative","context","documentData","command","valueForKey_onLayer_forPluginIdentifier","currentPage","currentArtboard","getConnectionsData","createArrow","firstObjectID","secondObjectID","style","type","direction","conditionID","isCondition","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","firstObject","secondObject","condition","line","objectID","push","setValue_forKey_onLayer_forPluginIdentifier","dataArray","i","length","getLayerWithID","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","sourceObjectID","childObjectID","sourceObject","childObject","settingForKey","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","currentGroup","checkForGroup","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","layers","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","g","getImportableSymbolReferencesForDocument","name","includes","alert","symbolMaster","import","createNewInstance","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","fixGeometryWithOptions","Group","group","moveToBack","adjustToFit","id","localStyle","getLayerStyles","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","allStyles","allLayerStyles","styles","count","addLayers","locked","groupName","actionContext","createAutoArrow","create","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","autoUpdateSelectedArrows","updateSelectedArrows","selection","class","currentConnectionsData","connectionIndex","findConnectionIndex","updateArrow","message","updateArtboardArrows","update","updateAllArrows","deleteSelectedArrows","connections","deleteLine","deleteConnectionFromData","updateArrowsCounter","sketchObject","parentArtboard","deleteArtboardArrows","deleteAllArrows","getSourceObjectFromSelection","defineSourceObject","data","indexArray","String","connectionsData","level","isUpdate","firstObjectArtboard","secondObjectArtboard","lineID","conditionObject","result","remove","lineObject","selectedGroup","newConnections"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, newConnectionsData;\n\ndocument = sketch.fromNative(context.document);\ndocData = context.document.documentData();\npluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\ncurrentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\nnewConnectionsData = getConnectionsData();\n\nimport { drawConnection } from \"./draw.js\";\n\nexport function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n\n // Need to save this data to the global array\n newConnectionsData.push(connection);\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n}\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = [];\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i]);\n }\n } \n return dataArray;\n }\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}","import sketch from 'sketch';\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\n\n\nlet docData = context.document.documentData();\n// let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n// Main Function\n\nexport function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition){ // Refactored\n // Process of creating new connection \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n // Condition\n if(condition == true){\n if(conditionID != null){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY);\n }\n } else {\n connection.conditionID = null;\n }\n // connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style);\n\n // Add to group\n addToArrowsGroup(connection.line);\n \n return connection\n}\n\n// Positions\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\");\n let diffX, diffY;\n \n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n \n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n \n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n return connectionPos\n}\n\n// Drawing Types\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n \n return line;\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n \n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n \n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n \n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n \n if(firstLayerPosX Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here');\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y);\n }\n \n return symbol;\n}\n\nfunction addToConditionGroup(condition, x, y){ // Refactored\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n \n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Conditions',\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n}\n\nfunction updateCondition(conditionID, x, y){ // Refactored\nlet condition = document.getLayerWithID(conditionID);\n// log (condition)\nlet conGroup = checkForGroup(\"Conditions\") ;\nlet arGroup = checkForGroup(\"Arrows\");\nlet arGroupX = arGroup != null ? arGroup.frame().x() : 0;\nlet arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\nif(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n} else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n}\nreturn condition.id;\n}\n\n// Style\n\nfunction styleLine(line, style){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey));\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nfunction getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}\n \n// Groups\n\nfunction addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\");\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nfunction checkForGroup(groupName) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n \n return currentGroup;\n}","//\n// Variables\n//\n\nimport sketch from 'sketch';\n\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, newConnectionsData;\nif(context.document){\n //cc:remember place\n document = sketch.fromNative(context.document);\n docData = context.document.documentData();\n pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n newConnectionsData = getConnectionsData();\n} else {\n document = sketch.fromNative(context.actionContext.document);\n //cc:here is bug;well, seems like a bug in logic\n}\n \n//\n// Create Connection Function\n//\n\n\nexport function createAutoArrow(context){create(context, \"Auto\", false);}\nexport function createRightArrow(context){create(context, \"Right\", false);}\nexport function createDownArrow(context){create(context, \"Down\", false);}\nexport function createLeftArrow(context){create(context, \"Left\", false);}\nexport function createUpArrow(context){create(context, \"Up\", false);}\n\nexport function createRightArrowWithCondition(context){create(context, \"Right\", true);}\nexport function createDownArrowWithCondition(context){create(context, \"Down\", true);}\nexport function createLeftArrowWithCondition(context){create(context, \"Left\", true);}\nexport function createUpArrowWithCondition(context){create(context, \"Up\", true);}\n\nexport function autoUpdateSelectedArrows(context) { \n // const action = context.actionContext;\n\n // docData = action.document.documentData();\n // pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n // currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n // newConnectionsData = getConnectionsData();\n\n // const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer));\n // log(movedLayers[0].id);\n // log(movedLayers.length);\n\n // // if (movedLayers.filter(layer => (layer.type == 'Artboard' || (layer.type == 'SymbolMaster' && config.arrangeSymbols))).length > 0) {\n // // ArrangeArtboards(context)\n // // }\n\n // let currentConnectionsData = newConnectionsData; // Need to refactor\n\n // for(let g = 0; g < movedLayers.length; g++) {\n\n // let connectionIndex = findConnectionIndex(movedLayers[0].id, null, currentConnectionsData);\n\n // log(\"yes \"+connectionIndex);\n // if(connectionIndex.length == 0){\n \n // updateArrow(currentConnectionsData[connectionIndex[0]].firstObject, currentConnectionsData[connectionIndex[0]].secondObject, currentConnectionsData[connectionIndex[0]].style, currentConnectionsData[connectionIndex[0]].type, currentConnectionsData[connectionIndex[0]].direction, currentConnectionsData[connectionIndex[0]].line, currentConnectionsData[connectionIndex[0]].condition, currentConnectionsData[connectionIndex[0]].isCondition, connectionIndex[0]);\n // sketch.UI.message(\"Current connection is updated 🤘\");\n // } else {\n // sketch.UI.message(\"There is no connection between selected layers on the plugin data\");\n // }\n \n // }\n // context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n}\n\n \n//\n// Update Connection Function\n//\n\nexport function updateSelectedArrows(context) {\n let selection = context.selection;\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let currentConnectionsData = newConnectionsData; // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), currentConnectionsData);\n\n if(connectionIndex.length == 0){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex);\n sketch.UI.message(\"Current connection is updated 🤘\");\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\");\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n \n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\nexport function updateArtboardArrows(context) {update(context, 2, false);}\n\nexport function updateAllArrows(context) {update(context, 3, true);}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection;\n let firstObject, secondObject;\n\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n \n let connections = getConnectionsData() ;\n let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), connections);\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line);\n newConnectionsData = deleteConnectionFromData(connectionIndex);\n const updateArrowsCounter = connections.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject);\n secondObject = document.getLayerWithID(connections[i].secondObject);\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line);\n newConnectionsData = deleteConnectionFromData(i);\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\");\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\");\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection;\n let firstObject, secondObject;\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData();\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject);\n secondObject = document.getLayerWithID(connections[i].secondObject);\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line);\n newConnectionsData = deleteConnectionFromData(i);\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows from selected artboard are deleted\");\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\");\n }\n } else {\n sketch.UI.message(\"Please select one artboard\");\n }\n}\n\nexport function deleteAllArrows(context) {update(context, 3, false);}\n\n\n\n\n\n // let selection = context.selection;\n // if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // // Need to find source object by ID first\n // let currentConnectionsData = newConnectionsData; // Need to refactor\n\n // for(let g = 0; g < selection.count(); g++) {\n // if(selection[g].objectID() != selection[0].objectID()){\n // // Then need to create or update connection arrow with each selection\n // let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), currentConnectionsData);\n\n // if(connectionIndex.length == 0){\n // updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex);\n // sketch.UI.message(\"Current connection is updated 🤘\");\n // } else {\n // sketch.UI.message(\"There is no connection between selected layers on the plugin data\");\n // }\n // }\n // }\n // context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n \n // } else {\n // // When user didn't select anything\n // sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n // }\n\n\n//\n// Data\n//\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = [];\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i]);\n }\n } \n return dataArray;\n}\n\n\n//\n// Functions\n//\n\nimport { createArrow } from \"./createArrow.js\";\nimport { updateArrow } from \"./updateArrow.js\";\nimport { update } from \"./updateArrow.js\";\n\n\nfunction create(context, direction, isCondition){\n //cc:create#1;Passing all the data\n let selection = context.selection;\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction);\n let currentConnectionsData = newConnectionsData; // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), currentConnectionsData);\n \n if(connectionIndex.length == 0){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition);\n sketch.UI.message(\"New connection is created 🚀\");\n } else {\n // Need to remake the arrow condition\n if(updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex)){\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].condition, isCondition);\n }\n sketch.UI.message(\"Current connection is updated 🤘\");\n }\n }\n }\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID();\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction);\n }\n }\n \n return sourceObjectID;\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let sourceObjectID;\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n return sourceObjectID;\n}\n\nfunction findConnectionIndex(firstObjectID, secondObjectID, data){\n let indexArray = [] ;\n firstObjectID = String(firstObjectID);\n secondObjectID = String(secondObjectID);\n \n if(pluginData){\n // If we have database, need to check for connections\n for(let y = 0; y < data.length; y++){\n if(firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject){\n if(secondObjectID == null){\n // When we need to find connection between two objects\n if(secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject){\n indexArray[0] = y;\n } \n } else {\n // When we need to find a connection for one object only\n indexArray.push(y);\n }\n }\n }\n }\n return indexArray;\n}\n\n\n// const track = require(\"sketch-module-google-analytics\")\n// track(\"UA-138226597-1\", \"event\", {\n// ec: \"command\", \n// ea: \"create\", \n// ev: \"my-command\"\n// });\n\n\n\n\n\n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, connectionsData;\n\ndocument = sketch.fromNative(context.document);\ndocData = context.document.documentData();\npluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\ncurrentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\nconnectionsData = getConnectionsData();\n\n\n\nexport function update(context, level, isUpdate) {\n // 1 - selection level\n // 2 - artboard level\n // 3 - document level\n let newConnectionsData = [];\n let selection = context.selection;\n let firstObjectArtboard;\n let secondObjectArtboard;\n\n\n\n if (connectionsData.length > 0) {\n for (let i = 0; i < connectionsData.length; i++) {\n deleteLine(connectionsData[i].line);\n \n if (level == 3) {\n if(isUpdate){\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n sketch.UI.message(\"All arrows are updated\");\n } else {\n newConnectionsData = null\n sketch.UI.message(\"All arrows are deleted\");\n }\n \n }\n if (level == 2) {\n firstObjectArtboard = document.getLayerWithID(connectionsData[i].firstObject);\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID();\n secondObjectArtboard = document.getLayerWithID(connectionsData[i].secondObject);\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID();\n\n if (selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\") {\n\n if (firstObjectArtboard == selection[0].objectID()) {\n if (secondObjectArtboard == selection[0].objectID()) {\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n }\n }\n sketch.UI.message(\"All arrows are updated 🚀\");\n \n \n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n sketch.UI.message(\"There is no arrows\");\n }\n\n\n\n}\n\nexport function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let conditionObject = document.getLayerWithID(conditionID);\n let result = false;\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID);\n if(conditionID && !isCondition){\n if(conditionObject){conditionObject.remove();}\n }\n \n connectionsData = deleteConnectionFromData(connectionIndex);\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n result = true;\n }\n\n return result;\n}\n\nfunction deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n\nfunction deleteConnectionFromData(connectionIndex){ // Refactored\n let newConnections = [];\n if(pluginData){\n // If we have database\n let connections = pluginData;\n \n for (let i = 0; i < connections.length; i ++) {\n // Updating all connections without deleted one\n if(i != connectionIndex){\n newConnections.push(connections[i]);\n }\n }\n }\n return newConnections;\n}\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = [];\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i]);\n }\n } \n return dataArray;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/createArrow.js","webpack://exports/./src/draw.js","webpack://exports/./src/script.js","webpack://exports/./src/updateArrow.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","Settings","pluginKey","document","docData","pluginData","currentParentGroup","newConnectionsData","sketch","fromNative","context","documentData","command","valueForKey_onLayer_forPluginIdentifier","currentPage","currentArtboard","getConnectionsData","createArrow","firstObjectID","secondObjectID","style","type","direction","conditionID","isCondition","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","firstObject","secondObject","condition","line","objectID","push","setValue_forKey_onLayer_forPluginIdentifier","dataArray","i","length","getLayerWithID","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","sourceObjectID","childObjectID","sourceObject","childObject","settingForKey","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","currentGroup","checkForGroup","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","layers","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","g","getImportableSymbolReferencesForDocument","name","includes","alert","symbolMaster","import","createNewInstance","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","fixGeometryWithOptions","Group","group","moveToBack","adjustToFit","id","addLayers","locked","groupName","count","actionContext","createAutoArrow","create","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","autoUpdateSelectedArrows","updateSelectedArrows","selection","class","currentConnectionsData","connectionIndex","findConnectionIndex","updateArrow","message","updateArtboardArrows","update","updateAllArrows","deleteSelectedArrows","connections","deleteLine","deleteConnectionFromData","updateArrowsCounter","sketchObject","parentArtboard","deleteArtboardArrows","deleteAllArrows","getSourceObjectFromSelection","level","isUpdate","firstObjectArtboard","secondObjectArtboard","connectionsData","defineSourceObject","data","indexArray","String","lineID","conditionObject","result","remove","lineObject","selectedGroup","newConnections","localStyle","getLayerStyles","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","allStyles","allLayerStyles","styles"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, newConnectionsData;\n\ndocument = sketch.fromNative(context.document);\ndocData = context.document.documentData();\npluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\ncurrentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\nnewConnectionsData = getConnectionsData();\n\nimport { drawConnection } from \"./draw.js\";\n\nexport function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n\n // Need to save this data to the global array\n newConnectionsData.push(connection);\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n}\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = [];\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i]);\n }\n } \n return dataArray;\n }\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}","import sketch from 'sketch';\nimport { styleLine } from \"./utilities/styling.js\";\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\n\n\nlet docData = context.document.documentData();\n// let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n// Main Function\n\nexport function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition){ // Refactored\n // Process of creating new connection \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n // Condition\n if(condition == true){\n if(conditionID != null){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY);\n }\n } else {\n connection.conditionID = null;\n }\n // connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style);\n\n // Add to group\n addToArrowsGroup(connection.line);\n \n return connection\n}\n\n// Positions\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\");\n let diffX, diffY;\n \n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n \n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n \n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n return connectionPos\n}\n\n// Drawing Types\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n \n return line;\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n \n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n \n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n \n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n \n if(firstLayerPosX Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here');\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y);\n }\n \n return symbol;\n}\n\nfunction addToConditionGroup(condition, x, y){ // Refactored\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n \n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Conditions',\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n}\n\nfunction updateCondition(conditionID, x, y){ // Refactored\nlet condition = document.getLayerWithID(conditionID);\n// log (condition)\nlet conGroup = checkForGroup(\"Conditions\") ;\nlet arGroup = checkForGroup(\"Arrows\");\nlet arGroupX = arGroup != null ? arGroup.frame().x() : 0;\nlet arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\nif(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n} else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n}\nreturn condition.id;\n}\n \n// Groups\n\nfunction addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\");\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nfunction checkForGroup(groupName) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n \n return currentGroup;\n}","//\n// Variables\n//\n\nimport sketch from 'sketch';\n\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, newConnectionsData;\nif(context.document){\n //cc:remember place\n document = sketch.fromNative(context.document);\n docData = context.document.documentData();\n pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n newConnectionsData = getConnectionsData();\n} else {\n document = sketch.fromNative(context.actionContext.document);\n //cc:here is bug;well, seems like a bug in logic\n}\n \n//\n// Create Connection Function\n//\n\n\nexport function createAutoArrow(context){create(context, \"Auto\", false);}\nexport function createRightArrow(context){create(context, \"Right\", false);}\nexport function createDownArrow(context){create(context, \"Down\", false);}\nexport function createLeftArrow(context){create(context, \"Left\", false);}\nexport function createUpArrow(context){create(context, \"Up\", false);}\n\nexport function createRightArrowWithCondition(context){create(context, \"Right\", true);}\nexport function createDownArrowWithCondition(context){create(context, \"Down\", true);}\nexport function createLeftArrowWithCondition(context){create(context, \"Left\", true);}\nexport function createUpArrowWithCondition(context){create(context, \"Up\", true);}\n\nexport function autoUpdateSelectedArrows(context) { \n // const action = context.actionContext;\n\n // docData = action.document.documentData();\n // pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n // currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n // newConnectionsData = getConnectionsData();\n\n // const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer));\n // log(movedLayers[0].id);\n // log(movedLayers.length);\n\n // // if (movedLayers.filter(layer => (layer.type == 'Artboard' || (layer.type == 'SymbolMaster' && config.arrangeSymbols))).length > 0) {\n // // ArrangeArtboards(context)\n // // }\n\n // let currentConnectionsData = newConnectionsData; // Need to refactor\n\n // for(let g = 0; g < movedLayers.length; g++) {\n\n // let connectionIndex = findConnectionIndex(movedLayers[0].id, null, currentConnectionsData);\n\n // log(\"yes \"+connectionIndex);\n // if(connectionIndex.length == 0){\n \n // updateArrow(currentConnectionsData[connectionIndex[0]].firstObject, currentConnectionsData[connectionIndex[0]].secondObject, currentConnectionsData[connectionIndex[0]].style, currentConnectionsData[connectionIndex[0]].type, currentConnectionsData[connectionIndex[0]].direction, currentConnectionsData[connectionIndex[0]].line, currentConnectionsData[connectionIndex[0]].condition, currentConnectionsData[connectionIndex[0]].isCondition, connectionIndex[0]);\n // sketch.UI.message(\"Current connection is updated 🤘\");\n // } else {\n // sketch.UI.message(\"There is no connection between selected layers on the plugin data\");\n // }\n \n // }\n // context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n}\n\n \n//\n// Update Connection Function\n//\n\nexport function updateSelectedArrows(context) {\n let selection = context.selection;\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let currentConnectionsData = newConnectionsData; // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), currentConnectionsData);\n\n if(connectionIndex.length == 0){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex);\n sketch.UI.message(\"Current connection is updated 🤘\");\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\");\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n \n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\nexport function updateArtboardArrows(context) {update(context, 2, false);}\n\nexport function updateAllArrows(context) {update(context, 3, true);}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection;\n let firstObject, secondObject;\n\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n \n let connections = getConnectionsData() ;\n let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), connections);\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line);\n newConnectionsData = deleteConnectionFromData(connectionIndex);\n const updateArrowsCounter = connections.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject);\n secondObject = document.getLayerWithID(connections[i].secondObject);\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line);\n newConnectionsData = deleteConnectionFromData(i);\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\");\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\");\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection;\n let firstObject, secondObject;\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData();\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject);\n secondObject = document.getLayerWithID(connections[i].secondObject);\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line);\n newConnectionsData = deleteConnectionFromData(i);\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows from selected artboard are deleted\");\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\");\n }\n } else {\n sketch.UI.message(\"Please select one artboard\");\n }\n}\n\nexport function deleteAllArrows(context) {update(context, 3, false);}\n\n\n\n\n\n // let selection = context.selection;\n // if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // // Need to find source object by ID first\n // let currentConnectionsData = newConnectionsData; // Need to refactor\n\n // for(let g = 0; g < selection.count(); g++) {\n // if(selection[g].objectID() != selection[0].objectID()){\n // // Then need to create or update connection arrow with each selection\n // let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), currentConnectionsData);\n\n // if(connectionIndex.length == 0){\n // updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex);\n // sketch.UI.message(\"Current connection is updated 🤘\");\n // } else {\n // sketch.UI.message(\"There is no connection between selected layers on the plugin data\");\n // }\n // }\n // }\n // context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n \n // } else {\n // // When user didn't select anything\n // sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n // }\n\n\n//\n// Data\n//\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = [];\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i]);\n }\n } \n return dataArray;\n}\n\n\n//\n// Functions\n//\n\nimport { createArrow } from \"./createArrow.js\";\nimport { updateArrow } from \"./updateArrow.js\";\n\n\nfunction create(context, direction, isCondition){\n //cc:create#1;Passing all the data\n let selection = context.selection;\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction);\n let currentConnectionsData = newConnectionsData; // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), currentConnectionsData);\n \n if(connectionIndex.length == 0){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition);\n sketch.UI.message(\"New connection is created 🚀\");\n } else {\n // Need to remake the arrow condition\n if(updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex)){\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].condition, isCondition);\n }\n sketch.UI.message(\"Current connection is updated 🤘\");\n }\n }\n }\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\nexport function update(context, level, isUpdate) {\n // 1 - selection level\n // 2 - artboard level\n // 3 - document level\n let newConnectionsData = [];\n let selection = context.selection;\n let firstObjectArtboard;\n let secondObjectArtboard;\n\n if (connectionsData.length > 0) {\n for (let i = 0; i < connectionsData.length; i++) {\n deleteLine(connectionsData[i].line);\n \n if (level == 3) {\n if(isUpdate){\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n sketch.UI.message(\"All arrows are updated\");\n } else {\n newConnectionsData = null\n sketch.UI.message(\"All arrows are deleted\");\n }\n }\n if (level == 2) {\n firstObjectArtboard = document.getLayerWithID(connectionsData[i].firstObject);\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID();\n secondObjectArtboard = document.getLayerWithID(connectionsData[i].secondObject);\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID();\n\n if (selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\") {\n\n if (firstObjectArtboard == selection[0].objectID()) {\n if (secondObjectArtboard == selection[0].objectID()) {\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n }\n }\n sketch.UI.message(\"All arrows are updated 🚀\");\n \n \n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n sketch.UI.message(\"There is no arrows\");\n }\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID();\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction);\n }\n }\n \n return sourceObjectID;\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let sourceObjectID;\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n return sourceObjectID;\n}\n\nfunction findConnectionIndex(firstObjectID, secondObjectID, data){\n let indexArray = [] ;\n firstObjectID = String(firstObjectID);\n secondObjectID = String(secondObjectID);\n \n if(pluginData){\n // If we have database, need to check for connections\n for(let y = 0; y < data.length; y++){\n if(firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject){\n if(secondObjectID == null){\n // When we need to find connection between two objects\n if(secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject){\n indexArray[0] = y;\n } \n } else {\n // When we need to find a connection for one object only\n indexArray.push(y);\n }\n }\n }\n }\n return indexArray;\n}\n\n\n// const track = require(\"sketch-module-google-analytics\")\n// track(\"UA-138226597-1\", \"event\", {\n// ec: \"command\", \n// ea: \"create\", \n// ev: \"my-command\"\n// });\n\n\n\n\n\n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, connectionsData;\n\ndocument = sketch.fromNative(context.document);\ndocData = context.document.documentData();\npluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\ncurrentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\nconnectionsData = getConnectionsData();\n\n\n\nexport function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let conditionObject = document.getLayerWithID(conditionID);\n let result = false;\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID);\n if(conditionID && !isCondition){\n if(conditionObject){conditionObject.remove();}\n }\n \n connectionsData = deleteConnectionFromData(connectionIndex);\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n result = true;\n }\n\n return result;\n}\n\nfunction deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n\nfunction deleteConnectionFromData(connectionIndex){ // Refactored\n let newConnections = [];\n if(pluginData){\n // If we have database\n let connections = pluginData;\n \n for (let i = 0; i < connections.length; i ++) {\n // Updating all connections without deleted one\n if(i != connectionIndex){\n newConnections.push(connections[i]);\n }\n }\n }\n return newConnections;\n}\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = [];\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i]);\n }\n } \n return dataArray;\n}","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\n\n\nlet docData = context.document.documentData();\n\nexport function styleLine(line, style){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey));\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/arrows.sketchplugin/Contents/Sketch/settings.js b/arrows.sketchplugin/Contents/Sketch/settings.js index 21122ef..89168f6 100644 --- a/arrows.sketchplugin/Contents/Sketch/settings.js +++ b/arrows.sketchplugin/Contents/Sketch/settings.js @@ -103,6 +103,8 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "settings", function() { return settings; }); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _utilities_styling_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utilities/styling.js */ "./src/utilities/styling.js"); + var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); @@ -198,7 +200,7 @@ function settings(context) { function setActiveStyleSetting(arrowStylingField) { var docSettings = context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey); - var styles = getLayerStyles(null); + var styles = Object(_utilities_styling_js__WEBPACK_IMPORTED_MODULE_1__["getLayerStyles"])(null); if (docSettings) { // We have info about the settings in the current document @@ -307,8 +309,76 @@ function alertCheckbox(message, state, x, y, width, height) { return checkbox; } +/***/ }), + +/***/ "./src/utilities/styling.js": +/*!**********************************!*\ + !*** ./src/utilities/styling.js ***! + \**********************************/ +/*! exports provided: styleLine, getLayerStyles */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "styleLine", function() { return styleLine; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLayerStyles", function() { return getLayerStyles; }); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); + +var pluginKey = "flowArrows"; +var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); +var docData = context.document.documentData(); +function styleLine(line, style) { + // Refactored + var localStyle; + + if (style != null) { + // For updates + if (getLayerStyles(style) != null && style != "Default Style") { + // If style is specified + localStyle = style; + var ownStyle = getLayerStyles(style); + line.sharedStyle = ownStyle[0]; + } else { + // if there is no specific style + localStyle = "Default Style"; + var border = line.style().addStylePartOfType(1); + border.color = MSColor.colorWithRGBADictionary({ + r: 0.89, + g: 0.89, + b: 0.89, + a: 1 + }); + border.thickness = 2; + line.style().endMarkerType = 2; + } + } else { + // For creating new + if (context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) != "Default Style") { + // we have settins almost all the time and it's not default + localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)); + line.sharedStyle = localStyle[0]; + localStyle = localStyle[0].name(); + } else { + localStyle = "Default Style"; + + var _border = line.style().addStylePartOfType(1); + + _border.color = MSColor.colorWithRGBADictionary({ + r: 0.89, + g: 0.89, + b: 0.89, + a: 1 + }); + _border.thickness = 2; + line.style().endMarkerType = 2; + } + } + + return localStyle; +} function getLayerStyles(name) { - // Duplicate + // Refactored var allStyles = docData.allLayerStyles(); var keyword = "$arrow"; var styles = []; diff --git a/arrows.sketchplugin/Contents/Sketch/settings.js.map b/arrows.sketchplugin/Contents/Sketch/settings.js.map index 52e7ed0..08409a7 100644 --- a/arrows.sketchplugin/Contents/Sketch/settings.js.map +++ b/arrows.sketchplugin/Contents/Sketch/settings.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/settings.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","Settings","pluginKey","docData","pluginData","currentParentGroup","newConnectionsData","document","sketch","fromNative","context","documentData","command","valueForKey_onLayer_forPluginIdentifier","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","settingForKey","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","setValue_forKey_onLayer_forPluginIdentifier","views","subviews","title","setSettingForKey","intValue","state","message","docSettings","styles","getLayerStyles","addItemWithTitle","i","length","name","docTypeSettings","lastItem","setState","setMessageText","addButtonWithTitle","x","y","width","height","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","allStyles","allLayerStyles","keyword","count","includes","push"],"mappings":";;;;;;AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;;;;;;;AClFA;AAAA;AAAA;AAAA;AAAA;;AACA,IAAIA,EAAE,GAAGC,mBAAO,CAAC,4BAAD,CAAhB;;AACA,IAAIC,QAAQ,GAAGD,mBAAO,CAAC,wCAAD,CAAtB;;AAEA,IAAME,SAAS,GAAG,YAAlB;AAEA,IAAIC,OAAJ,EAAaC,UAAb,EAAyBC,kBAAzB,EAA6CC,kBAA7C;AAEA,IAAIC,QAAQ,GAAGC,6CAAM,CAACC,UAAP,CAAkBC,OAAO,CAACH,QAA1B,CAAf;AACAJ,OAAO,GAAGO,OAAO,CAACH,QAAR,CAAiBI,YAAjB,EAAV;AACAP,UAAU,GAAGM,OAAO,CAACE,OAAR,CAAgBC,uCAAhB,CACX,kBADW,EAEXV,OAFW,EAGXD,SAHW,CAAb;AAMO,SAASY,QAAT,CAAkBJ,OAAlB,EAA2B;AAChC,MAAIK,KAAK,GAAGC,cAAc,CAACC,GAAf,EAAZ;AACA,MAAMC,SAAS,GAAG,GAAlB;AACA,MAAMC,UAAU,GAAG,GAAnB,CAHgC,CAKhC;;AACAJ,OAAK,GAAGK,UAAU,CAACL,KAAD,EAAQG,SAAR,EAAmBC,UAAnB,CAAlB;AACA,MAAIE,IAAI,GAAGC,MAAM,CAACC,KAAP,GAAeC,aAAf,CACTC,UAAU,CAAC,CAAD,EAAI,CAAJ,EAAOP,SAAP,EAAkBC,UAAlB,CADD,CAAX;AAGAJ,OAAK,CAACW,gBAAN,CAAuBL,IAAvB,EAVgC,CAYhC;;AACA,MAAIM,eAAe,GAAGC,UAAU,CAC9B,aAD8B,EAE9B,IAF8B,EAG9B,CAAC,CAH6B,EAI9BT,UAAU,GAAG,EAJiB,EAK9B,GAL8B,EAM9B,EAN8B,CAAhC;AAQAE,MAAI,CAACQ,UAAL,CAAgBF,eAAhB,EArBgC,CAuBhC;;AACA,MAAIG,iBAAiB,GAAGC,aAAa,CAACR,KAAd,GAAsBC,aAAtB,CACtBC,UAAU,CAAC,CAAC,CAAF,EAAKN,UAAU,GAAG,EAAlB,EAAsB,GAAtB,EAA2B,EAA3B,CADY,CAAxB;AAGAa,uBAAqB,CAACF,iBAAD,CAArB;AACAT,MAAI,CAACQ,UAAL,CAAgBC,iBAAhB,EA5BgC,CA8BhC;;AACA,MAAIG,mBAAmB,GAAGL,UAAU,CAClC,yGADkC,EAElC,KAFkC,EAGlC,CAAC,CAHiC,EAIlCT,UAAU,GAAG,EAJqB,EAKlC,GALkC,EAMlC,EANkC,CAApC;AAQAE,MAAI,CAACQ,UAAL,CAAgBI,mBAAhB,EAvCgC,CAyChC;;AACA,MAAIC,cAAc,GAAGN,UAAU,CAC7B,YAD6B,EAE7B,IAF6B,EAG7B,CAAC,CAH4B,EAI7BT,UAAU,GAAG,GAJgB,EAK7B,GAL6B,EAM7B,EAN6B,CAA/B;AAQAE,MAAI,CAACQ,UAAL,CAAgBK,cAAhB,EAlDgC,CAoDhC;;AACA,MAAIC,cAAc,GAAGJ,aAAa,CAACR,KAAd,GAAsBC,aAAtB,CACnBC,UAAU,CAAC,CAAC,CAAF,EAAKN,UAAU,GAAG,GAAlB,EAAuB,GAAvB,EAA4B,EAA5B,CADS,CAArB;AAGAiB,sBAAoB,CAACD,cAAD,CAApB;AACAd,MAAI,CAACQ,UAAL,CAAgBM,cAAhB,EAzDgC,CA2DhC;;AACA,MAAIE,kBAAkB,GAAGT,UAAU,CACjC,0DADiC,EAEjC,KAFiC,EAGjC,CAAC,CAHgC,EAIjCT,UAAU,GAAG,GAJoB,EAKjC,GALiC,EAMjC,EANiC,CAAnC;AAQAE,MAAI,CAACQ,UAAL,CAAgBQ,kBAAhB,EApEgC,CAsEhC;;AACA,MAAIC,iBAAiB,GAAGV,UAAU,CAChC,eADgC,EAEhC,IAFgC,EAGhC,CAAC,CAH+B,EAIhCT,UAAU,GAAG,GAJmB,EAKhC,GALgC,EAMhC,EANgC,CAAlC;AAQAE,MAAI,CAACQ,UAAL,CAAgBS,iBAAhB,EA/EgC,CAiFhC;;AACA,MAAIC,mBAAmB,GAAGX,UAAU,CAClC,IADkC,EAElC,IAFkC,EAGlC,EAHkC,EAIlCT,UAAU,GAAG,GAJqB,EAKlC,GALkC,EAMlC,EANkC,CAApC;AAQAE,MAAI,CAACQ,UAAL,CAAgBU,mBAAhB,EA1FgC,CA4FhC;;AACA,MAAIC,iBAAiB,GAAGC,WAAW,CAAClB,KAAZ,GAAoBC,aAApB,CACtBC,UAAU,CAAC,CAAC,CAAF,EAAKN,UAAU,GAAG,GAAlB,EAAuB,EAAvB,EAA2B,EAA3B,CADY,CAAxB;AAGA,MAAIuB,SAAS,GAAGC,iBAAiB,CAACpB,KAAlB,GACbqB,IADa,GAEbC,WAFa,EAAhB;AAGAL,mBAAiB,CAACM,cAAlB,CACEC,MAAM,CAAC9C,QAAQ,CAAC+C,aAAT,CAAuB,cAAvB,CAAD,CADR;AAGAR,mBAAiB,CAACS,YAAlB,CAA+BP,SAA/B;AACArB,MAAI,CAACQ,UAAL,CAAgBW,iBAAhB,EAvGgC,CAyGhC;;AACA,MAAIU,mBAAmB,GAAGC,SAAS,CAAC5B,KAAV,GAAkBC,aAAlB,CACxBC,UAAU,CAAC,EAAD,EAAKN,UAAU,GAAG,GAAlB,EAAuB,EAAvB,EAA2B,EAA3B,CADc,CAA1B;AAGA+B,qBAAmB,CAACE,WAApB,CAAgC,IAAhC;AACAF,qBAAmB,CAACG,WAApB,CAAgC,CAAhC;AACAH,qBAAmB,CAACI,aAApB,CAAkC,KAAlC;AACAJ,qBAAmB,CAACK,aAApB,CAAkC,IAAlC;AACAL,qBAAmB,CAACM,sBAApB,CAA2C,UAASC,MAAT,EAAiB;AAC1D,QAAIC,KAAK,GAAG,IAAID,MAAM,CAACE,YAAP,EAAhB;AACAnB,qBAAiB,CAACM,cAAlB,CAAiCC,MAAM,CAACW,KAAD,CAAvC;AACD,GAHD;AAKArC,MAAI,CAACQ,UAAL,CAAgBqB,mBAAhB,EAtHgC,CAuHhC;AAEA;;AACA,MAAIU,qBAAqB,GAAGhC,UAAU,CACpC,mIADoC,EAEpC,KAFoC,EAGpC,CAAC,CAHmC,EAIpCT,UAAU,GAAG,GAJuB,EAKpC,GALoC,EAMpC,EANoC,CAAtC;AAQAE,MAAI,CAACQ,UAAL,CAAgB+B,qBAAhB,EAlIgC,CAoIhC;;AACA,MAAIC,kBAAkB,GAAGjC,UAAU,CACjC,gBADiC,EAEjC,IAFiC,EAGjC,CAAC,CAHgC,EAIjCT,UAAU,GAAG,GAJoB,EAKjC,GALiC,EAMjC,EANiC,CAAnC;AAQAE,MAAI,CAACQ,UAAL,CAAgBgC,kBAAhB,EA7IgC,CA+IhC;;AACA,MAAIC,QAAQ,GAAGC,aAAa,CAC1B,yBAD0B,EAE1B,KAF0B,EAG1B,CAAC,CAHyB,EAI1B5C,UAAU,GAAG,GAJa,EAK1B,GAL0B,EAM1B,EAN0B,CAA5B;AAQAE,MAAI,CAACQ,UAAL,CAAgBiC,QAAhB,EAxJgC,CA0JhC;;AACA,MAAIE,kBAAkB,GAAGpC,UAAU,CACjC,gEADiC,EAEjC,KAFiC,EAGjC,CAAC,CAHgC,EAIjCT,UAAU,GAAG,GAJoB,EAKjC,GALiC,EAMjC,EANiC,CAAnC;AAQAE,MAAI,CAACQ,UAAL,CAAgBmC,kBAAhB,EAnKgC,CAqKhC;;AACA,MAAIC,eAAe,GAAGrC,UAAU,CAC9B,uDAD8B,EAE9B,IAF8B,EAG9B,CAAC,CAH6B,EAI9BT,UAAU,GAAG,GAJiB,EAK9B,GAL8B,EAM9B,EAN8B,CAAhC;AAQAE,MAAI,CAACQ,UAAL,CAAgBoC,eAAhB,EA9KgC,CAgLhC;AAEA;;AACA,MAAIC,aAAa,GAAGnD,KAAK,CAACoD,QAAN,EAApB;;AAEA,MAAID,aAAa,IAAIE,wBAArB,EAA+C;AAC7C;AACA;AACA1D,WAAO,CAACE,OAAR,CAAgByD,2CAAhB,CACEtD,KAAK,CACFuD,KADH,GACW,CADX,EAEGC,QAFH,GAEc,CAFd,EAGGC,KAHH,EADF,EAKE,YALF,EAMErE,OANF,EAOED,SAPF;AASAD,YAAQ,CAACwE,gBAAT,CACE,WADF,EAEE1D,KAAK,CACFuD,KADH,GACW,CADX,EAEGC,QAFH,GAEc,CAFd,EAGGC,KAHH,EAFF;AAOAvE,YAAQ,CAACwE,gBAAT,CACE,cADF,EAEE1D,KAAK,CACFuD,KADH,GACW,CADX,EAEGC,QAFH,GAEc,CAFd,EAGGG,QAHH,EAFF;AAOAzE,YAAQ,CAACwE,gBAAT,CACE,WADF,EAEE1D,KAAK,CACFuD,KADH,GACW,CADX,EAEGC,QAFH,GAEc,EAFd,EAGGI,KAHH,EAFF;AAOA5E,MAAE,CAAC6E,OAAH,CAAW,yBAAX;AACD;AACF,C,CAED;;AAEA,SAAS5C,qBAAT,CAA+BF,iBAA/B,EAAkD;AAChD,MAAI+C,WAAW,GAAGnE,OAAO,CAACE,OAAR,CAAgBC,uCAAhB,CAChB,YADgB,EAEhBV,OAFgB,EAGhBD,SAHgB,CAAlB;AAKA,MAAI4E,MAAM,GAAGC,cAAc,CAAC,IAAD,CAA3B;;AAEA,MAAIF,WAAJ,EAAiB;AACf;AAEA,QAAIA,WAAW,IAAI,eAAnB,EAAoC;AAClC;AACA/C,uBAAiB,CAACkD,gBAAlB,CAAmCH,WAAnC;AACA/C,uBAAiB,CAACkD,gBAAlB,CAAmC,eAAnC;;AACA,WAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGH,MAAM,CAACI,MAA3B,EAAmCD,CAAC,EAApC,EAAwC;AACtC,YAAIH,MAAM,CAACG,CAAD,CAAN,CAAUE,IAAV,MAAoBN,WAAxB,EAAqC;AACnC/C,2BAAiB,CAACkD,gBAAlB,CAAmCF,MAAM,CAACG,CAAD,CAAN,CAAUE,IAAV,EAAnC;AACD;AACF;AACF,KATD,MASO;AACL;AACArD,uBAAiB,CAACkD,gBAAlB,CAAmC,eAAnC;;AACA,WAAK,IAAIC,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAGH,MAAM,CAACI,MAA3B,EAAmCD,EAAC,EAApC,EAAwC;AACtCnD,yBAAiB,CAACkD,gBAAlB,CAAmCF,MAAM,CAACG,EAAD,CAAN,CAAUE,IAAV,EAAnC;AACD;AACF;AACF,GAnBD,MAmBO;AACLrD,qBAAiB,CAACkD,gBAAlB,CAAmC,eAAnC;;AACA,SAAK,IAAIC,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAGH,MAAM,CAACI,MAA3B,EAAmCD,GAAC,EAApC,EAAwC;AACtCnD,uBAAiB,CAACkD,gBAAlB,CAAmCF,MAAM,CAACG,GAAD,CAAN,CAAUE,IAAV,EAAnC;AACD;AACF;AACF;;AAED,SAAS/C,oBAAT,CAA8BD,cAA9B,EAA8C;AAC5C,MAAIiD,eAAe,GAAGnF,QAAQ,CAAC+C,aAAT,CAAuB,WAAvB,CAAtB;;AAEA,MAAIoC,eAAJ,EAAqB;AACnB;AAEA,QAAIA,eAAe,IAAI,QAAvB,EAAiC;AAC/BjD,oBAAc,CAAC6C,gBAAf,CAAgC,QAAhC;AACA7C,oBAAc,CAACkD,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACAnD,oBAAc,CAAC6C,gBAAf,CAAgC,QAAhC;AACA7C,oBAAc,CAACkD,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACAnD,oBAAc,CAAC6C,gBAAf,CAAgC,UAAhC;AACA7C,oBAAc,CAACkD,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACD;;AAED,QAAIF,eAAe,IAAI,QAAvB,EAAiC;AAC/BjD,oBAAc,CAAC6C,gBAAf,CAAgC,QAAhC;AACA7C,oBAAc,CAACkD,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACAnD,oBAAc,CAAC6C,gBAAf,CAAgC,UAAhC;AACA7C,oBAAc,CAACkD,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACAnD,oBAAc,CAAC6C,gBAAf,CAAgC,QAAhC;AACA7C,oBAAc,CAACkD,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACD;;AAED,QAAIF,eAAe,IAAI,UAAvB,EAAmC;AACjCjD,oBAAc,CAAC6C,gBAAf,CAAgC,UAAhC;AACA7C,oBAAc,CAACkD,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACAnD,oBAAc,CAAC6C,gBAAf,CAAgC,QAAhC;AACA7C,oBAAc,CAACkD,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACAnD,oBAAc,CAAC6C,gBAAf,CAAgC,QAAhC;AACA7C,oBAAc,CAACkD,QAAf,GAA0BC,QAA1B,CAAmC,CAAnC;AACD;AACF,GA7BD,MA6BO;AACL;AACAnD,kBAAc,CAAC6C,gBAAf,CAAgC,QAAhC;AACA7C,kBAAc,CAAC6C,gBAAf,CAAgC,QAAhC;AACA7C,kBAAc,CAAC6C,gBAAf,CAAgC,UAAhC;AACD;AACF;;AAED,SAAS5D,UAAT,CAAoBL,KAApB,EAA2BG,SAA3B,EAAsCC,UAAtC,EAAkD;AAChD;AACAJ,OAAK,CAACwE,cAAN,CAAqB,uBAArB,EAFgD,CAIhD;;AACAxE,OAAK,CAACyE,kBAAN,CAAyB,iBAAzB;AACAzE,OAAK,CAACyE,kBAAN,CAAyB,QAAzB;AAEA,SAAOzE,KAAP;AACD;;AAED,SAASa,UAAT,CAAoBgD,OAApB,EAA6BD,KAA7B,EAAoCc,CAApC,EAAuCC,CAAvC,EAA0CC,KAA1C,EAAiDC,MAAjD,EAAyD;AACvD,MAAIC,SAAS,GAAGpD,WAAW,CAAClB,KAAZ,GAAoBC,aAApB,CACdC,UAAU,CAACgE,CAAD,EAAIC,CAAJ,EAAOC,KAAP,EAAcC,MAAd,CADI,CAAhB;AAIAC,WAAS,CAAC/C,cAAV,CAAyB8B,OAAzB;AACAiB,WAAS,CAACC,aAAV,CAAwB,KAAxB;AACAD,WAAS,CAACE,kBAAV,CAA6B,KAA7B;AACAF,WAAS,CAACG,UAAV,CAAqB,KAArB;;AAEA,MAAIrB,KAAK,IAAI,KAAb,EAAoB;AAClBkB,aAAS,CAACI,SAAV,GAAsBC,OAAO,CAACC,wBAAR,EAAtB;AACD;;AAED,SAAON,SAAP;AACD;;AAED,SAAS9B,aAAT,CAAuBa,OAAvB,EAAgCD,KAAhC,EAAuCc,CAAvC,EAA0CC,CAA1C,EAA6CC,KAA7C,EAAoDC,MAApD,EAA4D;AAC1D,MAAI9B,QAAQ,GAAGsC,QAAQ,CAAC7E,KAAT,GAAiBC,aAAjB,CACbC,UAAU,CAACgE,CAAD,EAAIC,CAAJ,EAAOC,KAAP,EAAcC,MAAd,CADG,CAAf;AAIA9B,UAAQ,CAACuC,aAAT,CAAuBC,cAAvB;AACAxC,UAAQ,CAACyC,aAAT,CAAuB,CAAvB;AACAzC,UAAQ,CAAC0C,QAAT,CAAkB5B,OAAlB;;AACA,MAAI3E,QAAQ,CAAC+C,aAAT,CAAuB,WAAvB,CAAJ,EAAyC;AACvC,QAAIyD,YAAY,GAAGxG,QAAQ,CAAC+C,aAAT,CAAuB,WAAvB,CAAnB;AACAc,YAAQ,CAACwB,QAAT,CAAkBmB,YAAlB;AACD,GAHD,MAGO;AACL3C,YAAQ,CAACwB,QAAT,CAAkBX,KAAlB;AACD;;AAED,SAAOb,QAAP;AACD;;AAED,SAASiB,cAAT,CAAwBI,IAAxB,EAA8B;AAC5B;AACA,MAAIuB,SAAS,GAAGvG,OAAO,CAACwG,cAAR,EAAhB;AACA,MAAIC,OAAO,GAAG,QAAd;AACA,MAAI9B,MAAM,GAAG,EAAb;;AAEA,OAAK,IAAIG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyB,SAAS,CAACG,KAAV,EAApB,EAAuC5B,CAAC,EAAxC,EAA4C;AAC1C,QAAIE,IAAI,IAAI,IAAZ,EAAkB;AAChB,UAAIuB,SAAS,CAACzB,CAAD,CAAT,CAAaE,IAAb,GAAoB2B,QAApB,CAA6BF,OAA7B,CAAJ,EAA2C;AACzC9B,cAAM,CAACiC,IAAP,CAAYL,SAAS,CAACzB,CAAD,CAArB;AACD;AACF,KAJD,MAIO;AACL,UAAIyB,SAAS,CAACzB,CAAD,CAAT,CAAaE,IAAb,MAAuBA,IAA3B,EAAiC;AAC/BL,cAAM,CAACiC,IAAP,CAAYL,SAAS,CAACzB,CAAD,CAArB;AACD;AACF;AACF;;AACD,SAAOH,MAAP;AACD,C;;;;;;;;;;;ACvXD,mC;;;;;;;;;;;ACAA,4C;;;;;;;;;;;ACAA,sC","file":"settings.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/settings.js\");\n","import sketch from \"sketch\";\nlet UI = require(\"sketch/ui\");\nvar Settings = require(\"sketch/settings\");\n\nconst pluginKey = \"flowArrows\";\n\nlet docData, pluginData, currentParentGroup, newConnectionsData;\n\nlet document = sketch.fromNative(context.document);\ndocData = context.document.documentData();\npluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\n \"arrowConnections\",\n docData,\n pluginKey\n);\n\nexport function settings(context) {\n let alert = COSAlertWindow.new();\n const viewWidth = 300;\n const viewHeight = 450;\n\n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight);\n let view = NSView.alloc().initWithFrame(\n NSMakeRect(0, 0, viewWidth, viewHeight)\n );\n alert.addAccessoryView(view);\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\n \"Arrow Style\",\n true,\n -1,\n viewHeight - 40,\n 280,\n 40\n );\n view.addSubview(arrowStyleLabel);\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(\n NSMakeRect(-2, viewHeight - 40, 300, 20)\n );\n setActiveStyleSetting(arrowStylingField);\n view.addSubview(arrowStylingField);\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\n \"Add layer style to your document that will contain $arrow name and you will be able to specify it here \",\n false,\n -1,\n viewHeight - 80,\n 300,\n 40\n );\n view.addSubview(arrowStyleInfoLabel);\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\n \"Arrow Type\",\n true,\n -1,\n viewHeight - 130,\n 280,\n 40\n );\n view.addSubview(arrowTypeLabel);\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(\n NSMakeRect(-2, viewHeight - 130, 300, 20)\n );\n setActiveTypeSetting(arrowTypeField);\n view.addSubview(arrowTypeField);\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\n \"Select one of the arrow types. Angled is used by default\",\n false,\n -1,\n viewHeight - 170,\n 300,\n 40\n );\n view.addSubview(arrowTypeInfoLabel);\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\n \"Arrow Spacing\",\n true,\n -1,\n viewHeight - 200,\n 330,\n 20\n );\n view.addSubview(arrowSpacingLabel);\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\n \"px\",\n true,\n 90,\n viewHeight - 220,\n 330,\n 20\n );\n view.addSubview(arrowSpacingPxLabel);\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(\n NSMakeRect(-2, viewHeight - 220, 80, 20)\n );\n var formatter = NSNumberFormatter.alloc()\n .init()\n .autorelease();\n arrowSpacingField.setStringValue(\n String(Settings.settingForKey(\"arrowSpacing\"))\n );\n arrowSpacingField.setFormatter(formatter);\n view.addSubview(arrowSpacingField);\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(\n NSMakeRect(70, viewHeight - 220, 20, 20)\n );\n arrowSpacingStepper.setMaxValue(1000);\n arrowSpacingStepper.setMinValue(0);\n arrowSpacingStepper.setValueWraps(false);\n arrowSpacingStepper.setAutorepeat(true);\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender) {\n var value = 0 + sender.integerValue();\n arrowSpacingField.setStringValue(String(value));\n });\n\n view.addSubview(arrowSpacingStepper);\n // view.addSubview(formatter)\n\n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\n \"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \",\n false,\n -1,\n viewHeight - 285,\n 300,\n 60\n );\n view.addSubview(arrowSpacingInfoLabel);\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\n \"Other Settings\",\n true,\n -1,\n viewHeight - 330,\n 280,\n 40\n );\n view.addSubview(otherSettingsLabel);\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\n \"Second layer auto-align\",\n false,\n -1,\n viewHeight - 340,\n 260,\n 40\n );\n view.addSubview(checkbox);\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\n \"Align the second layer for 5px misalignment with the first one\",\n false,\n -1,\n viewHeight - 370,\n 280,\n 40\n );\n view.addSubview(autoAlignInfoLabel);\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\n \"Made by @faridSabitov with the support of EPAM.com ❤️\",\n true,\n -1,\n viewHeight - 420,\n 280,\n 40\n );\n view.addSubview(pluginInfoLabel);\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal();\n\n if (modalResponse == NSAlertFirstButtonReturn) {\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(\n alert\n .views()[0]\n .subviews()[1]\n .title(),\n \"arrowStyle\",\n docData,\n pluginKey\n );\n Settings.setSettingForKey(\n \"arrowType\",\n alert\n .views()[0]\n .subviews()[4]\n .title()\n );\n Settings.setSettingForKey(\n \"arrowSpacing\",\n alert\n .views()[0]\n .subviews()[8]\n .intValue()\n );\n Settings.setSettingForKey(\n \"autoAlign\",\n alert\n .views()[0]\n .subviews()[12]\n .state()\n );\n UI.message(\"Settings are updated 🚀\");\n }\n}\n\n// Functions\n\nfunction setActiveStyleSetting(arrowStylingField) {\n let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier(\n \"arrowStyle\",\n docData,\n pluginKey\n );\n let styles = getLayerStyles(null);\n\n if (docSettings) {\n // We have info about the settings in the current document\n\n if (docSettings != \"Default Style\") {\n // if user specified own option\n arrowStylingField.addItemWithTitle(docSettings);\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for (let i = 0; i < styles.length; i++) {\n if (styles[i].name() != docSettings) {\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n } else {\n // Need to show the default first\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for (let i = 0; i < styles.length; i++) {\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n } else {\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for (let i = 0; i < styles.length; i++) {\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n}\n\nfunction setActiveTypeSetting(arrowTypeField) {\n let docTypeSettings = Settings.settingForKey(\"arrowType\");\n\n if (docTypeSettings) {\n // We have info about the settings in the current document\n\n if (docTypeSettings == \"Angled\") {\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(0);\n }\n\n if (docTypeSettings == \"Curved\") {\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(0);\n }\n\n if (docTypeSettings == \"Straight\") {\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(0);\n }\n } else {\n // Show default\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.addItemWithTitle(\"Straight\");\n }\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight) {\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\");\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\");\n alert.addButtonWithTitle(\"Cancel\");\n\n return alert;\n}\n\nfunction alertLabel(message, state, x, y, width, height) {\n let infoLabel = NSTextField.alloc().initWithFrame(\n NSMakeRect(x, y, width, height)\n );\n\n infoLabel.setStringValue(message);\n infoLabel.setSelectable(false);\n infoLabel.setDrawsBackground(false);\n infoLabel.setBezeled(false);\n\n if (state == false) {\n infoLabel.textColor = NSColor.disabledControlTextColor();\n }\n\n return infoLabel;\n}\n\nfunction alertCheckbox(message, state, x, y, width, height) {\n let checkbox = NSButton.alloc().initWithFrame(\n NSMakeRect(x, y, width, height)\n );\n\n checkbox.setButtonType(NSSwitchButton);\n checkbox.setBezelStyle(0);\n checkbox.setTitle(message);\n if (Settings.settingForKey(\"autoAlign\")) {\n let currentState = Settings.settingForKey(\"autoAlign\");\n checkbox.setState(currentState);\n } else {\n checkbox.setState(state);\n }\n\n return checkbox;\n}\n\nfunction getLayerStyles(name) {\n // Duplicate\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n\n for (let i = 0; i < allStyles.count(); i++) {\n if (name == null) {\n if (allStyles[i].name().includes(keyword)) {\n styles.push(allStyles[i]);\n }\n } else {\n if (allStyles[i].name() == name) {\n styles.push(allStyles[i]);\n }\n }\n }\n return styles;\n}\n","module.exports = require(\"sketch\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/settings.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","Settings","pluginKey","docData","pluginData","currentParentGroup","newConnectionsData","document","sketch","fromNative","context","documentData","command","valueForKey_onLayer_forPluginIdentifier","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","settingForKey","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","setValue_forKey_onLayer_forPluginIdentifier","views","subviews","title","setSettingForKey","intValue","state","message","docSettings","styles","getLayerStyles","addItemWithTitle","i","length","name","docTypeSettings","lastItem","setState","setMessageText","addButtonWithTitle","x","y","width","height","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","styleLine","line","style","localStyle","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","g","b","a","thickness","endMarkerType","allStyles","allLayerStyles","keyword","count","includes","push"],"mappings":"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","file":"settings.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/settings.js\");\n","import sketch from \"sketch\";\nimport { getLayerStyles } from \"./utilities/styling.js\";\n\nlet UI = require(\"sketch/ui\");\nvar Settings = require(\"sketch/settings\");\n\nconst pluginKey = \"flowArrows\";\n\nlet docData, pluginData, currentParentGroup, newConnectionsData;\n\nlet document = sketch.fromNative(context.document);\ndocData = context.document.documentData();\npluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\n \"arrowConnections\",\n docData,\n pluginKey\n);\n\nexport function settings(context) {\n let alert = COSAlertWindow.new();\n const viewWidth = 300;\n const viewHeight = 450;\n\n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight);\n let view = NSView.alloc().initWithFrame(\n NSMakeRect(0, 0, viewWidth, viewHeight)\n );\n alert.addAccessoryView(view);\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\n \"Arrow Style\",\n true,\n -1,\n viewHeight - 40,\n 280,\n 40\n );\n view.addSubview(arrowStyleLabel);\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(\n NSMakeRect(-2, viewHeight - 40, 300, 20)\n );\n setActiveStyleSetting(arrowStylingField);\n view.addSubview(arrowStylingField);\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\n \"Add layer style to your document that will contain $arrow name and you will be able to specify it here \",\n false,\n -1,\n viewHeight - 80,\n 300,\n 40\n );\n view.addSubview(arrowStyleInfoLabel);\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\n \"Arrow Type\",\n true,\n -1,\n viewHeight - 130,\n 280,\n 40\n );\n view.addSubview(arrowTypeLabel);\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(\n NSMakeRect(-2, viewHeight - 130, 300, 20)\n );\n setActiveTypeSetting(arrowTypeField);\n view.addSubview(arrowTypeField);\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\n \"Select one of the arrow types. Angled is used by default\",\n false,\n -1,\n viewHeight - 170,\n 300,\n 40\n );\n view.addSubview(arrowTypeInfoLabel);\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\n \"Arrow Spacing\",\n true,\n -1,\n viewHeight - 200,\n 330,\n 20\n );\n view.addSubview(arrowSpacingLabel);\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\n \"px\",\n true,\n 90,\n viewHeight - 220,\n 330,\n 20\n );\n view.addSubview(arrowSpacingPxLabel);\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(\n NSMakeRect(-2, viewHeight - 220, 80, 20)\n );\n var formatter = NSNumberFormatter.alloc()\n .init()\n .autorelease();\n arrowSpacingField.setStringValue(\n String(Settings.settingForKey(\"arrowSpacing\"))\n );\n arrowSpacingField.setFormatter(formatter);\n view.addSubview(arrowSpacingField);\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(\n NSMakeRect(70, viewHeight - 220, 20, 20)\n );\n arrowSpacingStepper.setMaxValue(1000);\n arrowSpacingStepper.setMinValue(0);\n arrowSpacingStepper.setValueWraps(false);\n arrowSpacingStepper.setAutorepeat(true);\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender) {\n var value = 0 + sender.integerValue();\n arrowSpacingField.setStringValue(String(value));\n });\n\n view.addSubview(arrowSpacingStepper);\n // view.addSubview(formatter)\n\n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\n \"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \",\n false,\n -1,\n viewHeight - 285,\n 300,\n 60\n );\n view.addSubview(arrowSpacingInfoLabel);\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\n \"Other Settings\",\n true,\n -1,\n viewHeight - 330,\n 280,\n 40\n );\n view.addSubview(otherSettingsLabel);\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\n \"Second layer auto-align\",\n false,\n -1,\n viewHeight - 340,\n 260,\n 40\n );\n view.addSubview(checkbox);\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\n \"Align the second layer for 5px misalignment with the first one\",\n false,\n -1,\n viewHeight - 370,\n 280,\n 40\n );\n view.addSubview(autoAlignInfoLabel);\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\n \"Made by @faridSabitov with the support of EPAM.com ❤️\",\n true,\n -1,\n viewHeight - 420,\n 280,\n 40\n );\n view.addSubview(pluginInfoLabel);\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal();\n\n if (modalResponse == NSAlertFirstButtonReturn) {\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(\n alert\n .views()[0]\n .subviews()[1]\n .title(),\n \"arrowStyle\",\n docData,\n pluginKey\n );\n Settings.setSettingForKey(\n \"arrowType\",\n alert\n .views()[0]\n .subviews()[4]\n .title()\n );\n Settings.setSettingForKey(\n \"arrowSpacing\",\n alert\n .views()[0]\n .subviews()[8]\n .intValue()\n );\n Settings.setSettingForKey(\n \"autoAlign\",\n alert\n .views()[0]\n .subviews()[12]\n .state()\n );\n UI.message(\"Settings are updated 🚀\");\n }\n}\n\n// Functions\n\nfunction setActiveStyleSetting(arrowStylingField) {\n let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier(\n \"arrowStyle\",\n docData,\n pluginKey\n );\n let styles = getLayerStyles(null);\n\n if (docSettings) {\n // We have info about the settings in the current document\n\n if (docSettings != \"Default Style\") {\n // if user specified own option\n arrowStylingField.addItemWithTitle(docSettings);\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for (let i = 0; i < styles.length; i++) {\n if (styles[i].name() != docSettings) {\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n } else {\n // Need to show the default first\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for (let i = 0; i < styles.length; i++) {\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n } else {\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for (let i = 0; i < styles.length; i++) {\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n}\n\nfunction setActiveTypeSetting(arrowTypeField) {\n let docTypeSettings = Settings.settingForKey(\"arrowType\");\n\n if (docTypeSettings) {\n // We have info about the settings in the current document\n\n if (docTypeSettings == \"Angled\") {\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(0);\n }\n\n if (docTypeSettings == \"Curved\") {\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(0);\n }\n\n if (docTypeSettings == \"Straight\") {\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(0);\n }\n } else {\n // Show default\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.addItemWithTitle(\"Straight\");\n }\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight) {\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\");\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\");\n alert.addButtonWithTitle(\"Cancel\");\n\n return alert;\n}\n\nfunction alertLabel(message, state, x, y, width, height) {\n let infoLabel = NSTextField.alloc().initWithFrame(\n NSMakeRect(x, y, width, height)\n );\n\n infoLabel.setStringValue(message);\n infoLabel.setSelectable(false);\n infoLabel.setDrawsBackground(false);\n infoLabel.setBezeled(false);\n\n if (state == false) {\n infoLabel.textColor = NSColor.disabledControlTextColor();\n }\n\n return infoLabel;\n}\n\nfunction alertCheckbox(message, state, x, y, width, height) {\n let checkbox = NSButton.alloc().initWithFrame(\n NSMakeRect(x, y, width, height)\n );\n\n checkbox.setButtonType(NSSwitchButton);\n checkbox.setBezelStyle(0);\n checkbox.setTitle(message);\n if (Settings.settingForKey(\"autoAlign\")) {\n let currentState = Settings.settingForKey(\"autoAlign\");\n checkbox.setState(currentState);\n } else {\n checkbox.setState(state);\n }\n\n return checkbox;\n}\n\n\n","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\n\n\nlet docData = context.document.documentData();\n\nexport function styleLine(line, style){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey));\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/src/draw.js b/src/draw.js index 3dabb5d..9fe8b3e 100644 --- a/src/draw.js +++ b/src/draw.js @@ -1,4 +1,5 @@ import sketch from 'sketch'; +import { styleLine } from "./utilities/styling.js"; var Settings = require('sketch/settings'); const pluginKey = "flowArrows"; @@ -408,60 +409,6 @@ if(conGroup){ } return condition.id; } - -// Style - -function styleLine(line, style){ // Refactored - let localStyle; - - if(style != null){ - // For updates - if(getLayerStyles(style) != null && style != "Default Style"){ - // If style is specified - localStyle = style; - let ownStyle = getLayerStyles(style); - line.sharedStyle = ownStyle[0]; - } else { - // if there is no specific style - localStyle = "Default Style"; - let border = line.style().addStylePartOfType(1); - border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1}); - border.thickness = 2; - line.style().endMarkerType = 2; - } - } else { - // For creating new - if(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) != "Default Style"){ - // we have settins almost all the time and it's not default - localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)); - line.sharedStyle = localStyle[0]; - localStyle = localStyle[0].name(); - } else { - localStyle = "Default Style"; - let border = line.style().addStylePartOfType(1); - border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1}); - border.thickness = 2; - line.style().endMarkerType = 2; - } - } - - return localStyle; -} - -function getLayerStyles(name) { // Refactored - let allStyles = docData.allLayerStyles(); - let keyword = "$arrow"; - let styles = []; - - for(let i = 0; i < allStyles.count(); i++){ - if(name == null) { - if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);} - } else { - if(allStyles[i].name() == name){styles.push(allStyles[i]);} - } - } - return styles; -} // Groups diff --git a/src/manifest.json b/src/manifest.json index dc33a3f..ca79cc6 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -176,7 +176,7 @@ "name": "Get Free Library", "description": "Download library for having interactive arrows", "identifier": "getLibrary", - "script": "./links.js", + "script": "./utilities/links.js", "icon": "icon.png", "handler": "getLibrary" }, @@ -184,7 +184,7 @@ "name": "Join Community", "description": "Share all the suggestions, bugs or just say Hi", "identifier": "joinCommunity", - "script": "./links.js", + "script": "./utilities/links.js", "icon": "icon.png", "handler": "joinCommunity" } diff --git a/src/script.js b/src/script.js index 9cc7880..7b3d147 100644 --- a/src/script.js +++ b/src/script.js @@ -238,7 +238,6 @@ function getConnectionsData(){ //Refactored import { createArrow } from "./createArrow.js"; import { updateArrow } from "./updateArrow.js"; -import { update } from "./updateArrow.js"; function create(context, direction, isCondition){ @@ -274,6 +273,57 @@ function create(context, direction, isCondition){ } } +export function update(context, level, isUpdate) { + // 1 - selection level + // 2 - artboard level + // 3 - document level + let newConnectionsData = []; + let selection = context.selection; + let firstObjectArtboard; + let secondObjectArtboard; + + if (connectionsData.length > 0) { + for (let i = 0; i < connectionsData.length; i++) { + deleteLine(connectionsData[i].line); + + if (level == 3) { + if(isUpdate){ + updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i); + sketch.UI.message("All arrows are updated"); + } else { + newConnectionsData = null + sketch.UI.message("All arrows are deleted"); + } + } + if (level == 2) { + firstObjectArtboard = document.getLayerWithID(connectionsData[i].firstObject); + firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID(); + secondObjectArtboard = document.getLayerWithID(connectionsData[i].secondObject); + secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID(); + + if (selection.count() == 1 && selection[0].class() == "MSArtboardGroup") { + + if (firstObjectArtboard == selection[0].objectID()) { + if (secondObjectArtboard == selection[0].objectID()) { + updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i); + } else { + newConnectionsData.push(connectionsData[i]); + } + } else { + newConnectionsData.push(connectionsData[i]); + } + } + } + sketch.UI.message("All arrows are updated 🚀"); + + + } + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); + } else { + sketch.UI.message("There is no arrows"); + } +} + function getSourceObjectFromSelection(selection, direction){ //Refactored let sourceObjectID = selection.firstObject().objectID(); diff --git a/src/script.js.svg b/src/script.js.svg deleted file mode 100644 index 8659c78..0000000 --- a/src/script.js.svg +++ /dev/null @@ -1,20283 +0,0 @@ - - - - - - - - - - import from'sketch' - - import from'sketch' - - - - - - sketch - - sketch - - - - - - - let UI = require('sketch/ui') - - let UI = require('sketch/ui') - - - - - - - var Settings = require('sketch/settings') - - var Settings = require('sketch/settings') - - - - - - - const pluginKey = "flowArrows" - - const pluginKey = "flowArrows" - - - - - - - (context.document) - - (context.document) - - - if + - - - - - document = sketch.fromNative(context.document) - - document = sketch.fromNative(context.document) - - - - - - - docData = context.document.documentData() - - docData = context.document.documentData() - - - - - - - pluginData = context.command.valueForKey_onLayer_forPluginIdentifier('arrowConnections', docData, pluginKey) - - pluginData = context.command.valueForKey_onLayer_f... - - - - - - - currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() - - currentParentGroup = docData.currentPage().current... - - - - - - - docData.currentPage() - - docData.currentPage() - - - - - - - .currentArtboard() - - .currentArtboard() - - - - - - - docData.currentPage() - - docData.currentPage() - - - - - - - newConnectionsData = getConnectionsData() - - newConnectionsData = getConnectionsData() - - - - - - - document = sketch.fromNative(context.actionContext.document) - - document = sketch.fromNative(context.actionContext... - - - - - - - - - - - - - - export createAutoArrow - - export createAutoArrow - - - - - - - - - - function createAutoArrow(context) - - function createAutoArrow(context) - - - - - - start(context, 'Auto', false) - - start(context, 'Auto', false) - - - - - - - - - - - - - - export createRightArrow - - export createRightArrow - - - - - - - - - - function createRightArrow(context) - - function createRightArrow(context) - - - - - - start(context, 'Right', false) - - start(context, 'Right', false) - - - - - - - - - - - - - - export createDownArrow - - export createDownArrow - - - - - - - - - - function createDownArrow(context) - - function createDownArrow(context) - - - - - - start(context, 'Down', false) - - start(context, 'Down', false) - - - - - - - - - - - - - - export createLeftArrow - - export createLeftArrow - - - - - - - - - - function createLeftArrow(context) - - function createLeftArrow(context) - - - - - - start(context, 'Left', false) - - start(context, 'Left', false) - - - - - - - - - - - - - - export createUpArrow - - export createUpArrow - - - - - - - - - - function createUpArrow(context) - - function createUpArrow(context) - - - - - - start(context, 'Up', false) - - start(context, 'Up', false) - - - - - - - - - - - - - - export createRightArrowWithCondition - - export createRightArrowWithCondition - - - - - - - - - - function createRightArrowWithCondition(context) - - function createRightArrowWithCondition(context) - - - - - - start(context, 'Right', true) - - start(context, 'Right', true) - - - - - - - - - - - - - - export createDownArrowWithCondition - - export createDownArrowWithCondition - - - - - - - - - - function createDownArrowWithCondition(context) - - function createDownArrowWithCondition(context) - - - - - - start(context, 'Down', true) - - start(context, 'Down', true) - - - - - - - - - - - - - - export createLeftArrowWithCondition - - export createLeftArrowWithCondition - - - - - - - - - - function createLeftArrowWithCondition(context) - - function createLeftArrowWithCondition(context) - - - - - - start(context, 'Left', true) - - start(context, 'Left', true) - - - - - - - - - - - - - - export createUpArrowWithCondition - - export createUpArrowWithCondition - - - - - - - - - - function createUpArrowWithCondition(context) - - function createUpArrowWithCondition(context) - - - - - - start(context, 'Up', true) - - start(context, 'Up', true) - - - - - - - - - - - - - - export updateSelectedArrows - - export updateSelectedArrows - - - - - - - - - - function updateSelectedArrows(context) - - function updateSelectedArrows(context) - - - - - - let selection = context.selection - - let selection = context.selection - - - - - - - (selection.count() > 1 && selection[0].class() != "MSArtboardGroup") - - (selection.count() > 1 && selection[0].class() != ... - - - if + - - - - - let currentConnectionsData = newConnectionsData - - let currentConnectionsData = newConnectionsData - - - - - - - - - g < selection.count() - - g < selection.count() - - - for - - - - g++ - - g++ - - - - - - - (selection[g].objectID() != selection[0].objectID()) - - (selection[g].objectID() != selection[0].objectID(... - - - if + - - - - let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), currentConnectionsData) - - let connectionIndex = findConnectionIndex(selectio... - - - - - - - (connectionIndex.length == 0) - - (connectionIndex.length == 0) - - - if + - - - - - updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex) - - updateArrow(currentConnectionsData[connectionIndex... - - - - - - - sketch.UI.message('Current connection is updated 🤘') - - sketch.UI.message('Current connection is updated �... - - - - - - - sketch.UI.message('There is no connection between selected layers on the plugin data') - - sketch.UI.message('There is no connection between ... - - - - - - - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, 'arrowConnections', docData, pluginKey) - - context.command.setValue_forKey_onLayer_forPluginI... - - - - - - - sketch.UI.message('Please select more than two layers. Artboards are coming soon 🥳') - - sketch.UI.message('Please select more than two lay... - - - - - - - - - - - - - - export autoUpdateSelectedArrows - - export autoUpdateSelectedArrows - - - - - - - - - - function autoUpdateSelectedArrows(context) - - function autoUpdateSelectedArrows(context) - - - - - - const action = context.actionContext - - const action = context.actionContext - - - - - - - docData = action.document.documentData() - - docData = action.document.documentData() - - - - - - - pluginData = context.command.valueForKey_onLayer_forPluginIdentifier('arrowConnections', docData, pluginKey) - - pluginData = context.command.valueForKey_onLayer_f... - - - - - - - currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage() - - currentParentGroup = docData.currentPage().current... - - - - - - - docData.currentPage() - - docData.currentPage() - - - - - - - .currentArtboard() - - .currentArtboard() - - - - - - - docData.currentPage() - - docData.currentPage() - - - - - - - newConnectionsData = getConnectionsData() - - newConnectionsData = getConnectionsData() - - - - - - - const movedLayers = [object Object] - - const movedLayers = [object Object] - - - - - - - - - - - (layer) => - - (layer) => - - - - - - - - - - - - - return sketch.fromNative(layer) - - return sketch.fromNative(layer) - - - - - - log(movedLayers[0].id) - - log(movedLayers[0].id) - - - - - - - log(movedLayers.length) - - log(movedLayers.length) - - - - - - - let currentConnectionsData = newConnectionsData - - let currentConnectionsData = newConnectionsData - - - - - - - - - g < movedLayers.length - - g < movedLayers.length - - - for - - - - g++ - - g++ - - - - - - - let connectionIndex = findConnectionIndex(movedLayers[0].id, null, currentConnectionsData) - - let connectionIndex = findConnectionIndex(movedLay... - - - - - - - log("yes " + connectionIndex) - - log("yes " + connectionIndex) - - - - - - - (connectionIndex.length == 0) - - (connectionIndex.length == 0) - - - if + - - - - - updateArrow(currentConnectionsData[connectionIndex[0]].firstObject, currentConnectionsData[connectionIndex[0]].secondObject, currentConnectionsData[connectionIndex[0]].style, currentConnectionsData[connectionIndex[0]].type, currentConnectionsData[connectionIndex[0]].direction, currentConnectionsData[connectionIndex[0]].line, currentConnectionsData[connectionIndex[0]].condition, currentConnectionsData[connectionIndex[0]].isCondition, connectionIndex[0]) - - updateArrow(currentConnectionsData[connectionIndex... - - - - - - - sketch.UI.message('Current connection is updated 🤘') - - sketch.UI.message('Current connection is updated �... - - - - - - - sketch.UI.message('There is no connection between selected layers on the plugin data') - - sketch.UI.message('There is no connection between ... - - - - - - - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, 'arrowConnections', docData, pluginKey) - - context.command.setValue_forKey_onLayer_forPluginI... - - - - - - - - - - - - - - export updateArtboardArrows - - export updateArtboardArrows - - - - - - - - - - function updateArtboardArrows(context) - - function updateArtboardArrows(context) - - - - - - let selection = context.selection - - let selection = context.selection - - - - - - - let connections = getConnectionsData() - - let connections = getConnectionsData() - - - - - - - (connections.length > 0) - - (connections.length > 0) - - - if + - - - - - const updateArrowsCounter = connections.length - - const updateArrowsCounter = connections.length - - - - - - - - - i < updateArrowsCounter - - i < updateArrowsCounter - - - for - - - - i++ - - i++ - - - - - - - firstObjectArtboard = document.getLayerWithID(connections[i].firstObject) - - firstObjectArtboard = document.getLayerWithID(conn... - - - - - - - firstObjectArtboard = [object Object] - - firstObjectArtboard = [object Object] - - - - - - - firstObjectArtboard.sketchObject.parentArtboard() - - firstObjectArtboard.sketchObject.parentArtboard() - - - - - - - secondObjectArtboard = document.getLayerWithID(connections[i].secondObject) - - secondObjectArtboard = document.getLayerWithID(con... - - - - - - - secondObjectArtboard = [object Object] - - secondObjectArtboard = [object Object] - - - - - - - secondObjectArtboard.sketchObject.parentArtboard() - - secondObjectArtboard.sketchObject.parentArtboard() - - - - - - - (selection.count() == 1 && selection[0].class() == "MSArtboardGroup") - - (selection.count() == 1 && selection[0].class() ==... - - - if + - - - - (firstObjectArtboard == selection[0].objectID()) - - (firstObjectArtboard == selection[0].objectID()) - - - if + - - - - - (secondObjectArtboard == selection[0].objectID()) - - (secondObjectArtboard == selection[0].objectID()) - - - if + - - - - - updateArrow(connections[i].firstObject, connections[i].secondObject, connections[i].style, connections[i].type, connections[i].direction, connections[i].line, connections[i].condition, i) - - updateArrow(connections[i].firstObject, connection... - - - - - - - newConnectionsData.push(connections[i]) - - newConnectionsData.push(connections[i]) - - - - - - - newConnectionsData.push(connections[i]) - - newConnectionsData.push(connections[i]) - - - - - - - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, 'arrowConnections', docData, pluginKey) - - context.command.setValue_forKey_onLayer_forPluginI... - - - - - - - sketch.UI.message('All arrows are updated 🚀') - - sketch.UI.message('All arrows are updated 🚀') - - - - - - - sketch.UI.message('There is nothing to update') - - sketch.UI.message('There is nothing to update') - - - - - - - - - - - - - - export updateAllArrows - - export updateAllArrows - - - - - - - - - - function updateAllArrows(context) - - function updateAllArrows(context) - - - - - - let currentConnectionsData = newConnectionsData - - let currentConnectionsData = newConnectionsData - - - - - - - (currentConnectionsData.length > 0) - - (currentConnectionsData.length > 0) - - - if + - - - - - const updateArrowsCounter = currentConnectionsData.length - - const updateArrowsCounter = currentConnectionsData... - - - - - - - - - i < updateArrowsCounter - - i < updateArrowsCounter - - - for - - - - i++ - - i++ - - - - - - - updateArrow(currentConnectionsData[i].firstObject, currentConnectionsData[i].secondObject, currentConnectionsData[i].style, currentConnectionsData[i].type, currentConnectionsData[i].direction, currentConnectionsData[i].line, currentConnectionsData[i].condition, i) - - updateArrow(currentConnectionsData[i].firstObject,... - - - - - - - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, 'arrowConnections', docData, pluginKey) - - context.command.setValue_forKey_onLayer_forPluginI... - - - - - - - sketch.UI.message('All arrows are updated 🚀') - - sketch.UI.message('All arrows are updated 🚀') - - - - - - - sketch.UI.message('There is nothing to update') - - sketch.UI.message('There is nothing to update') - - - - - - - - - - - - - - export deleteAllArrows - - export deleteAllArrows - - - - - - - - - - function deleteAllArrows(context) - - function deleteAllArrows(context) - - - - - - (newConnectionsData.length > 0) - - (newConnectionsData.length > 0) - - - if + - - - - - - - i < newConnectionsData.length - - i < newConnectionsData.length - - - for - - - - i++ - - i++ - - - - - - - deleteLine(newConnectionsData[i].line) - - deleteLine(newConnectionsData[i].line) - - - - - - - context.command.setValue_forKey_onLayer_forPluginIdentifier(null, 'arrowConnections', docData, pluginKey) - - context.command.setValue_forKey_onLayer_forPluginI... - - - - - - - sketch.UI.message('All arrows are deleted') - - sketch.UI.message('All arrows are deleted') - - - - - - - sketch.UI.message('There is nothing to delete') - - sketch.UI.message('There is nothing to delete') - - - - - - - - - - - - - - export deleteArtboardArrows - - export deleteArtboardArrows - - - - - - - - - - function deleteArtboardArrows(context) - - function deleteArtboardArrows(context) - - - - - - let selection = context.selection - - let selection = context.selection - - - - - - - (selection.count() == 1 && selection[0].class() == "MSArtboardGroup") - - (selection.count() == 1 && selection[0].class() ==... - - - if + - - - - - let connections = getConnectionsData() - - let connections = getConnectionsData() - - - - - - - (connections.length > 0) - - (connections.length > 0) - - - if + - - - - - const updateArrowsCounter = connections.length - - const updateArrowsCounter = connections.length - - - - - - - - - i < updateArrowsCounter - - i < updateArrowsCounter - - - for - - - - i++ - - i++ - - - - - - - firstObject = document.getLayerWithID(connections[i].firstObject) - - firstObject = document.getLayerWithID(connections[... - - - - - - - secondObject = document.getLayerWithID(connections[i].secondObject) - - secondObject = document.getLayerWithID(connections... - - - - - - - (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()) - - (firstObject.sketchObject.parentArtboard().objectI... - - - if + - - - - firstObject.sketchObject.parentArtboard() - - firstObject.sketchObject.parentArtboard() - - - - - - - (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()) - - (secondObject.sketchObject.parentArtboard().object... - - - if + - - - - secondObject.sketchObject.parentArtboard() - - secondObject.sketchObject.parentArtboard() - - - - - - - deleteLine(connections[i].line) - - deleteLine(connections[i].line) - - - - - - - newConnectionsData = deleteConnectionFromData(i) - - newConnectionsData = deleteConnectionFromData(i) - - - - - - - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, 'arrowConnections', docData, pluginKey) - - context.command.setValue_forKey_onLayer_forPluginI... - - - - - - - sketch.UI.message('All arrows from selected artboard are deleted') - - sketch.UI.message('All arrows from selected artboa... - - - - - - - sketch.UI.message('There is nothing to delete') - - sketch.UI.message('There is nothing to delete') - - - - - - - sketch.UI.message('Please select one artboard') - - sketch.UI.message('Please select one artboard') - - - - - - - - - - - - - - export deleteSelectedArrows - - export deleteSelectedArrows - - - - - - - - - - function deleteSelectedArrows(context) - - function deleteSelectedArrows(context) - - - - - - let selection = context.selection - - let selection = context.selection - - - - - - - (selection.count() == 2) - - (selection.count() == 2) - - - if + - - - - - - - g < selection.count() - - g < selection.count() - - - for - - - - g++ - - g++ - - - - - - - (selection[g].objectID() != selection[0].objectID()) - - (selection[g].objectID() != selection[0].objectID(... - - - if + - - - - let connections = getConnectionsData() - - let connections = getConnectionsData() - - - - - - - let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), connections) - - let connectionIndex = findConnectionIndex(selectio... - - - - - - - (connectionIndex != null) - - (connectionIndex != null) - - - if + - - - - deleteLine(connections[connectionIndex].line) - - deleteLine(connections[connectionIndex].line) - - - - - - - newConnectionsData = deleteConnectionFromData(connectionIndex) - - newConnectionsData = deleteConnectionFromData(conn... - - - - - - - const updateArrowsCounter = connections.length - - const updateArrowsCounter = connections.length - - - - - - - - - i < updateArrowsCounter - - i < updateArrowsCounter - - - for - - - - i++ - - i++ - - - - - - - firstObject = document.getLayerWithID(connections[i].firstObject) - - firstObject = document.getLayerWithID(connections[... - - - - - - - secondObject = document.getLayerWithID(connections[i].secondObject) - - secondObject = document.getLayerWithID(connections... - - - - - - - (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()) - - (firstObject.sketchObject.parentArtboard().objectI... - - - if + - - - - firstObject.sketchObject.parentArtboard() - - firstObject.sketchObject.parentArtboard() - - - - - - - (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()) - - (secondObject.sketchObject.parentArtboard().object... - - - if + - - - - secondObject.sketchObject.parentArtboard() - - secondObject.sketchObject.parentArtboard() - - - - - - - deleteLine(connections[i].line) - - deleteLine(connections[i].line) - - - - - - - newConnectionsData = deleteConnectionFromData(i) - - newConnectionsData = deleteConnectionFromData(i) - - - - - - - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, 'arrowConnections', docData, pluginKey) - - context.command.setValue_forKey_onLayer_forPluginI... - - - - - - - sketch.UI.message('All arrows from selected layers are deleted ✌️') - - sketch.UI.message('All arrows from selected layers... - - - - - - - sketch.UI.message('Select two layers, please 🧐') - - sketch.UI.message('Select two layers, please 🧐') - - - - - - - - - - - - - - export settings - - export settings - - - - - - - - - - function settings(context) - - function settings(context) - - - - - - let alert = COSAlertWindow.new() - - let alert = COSAlertWindow.new() - - - - - - - const viewWidth = 300 - - const viewWidth = 300 - - - - - - - const viewHeight = 450 - - const viewHeight = 450 - - - - - - - alert = alertSetup(alert, viewWidth, viewHeight) - - alert = alertSetup(alert, viewWidth, viewHeight) - - - - - - - let view = [object Object] - - let view = [object Object] - - - - - - - alert.addAccessoryView(view) - - alert.addAccessoryView(view) - - - - - - - let arrowStyleLabel = alertLabel('Arrow Style', true, -1, viewHeight - 40, 280, 40) - - let arrowStyleLabel = alertLabel('Arrow Style', tr... - - - - - - - view.addSubview(arrowStyleLabel) - - view.addSubview(arrowStyleLabel) - - - - - - - let arrowStylingField = [object Object] - - let arrowStylingField = [object Object] - - - - - - - setActiveStyleSetting(arrowStylingField) - - setActiveStyleSetting(arrowStylingField) - - - - - - - view.addSubview(arrowStylingField) - - view.addSubview(arrowStylingField) - - - - - - - let arrowStyleInfoLabel = alertLabel('Add layer style to your document that will contain $arrow name and you will be able to specify it here ', false, -1, viewHeight - 80, 300, 40) - - let arrowStyleInfoLabel = alertLabel('Add layer st... - - - - - - - view.addSubview(arrowStyleInfoLabel) - - view.addSubview(arrowStyleInfoLabel) - - - - - - - let arrowTypeLabel = alertLabel('Arrow Type', true, -1, viewHeight - 130, 280, 40) - - let arrowTypeLabel = alertLabel('Arrow Type', true... - - - - - - - view.addSubview(arrowTypeLabel) - - view.addSubview(arrowTypeLabel) - - - - - - - let arrowTypeField = [object Object] - - let arrowTypeField = [object Object] - - - - - - - setActiveTypeSetting(arrowTypeField) - - setActiveTypeSetting(arrowTypeField) - - - - - - - view.addSubview(arrowTypeField) - - view.addSubview(arrowTypeField) - - - - - - - let arrowTypeInfoLabel = alertLabel('Select one of the arrow types. Angled is used by default', false, -1, viewHeight - 170, 300, 40) - - let arrowTypeInfoLabel = alertLabel('Select one of... - - - - - - - view.addSubview(arrowTypeInfoLabel) - - view.addSubview(arrowTypeInfoLabel) - - - - - - - let arrowSpacingLabel = alertLabel('Arrow Spacing', true, -1, viewHeight - 200, 330, 20) - - let arrowSpacingLabel = alertLabel('Arrow Spacing'... - - - - - - - view.addSubview(arrowSpacingLabel) - - view.addSubview(arrowSpacingLabel) - - - - - - - let arrowSpacingPxLabel = alertLabel('px', true, 90, viewHeight - 220, 330, 20) - - let arrowSpacingPxLabel = alertLabel('px', true, 9... - - - - - - - view.addSubview(arrowSpacingPxLabel) - - view.addSubview(arrowSpacingPxLabel) - - - - - - - let arrowSpacingField = [object Object] - - let arrowSpacingField = [object Object] - - - - - - - var formatter = [object Object] - - var formatter = [object Object] - - - - - - - arrowSpacingField.setStringValue(String(Settings.settingForKey("arrowSpacing"))) - - arrowSpacingField.setStringValue(String(Settings.s... - - - - - - - arrowSpacingField.setFormatter(formatter) - - arrowSpacingField.setFormatter(formatter) - - - - - - - view.addSubview(arrowSpacingField) - - view.addSubview(arrowSpacingField) - - - - - - - let arrowSpacingStepper = [object Object] - - let arrowSpacingStepper = [object Object] - - - - - - - arrowSpacingStepper.setMaxValue(1000) - - arrowSpacingStepper.setMaxValue(1000) - - - - - - - arrowSpacingStepper.setMinValue(0) - - arrowSpacingStepper.setMinValue(0) - - - - - - - arrowSpacingStepper.setValueWraps(false) - - arrowSpacingStepper.setValueWraps(false) - - - - - - - arrowSpacingStepper.setAutorepeat(true) - - arrowSpacingStepper.setAutorepeat(true) - - - - - - - arrowSpacingStepper.setCOSJSTargetFunction(*()) - - arrowSpacingStepper.setCOSJSTargetFunction(*()) - - - - - - - - - - - function(sender) - - function(sender) - - - - - - var value = 0 + sender.integerValue() - - var value = 0 + sender.integerValue() - - - - - - - arrowSpacingField.setStringValue(String(value)) - - arrowSpacingField.setStringValue(String(value)) - - - - - - - view.addSubview(arrowSpacingStepper) - - view.addSubview(arrowSpacingStepper) - - - - - - - let arrowSpacingInfoLabel = alertLabel('The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature ', false, -1, viewHeight - 285, 300, 60) - - let arrowSpacingInfoLabel = alertLabel('The second... - - - - - - - view.addSubview(arrowSpacingInfoLabel) - - view.addSubview(arrowSpacingInfoLabel) - - - - - - - let otherSettingsLabel = alertLabel('Other Settings', true, -1, viewHeight - 330, 280, 40) - - let otherSettingsLabel = alertLabel('Other Setting... - - - - - - - view.addSubview(otherSettingsLabel) - - view.addSubview(otherSettingsLabel) - - - - - - - let checkbox = alertCheckbox('Second layer auto-align', false, -1, viewHeight - 340, 260, 40) - - let checkbox = alertCheckbox('Second layer auto-al... - - - - - - - view.addSubview(checkbox) - - view.addSubview(checkbox) - - - - - - - let autoAlignInfoLabel = alertLabel('Align the second layer for 5px misalignment with the first one', false, -1, viewHeight - 370, 280, 40) - - let autoAlignInfoLabel = alertLabel('Align the sec... - - - - - - - view.addSubview(autoAlignInfoLabel) - - view.addSubview(autoAlignInfoLabel) - - - - - - - let pluginInfoLabel = alertLabel('Made by @faridSabitov with the support of EPAM.com ❤️', true, -1, viewHeight - 420, 280, 40) - - let pluginInfoLabel = alertLabel('Made by @faridSa... - - - - - - - view.addSubview(pluginInfoLabel) - - view.addSubview(pluginInfoLabel) - - - - - - - let modalResponse = alert.runModal() - - let modalResponse = alert.runModal() - - - - - - - (modalResponse == NSAlertFirstButtonReturn) - - (modalResponse == NSAlertFirstButtonReturn) - - - if + - - - - alert.views() - - alert.views() - - - - - - - alert.views()[0].subviews() - - alert.views()[0].subviews() - - - - - - - context.command.setValue_forKey_onLayer_forPluginIdentifier(alert.views()[0].subviews()[1].title(), 'arrowStyle', docData, pluginKey) - - context.command.setValue_forKey_onLayer_forPluginI... - - - - - - - alert.views() - - alert.views() - - - - - - - alert.views()[0].subviews() - - alert.views()[0].subviews() - - - - - - - Settings.setSettingForKey('arrowType', alert.views()[0].subviews()[4].title()) - - Settings.setSettingForKey('arrowType', alert.views... - - - - - - - alert.views() - - alert.views() - - - - - - - alert.views()[0].subviews() - - alert.views()[0].subviews() - - - - - - - Settings.setSettingForKey('arrowSpacing', alert.views()[0].subviews()[8].intValue()) - - Settings.setSettingForKey('arrowSpacing', alert.vi... - - - - - - - alert.views() - - alert.views() - - - - - - - alert.views()[0].subviews() - - alert.views()[0].subviews() - - - - - - - Settings.setSettingForKey('autoAlign', alert.views()[0].subviews()[12].state()) - - Settings.setSettingForKey('autoAlign', alert.views... - - - - - - - UI.message('Settings are updated 🚀') - - UI.message('Settings are updated 🚀') - - - - - - - - - - - - - - export onLayersMoved - - export onLayersMoved - - - - - - - - - - function onLayersMoved(context) - - function onLayersMoved(context) - - - - - - sketch.UI.message('Please select more than two layers') - - sketch.UI.message('Please select more than two lay... - - - - - - - const action = context.actionContext - - const action = context.actionContext - - - - - - - - - - - - - - export panel - - export panel - - - - - - - - - - function panel(context) - - function panel(context) - - - - - - ControlBar = [object Object] - - ControlBar = [object Object] - - - - - - - NSPanel.alloc() - - NSPanel.alloc() - - - - - - - ControlBar.setStyleMask(NSTitledWindowMask + NSFullSizeContentViewWindowMask) - - ControlBar.setStyleMask(NSTitledWindowMask + NSFul... - - - - - - - ControlBar.setTitleVisibility(NSWindowTitleHidden) - - ControlBar.setTitleVisibility(NSWindowTitleHidden) - - - - - - - ControlBar.setTitlebarAppearsTransparent(true) - - ControlBar.setTitlebarAppearsTransparent(true) - - - - - - - ControlBar.setFrame_display(NSMakeRect(0, 0, 720, 50), false) - - ControlBar.setFrame_display(NSMakeRect(0, 0, 720, ... - - - - - - - ControlBar.setMovableByWindowBackground(true) - - ControlBar.setMovableByWindowBackground(true) - - - - - - - ControlBar.setHasShadow(true) - - ControlBar.setHasShadow(true) - - - - - - - ControlBar.setLevel(NSFloatingWindowLevel) - - ControlBar.setLevel(NSFloatingWindowLevel) - - - - - - - ControlBar.center() - - ControlBar.center() - - - - - - - ControlBar.makeKeyAndOrderFront(nil) - - ControlBar.makeKeyAndOrderFront(nil) - - - - - - - - - - - function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) - - function updateArrow(firstObjectID, secondObjectID... - - - - - - let firstObject = document.getLayerWithID(firstObjectID) - - let firstObject = document.getLayerWithID(firstObj... - - - - - - - let secondObject = document.getLayerWithID(secondObjectID) - - let secondObject = document.getLayerWithID(secondO... - - - - - - - let conditionObject = document.getLayerWithID(conditionID) - - let conditionObject = document.getLayerWithID(cond... - - - - - - - deleteLine(lineID) - - deleteLine(lineID) - - - - - - - (conditionID && !isCondition) - - (conditionID && !isCondition) - - - if + - - - - (conditionObject) - - (conditionObject) - - - if + - - - - conditionObject.remove() - - conditionObject.remove() - - - - - - - newConnectionsData = deleteConnectionFromData(connectionIndex) - - newConnectionsData = deleteConnectionFromData(conn... - - - - - - - (firstObject && secondObject) - - (firstObject && secondObject) - - - if + - - - - createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) - - createArrow(firstObjectID, secondObjectID, style, ... - - - - - - - - - - - function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) - - function createArrow(firstObjectID, secondObjectID... - - - - - - let localDirection = - - let localDirection = - - - - - - - (direction == "Auto") - - (direction == "Auto") - - - ? + - - - - - direction - - direction - - - - - - - updateSpacing(firstObjectID, secondObjectID, localDirection) - - updateSpacing(firstObjectID, secondObjectID, local... - - - - - - - autoAlignLayer(firstObjectID, secondObjectID, localDirection) - - autoAlignLayer(firstObjectID, secondObjectID, loca... - - - - - - - let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition) - - let arrow = drawConnection(firstObjectID, secondOb... - - - - - - - let connection = {*} - - let connection = {*} - - - - - - - firstObject: firstObjectID - - firstObject: firstObjectID - - - - - - - secondObject: secondObjectID - - secondObject: secondObjectID - - - - - - - style: arrow.style - - style: arrow.style - - - - - - - condition: arrow.conditionID - - condition: arrow.conditionID - - - - - - - isCondition: isCondition - - isCondition: isCondition - - - - - - - type: arrow.type - - type: arrow.type - - - - - - - direction: localDirection - - direction: localDirection - - - - - - - line: arrow.line.objectID() // Need to save this data to the global array - - line: arrow.line.objectID() // Need to save this d... - - - - - - - newConnectionsData.push(connection) - - newConnectionsData.push(connection) - - - - - - - - - - - function checkForGroup(groupName) - - function checkForGroup(groupName) - - - - - - let currentGroup = null - - let currentGroup = null - - - - - - - - - i < currentParentGroup.layers().count() - - i < currentParentGroup.layers().count() - - - for - - - - currentParentGroup.layers() - - currentParentGroup.layers() - - - - - - - i++ - - i++ - - - - - - - (currentParentGroup.layers()[i].name() == groupName) - - (currentParentGroup.layers()[i].name() == groupNam... - - - if + - - - - currentParentGroup.layers() - - currentParentGroup.layers() - - - - - - - currentGroup = currentParentGroup.layers()[i] - - currentGroup = currentParentGroup.layers()[i] - - - - - - - currentParentGroup.layers() - - currentParentGroup.layers() - - - - - - - - - - - - - - return currentGroup - - return currentGroup - - - - - - - - - - function getDirection(firstObjectID, secondObjectID) - - function getDirection(firstObjectID, secondObjectI... - - - - - - const firstObject = document.getLayerWithID(firstObjectID) - - const firstObject = document.getLayerWithID(firstO... - - - - - - - const secondObject = document.getLayerWithID(secondObjectID) - - const secondObject = document.getLayerWithID(secon... - - - - - - - const firstObjectMidX = firstObject.frame.x + firstObject.frame.width / 2 - - const firstObjectMidX = firstObject.frame.x + firs... - - - - - - - const firstObjectMidY = firstObject.frame.y + firstObject.frame.height / 2 - - const firstObjectMidY = firstObject.frame.y + firs... - - - - - - - const secondObjectMidX = secondObject.frame.x + secondObject.frame.width / 2 - - const secondObjectMidX = secondObject.frame.x + se... - - - - - - - const secondObjectMidY = secondObject.frame.y + secondObject.frame.height / 2 - - const secondObjectMidY = secondObject.frame.y + se... - - - - - - - const diffX = firstObjectMidX - secondObjectMidX - - const diffX = firstObjectMidX - secondObjectMidX - - - - - - - const diffY = firstObjectMidY - secondObjectMidY - - const diffY = firstObjectMidY - secondObjectMidY - - - - - - - const absDiffX = Math.abs(diffX) - - const absDiffX = Math.abs(diffX) - - - - - - - const absDiffY = Math.abs(diffY) - - const absDiffY = Math.abs(diffY) - - - - - - - (secondObjectMidX > firstObjectMidX) - - (secondObjectMidX > firstObjectMidX) - - - if + - - - - - (secondObjectMidY > firstObjectMidY) - - (secondObjectMidY > firstObjectMidY) - - - if + - - - - - direction = - - direction = - - - - - - - (diffX > diffY) - - (diffX > diffY) - - - ? + - - - - - "Down" - - "Down" - - - - - - - "Right" - - "Right" - - - - - - - direction = - - direction = - - - - - - - (absDiffX > absDiffY) - - (absDiffX > absDiffY) - - - ? + - - - - - "Right" - - "Right" - - - - - - - "Up" - - "Up" - - - - - - - (secondObjectMidY > firstObjectMidY) - - (secondObjectMidY > firstObjectMidY) - - - if + - - - - - direction = - - direction = - - - - - - - (absDiffX > absDiffY) - - (absDiffX > absDiffY) - - - ? + - - - - - "Left" - - "Left" - - - - - - - "Down" - - "Down" - - - - - - - direction = - - direction = - - - - - - - (diffX > diffY) - - (diffX > diffY) - - - ? + - - - - - "Left" - - "Left" - - - - - - - "Up" - - "Up" - - - - - - - - - - - - - - return direction - - return direction - - - - - - - - - - function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition) - - function drawConnection(firstObjectID, secondObjec... - - - - - - let firstObject = document.getLayerWithID(firstObjectID) - - let firstObject = document.getLayerWithID(firstObj... - - - - - - - let secondObject = document.getLayerWithID(secondObjectID) - - let secondObject = document.getLayerWithID(secondO... - - - - - - - let connectionPos = getConnectionPos(firstObject, secondObject, localDirection) - - let connectionPos = getConnectionPos(firstObject, ... - - - - - - - let connection = {*} - - let connection = {*} - - - - - - - line: [] - - line: [] - - - - - - - conditionID: [] - - conditionID: [] - - - - - - - type: [] - - type: [] - - - - - - - style: [] // Type - - style: [] // Type - - - - - - - connection.type = - - connection.type = - - - - - - - (type == null) - - (type == null) - - - ? + - - - - - Settings.settingForKey('arrowType') - - Settings.settingForKey('arrowType') - - - - - - - type - - type - - - - - - - (connection.type == "Angled" || connection.type == null) - - (connection.type == "Angled" || connection.type ==... - - - if + - - - - connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection) - - connection.line = drawAngledLine(connectionPos.fir... - - - - - - - (connection.type == "Straight") - - (connection.type == "Straight") - - - if + - - - - connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection) - - connection.line = drawStraightLine(connectionPos.f... - - - - - - - (connection.type == "Curved") - - (connection.type == "Curved") - - - if + - - - - connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection) - - connection.line = drawCurvedLine(connectionPos.fir... - - - - - - - (condition == true) - - (condition == true) - - - if + - - - - - (conditionID != null) - - (conditionID != null) - - - if + - - - - - connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY) - - connection.conditionID = updateCondition(condition... - - - - - - - connection.conditionID = addCondition('#con', connectionPos.middlePosX, connectionPos.middlePosY) - - connection.conditionID = addCondition('#con', conn... - - - - - - - connection.conditionID = null - - connection.conditionID = null - - - - - - - connection.style = styleLine(connection.line, style) - - connection.style = styleLine(connection.line, styl... - - - - - - - addToArrowsGroup(connection.line) - - addToArrowsGroup(connection.line) - - - - - - - - - - - - - - return connection - - return connection - - - - - - - - - - function addToArrowsGroup(line) - - function addToArrowsGroup(line) - - - - - - let currentGroup = checkForGroup('Arrows') - - let currentGroup = checkForGroup('Arrows') - - - - - - - (currentGroup) - - (currentGroup) - - - if + - - - - - currentGroup.addLayers([line]) - - currentGroup.addLayers([line]) - - - - - - - currentGroup.fixGeometryWithOptions(1) - - currentGroup.fixGeometryWithOptions(1) - - - - - - - let Group = require('sketch/dom').Group - - let Group = require('sketch/dom').Group - - - - - - - let group = Group({*}) - - let group = Group({*}) - - - - - - - {*} - - {*} - - - - - - - parent: currentParentGroup - - parent: currentParentGroup - - - - - - - name: 'Arrows' - - name: 'Arrows' - - - - - - - locked: true - - locked: true - - - - - - - layers: [line] - - layers: [line] - - - - - - - group.moveToBack() - - group.moveToBack() - - - - - - - group.adjustToFit() - - group.adjustToFit() - - - - - - - - - - - function addToConditionGroup(condition, x, y) - - function addToConditionGroup(condition, x, y) - - - - - - let conGroup = checkForGroup('Conditions') - - let conGroup = checkForGroup('Conditions') - - - - - - - let arGroup = checkForGroup('Arrows') - - let arGroup = checkForGroup('Arrows') - - - - - - - let arGroupX = - - let arGroupX = - - - - - - - (arGroup != null) - - (arGroup != null) - - - ? + - - - - - 0 - - 0 - - - - - - - let arGroupY = - - let arGroupY = - - - - - - - (arGroup != null) - - (arGroup != null) - - - ? + - - - - - 0 - - 0 - - - - - - - (conGroup) - - (conGroup) - - - if + - - - - - condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX) - - condition.frame.x = x - condition.frame.width / 2 ... - - - - - - - conGroup.frame() - - conGroup.frame() - - - - - - - condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY) - - condition.frame.y = y - condition.frame.height / 2... - - - - - - - conGroup.frame() - - conGroup.frame() - - - - - - - condition.parent = conGroup - - condition.parent = conGroup - - - - - - - conGroup.fixGeometryWithOptions(1) - - conGroup.fixGeometryWithOptions(1) - - - - - - - condition.frame.x = x - condition.frame.width / 2 - - condition.frame.x = x - condition.frame.width / 2 - - - - - - - condition.frame.y = y - condition.frame.height / 2 - - condition.frame.y = y - condition.frame.height / 2 - - - - - - - let Group = require('sketch/dom').Group - - let Group = require('sketch/dom').Group - - - - - - - let group = Group({*}) - - let group = Group({*}) - - - - - - - {*} - - {*} - - - - - - - parent: currentParentGroup - - parent: currentParentGroup - - - - - - - name: 'Conditions' - - name: 'Conditions' - - - - - - - layers: [condition] - - layers: [condition] - - - - - - - group.moveToBack() - - group.moveToBack() - - - - - - - group.adjustToFit() - - group.adjustToFit() - - - - - - - - - - - - - - return condition.id - - return condition.id - - - - - - - - - - function getConnectionsData() - - function getConnectionsData() - - - - - - let dataArray = [] - - let dataArray = [] - - - - - - - (pluginData) - - (pluginData) - - - if + - - - - - - i < pluginData.length - - i < pluginData.length - - - for - - - - i++ - - i++ - - - - - - - dataArray.push(pluginData[i]) - - dataArray.push(pluginData[i]) - - - - - - - - - - - - - - return dataArray - - return dataArray - - - - - - - - - - function findConnectionIndex(firstObjectID, secondObjectID, data) - - function findConnectionIndex(firstObjectID, second... - - - - - - let indexArray = [] - - let indexArray = [] - - - - - - - firstObjectID = String(firstObjectID) - - firstObjectID = String(firstObjectID) - - - - - - - secondObjectID = String(secondObjectID) - - secondObjectID = String(secondObjectID) - - - - - - - (pluginData) - - (pluginData) - - - if + - - - - - - y < data.length - - y < data.length - - - for - - - - y++ - - y++ - - - - - - - (firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject) - - (firstObjectID == data[y].firstObject || firstObje... - - - if + - - - - (secondObjectID == null) - - (secondObjectID == null) - - - if + - - - - - (secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject) - - (secondObjectID == data[y].firstObject || secondOb... - - - if + - - - - indexArray[0] = y - - indexArray[0] = y - - - - - - - indexArray.push(y) - - indexArray.push(y) - - - - - - - - - - - - - - return indexArray - - return indexArray - - - - - - - - - - function setActiveStyleSetting(arrowStylingField) - - function setActiveStyleSetting(arrowStylingField) - - - - - - let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier('arrowStyle', docData, pluginKey) - - let docSettings = context.command.valueForKey_onLa... - - - - - - - let styles = getLayerStyles(null) - - let styles = getLayerStyles(null) - - - - - - - (docSettings) - - (docSettings) - - - if + - - - - - (docSettings != "Default Style") - - (docSettings != "Default Style") - - - if + - - - - - arrowStylingField.addItemWithTitle(docSettings) - - arrowStylingField.addItemWithTitle(docSettings) - - - - - - - arrowStylingField.addItemWithTitle('Default Style') - - arrowStylingField.addItemWithTitle('Default Style'... - - - - - - - - - i < styles.length - - i < styles.length - - - for - - - - i++ - - i++ - - - - - - - (styles[i].name() != docSettings) - - (styles[i].name() != docSettings) - - - if + - - - - arrowStylingField.addItemWithTitle(styles[i].name()) - - arrowStylingField.addItemWithTitle(styles[i].name(... - - - - - - - arrowStylingField.addItemWithTitle('Default Style') - - arrowStylingField.addItemWithTitle('Default Style'... - - - - - - - - - i < styles.length - - i < styles.length - - - for - - - - i++ - - i++ - - - - - - - arrowStylingField.addItemWithTitle(styles[i].name()) - - arrowStylingField.addItemWithTitle(styles[i].name(... - - - - - - - arrowStylingField.addItemWithTitle('Default Style') - - arrowStylingField.addItemWithTitle('Default Style'... - - - - - - - - - i < styles.length - - i < styles.length - - - for - - - - i++ - - i++ - - - - - - - arrowStylingField.addItemWithTitle(styles[i].name()) - - arrowStylingField.addItemWithTitle(styles[i].name(... - - - - - - - - - - - function setActiveTypeSetting(arrowTypeField) - - function setActiveTypeSetting(arrowTypeField) - - - - - - let docTypeSettings = Settings.settingForKey('arrowType') - - let docTypeSettings = Settings.settingForKey('arro... - - - - - - - (docTypeSettings) - - (docTypeSettings) - - - if + - - - - - (docTypeSettings == "Angled") - - (docTypeSettings == "Angled") - - - if + - - - - arrowTypeField.addItemWithTitle('Angled') - - arrowTypeField.addItemWithTitle('Angled') - - - - - - - arrowTypeField.lastItem() - - arrowTypeField.lastItem() - - - - - - - .setState(1) - - .setState(1) - - - - - - - arrowTypeField.addItemWithTitle('Curved') - - arrowTypeField.addItemWithTitle('Curved') - - - - - - - arrowTypeField.lastItem() - - arrowTypeField.lastItem() - - - - - - - .setState(0) - - .setState(0) - - - - - - - arrowTypeField.addItemWithTitle('Straight') - - arrowTypeField.addItemWithTitle('Straight') - - - - - - - arrowTypeField.lastItem() - - arrowTypeField.lastItem() - - - - - - - .setState(0) - - .setState(0) - - - - - - - (docTypeSettings == "Curved") - - (docTypeSettings == "Curved") - - - if + - - - - arrowTypeField.addItemWithTitle('Curved') - - arrowTypeField.addItemWithTitle('Curved') - - - - - - - arrowTypeField.lastItem() - - arrowTypeField.lastItem() - - - - - - - .setState(1) - - .setState(1) - - - - - - - arrowTypeField.addItemWithTitle('Straight') - - arrowTypeField.addItemWithTitle('Straight') - - - - - - - arrowTypeField.lastItem() - - arrowTypeField.lastItem() - - - - - - - .setState(0) - - .setState(0) - - - - - - - arrowTypeField.addItemWithTitle('Angled') - - arrowTypeField.addItemWithTitle('Angled') - - - - - - - arrowTypeField.lastItem() - - arrowTypeField.lastItem() - - - - - - - .setState(0) - - .setState(0) - - - - - - - (docTypeSettings == "Straight") - - (docTypeSettings == "Straight") - - - if + - - - - arrowTypeField.addItemWithTitle('Straight') - - arrowTypeField.addItemWithTitle('Straight') - - - - - - - arrowTypeField.lastItem() - - arrowTypeField.lastItem() - - - - - - - .setState(1) - - .setState(1) - - - - - - - arrowTypeField.addItemWithTitle('Angled') - - arrowTypeField.addItemWithTitle('Angled') - - - - - - - arrowTypeField.lastItem() - - arrowTypeField.lastItem() - - - - - - - .setState(0) - - .setState(0) - - - - - - - arrowTypeField.addItemWithTitle('Curved') - - arrowTypeField.addItemWithTitle('Curved') - - - - - - - arrowTypeField.lastItem() - - arrowTypeField.lastItem() - - - - - - - .setState(0) - - .setState(0) - - - - - - - arrowTypeField.addItemWithTitle('Angled') - - arrowTypeField.addItemWithTitle('Angled') - - - - - - - arrowTypeField.addItemWithTitle('Curved') - - arrowTypeField.addItemWithTitle('Curved') - - - - - - - arrowTypeField.addItemWithTitle('Straight') - - arrowTypeField.addItemWithTitle('Straight') - - - - - - - - - - - function deleteConnectionFromData(connectionIndex) - - function deleteConnectionFromData(connectionIndex) - - - - - - let newConnections = [] - - let newConnections = [] - - - - - - - (pluginData) - - (pluginData) - - - if + - - - - let connections = pluginData - - let connections = pluginData - - - - - - - - - i < connections.length - - i < connections.length - - - for - - - - i++ - - i++ - - - - - - - (i != connectionIndex) - - (i != connectionIndex) - - - if + - - - - newConnections.push(connections[i]) - - newConnections.push(connections[i]) - - - - - - - - - - - - - - return newConnections - - return newConnections - - - - - - - - - - function deleteLine(lineID) - - function deleteLine(lineID) - - - - - - let lineObject = document.getLayerWithID(lineID) - - let lineObject = document.getLayerWithID(lineID) - - - - - - - (lineObject) - - (lineObject) - - - if + - - - - selectedGroup = lineObject.parent - - selectedGroup = lineObject.parent - - - - - - - lineObject.remove() - - lineObject.remove() - - - - - - - (selectedGroup.layers.length == 0) - - (selectedGroup.layers.length == 0) - - - if + - - - - selectedGroup.remove() - - selectedGroup.remove() - - - - - - - - - - - function updateSpacing(sourceObjectID, childObjectID, direction) - - function updateSpacing(sourceObjectID, childObject... - - - - - - let sourceObject = document.getLayerWithID(sourceObjectID) - - let sourceObject = document.getLayerWithID(sourceO... - - - - - - - let childObject = document.getLayerWithID(childObjectID) - - let childObject = document.getLayerWithID(childObj... - - - - - - - (Settings.settingForKey("arrowSpacing") && Settings.settingForKey("arrowSpacing") != 0) - - (Settings.settingForKey("arrowSpacing") && Setting... - - - if + - - - - Settings.settingForKey('arrowSpacing') - - Settings.settingForKey('arrowSpacing') - - - - - - - let currentSpacing = Settings.settingForKey('arrowSpacing') - - let currentSpacing = Settings.settingForKey('arrow... - - - - - - - (direction == "Right") - - (direction == "Right") - - - if + - - - - childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing - - childObject.frame.x = sourceObject.frame.x + sourc... - - - - - - - (direction == "Down") - - (direction == "Down") - - - if + - - - - childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing - - childObject.frame.y = sourceObject.frame.y + sourc... - - - - - - - (direction == "Left") - - (direction == "Left") - - - if + - - - - childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing - - childObject.frame.x = sourceObject.frame.x - child... - - - - - - - (direction == "Up") - - (direction == "Up") - - - if + - - - - childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing - - childObject.frame.y = sourceObject.frame.y - child... - - - - - - - - - - - function autoAlignLayer(sourceObjectID, childObjectID, direction) - - function autoAlignLayer(sourceObjectID, childObjec... - - - - - - let sourceObject = document.getLayerWithID(sourceObjectID) - - let sourceObject = document.getLayerWithID(sourceO... - - - - - - - let childObject = document.getLayerWithID(childObjectID) - - let childObject = document.getLayerWithID(childObj... - - - - - - - (Settings.settingForKey("autoAlign")) - - (Settings.settingForKey("autoAlign")) - - - if + - - - - (Settings.settingForKey("autoAlign") == true) - - (Settings.settingForKey("autoAlign") == true) - - - if + - - - - (direction == "Right" || direction == "Left") - - (direction == "Right" || direction == "Left") - - - if + - - - - sourceMidY = sourceObject.frame.y + sourceObject.frame.height / 2 - - sourceMidY = sourceObject.frame.y + sourceObject.f... - - - - - - - childMidY = childObject.frame.y + childObject.frame.height / 2 - - childMidY = childObject.frame.y + childObject.fram... - - - - - - - diff = sourceMidY - childMidY - - diff = sourceMidY - childMidY - - - - - - - (diff > -6 && diff < 6) - - (diff > -6 && diff < 6) - - - if + - - - - childObject.frame.y = childObject.frame.y + diff - - childObject.frame.y = childObject.frame.y + diff - - - - - - - (direction == "Down" || direction == "Up") - - (direction == "Down" || direction == "Up") - - - if + - - - - sourceMidX = sourceObject.frame.x + sourceObject.frame.width / 2 - - sourceMidX = sourceObject.frame.x + sourceObject.f... - - - - - - - childMidX = childObject.frame.x + childObject.frame.width / 2 - - childMidX = childObject.frame.x + childObject.fram... - - - - - - - diff = sourceMidX - childMidX - - diff = sourceMidX - childMidX - - - - - - - (diff > -6 && diff < 6) - - (diff > -6 && diff < 6) - - - if + - - - - childObject.frame.x = childObject.frame.x + diff - - childObject.frame.x = childObject.frame.x + diff - - - - - - - - - - - function defineSourceObject(firstObjectID, secondObjectID, direction) - - function defineSourceObject(firstObjectID, secondO... - - - - - - let firstObject = document.getLayerWithID(firstObjectID) - - let firstObject = document.getLayerWithID(firstObj... - - - - - - - let secondObject = document.getLayerWithID(secondObjectID) - - let secondObject = document.getLayerWithID(secondO... - - - - - - - (direction == "Right") - - (direction == "Right") - - - if + - - - - (firstObject.frame.x <= secondObject.frame.x) - - (firstObject.frame.x <= secondObject.frame.x) - - - if + - - - - - sourceObjectID = firstObject.id - - sourceObjectID = firstObject.id - - - - - - - sourceObjectID = secondObject.id - - sourceObjectID = secondObject.id - - - - - - - (direction == "Down") - - (direction == "Down") - - - if + - - - - (firstObject.frame.y <= secondObject.frame.y) - - (firstObject.frame.y <= secondObject.frame.y) - - - if + - - - - - sourceObjectID = firstObject.id - - sourceObjectID = firstObject.id - - - - - - - sourceObjectID = secondObject.id - - sourceObjectID = secondObject.id - - - - - - - (direction == "Left") - - (direction == "Left") - - - if + - - - - (firstObject.frame.x <= secondObject.frame.x) - - (firstObject.frame.x <= secondObject.frame.x) - - - if + - - - - - sourceObjectID = secondObject.id - - sourceObjectID = secondObject.id - - - - - - - sourceObjectID = firstObject.id - - sourceObjectID = firstObject.id - - - - - - - (direction == "Up") - - (direction == "Up") - - - if + - - - - (firstObject.frame.y <= secondObject.frame.y) - - (firstObject.frame.y <= secondObject.frame.y) - - - if + - - - - - sourceObjectID = secondObject.id - - sourceObjectID = secondObject.id - - - - - - - sourceObjectID = firstObject.id - - sourceObjectID = firstObject.id - - - - - - - - - - - - - - return sourceObjectID - - return sourceObjectID - - - - - - - - - - function getSourceObjectFromSelection(selection, direction) - - function getSourceObjectFromSelection(selection, d... - - - - - - let sourceObjectID = [object Object] - - let sourceObjectID = [object Object] - - - - - - - (direction != "Auto") - - (direction != "Auto") - - - if + - - - - - - g < selection.count() - - g < selection.count() - - - for - - - - g++ - - g++ - - - - - - - sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction) - - sourceObjectID = defineSourceObject(sourceObjectID... - - - - - - - - - - - - - - return sourceObjectID - - return sourceObjectID - - - - - - - - - - function alertSetup(alert, viewWidth, viewHeight) - - function alertSetup(alert, viewWidth, viewHeight) - - - - - - alert.setMessageText('Arrow Plugin Settings') - - alert.setMessageText('Arrow Plugin Settings') - - - - - - - alert.addButtonWithTitle('Update Settings') - - alert.addButtonWithTitle('Update Settings') - - - - - - - alert.addButtonWithTitle('Cancel') - - alert.addButtonWithTitle('Cancel') - - - - - - - - - - - - - - return alert - - return alert - - - - - - - - - - function alertLabel(message, state, x, y, width, height) - - function alertLabel(message, state, x, y, width, h... - - - - - - let infoLabel = [object Object] - - let infoLabel = [object Object] - - - - - - - infoLabel.setStringValue(message) - - infoLabel.setStringValue(message) - - - - - - - infoLabel.setSelectable(false) - - infoLabel.setSelectable(false) - - - - - - - infoLabel.setDrawsBackground(false) - - infoLabel.setDrawsBackground(false) - - - - - - - infoLabel.setBezeled(false) - - infoLabel.setBezeled(false) - - - - - - - (state == false) - - (state == false) - - - if + - - - - infoLabel.textColor = NSColor.disabledControlTextColor() - - infoLabel.textColor = NSColor.disabledControlTextC... - - - - - - - - - - - - - - return infoLabel - - return infoLabel - - - - - - - - - - function alertCheckbox(message, state, x, y, width, height) - - function alertCheckbox(message, state, x, y, width... - - - - - - let checkbox = [object Object] - - let checkbox = [object Object] - - - - - - - checkbox.setButtonType(NSSwitchButton) - - checkbox.setButtonType(NSSwitchButton) - - - - - - - checkbox.setBezelStyle(0) - - checkbox.setBezelStyle(0) - - - - - - - checkbox.setTitle(message) - - checkbox.setTitle(message) - - - - - - - (Settings.settingForKey("autoAlign")) - - (Settings.settingForKey("autoAlign")) - - - if + - - - - - let currentState = Settings.settingForKey('autoAlign') - - let currentState = Settings.settingForKey('autoAli... - - - - - - - checkbox.setState(currentState) - - checkbox.setState(currentState) - - - - - - - checkbox.setState(state) - - checkbox.setState(state) - - - - - - - - - - - - - - return checkbox - - return checkbox - - - - - - - - - - function getLayerStyles(name) - - function getLayerStyles(name) - - - - - - let allStyles = docData.allLayerStyles() - - let allStyles = docData.allLayerStyles() - - - - - - - let keyword = "$arrow" - - let keyword = "$arrow" - - - - - - - let styles = [] - - let styles = [] - - - - - - - - - i < allStyles.count() - - i < allStyles.count() - - - for - - - - i++ - - i++ - - - - - - - (name == null) - - (name == null) - - - if + - - - - - (allStyles[i].name().includes(keyword)) - - (allStyles[i].name().includes(keyword)) - - - if + - - - - allStyles[i].name() - - allStyles[i].name() - - - - - - - styles.push(allStyles[i]) - - styles.push(allStyles[i]) - - - - - - - (allStyles[i].name() == name) - - (allStyles[i].name() == name) - - - if + - - - - styles.push(allStyles[i]) - - styles.push(allStyles[i]) - - - - - - - - - - - - - - return styles - - return styles - - - - - - - - - - function start(context, direction, isCondition) - - function start(context, direction, isCondition) - - - - - - let selection = context.selection - - let selection = context.selection - - - - - - - (selection.count() > 1 && selection[0].class() != "MSArtboardGroup") - - (selection.count() > 1 && selection[0].class() != ... - - - if + - - - - - let sourceObjectID = getSourceObjectFromSelection(selection, direction) - - let sourceObjectID = getSourceObjectFromSelection(... - - - - - - - let currentConnectionsData = newConnectionsData - - let currentConnectionsData = newConnectionsData - - - - - - - - - g < selection.count() - - g < selection.count() - - - for - - - - g++ - - g++ - - - - - - - (selection[g].objectID() != sourceObjectID) - - (selection[g].objectID() != sourceObjectID) - - - if + - - - - let connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), currentConnectionsData) - - let connectionIndex = findConnectionIndex(sourceOb... - - - - - - - (connectionIndex.length == 0) - - (connectionIndex.length == 0) - - - if + - - - - - createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition) - - createArrow(sourceObjectID, selection[g].objectID(... - - - - - - - sketch.UI.message('New connection is created 🚀') - - sketch.UI.message('New connection is created 🚀') - - - - - - - updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex) - - updateArrow(sourceObjectID, selection[g].objectID(... - - - - - - - sketch.UI.message('Current connection is updated 🤘') - - sketch.UI.message('Current connection is updated �... - - - - - - - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, 'arrowConnections', docData, pluginKey) - - context.command.setValue_forKey_onLayer_forPluginI... - - - - - - - sketch.UI.message('Please select more than two layers. Artboards are coming soon 🥳') - - sketch.UI.message('Please select more than two lay... - - - - - - - - - - - function addCondition(keyword, x, y) - - function addCondition(keyword, x, y) - - - - - - let libraries = sketch.getLibraries() - - let libraries = sketch.getLibraries() - - - - - - - - - g < libraries.length - - g < libraries.length - - - for - - - - g++ - - g++ - - - - - - - symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document) - - symbolReferences = libraries[g].getImportableSymbo... - - - - - - - - - i < symbolReferences.length - - i < symbolReferences.length - - - for - - - - i++ - - i++ - - - - - - - (symbolReferences[i].name.includes(keyword)) - - (symbolReferences[i].name.includes(keyword)) - - - if + - - - - libraryObject = symbolReferences[i] - - libraryObject = symbolReferences[i] - - - - - - - (libraryObject == null) - - (libraryObject == null) - - - if + - - - - - symbol = null - - symbol = null - - - - - - - UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as "#condition" so it will be added here') - - UI.alert('Condition symbol is not found', 'If you ... - - - - - - - let symbolMaster = libraryObject.import() - - let symbolMaster = libraryObject.import() - - - - - - - symbol = symbolMaster.createNewInstance() - - symbol = symbolMaster.createNewInstance() - - - - - - - symbol = addToConditionGroup(symbol, x, y) - - symbol = addToConditionGroup(symbol, x, y) - - - - - - - - - - - - - - return symbol - - return symbol - - - - - - - - - - function updateCondition(conditionID, x, y) - - function updateCondition(conditionID, x, y) - - - - - - let condition = document.getLayerWithID(conditionID) - - let condition = document.getLayerWithID(conditionI... - - - - - - - let conGroup = checkForGroup('Conditions') - - let conGroup = checkForGroup('Conditions') - - - - - - - let arGroup = checkForGroup('Arrows') - - let arGroup = checkForGroup('Arrows') - - - - - - - let arGroupX = - - let arGroupX = - - - - - - - (arGroup != null) - - (arGroup != null) - - - ? + - - - - - 0 - - 0 - - - - - - - let arGroupY = - - let arGroupY = - - - - - - - (arGroup != null) - - (arGroup != null) - - - ? + - - - - - 0 - - 0 - - - - - - - (conGroup) - - (conGroup) - - - if + - - - - - condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX) - - condition.frame.x = x - condition.frame.width / 2 ... - - - - - - - conGroup.frame() - - conGroup.frame() - - - - - - - condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY) - - condition.frame.y = y - condition.frame.height / 2... - - - - - - - conGroup.frame() - - conGroup.frame() - - - - - - - conGroup.fixGeometryWithOptions(1) - - conGroup.fixGeometryWithOptions(1) - - - - - - - condition.frame.x = x - condition.frame.width / 2 - - condition.frame.x = x - condition.frame.width / 2 - - - - - - - condition.frame.y = y - condition.frame.height / 2 - - condition.frame.y = y - condition.frame.height / 2 - - - - - - - - - - - - - - return condition.id - - return condition.id - - - - - - - - - - function getConnectionPos(firstObject, secondObject, direction) - - function getConnectionPos(firstObject, secondObjec... - - - - - - let firstObjectAbsPos = firstObject.frame.changeBasis({*}) - - let firstObjectAbsPos = firstObject.frame.changeBa... - - - - - - - {*} - - {*} - - - - - - - from: firstObject.parent - - from: firstObject.parent - - - - - - - to: currentParentGroup - - to: currentParentGroup - - - - - - - let secondObjectAbsPos = secondObject.frame.changeBasis({*}) - - let secondObjectAbsPos = secondObject.frame.change... - - - - - - - {*} - - {*} - - - - - - - from: secondObject.parent - - from: secondObject.parent - - - - - - - to: currentParentGroup - - to: currentParentGroup - - - - - - - let currentGroup = checkForGroup('Arrows') - - let currentGroup = checkForGroup('Arrows') - - - - - - - (currentGroup) - - (currentGroup) - - - if + - - - - - diffX = [object Object] - - diffX = [object Object] - - - - - - - currentGroup.frame() - - currentGroup.frame() - - - - - - - diffY = [object Object] - - diffY = [object Object] - - - - - - - currentGroup.frame() - - currentGroup.frame() - - - - - - - diffX = 0 - - diffX = 0 - - - - - - - diffY = 0 - - diffY = 0 - - - - - - - let connectionPos = {*} - - let connectionPos = {*} - - - - - - - firstLayerPosX: null - - firstLayerPosX: null - - - - - - - firstLayerPosY: null - - firstLayerPosY: null - - - - - - - secondLayerPosX: null - - secondLayerPosX: null - - - - - - - secondLayerPosY: null - - secondLayerPosY: null - - - - - - - middlePosX: null - - middlePosX: null - - - - - - - middlePosY: null // Getting all the positions - - middlePosY: null // Getting all the positions - - - - - - - (direction == "Up") - - (direction == "Up") - - - if + - - - - connectionPos.firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX - - connectionPos.firstLayerPosX = firstObjectAbsPos.x... - - - - - - - connectionPos.firstLayerPosY = firstObjectAbsPos.y - diffY - - connectionPos.firstLayerPosY = firstObjectAbsPos.y... - - - - - - - connectionPos.secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX - - connectionPos.secondLayerPosX = secondObjectAbsPos... - - - - - - - connectionPos.secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height - diffY - - connectionPos.secondLayerPosY = secondObjectAbsPos... - - - - - - - connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2 - - connectionPos.middlePosX = (connectionPos.firstLay... - - - - - - - connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2 - - connectionPos.middlePosY = (connectionPos.firstLay... - - - - - - - (direction == "Right") - - (direction == "Right") - - - if + - - - - connectionPos.firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width - diffX - - connectionPos.firstLayerPosX = firstObjectAbsPos.x... - - - - - - - connectionPos.firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY - - connectionPos.firstLayerPosY = firstObjectAbsPos.y... - - - - - - - connectionPos.secondLayerPosX = secondObjectAbsPos.x - diffX - - connectionPos.secondLayerPosX = secondObjectAbsPos... - - - - - - - connectionPos.secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY - - connectionPos.secondLayerPosY = secondObjectAbsPos... - - - - - - - connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2 - - connectionPos.middlePosX = (connectionPos.firstLay... - - - - - - - connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2 - - connectionPos.middlePosY = (connectionPos.firstLay... - - - - - - - (direction == "Down") - - (direction == "Down") - - - if + - - - - connectionPos.firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX - - connectionPos.firstLayerPosX = firstObjectAbsPos.x... - - - - - - - connectionPos.firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height - diffY - - connectionPos.firstLayerPosY = firstObjectAbsPos.y... - - - - - - - connectionPos.secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX - - connectionPos.secondLayerPosX = secondObjectAbsPos... - - - - - - - connectionPos.secondLayerPosY = secondObjectAbsPos.y - diffY - - connectionPos.secondLayerPosY = secondObjectAbsPos... - - - - - - - connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2 - - connectionPos.middlePosX = (connectionPos.firstLay... - - - - - - - connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2 - - connectionPos.middlePosY = (connectionPos.firstLay... - - - - - - - (direction == "Left") - - (direction == "Left") - - - if + - - - - connectionPos.firstLayerPosX = firstObjectAbsPos.x - diffX - - connectionPos.firstLayerPosX = firstObjectAbsPos.x... - - - - - - - connectionPos.firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY - - connectionPos.firstLayerPosY = firstObjectAbsPos.y... - - - - - - - connectionPos.secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width - diffX - - connectionPos.secondLayerPosX = secondObjectAbsPos... - - - - - - - connectionPos.secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY - - connectionPos.secondLayerPosY = secondObjectAbsPos... - - - - - - - connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2 - - connectionPos.middlePosX = (connectionPos.firstLay... - - - - - - - connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2 - - connectionPos.middlePosY = (connectionPos.firstLay... - - - - - - - - - - - - - - return connectionPos - - return connectionPos - - - - - - - - - - function drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction) - - function drawStraightLine(firstLayerPosX, firstLay... - - - - - - let path = NSBezierPath.bezierPath() - - let path = NSBezierPath.bezierPath() - - - - - - - (direction == "Up") - - (direction == "Up") - - - if + - - - - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)) - - path.moveToPoint(NSMakePoint(firstLayerPosX, first... - - - - - - - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)) - - path.lineToPoint(NSMakePoint(secondLayerPosX, seco... - - - - - - - (direction == "Right") - - (direction == "Right") - - - if + - - - - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)) - - path.moveToPoint(NSMakePoint(firstLayerPosX, first... - - - - - - - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)) - - path.lineToPoint(NSMakePoint(secondLayerPosX, seco... - - - - - - - (direction == "Down") - - (direction == "Down") - - - if + - - - - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)) - - path.moveToPoint(NSMakePoint(firstLayerPosX, first... - - - - - - - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)) - - path.lineToPoint(NSMakePoint(secondLayerPosX, seco... - - - - - - - (direction == "Left") - - (direction == "Left") - - - if + - - - - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)) - - path.moveToPoint(NSMakePoint(firstLayerPosX, first... - - - - - - - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)) - - path.lineToPoint(NSMakePoint(secondLayerPosX, seco... - - - - - - - let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) - - let line = MSShapeGroup.layerWithPath(MSPath.pathW... - - - - - - - line.setName('Straight Arrow') - - line.setName('Straight Arrow') - - - - - - - - - - - - - - return line - - return line - - - - - - - - - - function drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction) - - function drawAngledLine(firstLayerPosX, firstLayer... - - - - - - let path = NSBezierPath.bezierPath() - - let path = NSBezierPath.bezierPath() - - - - - - - (direction == "Up") - - (direction == "Up") - - - if + - - - - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)) - - path.moveToPoint(NSMakePoint(firstLayerPosX, first... - - - - - - - path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)) - - path.lineToPoint(NSMakePoint(firstLayerPosX, middl... - - - - - - - path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)) - - path.lineToPoint(NSMakePoint(secondLayerPosX, midd... - - - - - - - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)) - - path.lineToPoint(NSMakePoint(secondLayerPosX, seco... - - - - - - - (direction == "Right") - - (direction == "Right") - - - if + - - - - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)) - - path.moveToPoint(NSMakePoint(firstLayerPosX, first... - - - - - - - path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)) - - path.lineToPoint(NSMakePoint(middlePosX, firstLaye... - - - - - - - path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)) - - path.lineToPoint(NSMakePoint(middlePosX, secondLay... - - - - - - - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)) - - path.lineToPoint(NSMakePoint(secondLayerPosX, seco... - - - - - - - (direction == "Down") - - (direction == "Down") - - - if + - - - - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)) - - path.moveToPoint(NSMakePoint(firstLayerPosX, first... - - - - - - - path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)) - - path.lineToPoint(NSMakePoint(firstLayerPosX, middl... - - - - - - - path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)) - - path.lineToPoint(NSMakePoint(secondLayerPosX, midd... - - - - - - - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)) - - path.lineToPoint(NSMakePoint(secondLayerPosX, seco... - - - - - - - (direction == "Left") - - (direction == "Left") - - - if + - - - - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)) - - path.moveToPoint(NSMakePoint(firstLayerPosX, first... - - - - - - - path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)) - - path.lineToPoint(NSMakePoint(middlePosX, firstLaye... - - - - - - - path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)) - - path.lineToPoint(NSMakePoint(middlePosX, secondLay... - - - - - - - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)) - - path.lineToPoint(NSMakePoint(secondLayerPosX, seco... - - - - - - - let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) - - let line = MSShapeGroup.layerWithPath(MSPath.pathW... - - - - - - - let points = [object Object] - - let points = [object Object] - - - - - - - points[1].cornerRadius = 20 - - points[1].cornerRadius = 20 - - - - - - - points[2].cornerRadius = 20 - - points[2].cornerRadius = 20 - - - - - - - line.setName('Angled Arrow') - - line.setName('Angled Arrow') - - - - - - - - - - - - - - return line - - return line - - - - - - - - - - function drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction) - - function drawCurvedLine(firstLayerPosX, firstLayer... - - - - - - let path = NSBezierPath.bezierPath() - - let path = NSBezierPath.bezierPath() - - - - - - - (direction == "Up") - - (direction == "Up") - - - if + - - - - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)) - - path.moveToPoint(NSMakePoint(firstLayerPosX, first... - - - - - - - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)) - - path.lineToPoint(NSMakePoint(secondLayerPosX, seco... - - - - - - - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) - - line = MSShapeGroup.layerWithPath(MSPath.pathWithB... - - - - - - - let points = [object Object] - - let points = [object Object] - - - - - - - points[0].curveMode = 4 - - points[0].curveMode = 4 - - - - - - - points[1].curveMode = 4 - - points[1].curveMode = 4 - - - - - - - points[0].hasCurveFrom = true - - points[0].hasCurveFrom = true - - - - - - - points[1].hasCurveTo = true - - points[1].hasCurveTo = true - - - - - - - (firstLayerPosX < secondLayerPosX) - - (firstLayerPosX < secondLayerPosX) - - - if + - - - - - points[0].curveFrom = {*} - - points[0].curveFrom = {*} - - - - - - - x: 0 - - x: 0 - - - - - - - y: 0.5 - - y: 0.5 - - - - - - - points[0].curveTo = {*} - - points[0].curveTo = {*} - - - - - - - x: -0.5 - - x: -0.5 - - - - - - - y: 1 - - y: 1 - - - - - - - points[1].curveFrom = {*} - - points[1].curveFrom = {*} - - - - - - - x: 1 - - x: 1 - - - - - - - y: 1 - - y: 1 - - - - - - - points[1].curveTo = {*} - - points[1].curveTo = {*} - - - - - - - x: 1 - - x: 1 - - - - - - - y: 0.5 - - y: 0.5 - - - - - - - points[0].curveFrom = {*} - - points[0].curveFrom = {*} - - - - - - - x: 1 - - x: 1 - - - - - - - y: 0.5 - - y: 0.5 - - - - - - - points[0].curveTo = {*} - - points[0].curveTo = {*} - - - - - - - x: -0.5 - - x: -0.5 - - - - - - - y: 1 - - y: 1 - - - - - - - points[1].curveFrom = {*} - - points[1].curveFrom = {*} - - - - - - - x: 1 - - x: 1 - - - - - - - y: 1 - - y: 1 - - - - - - - points[1].curveTo = {*} - - points[1].curveTo = {*} - - - - - - - x: 0 - - x: 0 - - - - - - - y: 0.5 - - y: 0.5 - - - - - - - (direction == "Right") - - (direction == "Right") - - - if + - - - - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)) - - path.moveToPoint(NSMakePoint(firstLayerPosX, first... - - - - - - - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)) - - path.lineToPoint(NSMakePoint(secondLayerPosX, seco... - - - - - - - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) - - line = MSShapeGroup.layerWithPath(MSPath.pathWithB... - - - - - - - let points = [object Object] - - let points = [object Object] - - - - - - - points[0].curveMode = 4 - - points[0].curveMode = 4 - - - - - - - points[1].curveMode = 4 - - points[1].curveMode = 4 - - - - - - - points[0].hasCurveFrom = true - - points[0].hasCurveFrom = true - - - - - - - points[1].hasCurveTo = true - - points[1].hasCurveTo = true - - - - - - - (firstLayerPosY < secondLayerPosY) - - (firstLayerPosY < secondLayerPosY) - - - if + - - - - - points[0].curveFrom = {*} - - points[0].curveFrom = {*} - - - - - - - x: 0.5 - - x: 0.5 - - - - - - - y: 0 - - y: 0 - - - - - - - points[0].curveTo = {*} - - points[0].curveTo = {*} - - - - - - - x: -0.5 - - x: -0.5 - - - - - - - y: 1 - - y: 1 - - - - - - - points[1].curveFrom = {*} - - points[1].curveFrom = {*} - - - - - - - x: 1 - - x: 1 - - - - - - - y: 1 - - y: 1 - - - - - - - points[1].curveTo = {*} - - points[1].curveTo = {*} - - - - - - - x: 0.5 - - x: 0.5 - - - - - - - y: 1 - - y: 1 - - - - - - - points[0].curveFrom = {*} - - points[0].curveFrom = {*} - - - - - - - x: 0.5 - - x: 0.5 - - - - - - - y: 1 - - y: 1 - - - - - - - points[0].curveTo = {*} - - points[0].curveTo = {*} - - - - - - - x: -0.5 - - x: -0.5 - - - - - - - y: 1 - - y: 1 - - - - - - - points[1].curveFrom = {*} - - points[1].curveFrom = {*} - - - - - - - x: 1 - - x: 1 - - - - - - - y: 1 - - y: 1 - - - - - - - points[1].curveTo = {*} - - points[1].curveTo = {*} - - - - - - - x: 0.5 - - x: 0.5 - - - - - - - y: 0 - - y: 0 - - - - - - - (direction == "Down") - - (direction == "Down") - - - if + - - - - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)) - - path.moveToPoint(NSMakePoint(firstLayerPosX, first... - - - - - - - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)) - - path.lineToPoint(NSMakePoint(secondLayerPosX, seco... - - - - - - - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) - - line = MSShapeGroup.layerWithPath(MSPath.pathWithB... - - - - - - - let points = [object Object] - - let points = [object Object] - - - - - - - points[0].curveMode = 4 - - points[0].curveMode = 4 - - - - - - - points[1].curveMode = 4 - - points[1].curveMode = 4 - - - - - - - points[0].hasCurveFrom = true - - points[0].hasCurveFrom = true - - - - - - - points[1].hasCurveTo = true - - points[1].hasCurveTo = true - - - - - - - (firstLayerPosX < secondLayerPosX) - - (firstLayerPosX < secondLayerPosX) - - - if + - - - - - points[0].curveFrom = {*} - - points[0].curveFrom = {*} - - - - - - - x: 0 - - x: 0 - - - - - - - y: 0.5 - - y: 0.5 - - - - - - - points[0].curveTo = {*} - - points[0].curveTo = {*} - - - - - - - x: -0.5 - - x: -0.5 - - - - - - - y: 1 - - y: 1 - - - - - - - points[1].curveFrom = {*} - - points[1].curveFrom = {*} - - - - - - - x: 1 - - x: 1 - - - - - - - y: 1 - - y: 1 - - - - - - - points[1].curveTo = {*} - - points[1].curveTo = {*} - - - - - - - x: 1 - - x: 1 - - - - - - - y: 0.5 - - y: 0.5 - - - - - - - points[0].curveFrom = {*} - - points[0].curveFrom = {*} - - - - - - - x: 1 - - x: 1 - - - - - - - y: 0.5 - - y: 0.5 - - - - - - - points[0].curveTo = {*} - - points[0].curveTo = {*} - - - - - - - x: -0.5 - - x: -0.5 - - - - - - - y: 1 - - y: 1 - - - - - - - points[1].curveFrom = {*} - - points[1].curveFrom = {*} - - - - - - - x: 1 - - x: 1 - - - - - - - y: 1 - - y: 1 - - - - - - - points[1].curveTo = {*} - - points[1].curveTo = {*} - - - - - - - x: 0 - - x: 0 - - - - - - - y: 0.5 - - y: 0.5 - - - - - - - (direction == "Left") - - (direction == "Left") - - - if + - - - - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)) - - path.moveToPoint(NSMakePoint(firstLayerPosX, first... - - - - - - - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)) - - path.lineToPoint(NSMakePoint(secondLayerPosX, seco... - - - - - - - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)) - - line = MSShapeGroup.layerWithPath(MSPath.pathWithB... - - - - - - - let points = [object Object] - - let points = [object Object] - - - - - - - points[0].curveMode = 4 - - points[0].curveMode = 4 - - - - - - - points[1].curveMode = 4 - - points[1].curveMode = 4 - - - - - - - points[0].hasCurveFrom = true - - points[0].hasCurveFrom = true - - - - - - - points[1].hasCurveTo = true - - points[1].hasCurveTo = true - - - - - - - (firstLayerPosY < secondLayerPosY) - - (firstLayerPosY < secondLayerPosY) - - - if + - - - - - points[0].curveFrom = {*} - - points[0].curveFrom = {*} - - - - - - - x: 0.5 - - x: 0.5 - - - - - - - y: 0 - - y: 0 - - - - - - - points[0].curveTo = {*} - - points[0].curveTo = {*} - - - - - - - x: -0.5 - - x: -0.5 - - - - - - - y: 1 - - y: 1 - - - - - - - points[1].curveFrom = {*} - - points[1].curveFrom = {*} - - - - - - - x: 1 - - x: 1 - - - - - - - y: 1 - - y: 1 - - - - - - - points[1].curveTo = {*} - - points[1].curveTo = {*} - - - - - - - x: 0.5 - - x: 0.5 - - - - - - - y: 1 - - y: 1 - - - - - - - points[0].curveFrom = {*} - - points[0].curveFrom = {*} - - - - - - - x: 0.5 - - x: 0.5 - - - - - - - y: 1 - - y: 1 - - - - - - - points[0].curveTo = {*} - - points[0].curveTo = {*} - - - - - - - x: -0.5 - - x: -0.5 - - - - - - - y: 1 - - y: 1 - - - - - - - points[1].curveFrom = {*} - - points[1].curveFrom = {*} - - - - - - - x: 1 - - x: 1 - - - - - - - y: 1 - - y: 1 - - - - - - - points[1].curveTo = {*} - - points[1].curveTo = {*} - - - - - - - x: 0.5 - - x: 0.5 - - - - - - - y: 0 - - y: 0 - - - - - - - line.setName('Curved Arrow') - - line.setName('Curved Arrow') - - - - - - - - - - - - - - return line - - return line - - - - - - - - - - function styleLine(line, style) - - function styleLine(line, style) - - - - - - (style != null) - - (style != null) - - - if + - - - - - (getLayerStyles(style) != null && style != "Default Style") - - (getLayerStyles(style) != null && style != "Defaul... - - - if + - - - - - localStyle = style - - localStyle = style - - - - - - - let ownStyle = getLayerStyles(style) - - let ownStyle = getLayerStyles(style) - - - - - - - line.sharedStyle = ownStyle[0] - - line.sharedStyle = ownStyle[0] - - - - - - - localStyle = "Default Style" - - localStyle = "Default Style" - - - - - - - let border = [object Object] - - let border = [object Object] - - - - - - - border.color = MSColor.colorWithRGBADictionary({*}) - - border.color = MSColor.colorWithRGBADictionary({*}... - - - - - - - {*} - - {*} - - - - - - - r: 0.89 - - r: 0.89 - - - - - - - g: 0.89 - - g: 0.89 - - - - - - - b: 0.89 - - b: 0.89 - - - - - - - a: 1 - - a: 1 - - - - - - - border.thickness = 2 - - border.thickness = 2 - - - - - - - line.style().endMarkerType = 2 - - line.style().endMarkerType = 2 - - - - - - - line.style() - - line.style() - - - - - - - (context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) != "Default Style") - - (context.command.valueForKey_onLayer_forPluginIden... - - - if + - - - - - localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)) - - localStyle = getLayerStyles(context.command.valueF... - - - - - - - line.sharedStyle = localStyle[0] - - line.sharedStyle = localStyle[0] - - - - - - - localStyle = localStyle[0].name() - - localStyle = localStyle[0].name() - - - - - - - localStyle = "Default Style" - - localStyle = "Default Style" - - - - - - - let border = [object Object] - - let border = [object Object] - - - - - - - border.color = MSColor.colorWithRGBADictionary({*}) - - border.color = MSColor.colorWithRGBADictionary({*}... - - - - - - - {*} - - {*} - - - - - - - r: 0.89 - - r: 0.89 - - - - - - - g: 0.89 - - g: 0.89 - - - - - - - b: 0.89 - - b: 0.89 - - - - - - - a: 1 - - a: 1 - - - - - - - border.thickness = 2 - - border.thickness = 2 - - - - - - - line.style().endMarkerType = 2 - - line.style().endMarkerType = 2 - - - - - - - line.style() - - line.style() - - - - - - - - - - - - - - return localStyle - - return localStyle - - - - - - - Program: source module - - Program: source module - - - - - - - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - false - - - - false - - - - false - - - - false - - - - false - - - - false - - - - false - - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - false - - - - false - - - - false - - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - false - - - - false - - - - false - - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - false - - - - false - - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - false - - - - false - - - - - - - - - - - - false - - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - false - - - - false - - - - false - - - - false - - - - false - - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - false - - - - false - - - - - - - - false - - - - false - - - - - - - - false - - - - false - - - - - - - - false - - - - false - - - - - - - - false - - - - false - - - - - - - - false - - - - false - - - - - - - - false - - - - false - - - - - - - - false - - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - false - - - - false - - - - - - - - false - - - - false - - - - - - - - false - - - - false - - - - - - - - false - - - - false - - - - - - - - false - - - - false - - - - - - - - false - - - - false - - - - - - - - false - - - - false - - - - - - - - false - - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - false - - - - false - - - - - - - - false - - - - false - - - - - - - - false - - - - false - - - - - - - - false - - - - false - - - - - - - - false - - - - false - - - - - - - - false - - - - false - - - - - - - - false - - - - false - - - - - - - - false - - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - false - - - - false - - - - - - - - false - - - - false - - - - - - - - false - - - - false - - - - - - - - false - - - - false - - - - - - - - false - - - - false - - - - - - - - false - - - - false - - - - - - - - false - - - - false - - - - - - - - false - - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - false - - - - false - - - - false - - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - false - - - - false - - - - false - - - - false - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/settings.js b/src/settings.js index 3cd3fd5..a2ea077 100644 --- a/src/settings.js +++ b/src/settings.js @@ -1,4 +1,6 @@ import sketch from "sketch"; +import { getLayerStyles } from "./utilities/styling.js"; + let UI = require("sketch/ui"); var Settings = require("sketch/settings"); @@ -355,22 +357,4 @@ function alertCheckbox(message, state, x, y, width, height) { return checkbox; } -function getLayerStyles(name) { - // Duplicate - let allStyles = docData.allLayerStyles(); - let keyword = "$arrow"; - let styles = []; - for (let i = 0; i < allStyles.count(); i++) { - if (name == null) { - if (allStyles[i].name().includes(keyword)) { - styles.push(allStyles[i]); - } - } else { - if (allStyles[i].name() == name) { - styles.push(allStyles[i]); - } - } - } - return styles; -} diff --git a/src/updateArrow.js b/src/updateArrow.js index 5d9eca7..f454fe3 100644 --- a/src/updateArrow.js +++ b/src/updateArrow.js @@ -16,62 +16,6 @@ connectionsData = getConnectionsData(); -export function update(context, level, isUpdate) { - // 1 - selection level - // 2 - artboard level - // 3 - document level - let newConnectionsData = []; - let selection = context.selection; - let firstObjectArtboard; - let secondObjectArtboard; - - - - if (connectionsData.length > 0) { - for (let i = 0; i < connectionsData.length; i++) { - deleteLine(connectionsData[i].line); - - if (level == 3) { - if(isUpdate){ - updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i); - sketch.UI.message("All arrows are updated"); - } else { - newConnectionsData = null - sketch.UI.message("All arrows are deleted"); - } - } - if (level == 2) { - firstObjectArtboard = document.getLayerWithID(connectionsData[i].firstObject); - firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID(); - secondObjectArtboard = document.getLayerWithID(connectionsData[i].secondObject); - secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID(); - - if (selection.count() == 1 && selection[0].class() == "MSArtboardGroup") { - - if (firstObjectArtboard == selection[0].objectID()) { - if (secondObjectArtboard == selection[0].objectID()) { - updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i); - } else { - newConnectionsData.push(connectionsData[i]); - } - } else { - newConnectionsData.push(connectionsData[i]); - } - } - } - sketch.UI.message("All arrows are updated 🚀"); - - - } - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); - } else { - sketch.UI.message("There is no arrows"); - } - - - -} - export function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored // Need to check if we have the layers with such IDs let firstObject = document.getLayerWithID(firstObjectID); diff --git a/src/links.js b/src/utilities/links.js similarity index 100% rename from src/links.js rename to src/utilities/links.js diff --git a/src/utilities/styling.js b/src/utilities/styling.js new file mode 100644 index 0000000..942cbe0 --- /dev/null +++ b/src/utilities/styling.js @@ -0,0 +1,58 @@ +import sketch from 'sketch'; +const pluginKey = "flowArrows"; +let document = sketch.fromNative(context.document); + + +let docData = context.document.documentData(); + +export function styleLine(line, style){ // Refactored + let localStyle; + + if(style != null){ + // For updates + if(getLayerStyles(style) != null && style != "Default Style"){ + // If style is specified + localStyle = style; + let ownStyle = getLayerStyles(style); + line.sharedStyle = ownStyle[0]; + } else { + // if there is no specific style + localStyle = "Default Style"; + let border = line.style().addStylePartOfType(1); + border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1}); + border.thickness = 2; + line.style().endMarkerType = 2; + } + } else { + // For creating new + if(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) != "Default Style"){ + // we have settins almost all the time and it's not default + localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)); + line.sharedStyle = localStyle[0]; + localStyle = localStyle[0].name(); + } else { + localStyle = "Default Style"; + let border = line.style().addStylePartOfType(1); + border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1}); + border.thickness = 2; + line.style().endMarkerType = 2; + } + } + + return localStyle; +} + +export function getLayerStyles(name) { // Refactored + let allStyles = docData.allLayerStyles(); + let keyword = "$arrow"; + let styles = []; + + for(let i = 0; i < allStyles.count(); i++){ + if(name == null) { + if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);} + } else { + if(allStyles[i].name() == name){styles.push(allStyles[i]);} + } + } + return styles; +} \ No newline at end of file From f8e23aed481dabc02cf01d8e1ee6973322e69314 Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Fri, 5 Jul 2019 22:22:40 +0300 Subject: [PATCH 29/44] updated all modules --- arrows.sketchplugin/Contents/Sketch/links.js | 3 +- .../Contents/Sketch/links.js.map | 2 +- arrows.sketchplugin/Contents/Sketch/script.js | 493 +++++++----------- .../Contents/Sketch/script.js.map | 2 +- .../Contents/Sketch/settings.js | 4 +- .../Contents/Sketch/settings.js.map | 2 +- src/createArrow.js | 32 +- src/draw.js | 5 +- src/script.js | 285 ++-------- src/settings.js | 14 +- src/utilities/data.js | 57 ++ src/utilities/getSourceObject.js | 55 ++ src/utilities/links.js | 2 - src/utilities/styling.js | 2 - 14 files changed, 351 insertions(+), 607 deletions(-) create mode 100644 src/utilities/data.js create mode 100644 src/utilities/getSourceObject.js diff --git a/arrows.sketchplugin/Contents/Sketch/links.js b/arrows.sketchplugin/Contents/Sketch/links.js index 6029204..6501f5d 100644 --- a/arrows.sketchplugin/Contents/Sketch/links.js +++ b/arrows.sketchplugin/Contents/Sketch/links.js @@ -95,14 +95,13 @@ var exports = /*!********************************!*\ !*** ./src/utilities/links.js ***! \********************************/ -/*! exports provided: default, getLibrary, joinCommunity */ +/*! exports provided: getLibrary, joinCommunity */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLibrary", function() { return getLibrary; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "joinCommunity", function() { return joinCommunity; }); -/* harmony default export */ __webpack_exports__["default"] = (function (context) {}); function getLibrary(context) { NSWorkspace.sharedWorkspace().openURL(NSURL.URLWithString("https://github.com/faridsabitov/Sketch-Interactions")); } diff --git a/arrows.sketchplugin/Contents/Sketch/links.js.map b/arrows.sketchplugin/Contents/Sketch/links.js.map index feaa18d..a0e28e8 100644 --- a/arrows.sketchplugin/Contents/Sketch/links.js.map +++ b/arrows.sketchplugin/Contents/Sketch/links.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/utilities/links.js"],"names":["context","getLibrary","NSWorkspace","sharedWorkspace","openURL","NSURL","URLWithString","joinCommunity"],"mappings":";;;;;;AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;;;;;;;AClFA;AAAA;AAAA;AAAe,yEAASA,OAAT,EAAkB,CAAE;AAE5B,SAASC,UAAT,CAAoBD,OAApB,EAA6B;AAClCE,aAAW,CAACC,eAAZ,GAA8BC,OAA9B,CAAsCC,KAAK,CAACC,aAAN,CAAoB,qDAApB,CAAtC;AACD;AAEM,SAASC,aAAT,CAAuBP,OAAvB,EAAgC;AACrCE,aAAW,CAACC,eAAZ,GAA8BC,OAA9B,CAAsCC,KAAK,CAACC,aAAN,CAAoB,qCAApB,CAAtC;AACD,C","file":"links.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/utilities/links.js\");\n","export default function(context) {}\n\nexport function getLibrary(context) {\n NSWorkspace.sharedWorkspace().openURL(NSURL.URLWithString(\"https://github.com/faridsabitov/Sketch-Interactions\"));\n}\n\nexport function joinCommunity(context) {\n NSWorkspace.sharedWorkspace().openURL(NSURL.URLWithString(\"https://spectrum.chat/sketch-arrows\"));\n}"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/utilities/links.js"],"names":["getLibrary","context","NSWorkspace","sharedWorkspace","openURL","NSURL","URLWithString","joinCommunity"],"mappings":";;;;;;AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;;;;;;;AClFA;AAAA;AAAA;AAAO,SAASA,UAAT,CAAoBC,OAApB,EAA6B;AAClCC,aAAW,CAACC,eAAZ,GAA8BC,OAA9B,CAAsCC,KAAK,CAACC,aAAN,CAAoB,qDAApB,CAAtC;AACD;AAEM,SAASC,aAAT,CAAuBN,OAAvB,EAAgC;AACrCC,aAAW,CAACC,eAAZ,GAA8BC,OAA9B,CAAsCC,KAAK,CAACC,aAAN,CAAoB,qCAApB,CAAtC;AACD,C","file":"links.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/utilities/links.js\");\n","export function getLibrary(context) {\n NSWorkspace.sharedWorkspace().openURL(NSURL.URLWithString(\"https://github.com/faridsabitov/Sketch-Interactions\"));\n}\n\nexport function joinCommunity(context) {\n NSWorkspace.sharedWorkspace().openURL(NSURL.URLWithString(\"https://spectrum.chat/sketch-arrows\"));\n}"],"sourceRoot":""} \ No newline at end of file diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index 818bf72..fe0b98f 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -106,19 +106,10 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _draw_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./draw.js */ "./src/draw.js"); -var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); -var pluginKey = "flowArrows"; -var document; -var docData, pluginData, currentParentGroup, newConnectionsData; -document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); -docData = context.document.documentData(); -pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); -currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards - -newConnectionsData = getConnectionsData(); +var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); // Main Function function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored @@ -137,24 +128,9 @@ function createArrow(firstObjectID, secondObjectID, style, type, direction, cond isCondition: isCondition, type: arrow.type, direction: localDirection, - line: arrow.line.objectID() // Need to save this data to the global array - + line: arrow.line.objectID() }; - newConnectionsData.push(connection); - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); -} - -function getConnectionsData() { - //Refactored - var dataArray = []; - - if (pluginData) { - for (var i = 0; i < pluginData.length; i++) { - dataArray.push(pluginData[i]); - } - } - - return dataArray; + return connection; } function getDirection(firstObjectID, secondObjectID) { @@ -271,10 +247,8 @@ __webpack_require__.r(__webpack_exports__); var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); -var pluginKey = "flowArrows"; var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); -var docData = context.document.documentData(); // let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); - +var docData = context.document.documentData(); var currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // Main Function function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition) { @@ -836,18 +810,24 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _createArrow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./createArrow.js */ "./src/createArrow.js"); /* harmony import */ var _updateArrow_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./updateArrow.js */ "./src/updateArrow.js"); +/* harmony import */ var _utilities_getSourceObject_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utilities/getSourceObject.js */ "./src/utilities/getSourceObject.js"); +/* harmony import */ var _utilities_data_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utilities/data.js */ "./src/utilities/data.js"); // // Variables // + + + + var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); var pluginKey = "flowArrows"; var document; -var docData, pluginData, currentParentGroup, newConnectionsData; +var docData, pluginData, currentParentGroup, connectionsData; if (context.document) { //cc:remember place @@ -856,11 +836,11 @@ if (context.document) { pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards - newConnectionsData = getConnectionsData(); + connectionsData = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_4__["getConnectionsData"])(); } else { document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.actionContext.document); //cc:here is bug;well, seems like a bug in logic } // -// Create Connection Function +// Plugin Incoming Commands - Create // @@ -891,219 +871,84 @@ function createLeftArrowWithCondition(context) { function createUpArrowWithCondition(context) { create(context, "Up", true); } -function autoUpdateSelectedArrows(context) {} // const action = context.actionContext; -// docData = action.document.documentData(); -// pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); -// currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards -// newConnectionsData = getConnectionsData(); -// const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer)); -// log(movedLayers[0].id); -// log(movedLayers.length); -// // if (movedLayers.filter(layer => (layer.type == 'Artboard' || (layer.type == 'SymbolMaster' && config.arrangeSymbols))).length > 0) { -// // ArrangeArtboards(context) -// // } -// let currentConnectionsData = newConnectionsData; // Need to refactor -// for(let g = 0; g < movedLayers.length; g++) { -// let connectionIndex = findConnectionIndex(movedLayers[0].id, null, currentConnectionsData); -// log("yes "+connectionIndex); -// if(connectionIndex.length == 0){ -// updateArrow(currentConnectionsData[connectionIndex[0]].firstObject, currentConnectionsData[connectionIndex[0]].secondObject, currentConnectionsData[connectionIndex[0]].style, currentConnectionsData[connectionIndex[0]].type, currentConnectionsData[connectionIndex[0]].direction, currentConnectionsData[connectionIndex[0]].line, currentConnectionsData[connectionIndex[0]].condition, currentConnectionsData[connectionIndex[0]].isCondition, connectionIndex[0]); -// sketch.UI.message("Current connection is updated 🤘"); -// } else { -// sketch.UI.message("There is no connection between selected layers on the plugin data"); -// } -// } -// context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); -// -// Update Connection Function -// +function autoUpdateSelectedArrows(context) {// const action = context.actionContext; + // docData = action.document.documentData(); + // pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); + // currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards + // newConnectionsData = getConnectionsData(); + // const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer)); + // log(movedLayers[0].id); + // log(movedLayers.length); + // // if (movedLayers.filter(layer => (layer.type == 'Artboard' || (layer.type == 'SymbolMaster' && config.arrangeSymbols))).length > 0) { + // // ArrangeArtboards(context) + // // } + // let currentConnectionsData = newConnectionsData; // Need to refactor + // for(let g = 0; g < movedLayers.length; g++) { + // let connectionIndex = findConnectionIndex(movedLayers[0].id, null, currentConnectionsData); + // log("yes "+connectionIndex); + // if(connectionIndex.length == 0){ + // updateArrow(currentConnectionsData[connectionIndex[0]].firstObject, currentConnectionsData[connectionIndex[0]].secondObject, currentConnectionsData[connectionIndex[0]].style, currentConnectionsData[connectionIndex[0]].type, currentConnectionsData[connectionIndex[0]].direction, currentConnectionsData[connectionIndex[0]].line, currentConnectionsData[connectionIndex[0]].condition, currentConnectionsData[connectionIndex[0]].isCondition, connectionIndex[0]); + // sketch.UI.message("Current connection is updated 🤘"); + // } else { + // sketch.UI.message("There is no connection between selected layers on the plugin data"); + // } + // } + // context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); +} -function updateSelectedArrows(context) { +function create(context, direction, isCondition) { var selection = context.selection; if (selection.count() > 1 && selection[0].class() != "MSArtboardGroup") { - // Need to find source object by ID first - var currentConnectionsData = newConnectionsData; // Need to refactor + var sourceObjectID = Object(_utilities_getSourceObject_js__WEBPACK_IMPORTED_MODULE_3__["getSourceObjectFromSelection"])(selection, direction); for (var g = 0; g < selection.count(); g++) { - if (selection[g].objectID() != selection[0].objectID()) { - // Then need to create or update connection arrow with each selection - var connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), currentConnectionsData); + if (selection[g].objectID() != sourceObjectID) { + var connectionIndex = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_4__["findConnectionIndex"])(sourceObjectID, selection[g].objectID(), connectionsData); if (connectionIndex.length == 0) { - Object(_updateArrow_js__WEBPACK_IMPORTED_MODULE_2__["updateArrow"])(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex); - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Current connection is updated 🤘"); + // Create + var connection = Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_1__["createArrow"])(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition); + connectionsData.push(connection); + context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, "arrowConnections", docData, pluginKey); + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("New connection is created 🚀"); } else { - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is no connection between selected layers on the plugin data"); + // Update + if (Object(_updateArrow_js__WEBPACK_IMPORTED_MODULE_2__["updateArrow"])(sourceObjectID, selection[g].objectID(), null, null, direction, connectionsData[connectionIndex].line, connectionsData[connectionIndex].condition, isCondition, connectionIndex)) { + Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_1__["createArrow"])(sourceObjectID, selection[g].objectID(), null, null, direction, connectionsData[connectionIndex].condition, isCondition); + } + + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Current connection is updated 🤘"); } } } - - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); } else { // When user didn't select anything sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Please select more than two layers. Artboards are coming soon 🥳"); } +} // +// Plugin Incoming Commands - Update and Delete +// + + +function updateSelectedArrows(context) { + update(context, 1, true); } function updateArtboardArrows(context) { - update(context, 2, false); + update(context, 2, true); } function updateAllArrows(context) { update(context, 3, true); } function deleteSelectedArrows(context) { - var selection = context.selection; - var firstObject, secondObject; - - if (selection.count() == 2) { - for (var g = 0; g < selection.count(); g++) { - if (selection[g].objectID() != selection[0].objectID()) { - // It will never check 3rd connection - var connections = getConnectionsData(); - var connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), connections); - - if (connectionIndex != null) { - // We have connections in database - deleteLine(connections[connectionIndex].line); - newConnectionsData = deleteConnectionFromData(connectionIndex); - var updateArrowsCounter = connections.length; - - for (var i = 0; i < updateArrowsCounter; i++) { - // Need to go through each connection and check if it placed on selected artboard - firstObject = document.getLayerWithID(connections[i].firstObject); - secondObject = document.getLayerWithID(connections[i].secondObject); - - if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()) { - if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()) { - deleteLine(connections[i].line); - newConnectionsData = deleteConnectionFromData(i); - } - } - } - - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows from selected layers are deleted ✌️"); - } - } - } - } else { - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Select two layers, please 🧐"); - } + update(context, 1, false); } function deleteArtboardArrows(context) { - var selection = context.selection; - var firstObject, secondObject; // Need to delete all the arrows only from selected artboard - - if (selection.count() == 1 && selection[0].class() == "MSArtboardGroup") { - var connections = getConnectionsData(); - - if (connections.length > 0) { - // We have connections in database - var updateArrowsCounter = connections.length; - - for (var i = 0; i < updateArrowsCounter; i++) { - // Need to go through each connection and check if it placed on selected artboard - firstObject = document.getLayerWithID(connections[i].firstObject); - secondObject = document.getLayerWithID(connections[i].secondObject); - - if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()) { - if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()) { - deleteLine(connections[i].line); - newConnectionsData = deleteConnectionFromData(i); - } - } - } - - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows from selected artboard are deleted"); - } else { - // We don't have any connections to update - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is nothing to delete"); - } - } else { - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Please select one artboard"); - } + update(context, 2, false); } function deleteAllArrows(context) { update(context, 3, false); -} // let selection = context.selection; -// if(selection.count() > 1 && selection[0].class() != "MSArtboardGroup"){ -// // Need to find source object by ID first -// let currentConnectionsData = newConnectionsData; // Need to refactor -// for(let g = 0; g < selection.count(); g++) { -// if(selection[g].objectID() != selection[0].objectID()){ -// // Then need to create or update connection arrow with each selection -// let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), currentConnectionsData); -// if(connectionIndex.length == 0){ -// updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex); -// sketch.UI.message("Current connection is updated 🤘"); -// } else { -// sketch.UI.message("There is no connection between selected layers on the plugin data"); -// } -// } -// } -// context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); -// } else { -// // When user didn't select anything -// sketch.UI.message("Please select more than two layers. Artboards are coming soon 🥳"); -// } -// -// Data -// - -function getConnectionsData() { - //Refactored - var dataArray = []; - - if (pluginData) { - for (var i = 0; i < pluginData.length; i++) { - dataArray.push(pluginData[i]); - } - } - - return dataArray; -} // -// Functions -// - - - - - -function create(context, direction, isCondition) { - //cc:create#1;Passing all the data - var selection = context.selection; - - if (selection.count() > 1 && selection[0].class() != "MSArtboardGroup") { - // Need to find source object by ID first - var sourceObjectID = getSourceObjectFromSelection(selection, direction); - var currentConnectionsData = newConnectionsData; // Need to refactor - - for (var g = 0; g < selection.count(); g++) { - if (selection[g].objectID() != sourceObjectID) { - // Then need to create or update connection arrow with each selection - var connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), currentConnectionsData); - - if (connectionIndex.length == 0) { - // There is no connection with this two objects in our database - Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_1__["createArrow"])(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition); - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("New connection is created 🚀"); - } else { - // Need to remake the arrow condition - if (Object(_updateArrow_js__WEBPACK_IMPORTED_MODULE_2__["updateArrow"])(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex)) { - Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_1__["createArrow"])(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].condition, isCondition); - } - - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Current connection is updated 🤘"); - } - } - } - } else { - // When user didn't select anything - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Please select more than two layers. Artboards are coming soon 🥳"); - } } - function update(context, level, isUpdate) { // 1 - selection level // 2 - artboard level @@ -1153,85 +998,6 @@ function update(context, level, isUpdate) { } else { sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is no arrows"); } -} - -function getSourceObjectFromSelection(selection, direction) { - //Refactored - var sourceObjectID = selection.firstObject().objectID(); - - if (direction != "Auto") { - for (var g = 0; g < selection.count(); g++) { - sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction); - } - } - - return sourceObjectID; -} - -function defineSourceObject(firstObjectID, secondObjectID, direction) { - //Refactored - var firstObject = document.getLayerWithID(firstObjectID); - var secondObject = document.getLayerWithID(secondObjectID); - var sourceObjectID; - - if (direction == "Right") { - if (firstObject.frame.x <= secondObject.frame.x) { - sourceObjectID = firstObject.id; - } else { - sourceObjectID = secondObject.id; - } - } - - if (direction == "Down") { - if (firstObject.frame.y <= secondObject.frame.y) { - sourceObjectID = firstObject.id; - } else { - sourceObjectID = secondObject.id; - } - } - - if (direction == "Left") { - if (firstObject.frame.x <= secondObject.frame.x) { - sourceObjectID = secondObject.id; - } else { - sourceObjectID = firstObject.id; - } - } - - if (direction == "Up") { - if (firstObject.frame.y <= secondObject.frame.y) { - sourceObjectID = secondObject.id; - } else { - sourceObjectID = firstObject.id; - } - } - - return sourceObjectID; -} - -function findConnectionIndex(firstObjectID, secondObjectID, data) { - var indexArray = []; - firstObjectID = String(firstObjectID); - secondObjectID = String(secondObjectID); - - if (pluginData) { - // If we have database, need to check for connections - for (var y = 0; y < data.length; y++) { - if (firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject) { - if (secondObjectID == null) { - // When we need to find connection between two objects - if (secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject) { - indexArray[0] = y; - } - } else { - // When we need to find a connection for one object only - indexArray.push(y); - } - } - } - } - - return indexArray; } // const track = require("sketch-module-google-analytics") // track("UA-138226597-1", "event", { // ec: "command", @@ -1343,6 +1109,141 @@ function getConnectionsData() { /***/ }), +/***/ "./src/utilities/data.js": +/*!*******************************!*\ + !*** ./src/utilities/data.js ***! + \*******************************/ +/*! exports provided: getConnectionsData, findConnectionIndex */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getConnectionsData", function() { return getConnectionsData; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "findConnectionIndex", function() { return findConnectionIndex; }); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); + + +var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); + +var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); + +var pluginKey = "flowArrows"; +var document; +var docData, pluginData, currentParentGroup, connectionsData; +document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); +docData = context.document.documentData(); +pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); +currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards + +function getConnectionsData() { + var dataArray = []; + + if (pluginData) { + for (var i = 0; i < pluginData.length; i++) { + dataArray.push(pluginData[i]); + } + } + + return dataArray; +} +function findConnectionIndex(firstObjectID, secondObjectID, data) { + var indexArray = []; + firstObjectID = String(firstObjectID); + secondObjectID = String(secondObjectID); + + if (pluginData) { + // If we have database, need to check for connections + for (var y = 0; y < data.length; y++) { + if (firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject) { + if (secondObjectID == null) { + // When we need to find connection between two objects + if (secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject) { + indexArray[0] = y; + } + } else { + // When we need to find a connection for one object only + indexArray.push(y); + } + } + } + } + + return indexArray; +} + +/***/ }), + +/***/ "./src/utilities/getSourceObject.js": +/*!******************************************!*\ + !*** ./src/utilities/getSourceObject.js ***! + \******************************************/ +/*! exports provided: getSourceObjectFromSelection */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getSourceObjectFromSelection", function() { return getSourceObjectFromSelection; }); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); + +var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); +function getSourceObjectFromSelection(selection, direction) { + //Refactored + var sourceObjectID = selection.firstObject().objectID(); + + if (direction != "Auto") { + for (var g = 0; g < selection.count(); g++) { + sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction); + } + } + + return sourceObjectID; +} + +function defineSourceObject(firstObjectID, secondObjectID, direction) { + //Refactored + var firstObject = document.getLayerWithID(firstObjectID); + var secondObject = document.getLayerWithID(secondObjectID); + var sourceObjectID; + + if (direction == "Right") { + if (firstObject.frame.x <= secondObject.frame.x) { + sourceObjectID = firstObject.id; + } else { + sourceObjectID = secondObject.id; + } + } + + if (direction == "Down") { + if (firstObject.frame.y <= secondObject.frame.y) { + sourceObjectID = firstObject.id; + } else { + sourceObjectID = secondObject.id; + } + } + + if (direction == "Left") { + if (firstObject.frame.x <= secondObject.frame.x) { + sourceObjectID = secondObject.id; + } else { + sourceObjectID = firstObject.id; + } + } + + if (direction == "Up") { + if (firstObject.frame.y <= secondObject.frame.y) { + sourceObjectID = secondObject.id; + } else { + sourceObjectID = firstObject.id; + } + } + + return sourceObjectID; +} + +/***/ }), + /***/ "./src/utilities/styling.js": /*!**********************************!*\ !*** ./src/utilities/styling.js ***! diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index b7d8547..1ef0ad3 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/createArrow.js","webpack://exports/./src/draw.js","webpack://exports/./src/script.js","webpack://exports/./src/updateArrow.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","Settings","pluginKey","document","docData","pluginData","currentParentGroup","newConnectionsData","sketch","fromNative","context","documentData","command","valueForKey_onLayer_forPluginIdentifier","currentPage","currentArtboard","getConnectionsData","createArrow","firstObjectID","secondObjectID","style","type","direction","conditionID","isCondition","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","firstObject","secondObject","condition","line","objectID","push","setValue_forKey_onLayer_forPluginIdentifier","dataArray","i","length","getLayerWithID","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","sourceObjectID","childObjectID","sourceObject","childObject","settingForKey","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","currentGroup","checkForGroup","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","layers","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","g","getImportableSymbolReferencesForDocument","name","includes","alert","symbolMaster","import","createNewInstance","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","fixGeometryWithOptions","Group","group","moveToBack","adjustToFit","id","addLayers","locked","groupName","count","actionContext","createAutoArrow","create","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","autoUpdateSelectedArrows","updateSelectedArrows","selection","class","currentConnectionsData","connectionIndex","findConnectionIndex","updateArrow","message","updateArtboardArrows","update","updateAllArrows","deleteSelectedArrows","connections","deleteLine","deleteConnectionFromData","updateArrowsCounter","sketchObject","parentArtboard","deleteArtboardArrows","deleteAllArrows","getSourceObjectFromSelection","level","isUpdate","firstObjectArtboard","secondObjectArtboard","connectionsData","defineSourceObject","data","indexArray","String","lineID","conditionObject","result","remove","lineObject","selectedGroup","newConnections","localStyle","getLayerStyles","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","allStyles","allLayerStyles","styles"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, newConnectionsData;\n\ndocument = sketch.fromNative(context.document);\ndocData = context.document.documentData();\npluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\ncurrentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\nnewConnectionsData = getConnectionsData();\n\nimport { drawConnection } from \"./draw.js\";\n\nexport function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n\n // Need to save this data to the global array\n newConnectionsData.push(connection);\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n}\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = [];\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i]);\n }\n } \n return dataArray;\n }\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}","import sketch from 'sketch';\nimport { styleLine } from \"./utilities/styling.js\";\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\n\n\nlet docData = context.document.documentData();\n// let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n// Main Function\n\nexport function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition){ // Refactored\n // Process of creating new connection \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n // Condition\n if(condition == true){\n if(conditionID != null){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY);\n }\n } else {\n connection.conditionID = null;\n }\n // connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style);\n\n // Add to group\n addToArrowsGroup(connection.line);\n \n return connection\n}\n\n// Positions\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\");\n let diffX, diffY;\n \n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n \n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n \n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n return connectionPos\n}\n\n// Drawing Types\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n \n return line;\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n \n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n \n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n \n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n \n if(firstLayerPosX Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here');\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y);\n }\n \n return symbol;\n}\n\nfunction addToConditionGroup(condition, x, y){ // Refactored\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n \n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Conditions',\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n}\n\nfunction updateCondition(conditionID, x, y){ // Refactored\nlet condition = document.getLayerWithID(conditionID);\n// log (condition)\nlet conGroup = checkForGroup(\"Conditions\") ;\nlet arGroup = checkForGroup(\"Arrows\");\nlet arGroupX = arGroup != null ? arGroup.frame().x() : 0;\nlet arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\nif(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n} else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n}\nreturn condition.id;\n}\n \n// Groups\n\nfunction addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\");\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nfunction checkForGroup(groupName) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n \n return currentGroup;\n}","//\n// Variables\n//\n\nimport sketch from 'sketch';\n\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, newConnectionsData;\nif(context.document){\n //cc:remember place\n document = sketch.fromNative(context.document);\n docData = context.document.documentData();\n pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n newConnectionsData = getConnectionsData();\n} else {\n document = sketch.fromNative(context.actionContext.document);\n //cc:here is bug;well, seems like a bug in logic\n}\n \n//\n// Create Connection Function\n//\n\n\nexport function createAutoArrow(context){create(context, \"Auto\", false);}\nexport function createRightArrow(context){create(context, \"Right\", false);}\nexport function createDownArrow(context){create(context, \"Down\", false);}\nexport function createLeftArrow(context){create(context, \"Left\", false);}\nexport function createUpArrow(context){create(context, \"Up\", false);}\n\nexport function createRightArrowWithCondition(context){create(context, \"Right\", true);}\nexport function createDownArrowWithCondition(context){create(context, \"Down\", true);}\nexport function createLeftArrowWithCondition(context){create(context, \"Left\", true);}\nexport function createUpArrowWithCondition(context){create(context, \"Up\", true);}\n\nexport function autoUpdateSelectedArrows(context) { \n // const action = context.actionContext;\n\n // docData = action.document.documentData();\n // pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n // currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n // newConnectionsData = getConnectionsData();\n\n // const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer));\n // log(movedLayers[0].id);\n // log(movedLayers.length);\n\n // // if (movedLayers.filter(layer => (layer.type == 'Artboard' || (layer.type == 'SymbolMaster' && config.arrangeSymbols))).length > 0) {\n // // ArrangeArtboards(context)\n // // }\n\n // let currentConnectionsData = newConnectionsData; // Need to refactor\n\n // for(let g = 0; g < movedLayers.length; g++) {\n\n // let connectionIndex = findConnectionIndex(movedLayers[0].id, null, currentConnectionsData);\n\n // log(\"yes \"+connectionIndex);\n // if(connectionIndex.length == 0){\n \n // updateArrow(currentConnectionsData[connectionIndex[0]].firstObject, currentConnectionsData[connectionIndex[0]].secondObject, currentConnectionsData[connectionIndex[0]].style, currentConnectionsData[connectionIndex[0]].type, currentConnectionsData[connectionIndex[0]].direction, currentConnectionsData[connectionIndex[0]].line, currentConnectionsData[connectionIndex[0]].condition, currentConnectionsData[connectionIndex[0]].isCondition, connectionIndex[0]);\n // sketch.UI.message(\"Current connection is updated 🤘\");\n // } else {\n // sketch.UI.message(\"There is no connection between selected layers on the plugin data\");\n // }\n \n // }\n // context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n}\n\n \n//\n// Update Connection Function\n//\n\nexport function updateSelectedArrows(context) {\n let selection = context.selection;\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let currentConnectionsData = newConnectionsData; // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != selection[0].objectID()){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), currentConnectionsData);\n\n if(connectionIndex.length == 0){\n updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex);\n sketch.UI.message(\"Current connection is updated 🤘\");\n } else {\n sketch.UI.message(\"There is no connection between selected layers on the plugin data\");\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n \n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\nexport function updateArtboardArrows(context) {update(context, 2, false);}\n\nexport function updateAllArrows(context) {update(context, 3, true);}\n\nexport function deleteSelectedArrows(context) {\n let selection = context.selection;\n let firstObject, secondObject;\n\n if(selection.count() == 2){\n\n for(let g = 0; g < selection.count(); g++) {\n\n if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection\n \n let connections = getConnectionsData() ;\n let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), connections);\n \n if(connectionIndex != null){\n // We have connections in database\n deleteLine(connections[connectionIndex].line);\n newConnectionsData = deleteConnectionFromData(connectionIndex);\n const updateArrowsCounter = connections.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject);\n secondObject = document.getLayerWithID(connections[i].secondObject);\n if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line);\n newConnectionsData = deleteConnectionFromData(i);\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows from selected layers are deleted ✌️\");\n }\n }\n }\n } else {\n sketch.UI.message(\"Select two layers, please 🧐\");\n }\n}\n\nexport function deleteArtboardArrows(context) {\n let selection = context.selection;\n let firstObject, secondObject;\n\n // Need to delete all the arrows only from selected artboard\n if(selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\"){\n let connections = getConnectionsData();\n \n if(connections.length > 0){\n // We have connections in database\n const updateArrowsCounter = connections.length;\n for (let i = 0; i < updateArrowsCounter; i ++) {\n // Need to go through each connection and check if it placed on selected artboard\n firstObject = document.getLayerWithID(connections[i].firstObject);\n secondObject = document.getLayerWithID(connections[i].secondObject);\n if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){\n deleteLine(connections[i].line);\n newConnectionsData = deleteConnectionFromData(i);\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"All arrows from selected artboard are deleted\");\n } else {\n // We don't have any connections to update\n sketch.UI.message(\"There is nothing to delete\");\n }\n } else {\n sketch.UI.message(\"Please select one artboard\");\n }\n}\n\nexport function deleteAllArrows(context) {update(context, 3, false);}\n\n\n\n\n\n // let selection = context.selection;\n // if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // // Need to find source object by ID first\n // let currentConnectionsData = newConnectionsData; // Need to refactor\n\n // for(let g = 0; g < selection.count(); g++) {\n // if(selection[g].objectID() != selection[0].objectID()){\n // // Then need to create or update connection arrow with each selection\n // let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), currentConnectionsData);\n\n // if(connectionIndex.length == 0){\n // updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex);\n // sketch.UI.message(\"Current connection is updated 🤘\");\n // } else {\n // sketch.UI.message(\"There is no connection between selected layers on the plugin data\");\n // }\n // }\n // }\n // context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n \n // } else {\n // // When user didn't select anything\n // sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n // }\n\n\n//\n// Data\n//\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = [];\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i]);\n }\n } \n return dataArray;\n}\n\n\n//\n// Functions\n//\n\nimport { createArrow } from \"./createArrow.js\";\nimport { updateArrow } from \"./updateArrow.js\";\n\n\nfunction create(context, direction, isCondition){\n //cc:create#1;Passing all the data\n let selection = context.selection;\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n // Need to find source object by ID first\n let sourceObjectID = getSourceObjectFromSelection(selection, direction);\n let currentConnectionsData = newConnectionsData; // Need to refactor\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n // Then need to create or update connection arrow with each selection\n let connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), currentConnectionsData);\n \n if(connectionIndex.length == 0){\n // There is no connection with this two objects in our database\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition);\n sketch.UI.message(\"New connection is created 🚀\");\n } else {\n // Need to remake the arrow condition\n if(updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex)){\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].condition, isCondition);\n }\n sketch.UI.message(\"Current connection is updated 🤘\");\n }\n }\n }\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\nexport function update(context, level, isUpdate) {\n // 1 - selection level\n // 2 - artboard level\n // 3 - document level\n let newConnectionsData = [];\n let selection = context.selection;\n let firstObjectArtboard;\n let secondObjectArtboard;\n\n if (connectionsData.length > 0) {\n for (let i = 0; i < connectionsData.length; i++) {\n deleteLine(connectionsData[i].line);\n \n if (level == 3) {\n if(isUpdate){\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n sketch.UI.message(\"All arrows are updated\");\n } else {\n newConnectionsData = null\n sketch.UI.message(\"All arrows are deleted\");\n }\n }\n if (level == 2) {\n firstObjectArtboard = document.getLayerWithID(connectionsData[i].firstObject);\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID();\n secondObjectArtboard = document.getLayerWithID(connectionsData[i].secondObject);\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID();\n\n if (selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\") {\n\n if (firstObjectArtboard == selection[0].objectID()) {\n if (secondObjectArtboard == selection[0].objectID()) {\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n }\n }\n sketch.UI.message(\"All arrows are updated 🚀\");\n \n \n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n sketch.UI.message(\"There is no arrows\");\n }\n}\n\nfunction getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID();\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction);\n }\n }\n \n return sourceObjectID;\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let sourceObjectID;\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n return sourceObjectID;\n}\n\nfunction findConnectionIndex(firstObjectID, secondObjectID, data){\n let indexArray = [] ;\n firstObjectID = String(firstObjectID);\n secondObjectID = String(secondObjectID);\n \n if(pluginData){\n // If we have database, need to check for connections\n for(let y = 0; y < data.length; y++){\n if(firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject){\n if(secondObjectID == null){\n // When we need to find connection between two objects\n if(secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject){\n indexArray[0] = y;\n } \n } else {\n // When we need to find a connection for one object only\n indexArray.push(y);\n }\n }\n }\n }\n return indexArray;\n}\n\n\n// const track = require(\"sketch-module-google-analytics\")\n// track(\"UA-138226597-1\", \"event\", {\n// ec: \"command\", \n// ea: \"create\", \n// ev: \"my-command\"\n// });\n\n\n\n\n\n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, connectionsData;\n\ndocument = sketch.fromNative(context.document);\ndocData = context.document.documentData();\npluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\ncurrentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\nconnectionsData = getConnectionsData();\n\n\n\nexport function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let conditionObject = document.getLayerWithID(conditionID);\n let result = false;\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID);\n if(conditionID && !isCondition){\n if(conditionObject){conditionObject.remove();}\n }\n \n connectionsData = deleteConnectionFromData(connectionIndex);\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n result = true;\n }\n\n return result;\n}\n\nfunction deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n\nfunction deleteConnectionFromData(connectionIndex){ // Refactored\n let newConnections = [];\n if(pluginData){\n // If we have database\n let connections = pluginData;\n \n for (let i = 0; i < connections.length; i ++) {\n // Updating all connections without deleted one\n if(i != connectionIndex){\n newConnections.push(connections[i]);\n }\n }\n }\n return newConnections;\n}\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = [];\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i]);\n }\n } \n return dataArray;\n}","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\n\n\nlet docData = context.document.documentData();\n\nexport function styleLine(line, style){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey));\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/createArrow.js","webpack://exports/./src/draw.js","webpack://exports/./src/script.js","webpack://exports/./src/updateArrow.js","webpack://exports/./src/utilities/data.js","webpack://exports/./src/utilities/getSourceObject.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["Settings","require","document","sketch","fromNative","context","createArrow","firstObjectID","secondObjectID","style","type","direction","conditionID","isCondition","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","firstObject","secondObject","condition","line","objectID","getLayerWithID","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","sourceObjectID","childObjectID","sourceObject","childObject","settingForKey","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","docData","documentData","currentParentGroup","currentPage","currentArtboard","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","currentGroup","checkForGroup","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","layers","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","g","length","getImportableSymbolReferencesForDocument","i","name","includes","UI","alert","symbolMaster","import","createNewInstance","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","fixGeometryWithOptions","Group","group","moveToBack","adjustToFit","id","addLayers","locked","groupName","count","pluginKey","pluginData","connectionsData","command","valueForKey_onLayer_forPluginIdentifier","getConnectionsData","actionContext","createAutoArrow","create","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","autoUpdateSelectedArrows","selection","class","getSourceObjectFromSelection","connectionIndex","findConnectionIndex","push","setValue_forKey_onLayer_forPluginIdentifier","message","updateArrow","updateSelectedArrows","update","updateArtboardArrows","updateAllArrows","deleteSelectedArrows","deleteArtboardArrows","deleteAllArrows","level","isUpdate","newConnectionsData","firstObjectArtboard","secondObjectArtboard","deleteLine","sketchObject","parentArtboard","lineID","conditionObject","result","remove","deleteConnectionFromData","lineObject","selectedGroup","newConnections","connections","dataArray","data","indexArray","String","defineSourceObject","localStyle","getLayerStyles","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","allStyles","allLayerStyles","styles"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch';\nimport { drawConnection } from \"./draw.js\";\n\nvar Settings = require('sketch/settings');\nlet document = sketch.fromNative(context.document);\n\n// Main Function\n\nexport function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n return connection;\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}","import sketch from 'sketch';\nimport { styleLine } from \"./utilities/styling.js\";\nvar Settings = require('sketch/settings');\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\n// Main Function\n\nexport function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition){ // Refactored\n // Process of creating new connection \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n // Condition\n if(condition == true){\n if(conditionID != null){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY);\n }\n } else {\n connection.conditionID = null;\n }\n // connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style);\n\n // Add to group\n addToArrowsGroup(connection.line);\n \n return connection\n}\n\n// Positions\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\");\n let diffX, diffY;\n \n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n \n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n \n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n return connectionPos\n}\n\n// Drawing Types\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n \n return line;\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n \n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n \n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n \n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n \n if(firstLayerPosX Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here');\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y);\n }\n \n return symbol;\n}\n\nfunction addToConditionGroup(condition, x, y){ // Refactored\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n \n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Conditions',\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n}\n\nfunction updateCondition(conditionID, x, y){ // Refactored\nlet condition = document.getLayerWithID(conditionID);\n// log (condition)\nlet conGroup = checkForGroup(\"Conditions\") ;\nlet arGroup = checkForGroup(\"Arrows\");\nlet arGroupX = arGroup != null ? arGroup.frame().x() : 0;\nlet arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\nif(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n} else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n}\nreturn condition.id;\n}\n \n// Groups\n\nfunction addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\");\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nfunction checkForGroup(groupName) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n \n return currentGroup;\n}","//\n// Variables\n//\n\nimport sketch from 'sketch';\nimport { createArrow } from \"./createArrow.js\";\nimport { updateArrow } from \"./updateArrow.js\";\nimport { getSourceObjectFromSelection } from \"./utilities/getSourceObject.js\"\nimport { getConnectionsData, findConnectionIndex } from \"./utilities/data.js\"\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, connectionsData;\nif(context.document){\n //cc:remember place\n document = sketch.fromNative(context.document);\n docData = context.document.documentData();\n pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n connectionsData = getConnectionsData();\n} else {\n document = sketch.fromNative(context.actionContext.document);\n //cc:here is bug;well, seems like a bug in logic\n}\n\n \n//\n// Plugin Incoming Commands - Create \n//\n\nexport function createAutoArrow(context){create(context, \"Auto\", false);}\nexport function createRightArrow(context){create(context, \"Right\", false);}\nexport function createDownArrow(context){create(context, \"Down\", false);}\nexport function createLeftArrow(context){create(context, \"Left\", false);}\nexport function createUpArrow(context){create(context, \"Up\", false);}\n\nexport function createRightArrowWithCondition(context){create(context, \"Right\", true);}\nexport function createDownArrowWithCondition(context){create(context, \"Down\", true);}\nexport function createLeftArrowWithCondition(context){create(context, \"Left\", true);}\nexport function createUpArrowWithCondition(context){create(context, \"Up\", true);}\n\nexport function autoUpdateSelectedArrows(context) { \n // const action = context.actionContext;\n\n // docData = action.document.documentData();\n // pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n // currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n // newConnectionsData = getConnectionsData();\n\n // const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer));\n // log(movedLayers[0].id);\n // log(movedLayers.length);\n\n // // if (movedLayers.filter(layer => (layer.type == 'Artboard' || (layer.type == 'SymbolMaster' && config.arrangeSymbols))).length > 0) {\n // // ArrangeArtboards(context)\n // // }\n\n // let currentConnectionsData = newConnectionsData; // Need to refactor\n\n // for(let g = 0; g < movedLayers.length; g++) {\n\n // let connectionIndex = findConnectionIndex(movedLayers[0].id, null, currentConnectionsData);\n\n // log(\"yes \"+connectionIndex);\n // if(connectionIndex.length == 0){\n \n // updateArrow(currentConnectionsData[connectionIndex[0]].firstObject, currentConnectionsData[connectionIndex[0]].secondObject, currentConnectionsData[connectionIndex[0]].style, currentConnectionsData[connectionIndex[0]].type, currentConnectionsData[connectionIndex[0]].direction, currentConnectionsData[connectionIndex[0]].line, currentConnectionsData[connectionIndex[0]].condition, currentConnectionsData[connectionIndex[0]].isCondition, connectionIndex[0]);\n // sketch.UI.message(\"Current connection is updated 🤘\");\n // } else {\n // sketch.UI.message(\"There is no connection between selected layers on the plugin data\");\n // }\n \n // }\n // context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n}\n\n\nfunction create(context, direction, isCondition){\n let selection = context.selection;\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n\n let sourceObjectID = getSourceObjectFromSelection(selection, direction);\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n let connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), connectionsData);\n \n if(connectionIndex.length == 0){\n // Create\n let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition);\n connectionsData.push(connection);\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"New connection is created 🚀\");\n } else {\n // Update\n if(updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, connectionsData[connectionIndex].line, connectionsData[connectionIndex].condition, isCondition, connectionIndex)){\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, connectionsData[connectionIndex].condition, isCondition);\n }\n sketch.UI.message(\"Current connection is updated 🤘\");\n }\n }\n }\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\n \n//\n// Plugin Incoming Commands - Update and Delete\n//\n\nexport function updateSelectedArrows(context) {update(context, 1, true);}\nexport function updateArtboardArrows(context) {update(context, 2, true);}\nexport function updateAllArrows(context) {update(context, 3, true);}\nexport function deleteSelectedArrows(context) {update(context, 1, false);}\nexport function deleteArtboardArrows(context) {update(context, 2, false);}\nexport function deleteAllArrows(context) {update(context, 3, false);}\n\nexport function update(context, level, isUpdate) {\n // 1 - selection level\n // 2 - artboard level\n // 3 - document level\n let newConnectionsData = [];\n let selection = context.selection;\n let firstObjectArtboard;\n let secondObjectArtboard;\n\n if (connectionsData.length > 0) {\n for (let i = 0; i < connectionsData.length; i++) {\n deleteLine(connectionsData[i].line);\n \n if (level == 3) {\n if(isUpdate){\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n sketch.UI.message(\"All arrows are updated\");\n } else {\n newConnectionsData = null\n sketch.UI.message(\"All arrows are deleted\");\n }\n }\n if (level == 2) {\n firstObjectArtboard = document.getLayerWithID(connectionsData[i].firstObject);\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID();\n secondObjectArtboard = document.getLayerWithID(connectionsData[i].secondObject);\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID();\n\n if (selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\") {\n\n if (firstObjectArtboard == selection[0].objectID()) {\n if (secondObjectArtboard == selection[0].objectID()) {\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n }\n }\n sketch.UI.message(\"All arrows are updated 🚀\");\n \n \n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n sketch.UI.message(\"There is no arrows\");\n }\n}\n\n// const track = require(\"sketch-module-google-analytics\")\n// track(\"UA-138226597-1\", \"event\", {\n// ec: \"command\", \n// ea: \"create\", \n// ev: \"my-command\"\n// });\n\n\n\n\n\n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, connectionsData;\n\ndocument = sketch.fromNative(context.document);\ndocData = context.document.documentData();\npluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\ncurrentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\nconnectionsData = getConnectionsData();\n\n\n\nexport function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let conditionObject = document.getLayerWithID(conditionID);\n let result = false;\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID);\n if(conditionID && !isCondition){\n if(conditionObject){conditionObject.remove();}\n }\n \n connectionsData = deleteConnectionFromData(connectionIndex);\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n result = true;\n }\n\n return result;\n}\n\nfunction deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n\nfunction deleteConnectionFromData(connectionIndex){ // Refactored\n let newConnections = [];\n if(pluginData){\n // If we have database\n let connections = pluginData;\n \n for (let i = 0; i < connections.length; i ++) {\n // Updating all connections without deleted one\n if(i != connectionIndex){\n newConnections.push(connections[i]);\n }\n }\n }\n return newConnections;\n}\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = [];\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i]);\n }\n } \n return dataArray;\n}","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, connectionsData;\n\ndocument = sketch.fromNative(context.document);\ndocData = context.document.documentData();\npluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\ncurrentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n\n\n\nexport function getConnectionsData() {\n let dataArray = [];\n\n if (pluginData) {\n for (let i = 0; i < pluginData.length; i++) {\n dataArray.push(pluginData[i]);\n }\n }\n return dataArray;\n}\n\nexport function findConnectionIndex(firstObjectID, secondObjectID, data) {\n let indexArray = [];\n firstObjectID = String(firstObjectID);\n secondObjectID = String(secondObjectID);\n\n if (pluginData) {\n // If we have database, need to check for connections\n for (let y = 0; y < data.length; y++) {\n if (\n firstObjectID == data[y].firstObject ||\n firstObjectID == data[y].secondObject\n ) {\n if (secondObjectID == null) {\n // When we need to find connection between two objects\n if (\n secondObjectID == data[y].firstObject ||\n secondObjectID == data[y].secondObject\n ) {\n indexArray[0] = y;\n }\n } else {\n // When we need to find a connection for one object only\n indexArray.push(y);\n }\n }\n }\n }\n return indexArray;\n}\n","import sketch from 'sketch';\nlet document = sketch.fromNative(context.document);\n\n\nexport function getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID();\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction);\n }\n }\n \n return sourceObjectID;\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let sourceObjectID;\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n return sourceObjectID;\n}","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\n\nexport function styleLine(line, style){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey));\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/arrows.sketchplugin/Contents/Sketch/settings.js b/arrows.sketchplugin/Contents/Sketch/settings.js index 89168f6..55a7333 100644 --- a/arrows.sketchplugin/Contents/Sketch/settings.js +++ b/arrows.sketchplugin/Contents/Sketch/settings.js @@ -112,10 +112,8 @@ var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); var pluginKey = "flowArrows"; -var docData, pluginData, currentParentGroup, newConnectionsData; var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); -docData = context.document.documentData(); -pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); +var docData = context.document.documentData(); function settings(context) { var alert = COSAlertWindow.new(); var viewWidth = 300; diff --git a/arrows.sketchplugin/Contents/Sketch/settings.js.map b/arrows.sketchplugin/Contents/Sketch/settings.js.map index 08409a7..662c99c 100644 --- a/arrows.sketchplugin/Contents/Sketch/settings.js.map +++ b/arrows.sketchplugin/Contents/Sketch/settings.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/settings.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","Settings","pluginKey","docData","pluginData","currentParentGroup","newConnectionsData","document","sketch","fromNative","context","documentData","command","valueForKey_onLayer_forPluginIdentifier","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","settingForKey","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","setValue_forKey_onLayer_forPluginIdentifier","views","subviews","title","setSettingForKey","intValue","state","message","docSettings","styles","getLayerStyles","addItemWithTitle","i","length","name","docTypeSettings","lastItem","setState","setMessageText","addButtonWithTitle","x","y","width","height","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","styleLine","line","style","localStyle","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","g","b","a","thickness","endMarkerType","allStyles","allLayerStyles","keyword","count","includes","push"],"mappings":"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","file":"settings.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/settings.js\");\n","import sketch from \"sketch\";\nimport { getLayerStyles } from \"./utilities/styling.js\";\n\nlet UI = require(\"sketch/ui\");\nvar Settings = require(\"sketch/settings\");\n\nconst pluginKey = \"flowArrows\";\n\nlet docData, pluginData, currentParentGroup, newConnectionsData;\n\nlet document = sketch.fromNative(context.document);\ndocData = context.document.documentData();\npluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\n \"arrowConnections\",\n docData,\n pluginKey\n);\n\nexport function settings(context) {\n let alert = COSAlertWindow.new();\n const viewWidth = 300;\n const viewHeight = 450;\n\n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight);\n let view = NSView.alloc().initWithFrame(\n NSMakeRect(0, 0, viewWidth, viewHeight)\n );\n alert.addAccessoryView(view);\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\n \"Arrow Style\",\n true,\n -1,\n viewHeight - 40,\n 280,\n 40\n );\n view.addSubview(arrowStyleLabel);\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(\n NSMakeRect(-2, viewHeight - 40, 300, 20)\n );\n setActiveStyleSetting(arrowStylingField);\n view.addSubview(arrowStylingField);\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\n \"Add layer style to your document that will contain $arrow name and you will be able to specify it here \",\n false,\n -1,\n viewHeight - 80,\n 300,\n 40\n );\n view.addSubview(arrowStyleInfoLabel);\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\n \"Arrow Type\",\n true,\n -1,\n viewHeight - 130,\n 280,\n 40\n );\n view.addSubview(arrowTypeLabel);\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(\n NSMakeRect(-2, viewHeight - 130, 300, 20)\n );\n setActiveTypeSetting(arrowTypeField);\n view.addSubview(arrowTypeField);\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\n \"Select one of the arrow types. Angled is used by default\",\n false,\n -1,\n viewHeight - 170,\n 300,\n 40\n );\n view.addSubview(arrowTypeInfoLabel);\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\n \"Arrow Spacing\",\n true,\n -1,\n viewHeight - 200,\n 330,\n 20\n );\n view.addSubview(arrowSpacingLabel);\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\n \"px\",\n true,\n 90,\n viewHeight - 220,\n 330,\n 20\n );\n view.addSubview(arrowSpacingPxLabel);\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(\n NSMakeRect(-2, viewHeight - 220, 80, 20)\n );\n var formatter = NSNumberFormatter.alloc()\n .init()\n .autorelease();\n arrowSpacingField.setStringValue(\n String(Settings.settingForKey(\"arrowSpacing\"))\n );\n arrowSpacingField.setFormatter(formatter);\n view.addSubview(arrowSpacingField);\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(\n NSMakeRect(70, viewHeight - 220, 20, 20)\n );\n arrowSpacingStepper.setMaxValue(1000);\n arrowSpacingStepper.setMinValue(0);\n arrowSpacingStepper.setValueWraps(false);\n arrowSpacingStepper.setAutorepeat(true);\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender) {\n var value = 0 + sender.integerValue();\n arrowSpacingField.setStringValue(String(value));\n });\n\n view.addSubview(arrowSpacingStepper);\n // view.addSubview(formatter)\n\n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\n \"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \",\n false,\n -1,\n viewHeight - 285,\n 300,\n 60\n );\n view.addSubview(arrowSpacingInfoLabel);\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\n \"Other Settings\",\n true,\n -1,\n viewHeight - 330,\n 280,\n 40\n );\n view.addSubview(otherSettingsLabel);\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\n \"Second layer auto-align\",\n false,\n -1,\n viewHeight - 340,\n 260,\n 40\n );\n view.addSubview(checkbox);\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\n \"Align the second layer for 5px misalignment with the first one\",\n false,\n -1,\n viewHeight - 370,\n 280,\n 40\n );\n view.addSubview(autoAlignInfoLabel);\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\n \"Made by @faridSabitov with the support of EPAM.com ❤️\",\n true,\n -1,\n viewHeight - 420,\n 280,\n 40\n );\n view.addSubview(pluginInfoLabel);\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal();\n\n if (modalResponse == NSAlertFirstButtonReturn) {\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(\n alert\n .views()[0]\n .subviews()[1]\n .title(),\n \"arrowStyle\",\n docData,\n pluginKey\n );\n Settings.setSettingForKey(\n \"arrowType\",\n alert\n .views()[0]\n .subviews()[4]\n .title()\n );\n Settings.setSettingForKey(\n \"arrowSpacing\",\n alert\n .views()[0]\n .subviews()[8]\n .intValue()\n );\n Settings.setSettingForKey(\n \"autoAlign\",\n alert\n .views()[0]\n .subviews()[12]\n .state()\n );\n UI.message(\"Settings are updated 🚀\");\n }\n}\n\n// Functions\n\nfunction setActiveStyleSetting(arrowStylingField) {\n let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier(\n \"arrowStyle\",\n docData,\n pluginKey\n );\n let styles = getLayerStyles(null);\n\n if (docSettings) {\n // We have info about the settings in the current document\n\n if (docSettings != \"Default Style\") {\n // if user specified own option\n arrowStylingField.addItemWithTitle(docSettings);\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for (let i = 0; i < styles.length; i++) {\n if (styles[i].name() != docSettings) {\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n } else {\n // Need to show the default first\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for (let i = 0; i < styles.length; i++) {\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n } else {\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for (let i = 0; i < styles.length; i++) {\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n}\n\nfunction setActiveTypeSetting(arrowTypeField) {\n let docTypeSettings = Settings.settingForKey(\"arrowType\");\n\n if (docTypeSettings) {\n // We have info about the settings in the current document\n\n if (docTypeSettings == \"Angled\") {\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(0);\n }\n\n if (docTypeSettings == \"Curved\") {\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(0);\n }\n\n if (docTypeSettings == \"Straight\") {\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(0);\n }\n } else {\n // Show default\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.addItemWithTitle(\"Straight\");\n }\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight) {\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\");\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\");\n alert.addButtonWithTitle(\"Cancel\");\n\n return alert;\n}\n\nfunction alertLabel(message, state, x, y, width, height) {\n let infoLabel = NSTextField.alloc().initWithFrame(\n NSMakeRect(x, y, width, height)\n );\n\n infoLabel.setStringValue(message);\n infoLabel.setSelectable(false);\n infoLabel.setDrawsBackground(false);\n infoLabel.setBezeled(false);\n\n if (state == false) {\n infoLabel.textColor = NSColor.disabledControlTextColor();\n }\n\n return infoLabel;\n}\n\nfunction alertCheckbox(message, state, x, y, width, height) {\n let checkbox = NSButton.alloc().initWithFrame(\n NSMakeRect(x, y, width, height)\n );\n\n checkbox.setButtonType(NSSwitchButton);\n checkbox.setBezelStyle(0);\n checkbox.setTitle(message);\n if (Settings.settingForKey(\"autoAlign\")) {\n let currentState = Settings.settingForKey(\"autoAlign\");\n checkbox.setState(currentState);\n } else {\n checkbox.setState(state);\n }\n\n return checkbox;\n}\n\n\n","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\n\n\nlet docData = context.document.documentData();\n\nexport function styleLine(line, style){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey));\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/settings.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","Settings","pluginKey","document","sketch","fromNative","context","docData","documentData","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","settingForKey","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","command","setValue_forKey_onLayer_forPluginIdentifier","views","subviews","title","setSettingForKey","intValue","state","message","docSettings","valueForKey_onLayer_forPluginIdentifier","styles","getLayerStyles","addItemWithTitle","i","length","name","docTypeSettings","lastItem","setState","setMessageText","addButtonWithTitle","x","y","width","height","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","styleLine","line","style","localStyle","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","g","b","a","thickness","endMarkerType","allStyles","allLayerStyles","keyword","count","includes","push"],"mappings":"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","file":"settings.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/settings.js\");\n","import sketch from \"sketch\";\nimport { getLayerStyles } from \"./utilities/styling.js\";\n\n\nlet UI = require('sketch/ui') ;\nlet Settings = require(\"sketch/settings\");\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\n\nexport function settings(context) {\n let alert = COSAlertWindow.new();\n const viewWidth = 300;\n const viewHeight = 450;\n\n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight);\n let view = NSView.alloc().initWithFrame(\n NSMakeRect(0, 0, viewWidth, viewHeight)\n );\n alert.addAccessoryView(view);\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\n \"Arrow Style\",\n true,\n -1,\n viewHeight - 40,\n 280,\n 40\n );\n view.addSubview(arrowStyleLabel);\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(\n NSMakeRect(-2, viewHeight - 40, 300, 20)\n );\n setActiveStyleSetting(arrowStylingField);\n view.addSubview(arrowStylingField);\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\n \"Add layer style to your document that will contain $arrow name and you will be able to specify it here \",\n false,\n -1,\n viewHeight - 80,\n 300,\n 40\n );\n view.addSubview(arrowStyleInfoLabel);\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\n \"Arrow Type\",\n true,\n -1,\n viewHeight - 130,\n 280,\n 40\n );\n view.addSubview(arrowTypeLabel);\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(\n NSMakeRect(-2, viewHeight - 130, 300, 20)\n );\n setActiveTypeSetting(arrowTypeField);\n view.addSubview(arrowTypeField);\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\n \"Select one of the arrow types. Angled is used by default\",\n false,\n -1,\n viewHeight - 170,\n 300,\n 40\n );\n view.addSubview(arrowTypeInfoLabel);\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\n \"Arrow Spacing\",\n true,\n -1,\n viewHeight - 200,\n 330,\n 20\n );\n view.addSubview(arrowSpacingLabel);\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\n \"px\",\n true,\n 90,\n viewHeight - 220,\n 330,\n 20\n );\n view.addSubview(arrowSpacingPxLabel);\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(\n NSMakeRect(-2, viewHeight - 220, 80, 20)\n );\n var formatter = NSNumberFormatter.alloc()\n .init()\n .autorelease();\n arrowSpacingField.setStringValue(\n String(Settings.settingForKey(\"arrowSpacing\"))\n );\n arrowSpacingField.setFormatter(formatter);\n view.addSubview(arrowSpacingField);\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(\n NSMakeRect(70, viewHeight - 220, 20, 20)\n );\n arrowSpacingStepper.setMaxValue(1000);\n arrowSpacingStepper.setMinValue(0);\n arrowSpacingStepper.setValueWraps(false);\n arrowSpacingStepper.setAutorepeat(true);\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender) {\n var value = 0 + sender.integerValue();\n arrowSpacingField.setStringValue(String(value));\n });\n\n view.addSubview(arrowSpacingStepper);\n // view.addSubview(formatter)\n\n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\n \"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \",\n false,\n -1,\n viewHeight - 285,\n 300,\n 60\n );\n view.addSubview(arrowSpacingInfoLabel);\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\n \"Other Settings\",\n true,\n -1,\n viewHeight - 330,\n 280,\n 40\n );\n view.addSubview(otherSettingsLabel);\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\n \"Second layer auto-align\",\n false,\n -1,\n viewHeight - 340,\n 260,\n 40\n );\n view.addSubview(checkbox);\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\n \"Align the second layer for 5px misalignment with the first one\",\n false,\n -1,\n viewHeight - 370,\n 280,\n 40\n );\n view.addSubview(autoAlignInfoLabel);\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\n \"Made by @faridSabitov with the support of EPAM.com ❤️\",\n true,\n -1,\n viewHeight - 420,\n 280,\n 40\n );\n view.addSubview(pluginInfoLabel);\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal();\n\n if (modalResponse == NSAlertFirstButtonReturn) {\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(\n alert\n .views()[0]\n .subviews()[1]\n .title(),\n \"arrowStyle\",\n docData,\n pluginKey\n );\n Settings.setSettingForKey(\n \"arrowType\",\n alert\n .views()[0]\n .subviews()[4]\n .title()\n );\n Settings.setSettingForKey(\n \"arrowSpacing\",\n alert\n .views()[0]\n .subviews()[8]\n .intValue()\n );\n Settings.setSettingForKey(\n \"autoAlign\",\n alert\n .views()[0]\n .subviews()[12]\n .state()\n );\n UI.message(\"Settings are updated 🚀\");\n }\n}\n\n// Functions\n\nfunction setActiveStyleSetting(arrowStylingField) {\n let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier(\n \"arrowStyle\",\n docData,\n pluginKey\n );\n let styles = getLayerStyles(null);\n\n if (docSettings) {\n // We have info about the settings in the current document\n\n if (docSettings != \"Default Style\") {\n // if user specified own option\n arrowStylingField.addItemWithTitle(docSettings);\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for (let i = 0; i < styles.length; i++) {\n if (styles[i].name() != docSettings) {\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n } else {\n // Need to show the default first\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for (let i = 0; i < styles.length; i++) {\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n } else {\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for (let i = 0; i < styles.length; i++) {\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n}\n\nfunction setActiveTypeSetting(arrowTypeField) {\n let docTypeSettings = Settings.settingForKey(\"arrowType\");\n\n if (docTypeSettings) {\n // We have info about the settings in the current document\n\n if (docTypeSettings == \"Angled\") {\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(0);\n }\n\n if (docTypeSettings == \"Curved\") {\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(0);\n }\n\n if (docTypeSettings == \"Straight\") {\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(0);\n }\n } else {\n // Show default\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.addItemWithTitle(\"Straight\");\n }\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight) {\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\");\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\");\n alert.addButtonWithTitle(\"Cancel\");\n\n return alert;\n}\n\nfunction alertLabel(message, state, x, y, width, height) {\n let infoLabel = NSTextField.alloc().initWithFrame(\n NSMakeRect(x, y, width, height)\n );\n\n infoLabel.setStringValue(message);\n infoLabel.setSelectable(false);\n infoLabel.setDrawsBackground(false);\n infoLabel.setBezeled(false);\n\n if (state == false) {\n infoLabel.textColor = NSColor.disabledControlTextColor();\n }\n\n return infoLabel;\n}\n\nfunction alertCheckbox(message, state, x, y, width, height) {\n let checkbox = NSButton.alloc().initWithFrame(\n NSMakeRect(x, y, width, height)\n );\n\n checkbox.setButtonType(NSSwitchButton);\n checkbox.setBezelStyle(0);\n checkbox.setTitle(message);\n if (Settings.settingForKey(\"autoAlign\")) {\n let currentState = Settings.settingForKey(\"autoAlign\");\n checkbox.setState(currentState);\n } else {\n checkbox.setState(state);\n }\n\n return checkbox;\n}\n\n\n","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\n\n\nlet docData = context.document.documentData();\n\nexport function styleLine(line, style){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey));\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/src/createArrow.js b/src/createArrow.js index 3e0a240..3aa83c8 100644 --- a/src/createArrow.js +++ b/src/createArrow.js @@ -1,20 +1,10 @@ import sketch from 'sketch'; +import { drawConnection } from "./draw.js"; -let UI = require('sketch/ui') ; var Settings = require('sketch/settings'); +let document = sketch.fromNative(context.document); -const pluginKey = "flowArrows"; -let document; - -let docData, pluginData, currentParentGroup, newConnectionsData; - -document = sketch.fromNative(context.document); -docData = context.document.documentData(); -pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); -currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards -newConnectionsData = getConnectionsData(); - -import { drawConnection } from "./draw.js"; +// Main Function export function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored let localDirection = direction == "Auto" ? getDirection(firstObjectID, secondObjectID) : direction; @@ -37,23 +27,9 @@ export function createArrow(firstObjectID, secondObjectID, style, type, directio direction: localDirection, line : arrow.line.objectID() } - - // Need to save this data to the global array - newConnectionsData.push(connection); - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); + return connection; } -function getConnectionsData(){ //Refactored - let dataArray = []; - - if(pluginData){ - for (let i = 0; i < pluginData.length; i ++) { - dataArray.push(pluginData[i]); - } - } - return dataArray; - } - function getDirection(firstObjectID, secondObjectID){ // Refactored // Get direction from the source object const firstObject = document.getLayerWithID(firstObjectID); diff --git a/src/draw.js b/src/draw.js index 9fe8b3e..5ea07a2 100644 --- a/src/draw.js +++ b/src/draw.js @@ -2,14 +2,11 @@ import sketch from 'sketch'; import { styleLine } from "./utilities/styling.js"; var Settings = require('sketch/settings'); -const pluginKey = "flowArrows"; let document = sketch.fromNative(context.document); - - let docData = context.document.documentData(); -// let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); + // Main Function export function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition){ // Refactored diff --git a/src/script.js b/src/script.js index 7b3d147..33fc8a9 100644 --- a/src/script.js +++ b/src/script.js @@ -3,7 +3,10 @@ // import sketch from 'sketch'; - +import { createArrow } from "./createArrow.js"; +import { updateArrow } from "./updateArrow.js"; +import { getSourceObjectFromSelection } from "./utilities/getSourceObject.js" +import { getConnectionsData, findConnectionIndex } from "./utilities/data.js" let UI = require('sketch/ui') ; var Settings = require('sketch/settings'); @@ -11,24 +14,24 @@ var Settings = require('sketch/settings'); const pluginKey = "flowArrows"; let document; -let docData, pluginData, currentParentGroup, newConnectionsData; +let docData, pluginData, currentParentGroup, connectionsData; if(context.document){ //cc:remember place document = sketch.fromNative(context.document); docData = context.document.documentData(); pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards - newConnectionsData = getConnectionsData(); + connectionsData = getConnectionsData(); } else { document = sketch.fromNative(context.actionContext.document); //cc:here is bug;well, seems like a bug in logic } + // -// Create Connection Function +// Plugin Incoming Commands - Create // - export function createAutoArrow(context){create(context, "Auto", false);} export function createRightArrow(context){create(context, "Right", false);} export function createDownArrow(context){create(context, "Down", false);} @@ -75,193 +78,28 @@ export function autoUpdateSelectedArrows(context) { // context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); } - -// -// Update Connection Function -// - -export function updateSelectedArrows(context) { - let selection = context.selection; - - if(selection.count() > 1 && selection[0].class() != "MSArtboardGroup"){ - // Need to find source object by ID first - let currentConnectionsData = newConnectionsData; // Need to refactor - - for(let g = 0; g < selection.count(); g++) { - if(selection[g].objectID() != selection[0].objectID()){ - // Then need to create or update connection arrow with each selection - let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), currentConnectionsData); - - if(connectionIndex.length == 0){ - updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex); - sketch.UI.message("Current connection is updated 🤘"); - } else { - sketch.UI.message("There is no connection between selected layers on the plugin data"); - } - } - } - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); - - } else { - // When user didn't select anything - sketch.UI.message("Please select more than two layers. Artboards are coming soon 🥳"); - } -} - -export function updateArtboardArrows(context) {update(context, 2, false);} - -export function updateAllArrows(context) {update(context, 3, true);} - -export function deleteSelectedArrows(context) { - let selection = context.selection; - let firstObject, secondObject; - - if(selection.count() == 2){ - - for(let g = 0; g < selection.count(); g++) { - - if(selection[g].objectID() != selection[0].objectID()){ // It will never check 3rd connection - - let connections = getConnectionsData() ; - let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), connections); - - if(connectionIndex != null){ - // We have connections in database - deleteLine(connections[connectionIndex].line); - newConnectionsData = deleteConnectionFromData(connectionIndex); - const updateArrowsCounter = connections.length; - for (let i = 0; i < updateArrowsCounter; i ++) { - // Need to go through each connection and check if it placed on selected artboard - firstObject = document.getLayerWithID(connections[i].firstObject); - secondObject = document.getLayerWithID(connections[i].secondObject); - if(firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){ - if(secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){ - deleteLine(connections[i].line); - newConnectionsData = deleteConnectionFromData(i); - } - } - } - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); - sketch.UI.message("All arrows from selected layers are deleted ✌️"); - } - } - } - } else { - sketch.UI.message("Select two layers, please 🧐"); - } -} - -export function deleteArtboardArrows(context) { - let selection = context.selection; - let firstObject, secondObject; - - // Need to delete all the arrows only from selected artboard - if(selection.count() == 1 && selection[0].class() == "MSArtboardGroup"){ - let connections = getConnectionsData(); - - if(connections.length > 0){ - // We have connections in database - const updateArrowsCounter = connections.length; - for (let i = 0; i < updateArrowsCounter; i ++) { - // Need to go through each connection and check if it placed on selected artboard - firstObject = document.getLayerWithID(connections[i].firstObject); - secondObject = document.getLayerWithID(connections[i].secondObject); - if (firstObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){ - if (secondObject.sketchObject.parentArtboard().objectID() == selection[0].objectID()){ - deleteLine(connections[i].line); - newConnectionsData = deleteConnectionFromData(i); - } - } - } - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); - sketch.UI.message("All arrows from selected artboard are deleted"); - } else { - // We don't have any connections to update - sketch.UI.message("There is nothing to delete"); - } - } else { - sketch.UI.message("Please select one artboard"); - } -} - -export function deleteAllArrows(context) {update(context, 3, false);} - - - - - - // let selection = context.selection; - // if(selection.count() > 1 && selection[0].class() != "MSArtboardGroup"){ - // // Need to find source object by ID first - // let currentConnectionsData = newConnectionsData; // Need to refactor - - // for(let g = 0; g < selection.count(); g++) { - // if(selection[g].objectID() != selection[0].objectID()){ - // // Then need to create or update connection arrow with each selection - // let connectionIndex = findConnectionIndex(selection[0].objectID(), selection[g].objectID(), currentConnectionsData); - - // if(connectionIndex.length == 0){ - // updateArrow(currentConnectionsData[connectionIndex].firstObject, currentConnectionsData[connectionIndex].secondObject, currentConnectionsData[connectionIndex].style, currentConnectionsData[connectionIndex].type, currentConnectionsData[connectionIndex].direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, currentConnectionsData[connectionIndex].isCondition, connectionIndex); - // sketch.UI.message("Current connection is updated 🤘"); - // } else { - // sketch.UI.message("There is no connection between selected layers on the plugin data"); - // } - // } - // } - // context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); - - // } else { - // // When user didn't select anything - // sketch.UI.message("Please select more than two layers. Artboards are coming soon 🥳"); - // } - - -// -// Data -// - -function getConnectionsData(){ //Refactored - let dataArray = []; - - if(pluginData){ - for (let i = 0; i < pluginData.length; i ++) { - dataArray.push(pluginData[i]); - } - } - return dataArray; -} - - -// -// Functions -// - -import { createArrow } from "./createArrow.js"; -import { updateArrow } from "./updateArrow.js"; - function create(context, direction, isCondition){ - //cc:create#1;Passing all the data let selection = context.selection; if(selection.count() > 1 && selection[0].class() != "MSArtboardGroup"){ - // Need to find source object by ID first + let sourceObjectID = getSourceObjectFromSelection(selection, direction); - let currentConnectionsData = newConnectionsData; // Need to refactor for(let g = 0; g < selection.count(); g++) { if(selection[g].objectID() != sourceObjectID){ - // Then need to create or update connection arrow with each selection - let connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), currentConnectionsData); + let connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), connectionsData); if(connectionIndex.length == 0){ - // There is no connection with this two objects in our database - createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition); + // Create + let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition); + connectionsData.push(connection); + context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, "arrowConnections", docData, pluginKey); sketch.UI.message("New connection is created 🚀"); } else { - // Need to remake the arrow condition - if(updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].line, currentConnectionsData[connectionIndex].condition, isCondition, connectionIndex)){ - createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, currentConnectionsData[connectionIndex].condition, isCondition); + // Update + if(updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, connectionsData[connectionIndex].line, connectionsData[connectionIndex].condition, isCondition, connectionIndex)){ + createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, connectionsData[connectionIndex].condition, isCondition); } sketch.UI.message("Current connection is updated 🤘"); } @@ -273,6 +111,18 @@ function create(context, direction, isCondition){ } } + +// +// Plugin Incoming Commands - Update and Delete +// + +export function updateSelectedArrows(context) {update(context, 1, true);} +export function updateArtboardArrows(context) {update(context, 2, true);} +export function updateAllArrows(context) {update(context, 3, true);} +export function deleteSelectedArrows(context) {update(context, 1, false);} +export function deleteArtboardArrows(context) {update(context, 2, false);} +export function deleteAllArrows(context) {update(context, 3, false);} + export function update(context, level, isUpdate) { // 1 - selection level // 2 - artboard level @@ -324,83 +174,6 @@ export function update(context, level, isUpdate) { } } -function getSourceObjectFromSelection(selection, direction){ //Refactored - let sourceObjectID = selection.firstObject().objectID(); - - if(direction != "Auto"){ - for(let g = 0; g < selection.count(); g++) { - sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction); - } - } - - return sourceObjectID; -} - -function defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored - let firstObject = document.getLayerWithID(firstObjectID); - let secondObject = document.getLayerWithID(secondObjectID); - let sourceObjectID; - - if(direction == "Right"){ - if(firstObject.frame.x <= secondObject.frame.x){ - sourceObjectID = firstObject.id; - } else { - sourceObjectID = secondObject.id; - } - } - - if(direction == "Down"){ - if(firstObject.frame.y <= secondObject.frame.y){ - sourceObjectID = firstObject.id; - } else { - sourceObjectID = secondObject.id; - } - } - - if(direction == "Left"){ - if(firstObject.frame.x <= secondObject.frame.x){ - sourceObjectID = secondObject.id; - } else { - sourceObjectID = firstObject.id; - } - } - - if(direction == "Up"){ - if(firstObject.frame.y <= secondObject.frame.y){ - sourceObjectID = secondObject.id; - } else { - sourceObjectID = firstObject.id; - } - } - - return sourceObjectID; -} - -function findConnectionIndex(firstObjectID, secondObjectID, data){ - let indexArray = [] ; - firstObjectID = String(firstObjectID); - secondObjectID = String(secondObjectID); - - if(pluginData){ - // If we have database, need to check for connections - for(let y = 0; y < data.length; y++){ - if(firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject){ - if(secondObjectID == null){ - // When we need to find connection between two objects - if(secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject){ - indexArray[0] = y; - } - } else { - // When we need to find a connection for one object only - indexArray.push(y); - } - } - } - } - return indexArray; -} - - // const track = require("sketch-module-google-analytics") // track("UA-138226597-1", "event", { // ec: "command", diff --git a/src/settings.js b/src/settings.js index a2ea077..23b484a 100644 --- a/src/settings.js +++ b/src/settings.js @@ -1,20 +1,12 @@ import sketch from "sketch"; import { getLayerStyles } from "./utilities/styling.js"; -let UI = require("sketch/ui"); -var Settings = require("sketch/settings"); +let UI = require('sketch/ui') ; +let Settings = require("sketch/settings"); const pluginKey = "flowArrows"; - -let docData, pluginData, currentParentGroup, newConnectionsData; - let document = sketch.fromNative(context.document); -docData = context.document.documentData(); -pluginData = context.command.valueForKey_onLayer_forPluginIdentifier( - "arrowConnections", - docData, - pluginKey -); +let docData = context.document.documentData(); export function settings(context) { let alert = COSAlertWindow.new(); diff --git a/src/utilities/data.js b/src/utilities/data.js new file mode 100644 index 0000000..07a57db --- /dev/null +++ b/src/utilities/data.js @@ -0,0 +1,57 @@ +import sketch from 'sketch'; + +let UI = require('sketch/ui') ; +var Settings = require('sketch/settings'); + +const pluginKey = "flowArrows"; +let document; + +let docData, pluginData, currentParentGroup, connectionsData; + +document = sketch.fromNative(context.document); +docData = context.document.documentData(); +pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); +currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards + + + +export function getConnectionsData() { + let dataArray = []; + + if (pluginData) { + for (let i = 0; i < pluginData.length; i++) { + dataArray.push(pluginData[i]); + } + } + return dataArray; +} + +export function findConnectionIndex(firstObjectID, secondObjectID, data) { + let indexArray = []; + firstObjectID = String(firstObjectID); + secondObjectID = String(secondObjectID); + + if (pluginData) { + // If we have database, need to check for connections + for (let y = 0; y < data.length; y++) { + if ( + firstObjectID == data[y].firstObject || + firstObjectID == data[y].secondObject + ) { + if (secondObjectID == null) { + // When we need to find connection between two objects + if ( + secondObjectID == data[y].firstObject || + secondObjectID == data[y].secondObject + ) { + indexArray[0] = y; + } + } else { + // When we need to find a connection for one object only + indexArray.push(y); + } + } + } + } + return indexArray; +} diff --git a/src/utilities/getSourceObject.js b/src/utilities/getSourceObject.js new file mode 100644 index 0000000..db4964b --- /dev/null +++ b/src/utilities/getSourceObject.js @@ -0,0 +1,55 @@ +import sketch from 'sketch'; +let document = sketch.fromNative(context.document); + + +export function getSourceObjectFromSelection(selection, direction){ //Refactored + let sourceObjectID = selection.firstObject().objectID(); + + if(direction != "Auto"){ + for(let g = 0; g < selection.count(); g++) { + sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction); + } + } + + return sourceObjectID; +} + +function defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored + let firstObject = document.getLayerWithID(firstObjectID); + let secondObject = document.getLayerWithID(secondObjectID); + let sourceObjectID; + + if(direction == "Right"){ + if(firstObject.frame.x <= secondObject.frame.x){ + sourceObjectID = firstObject.id; + } else { + sourceObjectID = secondObject.id; + } + } + + if(direction == "Down"){ + if(firstObject.frame.y <= secondObject.frame.y){ + sourceObjectID = firstObject.id; + } else { + sourceObjectID = secondObject.id; + } + } + + if(direction == "Left"){ + if(firstObject.frame.x <= secondObject.frame.x){ + sourceObjectID = secondObject.id; + } else { + sourceObjectID = firstObject.id; + } + } + + if(direction == "Up"){ + if(firstObject.frame.y <= secondObject.frame.y){ + sourceObjectID = secondObject.id; + } else { + sourceObjectID = firstObject.id; + } + } + + return sourceObjectID; +} \ No newline at end of file diff --git a/src/utilities/links.js b/src/utilities/links.js index fbf6a39..df3d7ba 100644 --- a/src/utilities/links.js +++ b/src/utilities/links.js @@ -1,5 +1,3 @@ -export default function(context) {} - export function getLibrary(context) { NSWorkspace.sharedWorkspace().openURL(NSURL.URLWithString("https://github.com/faridsabitov/Sketch-Interactions")); } diff --git a/src/utilities/styling.js b/src/utilities/styling.js index 942cbe0..a14cf72 100644 --- a/src/utilities/styling.js +++ b/src/utilities/styling.js @@ -1,8 +1,6 @@ import sketch from 'sketch'; const pluginKey = "flowArrows"; let document = sketch.fromNative(context.document); - - let docData = context.document.documentData(); export function styleLine(line, style){ // Refactored From 7d934ebe51dc16c12fc3da40df2802029438650a Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Sat, 6 Jul 2019 09:13:35 +0300 Subject: [PATCH 30/44] preparing --- arrows.sketchplugin/Contents/Sketch/script.js | 77 ++++++++----------- .../Contents/Sketch/script.js.map | 2 +- src/script.js | 6 +- src/updateArrow.js | 43 ++--------- src/utilities/data.js | 16 ++++ 5 files changed, 55 insertions(+), 89 deletions(-) diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index fe0b98f..dab2d8d 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -830,15 +830,13 @@ var document; var docData, pluginData, currentParentGroup, connectionsData; if (context.document) { - //cc:remember place document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); docData = context.document.documentData(); pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); - currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards - + currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); connectionsData = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_4__["getConnectionsData"])(); } else { - document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.actionContext.document); //cc:here is bug;well, seems like a bug in logic + document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.actionContext.document); } // // Plugin Incoming Commands - Create // @@ -960,8 +958,6 @@ function update(context, level, isUpdate) { if (connectionsData.length > 0) { for (var i = 0; i < connectionsData.length; i++) { - deleteLine(connectionsData[i].line); - if (level == 3) { if (isUpdate) { Object(_updateArrow_js__WEBPACK_IMPORTED_MODULE_2__["updateArrow"])(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i); @@ -1019,6 +1015,8 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateArrow", function() { return updateArrow; }); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _utilities_data_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utilities/data.js */ "./src/utilities/data.js"); + var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); @@ -1026,14 +1024,12 @@ var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); var pluginKey = "flowArrows"; -var document; -var docData, pluginData, currentParentGroup, connectionsData; -document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); -docData = context.document.documentData(); -pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); -currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards +var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); +var docData = context.document.documentData(); +var pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); +var currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards -connectionsData = getConnectionsData(); +var connectionsData = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_1__["getConnectionsData"])(); function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored // Need to check if we have the layers with such IDs @@ -1050,7 +1046,7 @@ function updateArrow(firstObjectID, secondObjectID, style, type, direction, line } } - connectionsData = deleteConnectionFromData(connectionIndex); + connectionsData = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_1__["deleteConnectionFromData"])(connectionIndex); if (firstObject && secondObject) { // If we have all the objects, we can recreate the line @@ -1075,51 +1071,20 @@ function deleteLine(lineID) { } } -function deleteConnectionFromData(connectionIndex) { - // Refactored - var newConnections = []; - - if (pluginData) { - // If we have database - var connections = pluginData; - - for (var i = 0; i < connections.length; i++) { - // Updating all connections without deleted one - if (i != connectionIndex) { - newConnections.push(connections[i]); - } - } - } - - return newConnections; -} - -function getConnectionsData() { - //Refactored - var dataArray = []; - - if (pluginData) { - for (var i = 0; i < pluginData.length; i++) { - dataArray.push(pluginData[i]); - } - } - - return dataArray; -} - /***/ }), /***/ "./src/utilities/data.js": /*!*******************************!*\ !*** ./src/utilities/data.js ***! \*******************************/ -/*! exports provided: getConnectionsData, findConnectionIndex */ +/*! exports provided: getConnectionsData, findConnectionIndex, deleteConnectionFromData */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getConnectionsData", function() { return getConnectionsData; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "findConnectionIndex", function() { return findConnectionIndex; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteConnectionFromData", function() { return deleteConnectionFromData; }); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); @@ -1171,6 +1136,24 @@ function findConnectionIndex(firstObjectID, secondObjectID, data) { return indexArray; } +function deleteConnectionFromData(connectionIndex) { + // Refactored + var newConnections = []; + + if (pluginData) { + // If we have database + var connections = pluginData; + + for (var i = 0; i < connections.length; i++) { + // Updating all connections without deleted one + if (i != connectionIndex) { + newConnections.push(connections[i]); + } + } + } + + return newConnections; +} /***/ }), diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index 1ef0ad3..c343458 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/createArrow.js","webpack://exports/./src/draw.js","webpack://exports/./src/script.js","webpack://exports/./src/updateArrow.js","webpack://exports/./src/utilities/data.js","webpack://exports/./src/utilities/getSourceObject.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["Settings","require","document","sketch","fromNative","context","createArrow","firstObjectID","secondObjectID","style","type","direction","conditionID","isCondition","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","firstObject","secondObject","condition","line","objectID","getLayerWithID","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","sourceObjectID","childObjectID","sourceObject","childObject","settingForKey","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","docData","documentData","currentParentGroup","currentPage","currentArtboard","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","currentGroup","checkForGroup","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","layers","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","g","length","getImportableSymbolReferencesForDocument","i","name","includes","UI","alert","symbolMaster","import","createNewInstance","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","fixGeometryWithOptions","Group","group","moveToBack","adjustToFit","id","addLayers","locked","groupName","count","pluginKey","pluginData","connectionsData","command","valueForKey_onLayer_forPluginIdentifier","getConnectionsData","actionContext","createAutoArrow","create","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","autoUpdateSelectedArrows","selection","class","getSourceObjectFromSelection","connectionIndex","findConnectionIndex","push","setValue_forKey_onLayer_forPluginIdentifier","message","updateArrow","updateSelectedArrows","update","updateArtboardArrows","updateAllArrows","deleteSelectedArrows","deleteArtboardArrows","deleteAllArrows","level","isUpdate","newConnectionsData","firstObjectArtboard","secondObjectArtboard","deleteLine","sketchObject","parentArtboard","lineID","conditionObject","result","remove","deleteConnectionFromData","lineObject","selectedGroup","newConnections","connections","dataArray","data","indexArray","String","defineSourceObject","localStyle","getLayerStyles","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","allStyles","allLayerStyles","styles"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch';\nimport { drawConnection } from \"./draw.js\";\n\nvar Settings = require('sketch/settings');\nlet document = sketch.fromNative(context.document);\n\n// Main Function\n\nexport function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n return connection;\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}","import sketch from 'sketch';\nimport { styleLine } from \"./utilities/styling.js\";\nvar Settings = require('sketch/settings');\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\n// Main Function\n\nexport function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition){ // Refactored\n // Process of creating new connection \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n // Condition\n if(condition == true){\n if(conditionID != null){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY);\n }\n } else {\n connection.conditionID = null;\n }\n // connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style);\n\n // Add to group\n addToArrowsGroup(connection.line);\n \n return connection\n}\n\n// Positions\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\");\n let diffX, diffY;\n \n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n \n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n \n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n return connectionPos\n}\n\n// Drawing Types\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n \n return line;\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n \n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n \n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n \n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n \n if(firstLayerPosX Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here');\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y);\n }\n \n return symbol;\n}\n\nfunction addToConditionGroup(condition, x, y){ // Refactored\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n \n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Conditions',\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n}\n\nfunction updateCondition(conditionID, x, y){ // Refactored\nlet condition = document.getLayerWithID(conditionID);\n// log (condition)\nlet conGroup = checkForGroup(\"Conditions\") ;\nlet arGroup = checkForGroup(\"Arrows\");\nlet arGroupX = arGroup != null ? arGroup.frame().x() : 0;\nlet arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\nif(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n} else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n}\nreturn condition.id;\n}\n \n// Groups\n\nfunction addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\");\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nfunction checkForGroup(groupName) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n \n return currentGroup;\n}","//\n// Variables\n//\n\nimport sketch from 'sketch';\nimport { createArrow } from \"./createArrow.js\";\nimport { updateArrow } from \"./updateArrow.js\";\nimport { getSourceObjectFromSelection } from \"./utilities/getSourceObject.js\"\nimport { getConnectionsData, findConnectionIndex } from \"./utilities/data.js\"\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, connectionsData;\nif(context.document){\n //cc:remember place\n document = sketch.fromNative(context.document);\n docData = context.document.documentData();\n pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n connectionsData = getConnectionsData();\n} else {\n document = sketch.fromNative(context.actionContext.document);\n //cc:here is bug;well, seems like a bug in logic\n}\n\n \n//\n// Plugin Incoming Commands - Create \n//\n\nexport function createAutoArrow(context){create(context, \"Auto\", false);}\nexport function createRightArrow(context){create(context, \"Right\", false);}\nexport function createDownArrow(context){create(context, \"Down\", false);}\nexport function createLeftArrow(context){create(context, \"Left\", false);}\nexport function createUpArrow(context){create(context, \"Up\", false);}\n\nexport function createRightArrowWithCondition(context){create(context, \"Right\", true);}\nexport function createDownArrowWithCondition(context){create(context, \"Down\", true);}\nexport function createLeftArrowWithCondition(context){create(context, \"Left\", true);}\nexport function createUpArrowWithCondition(context){create(context, \"Up\", true);}\n\nexport function autoUpdateSelectedArrows(context) { \n // const action = context.actionContext;\n\n // docData = action.document.documentData();\n // pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n // currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n // newConnectionsData = getConnectionsData();\n\n // const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer));\n // log(movedLayers[0].id);\n // log(movedLayers.length);\n\n // // if (movedLayers.filter(layer => (layer.type == 'Artboard' || (layer.type == 'SymbolMaster' && config.arrangeSymbols))).length > 0) {\n // // ArrangeArtboards(context)\n // // }\n\n // let currentConnectionsData = newConnectionsData; // Need to refactor\n\n // for(let g = 0; g < movedLayers.length; g++) {\n\n // let connectionIndex = findConnectionIndex(movedLayers[0].id, null, currentConnectionsData);\n\n // log(\"yes \"+connectionIndex);\n // if(connectionIndex.length == 0){\n \n // updateArrow(currentConnectionsData[connectionIndex[0]].firstObject, currentConnectionsData[connectionIndex[0]].secondObject, currentConnectionsData[connectionIndex[0]].style, currentConnectionsData[connectionIndex[0]].type, currentConnectionsData[connectionIndex[0]].direction, currentConnectionsData[connectionIndex[0]].line, currentConnectionsData[connectionIndex[0]].condition, currentConnectionsData[connectionIndex[0]].isCondition, connectionIndex[0]);\n // sketch.UI.message(\"Current connection is updated 🤘\");\n // } else {\n // sketch.UI.message(\"There is no connection between selected layers on the plugin data\");\n // }\n \n // }\n // context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n}\n\n\nfunction create(context, direction, isCondition){\n let selection = context.selection;\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n\n let sourceObjectID = getSourceObjectFromSelection(selection, direction);\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n let connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), connectionsData);\n \n if(connectionIndex.length == 0){\n // Create\n let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition);\n connectionsData.push(connection);\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"New connection is created 🚀\");\n } else {\n // Update\n if(updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, connectionsData[connectionIndex].line, connectionsData[connectionIndex].condition, isCondition, connectionIndex)){\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, connectionsData[connectionIndex].condition, isCondition);\n }\n sketch.UI.message(\"Current connection is updated 🤘\");\n }\n }\n }\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\n \n//\n// Plugin Incoming Commands - Update and Delete\n//\n\nexport function updateSelectedArrows(context) {update(context, 1, true);}\nexport function updateArtboardArrows(context) {update(context, 2, true);}\nexport function updateAllArrows(context) {update(context, 3, true);}\nexport function deleteSelectedArrows(context) {update(context, 1, false);}\nexport function deleteArtboardArrows(context) {update(context, 2, false);}\nexport function deleteAllArrows(context) {update(context, 3, false);}\n\nexport function update(context, level, isUpdate) {\n // 1 - selection level\n // 2 - artboard level\n // 3 - document level\n let newConnectionsData = [];\n let selection = context.selection;\n let firstObjectArtboard;\n let secondObjectArtboard;\n\n if (connectionsData.length > 0) {\n for (let i = 0; i < connectionsData.length; i++) {\n deleteLine(connectionsData[i].line);\n \n if (level == 3) {\n if(isUpdate){\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n sketch.UI.message(\"All arrows are updated\");\n } else {\n newConnectionsData = null\n sketch.UI.message(\"All arrows are deleted\");\n }\n }\n if (level == 2) {\n firstObjectArtboard = document.getLayerWithID(connectionsData[i].firstObject);\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID();\n secondObjectArtboard = document.getLayerWithID(connectionsData[i].secondObject);\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID();\n\n if (selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\") {\n\n if (firstObjectArtboard == selection[0].objectID()) {\n if (secondObjectArtboard == selection[0].objectID()) {\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n }\n }\n sketch.UI.message(\"All arrows are updated 🚀\");\n \n \n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n sketch.UI.message(\"There is no arrows\");\n }\n}\n\n// const track = require(\"sketch-module-google-analytics\")\n// track(\"UA-138226597-1\", \"event\", {\n// ec: \"command\", \n// ea: \"create\", \n// ev: \"my-command\"\n// });\n\n\n\n\n\n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, connectionsData;\n\ndocument = sketch.fromNative(context.document);\ndocData = context.document.documentData();\npluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\ncurrentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\nconnectionsData = getConnectionsData();\n\n\n\nexport function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let conditionObject = document.getLayerWithID(conditionID);\n let result = false;\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID);\n if(conditionID && !isCondition){\n if(conditionObject){conditionObject.remove();}\n }\n \n connectionsData = deleteConnectionFromData(connectionIndex);\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n result = true;\n }\n\n return result;\n}\n\nfunction deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n\nfunction deleteConnectionFromData(connectionIndex){ // Refactored\n let newConnections = [];\n if(pluginData){\n // If we have database\n let connections = pluginData;\n \n for (let i = 0; i < connections.length; i ++) {\n // Updating all connections without deleted one\n if(i != connectionIndex){\n newConnections.push(connections[i]);\n }\n }\n }\n return newConnections;\n}\n\nfunction getConnectionsData(){ //Refactored\n let dataArray = [];\n \n if(pluginData){\n for (let i = 0; i < pluginData.length; i ++) {\n dataArray.push(pluginData[i]);\n }\n } \n return dataArray;\n}","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, connectionsData;\n\ndocument = sketch.fromNative(context.document);\ndocData = context.document.documentData();\npluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\ncurrentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n\n\n\nexport function getConnectionsData() {\n let dataArray = [];\n\n if (pluginData) {\n for (let i = 0; i < pluginData.length; i++) {\n dataArray.push(pluginData[i]);\n }\n }\n return dataArray;\n}\n\nexport function findConnectionIndex(firstObjectID, secondObjectID, data) {\n let indexArray = [];\n firstObjectID = String(firstObjectID);\n secondObjectID = String(secondObjectID);\n\n if (pluginData) {\n // If we have database, need to check for connections\n for (let y = 0; y < data.length; y++) {\n if (\n firstObjectID == data[y].firstObject ||\n firstObjectID == data[y].secondObject\n ) {\n if (secondObjectID == null) {\n // When we need to find connection between two objects\n if (\n secondObjectID == data[y].firstObject ||\n secondObjectID == data[y].secondObject\n ) {\n indexArray[0] = y;\n }\n } else {\n // When we need to find a connection for one object only\n indexArray.push(y);\n }\n }\n }\n }\n return indexArray;\n}\n","import sketch from 'sketch';\nlet document = sketch.fromNative(context.document);\n\n\nexport function getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID();\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction);\n }\n }\n \n return sourceObjectID;\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let sourceObjectID;\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n return sourceObjectID;\n}","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\n\nexport function styleLine(line, style){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey));\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/createArrow.js","webpack://exports/./src/draw.js","webpack://exports/./src/script.js","webpack://exports/./src/updateArrow.js","webpack://exports/./src/utilities/data.js","webpack://exports/./src/utilities/getSourceObject.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["Settings","require","document","sketch","fromNative","context","createArrow","firstObjectID","secondObjectID","style","type","direction","conditionID","isCondition","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","firstObject","secondObject","condition","line","objectID","getLayerWithID","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","sourceObjectID","childObjectID","sourceObject","childObject","settingForKey","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","docData","documentData","currentParentGroup","currentPage","currentArtboard","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","currentGroup","checkForGroup","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","layers","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","g","length","getImportableSymbolReferencesForDocument","i","name","includes","UI","alert","symbolMaster","import","createNewInstance","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","fixGeometryWithOptions","Group","group","moveToBack","adjustToFit","id","addLayers","locked","groupName","count","pluginKey","pluginData","connectionsData","command","valueForKey_onLayer_forPluginIdentifier","getConnectionsData","actionContext","createAutoArrow","create","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","autoUpdateSelectedArrows","selection","class","getSourceObjectFromSelection","connectionIndex","findConnectionIndex","push","setValue_forKey_onLayer_forPluginIdentifier","message","updateArrow","updateSelectedArrows","update","updateArtboardArrows","updateAllArrows","deleteSelectedArrows","deleteArtboardArrows","deleteAllArrows","level","isUpdate","newConnectionsData","firstObjectArtboard","secondObjectArtboard","sketchObject","parentArtboard","lineID","conditionObject","result","deleteLine","remove","deleteConnectionFromData","lineObject","selectedGroup","dataArray","data","indexArray","String","newConnections","connections","defineSourceObject","localStyle","getLayerStyles","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","allStyles","allLayerStyles","styles"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch';\nimport { drawConnection } from \"./draw.js\";\n\nvar Settings = require('sketch/settings');\nlet document = sketch.fromNative(context.document);\n\n// Main Function\n\nexport function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n return connection;\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}","import sketch from 'sketch';\nimport { styleLine } from \"./utilities/styling.js\";\nvar Settings = require('sketch/settings');\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\n// Main Function\n\nexport function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition){ // Refactored\n // Process of creating new connection \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n // Condition\n if(condition == true){\n if(conditionID != null){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY);\n }\n } else {\n connection.conditionID = null;\n }\n // connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style);\n\n // Add to group\n addToArrowsGroup(connection.line);\n \n return connection\n}\n\n// Positions\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\");\n let diffX, diffY;\n \n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n \n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n \n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n return connectionPos\n}\n\n// Drawing Types\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n \n return line;\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n \n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n \n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n \n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n \n if(firstLayerPosX Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here');\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y);\n }\n \n return symbol;\n}\n\nfunction addToConditionGroup(condition, x, y){ // Refactored\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n \n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Conditions',\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n}\n\nfunction updateCondition(conditionID, x, y){ // Refactored\nlet condition = document.getLayerWithID(conditionID);\n// log (condition)\nlet conGroup = checkForGroup(\"Conditions\") ;\nlet arGroup = checkForGroup(\"Arrows\");\nlet arGroupX = arGroup != null ? arGroup.frame().x() : 0;\nlet arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\nif(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n} else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n}\nreturn condition.id;\n}\n \n// Groups\n\nfunction addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\");\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nfunction checkForGroup(groupName) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n \n return currentGroup;\n}","//\n// Variables\n//\n\nimport sketch from 'sketch';\nimport { createArrow } from \"./createArrow.js\";\nimport { updateArrow } from \"./updateArrow.js\";\nimport { getSourceObjectFromSelection } from \"./utilities/getSourceObject.js\"\nimport { getConnectionsData, findConnectionIndex } from \"./utilities/data.js\"\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, connectionsData;\nif(context.document){\n document = sketch.fromNative(context.document);\n docData = context.document.documentData();\n pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n connectionsData = getConnectionsData();\n} else {\n document = sketch.fromNative(context.actionContext.document);\n}\n\n \n//\n// Plugin Incoming Commands - Create \n//\n\nexport function createAutoArrow(context){create(context, \"Auto\", false);}\nexport function createRightArrow(context){create(context, \"Right\", false);}\nexport function createDownArrow(context){create(context, \"Down\", false);}\nexport function createLeftArrow(context){create(context, \"Left\", false);}\nexport function createUpArrow(context){create(context, \"Up\", false);}\n\nexport function createRightArrowWithCondition(context){create(context, \"Right\", true);}\nexport function createDownArrowWithCondition(context){create(context, \"Down\", true);}\nexport function createLeftArrowWithCondition(context){create(context, \"Left\", true);}\nexport function createUpArrowWithCondition(context){create(context, \"Up\", true);}\n\nexport function autoUpdateSelectedArrows(context) { \n // const action = context.actionContext;\n\n // docData = action.document.documentData();\n // pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n // currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n // newConnectionsData = getConnectionsData();\n\n // const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer));\n // log(movedLayers[0].id);\n // log(movedLayers.length);\n\n // // if (movedLayers.filter(layer => (layer.type == 'Artboard' || (layer.type == 'SymbolMaster' && config.arrangeSymbols))).length > 0) {\n // // ArrangeArtboards(context)\n // // }\n\n // let currentConnectionsData = newConnectionsData; // Need to refactor\n\n // for(let g = 0; g < movedLayers.length; g++) {\n\n // let connectionIndex = findConnectionIndex(movedLayers[0].id, null, currentConnectionsData);\n\n // log(\"yes \"+connectionIndex);\n // if(connectionIndex.length == 0){\n \n // updateArrow(currentConnectionsData[connectionIndex[0]].firstObject, currentConnectionsData[connectionIndex[0]].secondObject, currentConnectionsData[connectionIndex[0]].style, currentConnectionsData[connectionIndex[0]].type, currentConnectionsData[connectionIndex[0]].direction, currentConnectionsData[connectionIndex[0]].line, currentConnectionsData[connectionIndex[0]].condition, currentConnectionsData[connectionIndex[0]].isCondition, connectionIndex[0]);\n // sketch.UI.message(\"Current connection is updated 🤘\");\n // } else {\n // sketch.UI.message(\"There is no connection between selected layers on the plugin data\");\n // }\n \n // }\n // context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n}\n\n\nfunction create(context, direction, isCondition){\n let selection = context.selection;\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n\n let sourceObjectID = getSourceObjectFromSelection(selection, direction);\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n let connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), connectionsData);\n \n if(connectionIndex.length == 0){\n // Create\n let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition);\n connectionsData.push(connection);\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"New connection is created 🚀\");\n } else {\n // Update\n if(updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, connectionsData[connectionIndex].line, connectionsData[connectionIndex].condition, isCondition, connectionIndex)){\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, connectionsData[connectionIndex].condition, isCondition);\n }\n sketch.UI.message(\"Current connection is updated 🤘\");\n }\n }\n }\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\n \n//\n// Plugin Incoming Commands - Update and Delete\n//\n\nexport function updateSelectedArrows(context) {update(context, 1, true);}\nexport function updateArtboardArrows(context) {update(context, 2, true);}\nexport function updateAllArrows(context) {update(context, 3, true);}\nexport function deleteSelectedArrows(context) {update(context, 1, false);}\nexport function deleteArtboardArrows(context) {update(context, 2, false);}\nexport function deleteAllArrows(context) {update(context, 3, false);}\n\nexport function update(context, level, isUpdate) {\n // 1 - selection level\n // 2 - artboard level\n // 3 - document level\n let newConnectionsData = [];\n let selection = context.selection;\n let firstObjectArtboard;\n let secondObjectArtboard;\n\n\n if (connectionsData.length > 0) {\n for (let i = 0; i < connectionsData.length; i++) {\n \n if (level == 3) {\n if(isUpdate){\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n sketch.UI.message(\"All arrows are updated\");\n } else {\n newConnectionsData = null\n sketch.UI.message(\"All arrows are deleted\");\n }\n }\n if (level == 2) {\n firstObjectArtboard = document.getLayerWithID(connectionsData[i].firstObject);\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID();\n secondObjectArtboard = document.getLayerWithID(connectionsData[i].secondObject);\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID();\n\n if (selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\") {\n\n if (firstObjectArtboard == selection[0].objectID()) {\n if (secondObjectArtboard == selection[0].objectID()) {\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n }\n }\n sketch.UI.message(\"All arrows are updated 🚀\");\n \n \n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n sketch.UI.message(\"There is no arrows\");\n }\n}\n\n// const track = require(\"sketch-module-google-analytics\")\n// track(\"UA-138226597-1\", \"event\", {\n// ec: \"command\", \n// ea: \"create\", \n// ev: \"my-command\"\n// });\n\n\n\n\n\n","import sketch from 'sketch';\nimport { getConnectionsData, findConnectionIndex, deleteConnectionFromData} from \"./utilities/data.js\"\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\nlet connectionsData = getConnectionsData();\n\n\n\nexport function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let conditionObject = document.getLayerWithID(conditionID);\n let result = false;\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID);\n if(conditionID && !isCondition){\n if(conditionObject){conditionObject.remove();}\n }\n \n connectionsData = deleteConnectionFromData(connectionIndex);\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n result = true;\n }\n\n return result;\n}\n\nfunction deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, connectionsData;\n\ndocument = sketch.fromNative(context.document);\ndocData = context.document.documentData();\npluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\ncurrentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n\n\n\nexport function getConnectionsData() {\n let dataArray = [];\n\n if (pluginData) {\n for (let i = 0; i < pluginData.length; i++) {\n dataArray.push(pluginData[i]);\n }\n }\n return dataArray;\n}\n\nexport function findConnectionIndex(firstObjectID, secondObjectID, data) {\n let indexArray = [];\n firstObjectID = String(firstObjectID);\n secondObjectID = String(secondObjectID);\n\n if (pluginData) {\n // If we have database, need to check for connections\n for (let y = 0; y < data.length; y++) {\n if (\n firstObjectID == data[y].firstObject ||\n firstObjectID == data[y].secondObject\n ) {\n if (secondObjectID == null) {\n // When we need to find connection between two objects\n if (\n secondObjectID == data[y].firstObject ||\n secondObjectID == data[y].secondObject\n ) {\n indexArray[0] = y;\n }\n } else {\n // When we need to find a connection for one object only\n indexArray.push(y);\n }\n }\n }\n }\n return indexArray;\n}\n\nexport function deleteConnectionFromData(connectionIndex){ // Refactored\n let newConnections = [];\n if(pluginData){\n // If we have database\n let connections = pluginData;\n\n for (let i = 0; i < connections.length; i ++) {\n // Updating all connections without deleted one\n if(i != connectionIndex){\n newConnections.push(connections[i]);\n }\n }\n }\n return newConnections;\n}\n","import sketch from 'sketch';\nlet document = sketch.fromNative(context.document);\n\n\nexport function getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID();\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction);\n }\n }\n \n return sourceObjectID;\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let sourceObjectID;\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n return sourceObjectID;\n}","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\n\nexport function styleLine(line, style){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey));\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/src/script.js b/src/script.js index 33fc8a9..7e394ec 100644 --- a/src/script.js +++ b/src/script.js @@ -16,15 +16,13 @@ let document; let docData, pluginData, currentParentGroup, connectionsData; if(context.document){ - //cc:remember place document = sketch.fromNative(context.document); docData = context.document.documentData(); pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); - currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards + currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); connectionsData = getConnectionsData(); } else { document = sketch.fromNative(context.actionContext.document); - //cc:here is bug;well, seems like a bug in logic } @@ -132,9 +130,9 @@ export function update(context, level, isUpdate) { let firstObjectArtboard; let secondObjectArtboard; + if (connectionsData.length > 0) { for (let i = 0; i < connectionsData.length; i++) { - deleteLine(connectionsData[i].line); if (level == 3) { if(isUpdate){ diff --git a/src/updateArrow.js b/src/updateArrow.js index f454fe3..dcca2c4 100644 --- a/src/updateArrow.js +++ b/src/updateArrow.js @@ -1,18 +1,14 @@ import sketch from 'sketch'; +import { getConnectionsData, findConnectionIndex, deleteConnectionFromData} from "./utilities/data.js" let UI = require('sketch/ui') ; var Settings = require('sketch/settings'); - const pluginKey = "flowArrows"; -let document; - -let docData, pluginData, currentParentGroup, connectionsData; - -document = sketch.fromNative(context.document); -docData = context.document.documentData(); -pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); -currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards -connectionsData = getConnectionsData(); +let document = sketch.fromNative(context.document); +let docData = context.document.documentData(); +let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); +let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards +let connectionsData = getConnectionsData(); @@ -50,30 +46,3 @@ function deleteLine(lineID){ // refactored } } } - -function deleteConnectionFromData(connectionIndex){ // Refactored - let newConnections = []; - if(pluginData){ - // If we have database - let connections = pluginData; - - for (let i = 0; i < connections.length; i ++) { - // Updating all connections without deleted one - if(i != connectionIndex){ - newConnections.push(connections[i]); - } - } - } - return newConnections; -} - -function getConnectionsData(){ //Refactored - let dataArray = []; - - if(pluginData){ - for (let i = 0; i < pluginData.length; i ++) { - dataArray.push(pluginData[i]); - } - } - return dataArray; -} \ No newline at end of file diff --git a/src/utilities/data.js b/src/utilities/data.js index 07a57db..8f5beba 100644 --- a/src/utilities/data.js +++ b/src/utilities/data.js @@ -55,3 +55,19 @@ export function findConnectionIndex(firstObjectID, secondObjectID, data) { } return indexArray; } + +export function deleteConnectionFromData(connectionIndex){ // Refactored + let newConnections = []; + if(pluginData){ + // If we have database + let connections = pluginData; + + for (let i = 0; i < connections.length; i ++) { + // Updating all connections without deleted one + if(i != connectionIndex){ + newConnections.push(connections[i]); + } + } + } + return newConnections; +} From 04db0a5e1b41fa2588fa2b48542f3ed212255c6c Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Sat, 6 Jul 2019 20:43:10 +0300 Subject: [PATCH 31/44] fixed problem with data --- arrows.sketchplugin/Contents/Sketch/script.js | 397 +++++++++++------- .../Contents/Sketch/script.js.map | 2 +- src/draw.js | 109 +---- src/script.js | 29 +- src/updateArrow.js | 43 +- src/utilities/conditions.js | 72 ++++ src/utilities/data.js | 19 +- src/utilities/getSourceObject.js | 3 +- src/utilities/groups.js | 67 +++ src/utilities/lines.js | 14 + 10 files changed, 440 insertions(+), 315 deletions(-) create mode 100644 src/utilities/conditions.js create mode 100644 src/utilities/groups.js create mode 100644 src/utilities/lines.js diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index dab2d8d..e3261e7 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -242,11 +242,17 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _utilities_styling_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utilities/styling.js */ "./src/utilities/styling.js"); +/* harmony import */ var _utilities_conditions_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utilities/conditions.js */ "./src/utilities/conditions.js"); +/* harmony import */ var _utilities_groups_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utilities/groups.js */ "./src/utilities/groups.js"); + + var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); +var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); + var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); var docData = context.document.documentData(); var currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // Main Function @@ -281,9 +287,9 @@ function drawConnection(firstObjectID, secondObjectID, style, type, localDirecti if (condition == true) { if (conditionID != null) { - connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY); + connection.conditionID = Object(_utilities_conditions_js__WEBPACK_IMPORTED_MODULE_2__["updateCondition"])(conditionID, connectionPos.middlePosX, connectionPos.middlePosY); } else { - connection.conditionID = addCondition("#con", connectionPos.middlePosX, connectionPos.middlePosY); + connection.conditionID = Object(_utilities_conditions_js__WEBPACK_IMPORTED_MODULE_2__["addCondition"])("#con", connectionPos.middlePosX, connectionPos.middlePosY); } } else { connection.conditionID = null; @@ -293,7 +299,7 @@ function drawConnection(firstObjectID, secondObjectID, style, type, localDirecti connection.style = Object(_utilities_styling_js__WEBPACK_IMPORTED_MODULE_1__["styleLine"])(connection.line, style); // Add to group - addToArrowsGroup(connection.line); + Object(_utilities_groups_js__WEBPACK_IMPORTED_MODULE_3__["addToArrowsGroup"])(connection.line); return connection; } // Positions @@ -307,7 +313,7 @@ function getConnectionPos(firstObject, secondObject, direction) { from: secondObject.parent, to: currentParentGroup }); - var currentGroup = checkForGroup("Arrows"); + var currentGroup = Object(_utilities_groups_js__WEBPACK_IMPORTED_MODULE_3__["checkForGroup"])("Arrows"); var diffX, diffY; if (currentGroup) { @@ -663,119 +669,6 @@ function drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondL line.setName("Curved Arrow"); return line; -} // Conditions - - -function addCondition(keyword, x, y) { - // Refactored - var libraries = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.getLibraries(); - var libraryObject, symbolReferences, symbol; - - for (var g = 0; g < libraries.length; g++) { - symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document); - - for (var i = 0; i < symbolReferences.length; i++) { - if (symbolReferences[i].name.includes(keyword)) { - libraryObject = symbolReferences[i]; - } - } - } - - if (libraryObject == null) { - symbol = null; - UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as "#condition" so it will be added here'); - } else { - var symbolMaster = libraryObject.import(); - symbol = symbolMaster.createNewInstance(); - symbol = addToConditionGroup(symbol, x, y); - } - - return symbol; -} - -function addToConditionGroup(condition, x, y) { - // Refactored - var conGroup = checkForGroup("Conditions"); - var arGroup = checkForGroup("Arrows"); - var arGroupX = arGroup != null ? arGroup.frame().x() : 0; - var arGroupY = arGroup != null ? arGroup.frame().y() : 0; - - if (conGroup) { - condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX); - condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY); - condition.parent = conGroup; - conGroup.fixGeometryWithOptions(1); - } else { - condition.frame.x = x - condition.frame.width / 2; - condition.frame.y = y - condition.frame.height / 2; - - var Group = __webpack_require__(/*! sketch/dom */ "sketch/dom").Group; - - var group = new Group({ - parent: currentParentGroup, - name: 'Conditions', - layers: [condition] - }); - group.moveToBack(); - group.adjustToFit(); - } - - return condition.id; -} - -function updateCondition(conditionID, x, y) { - // Refactored - var condition = document.getLayerWithID(conditionID); // log (condition) - - var conGroup = checkForGroup("Conditions"); - var arGroup = checkForGroup("Arrows"); - var arGroupX = arGroup != null ? arGroup.frame().x() : 0; - var arGroupY = arGroup != null ? arGroup.frame().y() : 0; - - if (conGroup) { - condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX); - condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY); - conGroup.fixGeometryWithOptions(1); - } else { - condition.frame.x = x - condition.frame.width / 2; - condition.frame.y = y - condition.frame.height / 2; - } - - return condition.id; -} // Groups - - -function addToArrowsGroup(line) { - var currentGroup = checkForGroup("Arrows"); - - if (currentGroup) { - currentGroup.addLayers([line]); - currentGroup.fixGeometryWithOptions(1); - } else { - var Group = __webpack_require__(/*! sketch/dom */ "sketch/dom").Group; - - var group = new Group({ - parent: currentParentGroup, - name: 'Arrows', - locked: true, - layers: [line] - }); - group.moveToBack(); - group.adjustToFit(); - } -} - -function checkForGroup(groupName) { - // refactored - var currentGroup = null; // Checking all the groups that we have - - for (var i = 0; i < currentParentGroup.layers().count(); i++) { - if (currentParentGroup.layers()[i].name() == groupName) { - currentGroup = currentParentGroup.layers()[i]; - } - } - - return currentGroup; } /***/ }), @@ -812,6 +705,8 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _updateArrow_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./updateArrow.js */ "./src/updateArrow.js"); /* harmony import */ var _utilities_getSourceObject_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utilities/getSourceObject.js */ "./src/utilities/getSourceObject.js"); /* harmony import */ var _utilities_data_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utilities/data.js */ "./src/utilities/data.js"); +/* harmony import */ var _utilities_lines_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utilities/lines.js */ "./src/utilities/lines.js"); +/* harmony import */ var _utilities_conditions_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utilities/conditions.js */ "./src/utilities/conditions.js"); // // Variables // @@ -821,6 +716,8 @@ __webpack_require__.r(__webpack_exports__); + + var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); @@ -898,28 +795,42 @@ function create(context, direction, isCondition) { var selection = context.selection; if (selection.count() > 1 && selection[0].class() != "MSArtboardGroup") { - var sourceObjectID = Object(_utilities_getSourceObject_js__WEBPACK_IMPORTED_MODULE_3__["getSourceObjectFromSelection"])(selection, direction); + var _sourceObjectID = Object(_utilities_getSourceObject_js__WEBPACK_IMPORTED_MODULE_3__["getSourceObjectFromSelection"])(selection, direction); // Useful for selecting multiple layers - for (var g = 0; g < selection.count(); g++) { - if (selection[g].objectID() != sourceObjectID) { - var connectionIndex = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_4__["findConnectionIndex"])(sourceObjectID, selection[g].objectID(), connectionsData); + + for (var _g = 0; _g < selection.count(); _g++) { + if (selection[_g].objectID() != _sourceObjectID) { + var connectionIndex = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_4__["findConnectionIndex"])(_sourceObjectID, selection[_g].objectID(), connectionsData); + log("connection Index length"); + log(connectionIndex.length); if (connectionIndex.length == 0) { // Create - var connection = Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_1__["createArrow"])(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition); + var connection = Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_1__["createArrow"])(_sourceObjectID, selection[_g].objectID(), null, null, direction, null, isCondition); connectionsData.push(connection); - context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, "arrowConnections", docData, pluginKey); + log("Create Data"); + log(connectionsData); sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("New connection is created 🚀"); } else { // Update - if (Object(_updateArrow_js__WEBPACK_IMPORTED_MODULE_2__["updateArrow"])(sourceObjectID, selection[g].objectID(), null, null, direction, connectionsData[connectionIndex].line, connectionsData[connectionIndex].condition, isCondition, connectionIndex)) { - Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_1__["createArrow"])(sourceObjectID, selection[g].objectID(), null, null, direction, connectionsData[connectionIndex].condition, isCondition); + Object(_utilities_lines_js__WEBPACK_IMPORTED_MODULE_5__["deleteLine"])(connectionsData[connectionIndex].line); + + if (!isCondition) { + Object(_utilities_conditions_js__WEBPACK_IMPORTED_MODULE_6__["deleteCondition"])(connectionsData[connectionIndex].condition); } + var _connection = Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_1__["createArrow"])(_sourceObjectID, selection[_g].objectID(), null, null, direction, null, isCondition); + + connectionsData = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_4__["deleteConnectionFromData"])(connectionIndex); + connectionsData.push(_connection); + log("Final Data: "); + log(connectionsData); sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Current connection is updated 🤘"); } } } + + context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, "arrowConnections", docData, pluginKey); } else { // When user didn't select anything sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Please select more than two layers. Artboards are coming soon 🥳"); @@ -990,7 +901,9 @@ function update(context, level, isUpdate) { sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows are updated 🚀"); } - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); + var connection = Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_1__["createArrow"])(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition); + connectionsData.push(connection); + context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, "arrowConnections", docData, pluginKey); } else { sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is no arrows"); } @@ -1016,6 +929,8 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _utilities_data_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utilities/data.js */ "./src/utilities/data.js"); +/* harmony import */ var _utilities_lines_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utilities/lines.js */ "./src/utilities/lines.js"); + @@ -1033,37 +948,99 @@ var connectionsData = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_1__["ge function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored // Need to check if we have the layers with such IDs - var firstObject = document.getLayerWithID(firstObjectID); - var secondObject = document.getLayerWithID(secondObjectID); - var conditionObject = document.getLayerWithID(conditionID); - var result = false; // Need to delete data first, because we will have a new line + // let firstObject = document.getLayerWithID(firstObjectID); + // let secondObject = document.getLayerWithID(secondObjectID); + // let conditionObject = document.getLayerWithID(conditionID); + // let result = false; + // Need to delete data first, because we will have a new line + // deleteLine(lineID); + // if(conditionID && !isCondition){ + // if(conditionObject){conditionObject.remove();} + // } + connectionsData = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_1__["deleteConnectionFromData"])(connectionIndex); // if(firstObject && secondObject){ + // // If we have all the objects, we can recreate the line + // result = true; + // } + // return result; +} + +/***/ }), + +/***/ "./src/utilities/conditions.js": +/*!*************************************!*\ + !*** ./src/utilities/conditions.js ***! + \*************************************/ +/*! exports provided: addCondition, updateCondition, deleteCondition */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addCondition", function() { return addCondition; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateCondition", function() { return updateCondition; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteCondition", function() { return deleteCondition; }); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _groups_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./groups.js */ "./src/utilities/groups.js"); - deleteLine(lineID); - if (conditionID && !isCondition) { - if (conditionObject) { - conditionObject.remove(); + +var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); + +var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); + +var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); +var docData = context.document.documentData(); +var currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); +function addCondition(keyword, x, y) { + var libraries = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.getLibraries(); + var libraryObject, symbolReferences, symbol; + + for (var g = 0; g < libraries.length; g++) { + symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document); + + for (var i = 0; i < symbolReferences.length; i++) { + if (symbolReferences[i].name.includes(keyword)) { + libraryObject = symbolReferences[i]; + } } } - connectionsData = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_1__["deleteConnectionFromData"])(connectionIndex); - - if (firstObject && secondObject) { - // If we have all the objects, we can recreate the line - result = true; + if (libraryObject == null) { + symbol = null; + UI.alert("Condition symbol is not found", 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as "#condition" so it will be added here'); + } else { + var symbolMaster = libraryObject.import(); + symbol = symbolMaster.createNewInstance(); + symbol = Object(_groups_js__WEBPACK_IMPORTED_MODULE_1__["addToConditionGroup"])(symbol, x, y); } - return result; + return symbol; } +function updateCondition(conditionID, x, y) { + var condition = document.getLayerWithID(conditionID); + var conGroup = checkForGroup("Conditions"); + var arGroup = checkForGroup("Arrows"); + var arGroupX = arGroup != null ? arGroup.frame().x() : 0; + var arGroupY = arGroup != null ? arGroup.frame().y() : 0; -function deleteLine(lineID) { - // refactored - var lineObject = document.getLayerWithID(lineID); + if (conGroup) { + condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX); + condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY); + conGroup.fixGeometryWithOptions(1); + } else { + condition.frame.x = x - condition.frame.width / 2; + condition.frame.y = y - condition.frame.height / 2; + } + + return condition.id; +} +function deleteCondition(conditionID) { + var conditionObject = document.getLayerWithID(conditionID); var selectedGroup; - if (lineObject) { - selectedGroup = lineObject.parent; - lineObject.remove(); + if (conditionObject) { + selectedGroup = conditionObject.parent; + conditionObject.remove(); if (selectedGroup.layers.length == 0) { selectedGroup.remove(); @@ -1117,17 +1094,12 @@ function findConnectionIndex(firstObjectID, secondObjectID, data) { firstObjectID = String(firstObjectID); secondObjectID = String(secondObjectID); - if (pluginData) { + if (data) { // If we have database, need to check for connections for (var y = 0; y < data.length; y++) { if (firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject) { - if (secondObjectID == null) { - // When we need to find connection between two objects - if (secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject) { - indexArray[0] = y; - } - } else { - // When we need to find a connection for one object only + // When we need to find connection between two objects + if (secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject) { indexArray.push(y); } } @@ -1172,7 +1144,6 @@ __webpack_require__.r(__webpack_exports__); var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); function getSourceObjectFromSelection(selection, direction) { - //Refactored var sourceObjectID = selection.firstObject().objectID(); if (direction != "Auto") { @@ -1227,6 +1198,122 @@ function defineSourceObject(firstObjectID, secondObjectID, direction) { /***/ }), +/***/ "./src/utilities/groups.js": +/*!*********************************!*\ + !*** ./src/utilities/groups.js ***! + \*********************************/ +/*! exports provided: checkForGroup, addToArrowsGroup, addToConditionGroup */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "checkForGroup", function() { return checkForGroup; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addToArrowsGroup", function() { return addToArrowsGroup; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addToConditionGroup", function() { return addToConditionGroup; }); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); + + +var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); + +var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); + +var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); +var docData = context.document.documentData(); +var currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); +function checkForGroup(groupName) { + // refactored + var currentGroup = null; // Checking all the groups that we have + + for (var i = 0; i < currentParentGroup.layers().count(); i++) { + if (currentParentGroup.layers()[i].name() == groupName) { + currentGroup = currentParentGroup.layers()[i]; + } + } + + return currentGroup; +} +function addToArrowsGroup(line) { + var currentGroup = checkForGroup("Arrows"); + + if (currentGroup) { + currentGroup.addLayers([line]); + currentGroup.fixGeometryWithOptions(1); + } else { + var Group = __webpack_require__(/*! sketch/dom */ "sketch/dom").Group; + + var group = new Group({ + parent: currentParentGroup, + name: 'Arrows', + locked: true, + layers: [line] + }); + group.moveToBack(); + group.adjustToFit(); + } +} +function addToConditionGroup(condition, x, y) { + var conGroup = checkForGroup("Conditions"); + var arGroup = checkForGroup("Arrows"); + var arGroupX = arGroup != null ? arGroup.frame().x() : 0; + var arGroupY = arGroup != null ? arGroup.frame().y() : 0; + + if (conGroup) { + condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX); + condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY); + condition.parent = conGroup; + conGroup.fixGeometryWithOptions(1); + } else { + condition.frame.x = x - condition.frame.width / 2; + condition.frame.y = y - condition.frame.height / 2; + + var Group = __webpack_require__(/*! sketch/dom */ "sketch/dom").Group; + + var group = new Group({ + parent: currentParentGroup, + name: "Conditions", + layers: [condition] + }); + group.moveToBack(); + group.adjustToFit(); + } + + return condition.id; +} + +/***/ }), + +/***/ "./src/utilities/lines.js": +/*!********************************!*\ + !*** ./src/utilities/lines.js ***! + \********************************/ +/*! exports provided: deleteLine */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteLine", function() { return deleteLine; }); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); + +var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); +function deleteLine(lineID) { + // refactored + var lineObject = document.getLayerWithID(lineID); + var selectedGroup; + + if (lineObject) { + selectedGroup = lineObject.parent; + lineObject.remove(); + + if (selectedGroup.layers.length == 0) { + selectedGroup.remove(); + } + } +} + +/***/ }), + /***/ "./src/utilities/styling.js": /*!**********************************!*\ !*** ./src/utilities/styling.js ***! diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index c343458..aa61bb6 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/createArrow.js","webpack://exports/./src/draw.js","webpack://exports/./src/script.js","webpack://exports/./src/updateArrow.js","webpack://exports/./src/utilities/data.js","webpack://exports/./src/utilities/getSourceObject.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["Settings","require","document","sketch","fromNative","context","createArrow","firstObjectID","secondObjectID","style","type","direction","conditionID","isCondition","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","firstObject","secondObject","condition","line","objectID","getLayerWithID","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","sourceObjectID","childObjectID","sourceObject","childObject","settingForKey","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","docData","documentData","currentParentGroup","currentPage","currentArtboard","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","currentGroup","checkForGroup","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","layers","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","g","length","getImportableSymbolReferencesForDocument","i","name","includes","UI","alert","symbolMaster","import","createNewInstance","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","fixGeometryWithOptions","Group","group","moveToBack","adjustToFit","id","addLayers","locked","groupName","count","pluginKey","pluginData","connectionsData","command","valueForKey_onLayer_forPluginIdentifier","getConnectionsData","actionContext","createAutoArrow","create","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","autoUpdateSelectedArrows","selection","class","getSourceObjectFromSelection","connectionIndex","findConnectionIndex","push","setValue_forKey_onLayer_forPluginIdentifier","message","updateArrow","updateSelectedArrows","update","updateArtboardArrows","updateAllArrows","deleteSelectedArrows","deleteArtboardArrows","deleteAllArrows","level","isUpdate","newConnectionsData","firstObjectArtboard","secondObjectArtboard","sketchObject","parentArtboard","lineID","conditionObject","result","deleteLine","remove","deleteConnectionFromData","lineObject","selectedGroup","dataArray","data","indexArray","String","newConnections","connections","defineSourceObject","localStyle","getLayerStyles","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","allStyles","allLayerStyles","styles"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch';\nimport { drawConnection } from \"./draw.js\";\n\nvar Settings = require('sketch/settings');\nlet document = sketch.fromNative(context.document);\n\n// Main Function\n\nexport function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n return connection;\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}","import sketch from 'sketch';\nimport { styleLine } from \"./utilities/styling.js\";\nvar Settings = require('sketch/settings');\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\n// Main Function\n\nexport function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition){ // Refactored\n // Process of creating new connection \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n // Condition\n if(condition == true){\n if(conditionID != null){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY);\n }\n } else {\n connection.conditionID = null;\n }\n // connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style);\n\n // Add to group\n addToArrowsGroup(connection.line);\n \n return connection\n}\n\n// Positions\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\");\n let diffX, diffY;\n \n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n \n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n \n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n return connectionPos\n}\n\n// Drawing Types\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n \n return line;\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n \n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n \n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n \n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n \n if(firstLayerPosX Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here');\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y);\n }\n \n return symbol;\n}\n\nfunction addToConditionGroup(condition, x, y){ // Refactored\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n \n if(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Conditions',\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n}\n\nfunction updateCondition(conditionID, x, y){ // Refactored\nlet condition = document.getLayerWithID(conditionID);\n// log (condition)\nlet conGroup = checkForGroup(\"Conditions\") ;\nlet arGroup = checkForGroup(\"Arrows\");\nlet arGroupX = arGroup != null ? arGroup.frame().x() : 0;\nlet arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\nif(conGroup){\n condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n} else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n}\nreturn condition.id;\n}\n \n// Groups\n\nfunction addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\");\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nfunction checkForGroup(groupName) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n \n return currentGroup;\n}","//\n// Variables\n//\n\nimport sketch from 'sketch';\nimport { createArrow } from \"./createArrow.js\";\nimport { updateArrow } from \"./updateArrow.js\";\nimport { getSourceObjectFromSelection } from \"./utilities/getSourceObject.js\"\nimport { getConnectionsData, findConnectionIndex } from \"./utilities/data.js\"\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, connectionsData;\nif(context.document){\n document = sketch.fromNative(context.document);\n docData = context.document.documentData();\n pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n connectionsData = getConnectionsData();\n} else {\n document = sketch.fromNative(context.actionContext.document);\n}\n\n \n//\n// Plugin Incoming Commands - Create \n//\n\nexport function createAutoArrow(context){create(context, \"Auto\", false);}\nexport function createRightArrow(context){create(context, \"Right\", false);}\nexport function createDownArrow(context){create(context, \"Down\", false);}\nexport function createLeftArrow(context){create(context, \"Left\", false);}\nexport function createUpArrow(context){create(context, \"Up\", false);}\n\nexport function createRightArrowWithCondition(context){create(context, \"Right\", true);}\nexport function createDownArrowWithCondition(context){create(context, \"Down\", true);}\nexport function createLeftArrowWithCondition(context){create(context, \"Left\", true);}\nexport function createUpArrowWithCondition(context){create(context, \"Up\", true);}\n\nexport function autoUpdateSelectedArrows(context) { \n // const action = context.actionContext;\n\n // docData = action.document.documentData();\n // pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n // currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n // newConnectionsData = getConnectionsData();\n\n // const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer));\n // log(movedLayers[0].id);\n // log(movedLayers.length);\n\n // // if (movedLayers.filter(layer => (layer.type == 'Artboard' || (layer.type == 'SymbolMaster' && config.arrangeSymbols))).length > 0) {\n // // ArrangeArtboards(context)\n // // }\n\n // let currentConnectionsData = newConnectionsData; // Need to refactor\n\n // for(let g = 0; g < movedLayers.length; g++) {\n\n // let connectionIndex = findConnectionIndex(movedLayers[0].id, null, currentConnectionsData);\n\n // log(\"yes \"+connectionIndex);\n // if(connectionIndex.length == 0){\n \n // updateArrow(currentConnectionsData[connectionIndex[0]].firstObject, currentConnectionsData[connectionIndex[0]].secondObject, currentConnectionsData[connectionIndex[0]].style, currentConnectionsData[connectionIndex[0]].type, currentConnectionsData[connectionIndex[0]].direction, currentConnectionsData[connectionIndex[0]].line, currentConnectionsData[connectionIndex[0]].condition, currentConnectionsData[connectionIndex[0]].isCondition, connectionIndex[0]);\n // sketch.UI.message(\"Current connection is updated 🤘\");\n // } else {\n // sketch.UI.message(\"There is no connection between selected layers on the plugin data\");\n // }\n \n // }\n // context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n}\n\n\nfunction create(context, direction, isCondition){\n let selection = context.selection;\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n\n let sourceObjectID = getSourceObjectFromSelection(selection, direction);\n\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n let connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), connectionsData);\n \n if(connectionIndex.length == 0){\n // Create\n let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition);\n connectionsData.push(connection);\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n sketch.UI.message(\"New connection is created 🚀\");\n } else {\n // Update\n if(updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, connectionsData[connectionIndex].line, connectionsData[connectionIndex].condition, isCondition, connectionIndex)){\n createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, connectionsData[connectionIndex].condition, isCondition);\n }\n sketch.UI.message(\"Current connection is updated 🤘\");\n }\n }\n }\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\n \n//\n// Plugin Incoming Commands - Update and Delete\n//\n\nexport function updateSelectedArrows(context) {update(context, 1, true);}\nexport function updateArtboardArrows(context) {update(context, 2, true);}\nexport function updateAllArrows(context) {update(context, 3, true);}\nexport function deleteSelectedArrows(context) {update(context, 1, false);}\nexport function deleteArtboardArrows(context) {update(context, 2, false);}\nexport function deleteAllArrows(context) {update(context, 3, false);}\n\nexport function update(context, level, isUpdate) {\n // 1 - selection level\n // 2 - artboard level\n // 3 - document level\n let newConnectionsData = [];\n let selection = context.selection;\n let firstObjectArtboard;\n let secondObjectArtboard;\n\n\n if (connectionsData.length > 0) {\n for (let i = 0; i < connectionsData.length; i++) {\n \n if (level == 3) {\n if(isUpdate){\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n sketch.UI.message(\"All arrows are updated\");\n } else {\n newConnectionsData = null\n sketch.UI.message(\"All arrows are deleted\");\n }\n }\n if (level == 2) {\n firstObjectArtboard = document.getLayerWithID(connectionsData[i].firstObject);\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID();\n secondObjectArtboard = document.getLayerWithID(connectionsData[i].secondObject);\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID();\n\n if (selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\") {\n\n if (firstObjectArtboard == selection[0].objectID()) {\n if (secondObjectArtboard == selection[0].objectID()) {\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n }\n }\n sketch.UI.message(\"All arrows are updated 🚀\");\n \n \n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n sketch.UI.message(\"There is no arrows\");\n }\n}\n\n// const track = require(\"sketch-module-google-analytics\")\n// track(\"UA-138226597-1\", \"event\", {\n// ec: \"command\", \n// ea: \"create\", \n// ev: \"my-command\"\n// });\n\n\n\n\n\n","import sketch from 'sketch';\nimport { getConnectionsData, findConnectionIndex, deleteConnectionFromData} from \"./utilities/data.js\"\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\nlet connectionsData = getConnectionsData();\n\n\n\nexport function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let conditionObject = document.getLayerWithID(conditionID);\n let result = false;\n \n // Need to delete data first, because we will have a new line\n deleteLine(lineID);\n if(conditionID && !isCondition){\n if(conditionObject){conditionObject.remove();}\n }\n \n connectionsData = deleteConnectionFromData(connectionIndex);\n\n if(firstObject && secondObject){\n // If we have all the objects, we can recreate the line\n result = true;\n }\n\n return result;\n}\n\nfunction deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, connectionsData;\n\ndocument = sketch.fromNative(context.document);\ndocData = context.document.documentData();\npluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\ncurrentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n\n\n\nexport function getConnectionsData() {\n let dataArray = [];\n\n if (pluginData) {\n for (let i = 0; i < pluginData.length; i++) {\n dataArray.push(pluginData[i]);\n }\n }\n return dataArray;\n}\n\nexport function findConnectionIndex(firstObjectID, secondObjectID, data) {\n let indexArray = [];\n firstObjectID = String(firstObjectID);\n secondObjectID = String(secondObjectID);\n\n if (pluginData) {\n // If we have database, need to check for connections\n for (let y = 0; y < data.length; y++) {\n if (\n firstObjectID == data[y].firstObject ||\n firstObjectID == data[y].secondObject\n ) {\n if (secondObjectID == null) {\n // When we need to find connection between two objects\n if (\n secondObjectID == data[y].firstObject ||\n secondObjectID == data[y].secondObject\n ) {\n indexArray[0] = y;\n }\n } else {\n // When we need to find a connection for one object only\n indexArray.push(y);\n }\n }\n }\n }\n return indexArray;\n}\n\nexport function deleteConnectionFromData(connectionIndex){ // Refactored\n let newConnections = [];\n if(pluginData){\n // If we have database\n let connections = pluginData;\n\n for (let i = 0; i < connections.length; i ++) {\n // Updating all connections without deleted one\n if(i != connectionIndex){\n newConnections.push(connections[i]);\n }\n }\n }\n return newConnections;\n}\n","import sketch from 'sketch';\nlet document = sketch.fromNative(context.document);\n\n\nexport function getSourceObjectFromSelection(selection, direction){ //Refactored\n let sourceObjectID = selection.firstObject().objectID();\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction);\n }\n }\n \n return sourceObjectID;\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let sourceObjectID;\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n return sourceObjectID;\n}","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\n\nexport function styleLine(line, style){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey));\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/createArrow.js","webpack://exports/./src/draw.js","webpack://exports/./src/script.js","webpack://exports/./src/updateArrow.js","webpack://exports/./src/utilities/conditions.js","webpack://exports/./src/utilities/data.js","webpack://exports/./src/utilities/getSourceObject.js","webpack://exports/./src/utilities/groups.js","webpack://exports/./src/utilities/lines.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["Settings","require","document","sketch","fromNative","context","createArrow","firstObjectID","secondObjectID","style","type","direction","conditionID","isCondition","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","firstObject","secondObject","condition","line","objectID","getLayerWithID","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","sourceObjectID","childObjectID","sourceObject","childObject","settingForKey","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","UI","docData","documentData","currentParentGroup","currentPage","currentArtboard","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","currentGroup","checkForGroup","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","layers","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","pluginKey","pluginData","connectionsData","command","valueForKey_onLayer_forPluginIdentifier","getConnectionsData","actionContext","createAutoArrow","create","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","autoUpdateSelectedArrows","selection","count","class","getSourceObjectFromSelection","g","connectionIndex","findConnectionIndex","log","length","push","message","deleteLine","deleteCondition","deleteConnectionFromData","setValue_forKey_onLayer_forPluginIdentifier","updateSelectedArrows","update","updateArtboardArrows","updateAllArrows","deleteSelectedArrows","deleteArtboardArrows","deleteAllArrows","level","isUpdate","newConnectionsData","firstObjectArtboard","secondObjectArtboard","i","updateArrow","sketchObject","parentArtboard","lineID","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","getImportableSymbolReferencesForDocument","name","includes","alert","symbolMaster","import","createNewInstance","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","fixGeometryWithOptions","id","conditionObject","selectedGroup","remove","dataArray","data","indexArray","String","newConnections","connections","defineSourceObject","groupName","addLayers","Group","group","locked","moveToBack","adjustToFit","lineObject","localStyle","getLayerStyles","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","allStyles","allLayerStyles","styles"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch';\nimport { drawConnection } from \"./draw.js\";\n\nvar Settings = require('sketch/settings');\nlet document = sketch.fromNative(context.document);\n\n// Main Function\n\nexport function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n return connection;\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}","import sketch from 'sketch';\nimport { styleLine } from \"./utilities/styling.js\";\nimport { addCondition, updateCondition } from \"./utilities/conditions.js\";\nimport { checkForGroup, addToArrowsGroup } from \"./utilities/groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\n// Main Function\n\nexport function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition){ // Refactored\n // Process of creating new connection \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n // Condition\n if(condition == true){\n if(conditionID != null){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY);\n }\n } else {\n connection.conditionID = null;\n }\n // connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style);\n\n // Add to group\n addToArrowsGroup(connection.line);\n \n return connection\n}\n\n// Positions\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\");\n let diffX, diffY;\n \n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n \n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n \n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n return connectionPos\n}\n\n// Drawing Types\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n \n return line;\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n \n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n \n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n \n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n \n if(firstLayerPosX sketch.fromNative(layer));\n // log(movedLayers[0].id);\n // log(movedLayers.length);\n\n // // if (movedLayers.filter(layer => (layer.type == 'Artboard' || (layer.type == 'SymbolMaster' && config.arrangeSymbols))).length > 0) {\n // // ArrangeArtboards(context)\n // // }\n\n // let currentConnectionsData = newConnectionsData; // Need to refactor\n\n // for(let g = 0; g < movedLayers.length; g++) {\n\n // let connectionIndex = findConnectionIndex(movedLayers[0].id, null, currentConnectionsData);\n\n // log(\"yes \"+connectionIndex);\n // if(connectionIndex.length == 0){\n \n // updateArrow(currentConnectionsData[connectionIndex[0]].firstObject, currentConnectionsData[connectionIndex[0]].secondObject, currentConnectionsData[connectionIndex[0]].style, currentConnectionsData[connectionIndex[0]].type, currentConnectionsData[connectionIndex[0]].direction, currentConnectionsData[connectionIndex[0]].line, currentConnectionsData[connectionIndex[0]].condition, currentConnectionsData[connectionIndex[0]].isCondition, connectionIndex[0]);\n // sketch.UI.message(\"Current connection is updated 🤘\");\n // } else {\n // sketch.UI.message(\"There is no connection between selected layers on the plugin data\");\n // }\n \n // }\n // context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n}\n\n\nfunction create(context, direction, isCondition){\n let selection = context.selection;\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n let sourceObjectID = getSourceObjectFromSelection(selection, direction); // Useful for selecting multiple layers\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n let connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), connectionsData);\n log(\"connection Index length\")\n log(connectionIndex.length);\n if(connectionIndex.length == 0){\n // Create\n let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition);\n connectionsData.push(connection);\n log(\"Create Data\");\n log(connectionsData);\n sketch.UI.message(\"New connection is created 🚀\");\n } else {\n // Update\n deleteLine(connectionsData[connectionIndex].line);\n if(!isCondition){deleteCondition(connectionsData[connectionIndex].condition)}\n let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition);\n connectionsData = deleteConnectionFromData(connectionIndex);\n connectionsData.push(connection);\n log(\"Final Data: \");\n log(connectionsData);\n sketch.UI.message(\"Current connection is updated 🤘\");\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\n \n//\n// Plugin Incoming Commands - Update and Delete\n//\n\nexport function updateSelectedArrows(context) {update(context, 1, true);}\nexport function updateArtboardArrows(context) {update(context, 2, true);}\nexport function updateAllArrows(context) {update(context, 3, true);}\nexport function deleteSelectedArrows(context) {update(context, 1, false);}\nexport function deleteArtboardArrows(context) {update(context, 2, false);}\nexport function deleteAllArrows(context) {update(context, 3, false);}\n\nexport function update(context, level, isUpdate) {\n // 1 - selection level\n // 2 - artboard level\n // 3 - document level\n let newConnectionsData = [];\n let selection = context.selection;\n let firstObjectArtboard;\n let secondObjectArtboard;\n\n\n if (connectionsData.length > 0) {\n for (let i = 0; i < connectionsData.length; i++) {\n \n if (level == 3) {\n if(isUpdate){\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n sketch.UI.message(\"All arrows are updated\");\n } else {\n newConnectionsData = null\n sketch.UI.message(\"All arrows are deleted\");\n }\n }\n if (level == 2) {\n firstObjectArtboard = document.getLayerWithID(connectionsData[i].firstObject);\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID();\n secondObjectArtboard = document.getLayerWithID(connectionsData[i].secondObject);\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID();\n\n if (selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\") {\n\n if (firstObjectArtboard == selection[0].objectID()) {\n if (secondObjectArtboard == selection[0].objectID()) {\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n }\n }\n sketch.UI.message(\"All arrows are updated 🚀\");\n \n \n }\n let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition);\n connectionsData.push(connection);\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n sketch.UI.message(\"There is no arrows\");\n }\n}\n\n// const track = require(\"sketch-module-google-analytics\")\n// track(\"UA-138226597-1\", \"event\", {\n// ec: \"command\", \n// ea: \"create\", \n// ev: \"my-command\"\n// });\n\n\n\n\n\n","import sketch from 'sketch';\nimport { getConnectionsData, deleteConnectionFromData} from \"./utilities/data.js\"\nimport { deleteLine } from \"./utilities/lines.js\"\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\nlet connectionsData = getConnectionsData();\n\n\n\nexport function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n // let firstObject = document.getLayerWithID(firstObjectID);\n // let secondObject = document.getLayerWithID(secondObjectID);\n // let conditionObject = document.getLayerWithID(conditionID);\n // let result = false;\n \n // Need to delete data first, because we will have a new line\n // deleteLine(lineID);\n // if(conditionID && !isCondition){\n // if(conditionObject){conditionObject.remove();}\n // }\n \n connectionsData = deleteConnectionFromData(connectionIndex);\n\n // if(firstObject && secondObject){\n // // If we have all the objects, we can recreate the line\n // result = true;\n // }\n\n // return result;\n}","import sketch from 'sketch';\nimport { addToConditionGroup } from \"./groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\nexport function addCondition(keyword, x, y) {\n let libraries = sketch.getLibraries();\n let libraryObject, symbolReferences, symbol;\n\n for (let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(\n document\n );\n for (let i = 0; i < symbolReferences.length; i++) {\n if (symbolReferences[i].name.includes(keyword)) {\n libraryObject = symbolReferences[i];\n }\n }\n }\n\n if (libraryObject == null) {\n symbol = null;\n UI.alert(\n \"Condition symbol is not found\",\n 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here'\n );\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y);\n }\n\n return symbol;\n}\n\nexport function updateCondition(conditionID, x, y) {\n let condition = document.getLayerWithID(conditionID);\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n }\n return condition.id;\n}\n\nexport function deleteCondition(conditionID) {\n let conditionObject = document.getLayerWithID(conditionID);\n let selectedGroup;\n if(conditionObject){\n selectedGroup = conditionObject.parent;\n conditionObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n\n }\n \n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, connectionsData;\n\ndocument = sketch.fromNative(context.document);\ndocData = context.document.documentData();\npluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\ncurrentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n\n\n\nexport function getConnectionsData() {\n let dataArray = [];\n\n if (pluginData) {\n for (let i = 0; i < pluginData.length; i++) {\n dataArray.push(pluginData[i]);\n }\n }\n return dataArray;\n}\n\nexport function findConnectionIndex(firstObjectID, secondObjectID, data) {\n let indexArray = [];\n firstObjectID = String(firstObjectID);\n secondObjectID = String(secondObjectID);\n\n if (data) {\n // If we have database, need to check for connections\n for (let y = 0; y < data.length; y++) {\n if (firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject) {\n // When we need to find connection between two objects\n if (secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject) {\n indexArray.push(y);\n }\n }\n }\n }\n return indexArray;\n}\n\nexport function deleteConnectionFromData(connectionIndex){ // Refactored\n let newConnections = [];\n if(pluginData){\n // If we have database\n let connections = pluginData;\n\n for (let i = 0; i < connections.length; i ++) {\n // Updating all connections without deleted one\n if(i != connectionIndex){\n newConnections.push(connections[i]);\n }\n }\n }\n return newConnections;\n}\n","import sketch from 'sketch';\nlet document = sketch.fromNative(context.document);\n\n\nexport function getSourceObjectFromSelection(selection, direction){\n let sourceObjectID = selection.firstObject().objectID();\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction);\n }\n }\n return sourceObjectID;\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let sourceObjectID;\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n return sourceObjectID;\n}","import sketch from 'sketch';\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function checkForGroup(groupName) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n \n return currentGroup;\n}\n\nexport function addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\");\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nexport function addToConditionGroup(condition, x, y) {\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n \n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n let Group = require(\"sketch/dom\").Group;\n let group = new Group({\n parent: currentParentGroup,\n name: \"Conditions\",\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n }","import sketch from 'sketch';\nlet document = sketch.fromNative(context.document);\n\nexport function deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\n\nexport function styleLine(line, style){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey));\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/src/draw.js b/src/draw.js index 5ea07a2..0e502b5 100644 --- a/src/draw.js +++ b/src/draw.js @@ -1,6 +1,9 @@ import sketch from 'sketch'; import { styleLine } from "./utilities/styling.js"; -var Settings = require('sketch/settings'); +import { addCondition, updateCondition } from "./utilities/conditions.js"; +import { checkForGroup, addToArrowsGroup } from "./utilities/groups.js"; +let Settings = require('sketch/settings'); +let UI = require('sketch/ui') ; let document = sketch.fromNative(context.document); let docData = context.document.documentData(); @@ -335,107 +338,3 @@ function drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondL return line; } -// Conditions - -function addCondition(keyword, x, y){ // Refactored - let libraries = sketch.getLibraries(); - let libraryObject, symbolReferences, symbol; - - for(let g = 0; g < libraries.length; g++) { - symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document); - for(let i = 0; i < symbolReferences.length; i++) { - if(symbolReferences[i].name.includes(keyword)){ - libraryObject = symbolReferences[i]; - } - } - } - - if(libraryObject == null){ - symbol = null; - UI.alert('Condition symbol is not found', 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as "#condition" so it will be added here'); - } else { - let symbolMaster = libraryObject.import(); - symbol = symbolMaster.createNewInstance(); - symbol = addToConditionGroup(symbol, x, y); - } - - return symbol; -} - -function addToConditionGroup(condition, x, y){ // Refactored - let conGroup = checkForGroup("Conditions"); - let arGroup = checkForGroup("Arrows"); - let arGroupX = arGroup != null ? arGroup.frame().x() : 0; - let arGroupY = arGroup != null ? arGroup.frame().y() : 0; - - if(conGroup){ - condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX); - condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY); - condition.parent = conGroup; - conGroup.fixGeometryWithOptions(1); - } else { - condition.frame.x = x - condition.frame.width / 2; - condition.frame.y = y - condition.frame.height / 2; - let Group = require('sketch/dom').Group; - let group = new Group({ - parent: currentParentGroup, - name: 'Conditions', - layers: [condition] - }); - group.moveToBack(); - group.adjustToFit(); - } - return condition.id; -} - -function updateCondition(conditionID, x, y){ // Refactored -let condition = document.getLayerWithID(conditionID); -// log (condition) -let conGroup = checkForGroup("Conditions") ; -let arGroup = checkForGroup("Arrows"); -let arGroupX = arGroup != null ? arGroup.frame().x() : 0; -let arGroupY = arGroup != null ? arGroup.frame().y() : 0; - -if(conGroup){ - condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX); - condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY); - conGroup.fixGeometryWithOptions(1); -} else { - condition.frame.x = x - condition.frame.width / 2; - condition.frame.y = y - condition.frame.height / 2; -} -return condition.id; -} - -// Groups - -function addToArrowsGroup(line){ - let currentGroup = checkForGroup("Arrows"); - if(currentGroup){ - currentGroup.addLayers([line]); - currentGroup.fixGeometryWithOptions(1); - } else { - let Group = require('sketch/dom').Group; - let group = new Group({ - parent: currentParentGroup, - name: 'Arrows', - locked: true, - layers: [line] - }); - group.moveToBack(); - group.adjustToFit(); - } -} - -function checkForGroup(groupName) { // refactored - let currentGroup = null; - - // Checking all the groups that we have - for(let i = 0; i < currentParentGroup.layers().count(); i++){ - if(currentParentGroup.layers()[i].name() == groupName) { - currentGroup = currentParentGroup.layers()[i]; - } - } - - return currentGroup; -} \ No newline at end of file diff --git a/src/script.js b/src/script.js index 7e394ec..7a143f2 100644 --- a/src/script.js +++ b/src/script.js @@ -6,7 +6,9 @@ import sketch from 'sketch'; import { createArrow } from "./createArrow.js"; import { updateArrow } from "./updateArrow.js"; import { getSourceObjectFromSelection } from "./utilities/getSourceObject.js" -import { getConnectionsData, findConnectionIndex } from "./utilities/data.js" +import { getConnectionsData, findConnectionIndex, deleteConnectionFromData } from "./utilities/data.js" +import { deleteLine } from "./utilities/lines.js" +import { deleteCondition } from "./utilities/conditions.js"; let UI = require('sketch/ui') ; var Settings = require('sketch/settings'); @@ -81,28 +83,33 @@ function create(context, direction, isCondition){ let selection = context.selection; if(selection.count() > 1 && selection[0].class() != "MSArtboardGroup"){ - - let sourceObjectID = getSourceObjectFromSelection(selection, direction); - + let sourceObjectID = getSourceObjectFromSelection(selection, direction); // Useful for selecting multiple layers for(let g = 0; g < selection.count(); g++) { if(selection[g].objectID() != sourceObjectID){ let connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), connectionsData); - + log("connection Index length") + log(connectionIndex.length); if(connectionIndex.length == 0){ // Create let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition); connectionsData.push(connection); - context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, "arrowConnections", docData, pluginKey); + log("Create Data"); + log(connectionsData); sketch.UI.message("New connection is created 🚀"); } else { // Update - if(updateArrow(sourceObjectID, selection[g].objectID(), null, null, direction, connectionsData[connectionIndex].line, connectionsData[connectionIndex].condition, isCondition, connectionIndex)){ - createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, connectionsData[connectionIndex].condition, isCondition); - } + deleteLine(connectionsData[connectionIndex].line); + if(!isCondition){deleteCondition(connectionsData[connectionIndex].condition)} + let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition); + connectionsData = deleteConnectionFromData(connectionIndex); + connectionsData.push(connection); + log("Final Data: "); + log(connectionsData); sketch.UI.message("Current connection is updated 🤘"); } } } + context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, "arrowConnections", docData, pluginKey); } else { // When user didn't select anything sketch.UI.message("Please select more than two layers. Artboards are coming soon 🥳"); @@ -166,7 +173,9 @@ export function update(context, level, isUpdate) { } - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); + let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition); + connectionsData.push(connection); + context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, "arrowConnections", docData, pluginKey); } else { sketch.UI.message("There is no arrows"); } diff --git a/src/updateArrow.js b/src/updateArrow.js index dcca2c4..a83a05b 100644 --- a/src/updateArrow.js +++ b/src/updateArrow.js @@ -1,5 +1,6 @@ import sketch from 'sketch'; -import { getConnectionsData, findConnectionIndex, deleteConnectionFromData} from "./utilities/data.js" +import { getConnectionsData, deleteConnectionFromData} from "./utilities/data.js" +import { deleteLine } from "./utilities/lines.js" let UI = require('sketch/ui') ; var Settings = require('sketch/settings'); @@ -14,35 +15,23 @@ let connectionsData = getConnectionsData(); export function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored // Need to check if we have the layers with such IDs - let firstObject = document.getLayerWithID(firstObjectID); - let secondObject = document.getLayerWithID(secondObjectID); - let conditionObject = document.getLayerWithID(conditionID); - let result = false; + // let firstObject = document.getLayerWithID(firstObjectID); + // let secondObject = document.getLayerWithID(secondObjectID); + // let conditionObject = document.getLayerWithID(conditionID); + // let result = false; // Need to delete data first, because we will have a new line - deleteLine(lineID); - if(conditionID && !isCondition){ - if(conditionObject){conditionObject.remove();} - } + // deleteLine(lineID); + // if(conditionID && !isCondition){ + // if(conditionObject){conditionObject.remove();} + // } connectionsData = deleteConnectionFromData(connectionIndex); - if(firstObject && secondObject){ - // If we have all the objects, we can recreate the line - result = true; - } + // if(firstObject && secondObject){ + // // If we have all the objects, we can recreate the line + // result = true; + // } - return result; -} - -function deleteLine(lineID){ // refactored - let lineObject = document.getLayerWithID(lineID); - let selectedGroup; - if(lineObject){ - selectedGroup = lineObject.parent; - lineObject.remove(); - if(selectedGroup.layers.length == 0){ - selectedGroup.remove(); - } - } -} + // return result; +} \ No newline at end of file diff --git a/src/utilities/conditions.js b/src/utilities/conditions.js new file mode 100644 index 0000000..4272a9b --- /dev/null +++ b/src/utilities/conditions.js @@ -0,0 +1,72 @@ +import sketch from 'sketch'; +import { addToConditionGroup } from "./groups.js"; +let Settings = require('sketch/settings'); +let UI = require('sketch/ui') ; + +let document = sketch.fromNative(context.document); +let docData = context.document.documentData(); +let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); + +export function addCondition(keyword, x, y) { + let libraries = sketch.getLibraries(); + let libraryObject, symbolReferences, symbol; + + for (let g = 0; g < libraries.length; g++) { + symbolReferences = libraries[g].getImportableSymbolReferencesForDocument( + document + ); + for (let i = 0; i < symbolReferences.length; i++) { + if (symbolReferences[i].name.includes(keyword)) { + libraryObject = symbolReferences[i]; + } + } + } + + if (libraryObject == null) { + symbol = null; + UI.alert( + "Condition symbol is not found", + 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as "#condition" so it will be added here' + ); + } else { + let symbolMaster = libraryObject.import(); + symbol = symbolMaster.createNewInstance(); + symbol = addToConditionGroup(symbol, x, y); + } + + return symbol; +} + +export function updateCondition(conditionID, x, y) { + let condition = document.getLayerWithID(conditionID); + let conGroup = checkForGroup("Conditions"); + let arGroup = checkForGroup("Arrows"); + let arGroupX = arGroup != null ? arGroup.frame().x() : 0; + let arGroupY = arGroup != null ? arGroup.frame().y() : 0; + + if (conGroup) { + condition.frame.x = + x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX); + condition.frame.y = + y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY); + conGroup.fixGeometryWithOptions(1); + } else { + condition.frame.x = x - condition.frame.width / 2; + condition.frame.y = y - condition.frame.height / 2; + } + return condition.id; +} + +export function deleteCondition(conditionID) { + let conditionObject = document.getLayerWithID(conditionID); + let selectedGroup; + if(conditionObject){ + selectedGroup = conditionObject.parent; + conditionObject.remove(); + if(selectedGroup.layers.length == 0){ + selectedGroup.remove(); + } + } + + } + diff --git a/src/utilities/data.js b/src/utilities/data.js index 8f5beba..2c39e70 100644 --- a/src/utilities/data.js +++ b/src/utilities/data.js @@ -31,23 +31,12 @@ export function findConnectionIndex(firstObjectID, secondObjectID, data) { firstObjectID = String(firstObjectID); secondObjectID = String(secondObjectID); - if (pluginData) { + if (data) { // If we have database, need to check for connections for (let y = 0; y < data.length; y++) { - if ( - firstObjectID == data[y].firstObject || - firstObjectID == data[y].secondObject - ) { - if (secondObjectID == null) { - // When we need to find connection between two objects - if ( - secondObjectID == data[y].firstObject || - secondObjectID == data[y].secondObject - ) { - indexArray[0] = y; - } - } else { - // When we need to find a connection for one object only + if (firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject) { + // When we need to find connection between two objects + if (secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject) { indexArray.push(y); } } diff --git a/src/utilities/getSourceObject.js b/src/utilities/getSourceObject.js index db4964b..193bf85 100644 --- a/src/utilities/getSourceObject.js +++ b/src/utilities/getSourceObject.js @@ -2,7 +2,7 @@ import sketch from 'sketch'; let document = sketch.fromNative(context.document); -export function getSourceObjectFromSelection(selection, direction){ //Refactored +export function getSourceObjectFromSelection(selection, direction){ let sourceObjectID = selection.firstObject().objectID(); if(direction != "Auto"){ @@ -10,7 +10,6 @@ export function getSourceObjectFromSelection(selection, direction){ //Refactored sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction); } } - return sourceObjectID; } diff --git a/src/utilities/groups.js b/src/utilities/groups.js new file mode 100644 index 0000000..a2debd9 --- /dev/null +++ b/src/utilities/groups.js @@ -0,0 +1,67 @@ +import sketch from 'sketch'; +let Settings = require('sketch/settings'); +let UI = require('sketch/ui') ; + +let document = sketch.fromNative(context.document); +let docData = context.document.documentData(); +let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); + + +export function checkForGroup(groupName) { // refactored + let currentGroup = null; + + // Checking all the groups that we have + for(let i = 0; i < currentParentGroup.layers().count(); i++){ + if(currentParentGroup.layers()[i].name() == groupName) { + currentGroup = currentParentGroup.layers()[i]; + } + } + + return currentGroup; +} + +export function addToArrowsGroup(line){ + let currentGroup = checkForGroup("Arrows"); + if(currentGroup){ + currentGroup.addLayers([line]); + currentGroup.fixGeometryWithOptions(1); + } else { + let Group = require('sketch/dom').Group; + let group = new Group({ + parent: currentParentGroup, + name: 'Arrows', + locked: true, + layers: [line] + }); + group.moveToBack(); + group.adjustToFit(); + } +} + +export function addToConditionGroup(condition, x, y) { + let conGroup = checkForGroup("Conditions"); + let arGroup = checkForGroup("Arrows"); + let arGroupX = arGroup != null ? arGroup.frame().x() : 0; + let arGroupY = arGroup != null ? arGroup.frame().y() : 0; + + if (conGroup) { + condition.frame.x = + x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX); + condition.frame.y = + y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY); + condition.parent = conGroup; + conGroup.fixGeometryWithOptions(1); + } else { + condition.frame.x = x - condition.frame.width / 2; + condition.frame.y = y - condition.frame.height / 2; + let Group = require("sketch/dom").Group; + let group = new Group({ + parent: currentParentGroup, + name: "Conditions", + layers: [condition] + }); + group.moveToBack(); + group.adjustToFit(); + } + return condition.id; + } \ No newline at end of file diff --git a/src/utilities/lines.js b/src/utilities/lines.js new file mode 100644 index 0000000..c5bcff7 --- /dev/null +++ b/src/utilities/lines.js @@ -0,0 +1,14 @@ +import sketch from 'sketch'; +let document = sketch.fromNative(context.document); + +export function deleteLine(lineID){ // refactored + let lineObject = document.getLayerWithID(lineID); + let selectedGroup; + if(lineObject){ + selectedGroup = lineObject.parent; + lineObject.remove(); + if(selectedGroup.layers.length == 0){ + selectedGroup.remove(); + } + } +} From 5a4a2d18481fcdbee813dea476c14f716e1fefd1 Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Sun, 7 Jul 2019 19:00:27 +0300 Subject: [PATCH 32/44] fixed problem with multiple selection updates --- .vscode/launch.json | 4 +- .../Contents/Sketch/manifest.json | 11 -- arrows.sketchplugin/Contents/Sketch/script.js | 121 +++++++----------- .../Contents/Sketch/script.js.map | 2 +- .../Contents/Sketch/settings.js.map | 2 +- src/manifest.json | 11 -- src/script.js | 59 ++------- src/utilities/data.js | 41 +++--- src/utilities/getSourceObject.js | 15 ++- 9 files changed, 96 insertions(+), 170 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 6f4cf2a..c17b667 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -7,8 +7,8 @@ { "type": "node", "request": "launch", - "name": "Sketch Plugin", - "program": "${workspaceFolder}/--run" + "name": "Sketch Arrows Plugin", + "program": "${workspaceFolder}/src/script.js" } ] } \ No newline at end of file diff --git a/arrows.sketchplugin/Contents/Sketch/manifest.json b/arrows.sketchplugin/Contents/Sketch/manifest.json index 740a13a..eff8449 100644 --- a/arrows.sketchplugin/Contents/Sketch/manifest.json +++ b/arrows.sketchplugin/Contents/Sketch/manifest.json @@ -102,17 +102,6 @@ "icon": "icon.png", "handler": "updateSelectedArrows" }, - { - "name": "Auto update arrows between selected", - "script": "script.js", - "handlers": { - "actions": { - "LayersMoved.finish": "autoUpdateSelectedArrows", - "LayersResized.finish": "autoUpdateSelectedArrows" - } - }, - "identifier": "autoUpdateSelectedArrows" - }, { "name": "Update arrows from the selected artboard", "description": "Update all the arrows from selected artboard", diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index e3261e7..cc2aab5 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -732,9 +732,8 @@ if (context.document) { pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); connectionsData = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_4__["getConnectionsData"])(); -} else { - document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.actionContext.document); -} // +} else {} // document = sketch.fromNative(context.actionContext.document); +// // Plugin Incoming Commands - Create // @@ -766,70 +765,46 @@ function createLeftArrowWithCondition(context) { function createUpArrowWithCondition(context) { create(context, "Up", true); } -function autoUpdateSelectedArrows(context) {// const action = context.actionContext; - // docData = action.document.documentData(); - // pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); - // currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards - // newConnectionsData = getConnectionsData(); - // const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer)); - // log(movedLayers[0].id); - // log(movedLayers.length); - // // if (movedLayers.filter(layer => (layer.type == 'Artboard' || (layer.type == 'SymbolMaster' && config.arrangeSymbols))).length > 0) { - // // ArrangeArtboards(context) - // // } - // let currentConnectionsData = newConnectionsData; // Need to refactor - // for(let g = 0; g < movedLayers.length; g++) { - // let connectionIndex = findConnectionIndex(movedLayers[0].id, null, currentConnectionsData); - // log("yes "+connectionIndex); - // if(connectionIndex.length == 0){ - // updateArrow(currentConnectionsData[connectionIndex[0]].firstObject, currentConnectionsData[connectionIndex[0]].secondObject, currentConnectionsData[connectionIndex[0]].style, currentConnectionsData[connectionIndex[0]].type, currentConnectionsData[connectionIndex[0]].direction, currentConnectionsData[connectionIndex[0]].line, currentConnectionsData[connectionIndex[0]].condition, currentConnectionsData[connectionIndex[0]].isCondition, connectionIndex[0]); - // sketch.UI.message("Current connection is updated 🤘"); - // } else { - // sketch.UI.message("There is no connection between selected layers on the plugin data"); - // } - // } - // context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); +function autoUpdateSelectedArrows() { + var a = true; } function create(context, direction, isCondition) { var selection = context.selection; if (selection.count() > 1 && selection[0].class() != "MSArtboardGroup") { - var _sourceObjectID = Object(_utilities_getSourceObject_js__WEBPACK_IMPORTED_MODULE_3__["getSourceObjectFromSelection"])(selection, direction); // Useful for selecting multiple layers + var _sourceObjectID = Object(_utilities_getSourceObject_js__WEBPACK_IMPORTED_MODULE_3__["getSourceObjectFromSelection"])(selection, direction); + var connectionIndex = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_4__["findConnectionIndex"])(_sourceObjectID, selection, connectionsData); for (var _g = 0; _g < selection.count(); _g++) { if (selection[_g].objectID() != _sourceObjectID) { - var connectionIndex = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_4__["findConnectionIndex"])(_sourceObjectID, selection[_g].objectID(), connectionsData); - log("connection Index length"); - log(connectionIndex.length); - if (connectionIndex.length == 0) { // Create var connection = Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_1__["createArrow"])(_sourceObjectID, selection[_g].objectID(), null, null, direction, null, isCondition); connectionsData.push(connection); - log("Create Data"); - log(connectionsData); sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("New connection is created 🚀"); } else { // Update - Object(_utilities_lines_js__WEBPACK_IMPORTED_MODULE_5__["deleteLine"])(connectionsData[connectionIndex].line); - - if (!isCondition) { - Object(_utilities_conditions_js__WEBPACK_IMPORTED_MODULE_6__["deleteCondition"])(connectionsData[connectionIndex].condition); - } - + // if(!isCondition){deleteCondition(connectionsData[connectionIndex[0]].condition)} var _connection = Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_1__["createArrow"])(_sourceObjectID, selection[_g].objectID(), null, null, direction, null, isCondition); - connectionsData = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_4__["deleteConnectionFromData"])(connectionIndex); connectionsData.push(_connection); - log("Final Data: "); - log(connectionsData); sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Current connection is updated 🤘"); } } } + for (var z = 0; z < connectionIndex.length; z++) { + var currentIndex = connectionIndex[z]; + Object(_utilities_lines_js__WEBPACK_IMPORTED_MODULE_5__["deleteLine"])(connectionsData[currentIndex].line); + } + + if (connectionIndex.length > 0) { + // Update flow + connectionsData = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_4__["deleteConnectionFromData"])(connectionIndex, connectionsData); + } + context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, "arrowConnections", docData, pluginKey); } else { // When user didn't select anything @@ -1089,18 +1064,21 @@ function getConnectionsData() { return dataArray; } -function findConnectionIndex(firstObjectID, secondObjectID, data) { +function findConnectionIndex(sourceObjectID, selection, data) { var indexArray = []; - firstObjectID = String(firstObjectID); - secondObjectID = String(secondObjectID); if (data) { - // If we have database, need to check for connections - for (var y = 0; y < data.length; y++) { - if (firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject) { - // When we need to find connection between two objects - if (secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject) { - indexArray.push(y); + for (var g = 0; g < selection.count(); g++) { + if (sourceObjectID != selection[g].objectID()) { + var firstObjectID = String(sourceObjectID); + var secondObjectID = String(selection[g].objectID()); + + for (var y = 0; y < data.length; y++) { + if (firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject) { + if (secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject) { + indexArray.push(y); + } + } } } } @@ -1108,23 +1086,14 @@ function findConnectionIndex(firstObjectID, secondObjectID, data) { return indexArray; } -function deleteConnectionFromData(connectionIndex) { - // Refactored - var newConnections = []; - - if (pluginData) { - // If we have database - var connections = pluginData; - - for (var i = 0; i < connections.length; i++) { - // Updating all connections without deleted one - if (i != connectionIndex) { - newConnections.push(connections[i]); - } +function deleteConnectionFromData(connectionIndexArray, data) { + if (data) { + for (var i = connectionIndexArray.length - 1; i >= 0; i--) { + data.splice(connectionIndexArray[i], 1); } } - return newConnections; + return data; } /***/ }), @@ -1143,6 +1112,8 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); +var docData = context.document.documentData(); +var currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); function getSourceObjectFromSelection(selection, direction) { var sourceObjectID = selection.firstObject().objectID(); @@ -1156,13 +1127,21 @@ function getSourceObjectFromSelection(selection, direction) { } function defineSourceObject(firstObjectID, secondObjectID, direction) { - //Refactored var firstObject = document.getLayerWithID(firstObjectID); var secondObject = document.getLayerWithID(secondObjectID); + var firstObjectAbsPos = firstObject.frame.changeBasis({ + from: firstObject.parent, + to: currentParentGroup + }); + var secondObjectAbsPos = secondObject.frame.changeBasis({ + from: secondObject.parent, + to: currentParentGroup + }); var sourceObjectID; if (direction == "Right") { - if (firstObject.frame.x <= secondObject.frame.x) { + if (firstObjectAbsPos.x <= secondObjectAbsPos.x) { + // We need to get the doc position sourceObjectID = firstObject.id; } else { sourceObjectID = secondObject.id; @@ -1170,7 +1149,7 @@ function defineSourceObject(firstObjectID, secondObjectID, direction) { } if (direction == "Down") { - if (firstObject.frame.y <= secondObject.frame.y) { + if (firstObject.y <= secondObjectAbsPos.y) { sourceObjectID = firstObject.id; } else { sourceObjectID = secondObject.id; @@ -1178,7 +1157,7 @@ function defineSourceObject(firstObjectID, secondObjectID, direction) { } if (direction == "Left") { - if (firstObject.frame.x <= secondObject.frame.x) { + if (firstObjectAbsPos.x <= secondObjectAbsPos.x) { sourceObjectID = secondObject.id; } else { sourceObjectID = firstObject.id; @@ -1186,7 +1165,7 @@ function defineSourceObject(firstObjectID, secondObjectID, direction) { } if (direction == "Up") { - if (firstObject.frame.y <= secondObject.frame.y) { + if (firstObjectAbsPos.y <= secondObjectAbsPos.y) { sourceObjectID = secondObject.id; } else { sourceObjectID = firstObject.id; @@ -1465,8 +1444,6 @@ that['createDownArrowWithCondition'] = __skpm_run.bind(this, 'createDownArrowWit that['createLeftArrowWithCondition'] = __skpm_run.bind(this, 'createLeftArrowWithCondition'); that['createUpArrowWithCondition'] = __skpm_run.bind(this, 'createUpArrowWithCondition'); that['updateSelectedArrows'] = __skpm_run.bind(this, 'updateSelectedArrows'); -that['autoUpdateSelectedArrows'] = __skpm_run.bind(this, 'autoUpdateSelectedArrows'); -that['autoUpdateSelectedArrows'] = __skpm_run.bind(this, 'autoUpdateSelectedArrows'); that['updateArtboardArrows'] = __skpm_run.bind(this, 'updateArtboardArrows'); that['updateAllArrows'] = __skpm_run.bind(this, 'updateAllArrows'); that['deleteSelectedArrows'] = __skpm_run.bind(this, 'deleteSelectedArrows'); diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index aa61bb6..eeb694f 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/createArrow.js","webpack://exports/./src/draw.js","webpack://exports/./src/script.js","webpack://exports/./src/updateArrow.js","webpack://exports/./src/utilities/conditions.js","webpack://exports/./src/utilities/data.js","webpack://exports/./src/utilities/getSourceObject.js","webpack://exports/./src/utilities/groups.js","webpack://exports/./src/utilities/lines.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["Settings","require","document","sketch","fromNative","context","createArrow","firstObjectID","secondObjectID","style","type","direction","conditionID","isCondition","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","firstObject","secondObject","condition","line","objectID","getLayerWithID","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","sourceObjectID","childObjectID","sourceObject","childObject","settingForKey","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","UI","docData","documentData","currentParentGroup","currentPage","currentArtboard","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","currentGroup","checkForGroup","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","layers","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","pluginKey","pluginData","connectionsData","command","valueForKey_onLayer_forPluginIdentifier","getConnectionsData","actionContext","createAutoArrow","create","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","autoUpdateSelectedArrows","selection","count","class","getSourceObjectFromSelection","g","connectionIndex","findConnectionIndex","log","length","push","message","deleteLine","deleteCondition","deleteConnectionFromData","setValue_forKey_onLayer_forPluginIdentifier","updateSelectedArrows","update","updateArtboardArrows","updateAllArrows","deleteSelectedArrows","deleteArtboardArrows","deleteAllArrows","level","isUpdate","newConnectionsData","firstObjectArtboard","secondObjectArtboard","i","updateArrow","sketchObject","parentArtboard","lineID","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","getImportableSymbolReferencesForDocument","name","includes","alert","symbolMaster","import","createNewInstance","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","fixGeometryWithOptions","id","conditionObject","selectedGroup","remove","dataArray","data","indexArray","String","newConnections","connections","defineSourceObject","groupName","addLayers","Group","group","locked","moveToBack","adjustToFit","lineObject","localStyle","getLayerStyles","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","allStyles","allLayerStyles","styles"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch';\nimport { drawConnection } from \"./draw.js\";\n\nvar Settings = require('sketch/settings');\nlet document = sketch.fromNative(context.document);\n\n// Main Function\n\nexport function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n return connection;\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}","import sketch from 'sketch';\nimport { styleLine } from \"./utilities/styling.js\";\nimport { addCondition, updateCondition } from \"./utilities/conditions.js\";\nimport { checkForGroup, addToArrowsGroup } from \"./utilities/groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\n// Main Function\n\nexport function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition){ // Refactored\n // Process of creating new connection \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n // Condition\n if(condition == true){\n if(conditionID != null){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY);\n }\n } else {\n connection.conditionID = null;\n }\n // connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style);\n\n // Add to group\n addToArrowsGroup(connection.line);\n \n return connection\n}\n\n// Positions\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\");\n let diffX, diffY;\n \n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n \n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n \n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n return connectionPos\n}\n\n// Drawing Types\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n \n return line;\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n \n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n \n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n \n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n \n if(firstLayerPosX sketch.fromNative(layer));\n // log(movedLayers[0].id);\n // log(movedLayers.length);\n\n // // if (movedLayers.filter(layer => (layer.type == 'Artboard' || (layer.type == 'SymbolMaster' && config.arrangeSymbols))).length > 0) {\n // // ArrangeArtboards(context)\n // // }\n\n // let currentConnectionsData = newConnectionsData; // Need to refactor\n\n // for(let g = 0; g < movedLayers.length; g++) {\n\n // let connectionIndex = findConnectionIndex(movedLayers[0].id, null, currentConnectionsData);\n\n // log(\"yes \"+connectionIndex);\n // if(connectionIndex.length == 0){\n \n // updateArrow(currentConnectionsData[connectionIndex[0]].firstObject, currentConnectionsData[connectionIndex[0]].secondObject, currentConnectionsData[connectionIndex[0]].style, currentConnectionsData[connectionIndex[0]].type, currentConnectionsData[connectionIndex[0]].direction, currentConnectionsData[connectionIndex[0]].line, currentConnectionsData[connectionIndex[0]].condition, currentConnectionsData[connectionIndex[0]].isCondition, connectionIndex[0]);\n // sketch.UI.message(\"Current connection is updated 🤘\");\n // } else {\n // sketch.UI.message(\"There is no connection between selected layers on the plugin data\");\n // }\n \n // }\n // context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n}\n\n\nfunction create(context, direction, isCondition){\n let selection = context.selection;\n\n if(selection.count() > 1 && selection[0].class() != \"MSArtboardGroup\"){\n let sourceObjectID = getSourceObjectFromSelection(selection, direction); // Useful for selecting multiple layers\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n let connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), connectionsData);\n log(\"connection Index length\")\n log(connectionIndex.length);\n if(connectionIndex.length == 0){\n // Create\n let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition);\n connectionsData.push(connection);\n log(\"Create Data\");\n log(connectionsData);\n sketch.UI.message(\"New connection is created 🚀\");\n } else {\n // Update\n deleteLine(connectionsData[connectionIndex].line);\n if(!isCondition){deleteCondition(connectionsData[connectionIndex].condition)}\n let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition);\n connectionsData = deleteConnectionFromData(connectionIndex);\n connectionsData.push(connection);\n log(\"Final Data: \");\n log(connectionsData);\n sketch.UI.message(\"Current connection is updated 🤘\");\n }\n }\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\n \n//\n// Plugin Incoming Commands - Update and Delete\n//\n\nexport function updateSelectedArrows(context) {update(context, 1, true);}\nexport function updateArtboardArrows(context) {update(context, 2, true);}\nexport function updateAllArrows(context) {update(context, 3, true);}\nexport function deleteSelectedArrows(context) {update(context, 1, false);}\nexport function deleteArtboardArrows(context) {update(context, 2, false);}\nexport function deleteAllArrows(context) {update(context, 3, false);}\n\nexport function update(context, level, isUpdate) {\n // 1 - selection level\n // 2 - artboard level\n // 3 - document level\n let newConnectionsData = [];\n let selection = context.selection;\n let firstObjectArtboard;\n let secondObjectArtboard;\n\n\n if (connectionsData.length > 0) {\n for (let i = 0; i < connectionsData.length; i++) {\n \n if (level == 3) {\n if(isUpdate){\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n sketch.UI.message(\"All arrows are updated\");\n } else {\n newConnectionsData = null\n sketch.UI.message(\"All arrows are deleted\");\n }\n }\n if (level == 2) {\n firstObjectArtboard = document.getLayerWithID(connectionsData[i].firstObject);\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID();\n secondObjectArtboard = document.getLayerWithID(connectionsData[i].secondObject);\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID();\n\n if (selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\") {\n\n if (firstObjectArtboard == selection[0].objectID()) {\n if (secondObjectArtboard == selection[0].objectID()) {\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n }\n }\n sketch.UI.message(\"All arrows are updated 🚀\");\n \n \n }\n let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition);\n connectionsData.push(connection);\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n sketch.UI.message(\"There is no arrows\");\n }\n}\n\n// const track = require(\"sketch-module-google-analytics\")\n// track(\"UA-138226597-1\", \"event\", {\n// ec: \"command\", \n// ea: \"create\", \n// ev: \"my-command\"\n// });\n\n\n\n\n\n","import sketch from 'sketch';\nimport { getConnectionsData, deleteConnectionFromData} from \"./utilities/data.js\"\nimport { deleteLine } from \"./utilities/lines.js\"\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\nlet connectionsData = getConnectionsData();\n\n\n\nexport function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n // let firstObject = document.getLayerWithID(firstObjectID);\n // let secondObject = document.getLayerWithID(secondObjectID);\n // let conditionObject = document.getLayerWithID(conditionID);\n // let result = false;\n \n // Need to delete data first, because we will have a new line\n // deleteLine(lineID);\n // if(conditionID && !isCondition){\n // if(conditionObject){conditionObject.remove();}\n // }\n \n connectionsData = deleteConnectionFromData(connectionIndex);\n\n // if(firstObject && secondObject){\n // // If we have all the objects, we can recreate the line\n // result = true;\n // }\n\n // return result;\n}","import sketch from 'sketch';\nimport { addToConditionGroup } from \"./groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\nexport function addCondition(keyword, x, y) {\n let libraries = sketch.getLibraries();\n let libraryObject, symbolReferences, symbol;\n\n for (let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(\n document\n );\n for (let i = 0; i < symbolReferences.length; i++) {\n if (symbolReferences[i].name.includes(keyword)) {\n libraryObject = symbolReferences[i];\n }\n }\n }\n\n if (libraryObject == null) {\n symbol = null;\n UI.alert(\n \"Condition symbol is not found\",\n 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here'\n );\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y);\n }\n\n return symbol;\n}\n\nexport function updateCondition(conditionID, x, y) {\n let condition = document.getLayerWithID(conditionID);\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n }\n return condition.id;\n}\n\nexport function deleteCondition(conditionID) {\n let conditionObject = document.getLayerWithID(conditionID);\n let selectedGroup;\n if(conditionObject){\n selectedGroup = conditionObject.parent;\n conditionObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n\n }\n \n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, connectionsData;\n\ndocument = sketch.fromNative(context.document);\ndocData = context.document.documentData();\npluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\ncurrentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n\n\n\nexport function getConnectionsData() {\n let dataArray = [];\n\n if (pluginData) {\n for (let i = 0; i < pluginData.length; i++) {\n dataArray.push(pluginData[i]);\n }\n }\n return dataArray;\n}\n\nexport function findConnectionIndex(firstObjectID, secondObjectID, data) {\n let indexArray = [];\n firstObjectID = String(firstObjectID);\n secondObjectID = String(secondObjectID);\n\n if (data) {\n // If we have database, need to check for connections\n for (let y = 0; y < data.length; y++) {\n if (firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject) {\n // When we need to find connection between two objects\n if (secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject) {\n indexArray.push(y);\n }\n }\n }\n }\n return indexArray;\n}\n\nexport function deleteConnectionFromData(connectionIndex){ // Refactored\n let newConnections = [];\n if(pluginData){\n // If we have database\n let connections = pluginData;\n\n for (let i = 0; i < connections.length; i ++) {\n // Updating all connections without deleted one\n if(i != connectionIndex){\n newConnections.push(connections[i]);\n }\n }\n }\n return newConnections;\n}\n","import sketch from 'sketch';\nlet document = sketch.fromNative(context.document);\n\n\nexport function getSourceObjectFromSelection(selection, direction){\n let sourceObjectID = selection.firstObject().objectID();\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction);\n }\n }\n return sourceObjectID;\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let sourceObjectID;\n\n if(direction == \"Right\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Left\"){\n if(firstObject.frame.x <= secondObject.frame.x){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n if(direction == \"Up\"){\n if(firstObject.frame.y <= secondObject.frame.y){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n return sourceObjectID;\n}","import sketch from 'sketch';\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function checkForGroup(groupName) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n \n return currentGroup;\n}\n\nexport function addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\");\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nexport function addToConditionGroup(condition, x, y) {\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n \n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n let Group = require(\"sketch/dom\").Group;\n let group = new Group({\n parent: currentParentGroup,\n name: \"Conditions\",\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n }","import sketch from 'sketch';\nlet document = sketch.fromNative(context.document);\n\nexport function deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\n\nexport function styleLine(line, style){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey));\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/createArrow.js","webpack://exports/./src/draw.js","webpack://exports/./src/script.js","webpack://exports/./src/updateArrow.js","webpack://exports/./src/utilities/conditions.js","webpack://exports/./src/utilities/data.js","webpack://exports/./src/utilities/getSourceObject.js","webpack://exports/./src/utilities/groups.js","webpack://exports/./src/utilities/lines.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["Settings","require","document","sketch","fromNative","context","createArrow","firstObjectID","secondObjectID","style","type","direction","conditionID","isCondition","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","firstObject","secondObject","condition","line","objectID","getLayerWithID","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","sourceObjectID","childObjectID","sourceObject","childObject","settingForKey","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","UI","docData","documentData","currentParentGroup","currentPage","currentArtboard","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","currentGroup","checkForGroup","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","layers","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","pluginKey","pluginData","connectionsData","command","valueForKey_onLayer_forPluginIdentifier","getConnectionsData","createAutoArrow","create","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","autoUpdateSelectedArrows","a","selection","count","class","getSourceObjectFromSelection","connectionIndex","findConnectionIndex","g","length","push","message","z","currentIndex","deleteLine","deleteConnectionFromData","setValue_forKey_onLayer_forPluginIdentifier","updateSelectedArrows","update","updateArtboardArrows","updateAllArrows","deleteSelectedArrows","deleteArtboardArrows","deleteAllArrows","level","isUpdate","newConnectionsData","firstObjectArtboard","secondObjectArtboard","i","updateArrow","sketchObject","parentArtboard","lineID","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","getImportableSymbolReferencesForDocument","name","includes","alert","symbolMaster","import","createNewInstance","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","fixGeometryWithOptions","id","deleteCondition","conditionObject","selectedGroup","remove","dataArray","data","indexArray","String","connectionIndexArray","splice","defineSourceObject","groupName","addLayers","Group","group","locked","moveToBack","adjustToFit","lineObject","localStyle","getLayerStyles","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","thickness","endMarkerType","allStyles","allLayerStyles","styles"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch';\nimport { drawConnection } from \"./draw.js\";\n\nvar Settings = require('sketch/settings');\nlet document = sketch.fromNative(context.document);\n\n// Main Function\n\nexport function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n return connection;\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}","import sketch from 'sketch';\nimport { styleLine } from \"./utilities/styling.js\";\nimport { addCondition, updateCondition } from \"./utilities/conditions.js\";\nimport { checkForGroup, addToArrowsGroup } from \"./utilities/groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\n// Main Function\n\nexport function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition){ // Refactored\n // Process of creating new connection \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n // Condition\n if(condition == true){\n if(conditionID != null){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY);\n }\n } else {\n connection.conditionID = null;\n }\n // connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style);\n\n // Add to group\n addToArrowsGroup(connection.line);\n \n return connection\n}\n\n// Positions\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\");\n let diffX, diffY;\n \n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n \n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n \n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n return connectionPos\n}\n\n// Drawing Types\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n \n return line;\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n \n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n \n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n \n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n \n if(firstLayerPosX 1 && selection[0].class() != \"MSArtboardGroup\"){\n let sourceObjectID = getSourceObjectFromSelection(selection, direction);\n let connectionIndex = findConnectionIndex(sourceObjectID, selection, connectionsData);\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n if(connectionIndex.length == 0){\n // Create\n let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition);\n connectionsData.push(connection);\n sketch.UI.message(\"New connection is created 🚀\");\n } else {\n // Update\n // if(!isCondition){deleteCondition(connectionsData[connectionIndex[0]].condition)}\n let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition);\n connectionsData.push(connection);\n sketch.UI.message(\"Current connection is updated 🤘\");\n }\n }\n }\n for(let z = 0; z < connectionIndex.length; z++) {\n let currentIndex = connectionIndex[z];\n deleteLine(connectionsData[currentIndex].line);\n }\n if(connectionIndex.length > 0){\n // Update flow \n connectionsData = deleteConnectionFromData(connectionIndex, connectionsData);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\n \n//\n// Plugin Incoming Commands - Update and Delete\n//\n\nexport function updateSelectedArrows(context) {update(context, 1, true);}\nexport function updateArtboardArrows(context) {update(context, 2, true);}\nexport function updateAllArrows(context) {update(context, 3, true);}\nexport function deleteSelectedArrows(context) {update(context, 1, false);}\nexport function deleteArtboardArrows(context) {update(context, 2, false);}\nexport function deleteAllArrows(context) {update(context, 3, false);}\n\nexport function update(context, level, isUpdate) {\n // 1 - selection level\n // 2 - artboard level\n // 3 - document level\n let newConnectionsData = [];\n let selection = context.selection;\n let firstObjectArtboard;\n let secondObjectArtboard;\n\n\n if (connectionsData.length > 0) {\n for (let i = 0; i < connectionsData.length; i++) {\n \n if (level == 3) {\n if(isUpdate){\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n sketch.UI.message(\"All arrows are updated\");\n } else {\n newConnectionsData = null\n sketch.UI.message(\"All arrows are deleted\");\n }\n }\n if (level == 2) {\n firstObjectArtboard = document.getLayerWithID(connectionsData[i].firstObject);\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID();\n secondObjectArtboard = document.getLayerWithID(connectionsData[i].secondObject);\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID();\n\n if (selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\") {\n\n if (firstObjectArtboard == selection[0].objectID()) {\n if (secondObjectArtboard == selection[0].objectID()) {\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n }\n }\n sketch.UI.message(\"All arrows are updated 🚀\");\n \n \n }\n let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition);\n connectionsData.push(connection);\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n sketch.UI.message(\"There is no arrows\");\n }\n}\n\n// const track = require(\"sketch-module-google-analytics\")\n// track(\"UA-138226597-1\", \"event\", {\n// ec: \"command\", \n// ea: \"create\", \n// ev: \"my-command\"\n// });\n\n\n\n\n\n","import sketch from 'sketch';\nimport { getConnectionsData, deleteConnectionFromData} from \"./utilities/data.js\"\nimport { deleteLine } from \"./utilities/lines.js\"\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\nlet connectionsData = getConnectionsData();\n\n\n\nexport function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n // let firstObject = document.getLayerWithID(firstObjectID);\n // let secondObject = document.getLayerWithID(secondObjectID);\n // let conditionObject = document.getLayerWithID(conditionID);\n // let result = false;\n \n // Need to delete data first, because we will have a new line\n // deleteLine(lineID);\n // if(conditionID && !isCondition){\n // if(conditionObject){conditionObject.remove();}\n // }\n \n connectionsData = deleteConnectionFromData(connectionIndex);\n\n // if(firstObject && secondObject){\n // // If we have all the objects, we can recreate the line\n // result = true;\n // }\n\n // return result;\n}","import sketch from 'sketch';\nimport { addToConditionGroup } from \"./groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\nexport function addCondition(keyword, x, y) {\n let libraries = sketch.getLibraries();\n let libraryObject, symbolReferences, symbol;\n\n for (let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(\n document\n );\n for (let i = 0; i < symbolReferences.length; i++) {\n if (symbolReferences[i].name.includes(keyword)) {\n libraryObject = symbolReferences[i];\n }\n }\n }\n\n if (libraryObject == null) {\n symbol = null;\n UI.alert(\n \"Condition symbol is not found\",\n 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here'\n );\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y);\n }\n\n return symbol;\n}\n\nexport function updateCondition(conditionID, x, y) {\n let condition = document.getLayerWithID(conditionID);\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n }\n return condition.id;\n}\n\nexport function deleteCondition(conditionID) {\n let conditionObject = document.getLayerWithID(conditionID);\n let selectedGroup;\n if(conditionObject){\n selectedGroup = conditionObject.parent;\n conditionObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n\n }\n \n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, connectionsData;\n\ndocument = sketch.fromNative(context.document);\ndocData = context.document.documentData();\npluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\ncurrentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n\n\n\nexport function getConnectionsData() {\n let dataArray = [];\n\n if (pluginData) {\n for (let i = 0; i < pluginData.length; i++) {\n dataArray.push(pluginData[i]);\n }\n }\n return dataArray;\n}\n\nexport function findConnectionIndex(sourceObjectID, selection, data) {\n let indexArray = [];\n if (data) {\n for (let g = 0; g < selection.count(); g++) {\n if (sourceObjectID != selection[g].objectID()) {\n\n let firstObjectID = String(sourceObjectID);\n let secondObjectID = String(selection[g].objectID());\n\n for (let y = 0; y < data.length; y++) {\n if (firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject) {\n if (secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject) {\n indexArray.push(y);\n }\n }\n }\n\n }\n }\n }\n return indexArray;\n}\n\nexport function deleteConnectionFromData(connectionIndexArray, data){\n if(data){\n for (let i = connectionIndexArray.length -1; i >= 0; i--) {\n data.splice(connectionIndexArray[i],1);\n }\n }\n return data;\n}\n","import sketch from 'sketch';\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function getSourceObjectFromSelection(selection, direction){\n let sourceObjectID = selection.firstObject().objectID();\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction);\n }\n }\n return sourceObjectID;\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){\n \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let sourceObjectID;\n\n if(direction == \"Right\"){\n if(firstObjectAbsPos.x <= secondObjectAbsPos.x){ // We need to get the doc position\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.y <= secondObjectAbsPos.y){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Left\"){\n if(firstObjectAbsPos.x <= secondObjectAbsPos.x){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n if(direction == \"Up\"){\n if(firstObjectAbsPos.y <= secondObjectAbsPos.y){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n return sourceObjectID;\n}","import sketch from 'sketch';\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function checkForGroup(groupName) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n \n return currentGroup;\n}\n\nexport function addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\");\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nexport function addToConditionGroup(condition, x, y) {\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n \n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n let Group = require(\"sketch/dom\").Group;\n let group = new Group({\n parent: currentParentGroup,\n name: \"Conditions\",\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n }","import sketch from 'sketch';\nlet document = sketch.fromNative(context.document);\n\nexport function deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\n\nexport function styleLine(line, style){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey));\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/arrows.sketchplugin/Contents/Sketch/settings.js.map b/arrows.sketchplugin/Contents/Sketch/settings.js.map index 662c99c..0abbbed 100644 --- a/arrows.sketchplugin/Contents/Sketch/settings.js.map +++ b/arrows.sketchplugin/Contents/Sketch/settings.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/settings.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","Settings","pluginKey","document","sketch","fromNative","context","docData","documentData","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","settingForKey","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","command","setValue_forKey_onLayer_forPluginIdentifier","views","subviews","title","setSettingForKey","intValue","state","message","docSettings","valueForKey_onLayer_forPluginIdentifier","styles","getLayerStyles","addItemWithTitle","i","length","name","docTypeSettings","lastItem","setState","setMessageText","addButtonWithTitle","x","y","width","height","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","styleLine","line","style","localStyle","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","g","b","a","thickness","endMarkerType","allStyles","allLayerStyles","keyword","count","includes","push"],"mappings":"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","file":"settings.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/settings.js\");\n","import sketch from \"sketch\";\nimport { getLayerStyles } from \"./utilities/styling.js\";\n\n\nlet UI = require('sketch/ui') ;\nlet Settings = require(\"sketch/settings\");\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\n\nexport function settings(context) {\n let alert = COSAlertWindow.new();\n const viewWidth = 300;\n const viewHeight = 450;\n\n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight);\n let view = NSView.alloc().initWithFrame(\n NSMakeRect(0, 0, viewWidth, viewHeight)\n );\n alert.addAccessoryView(view);\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\n \"Arrow Style\",\n true,\n -1,\n viewHeight - 40,\n 280,\n 40\n );\n view.addSubview(arrowStyleLabel);\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(\n NSMakeRect(-2, viewHeight - 40, 300, 20)\n );\n setActiveStyleSetting(arrowStylingField);\n view.addSubview(arrowStylingField);\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\n \"Add layer style to your document that will contain $arrow name and you will be able to specify it here \",\n false,\n -1,\n viewHeight - 80,\n 300,\n 40\n );\n view.addSubview(arrowStyleInfoLabel);\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\n \"Arrow Type\",\n true,\n -1,\n viewHeight - 130,\n 280,\n 40\n );\n view.addSubview(arrowTypeLabel);\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(\n NSMakeRect(-2, viewHeight - 130, 300, 20)\n );\n setActiveTypeSetting(arrowTypeField);\n view.addSubview(arrowTypeField);\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\n \"Select one of the arrow types. Angled is used by default\",\n false,\n -1,\n viewHeight - 170,\n 300,\n 40\n );\n view.addSubview(arrowTypeInfoLabel);\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\n \"Arrow Spacing\",\n true,\n -1,\n viewHeight - 200,\n 330,\n 20\n );\n view.addSubview(arrowSpacingLabel);\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\n \"px\",\n true,\n 90,\n viewHeight - 220,\n 330,\n 20\n );\n view.addSubview(arrowSpacingPxLabel);\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(\n NSMakeRect(-2, viewHeight - 220, 80, 20)\n );\n var formatter = NSNumberFormatter.alloc()\n .init()\n .autorelease();\n arrowSpacingField.setStringValue(\n String(Settings.settingForKey(\"arrowSpacing\"))\n );\n arrowSpacingField.setFormatter(formatter);\n view.addSubview(arrowSpacingField);\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(\n NSMakeRect(70, viewHeight - 220, 20, 20)\n );\n arrowSpacingStepper.setMaxValue(1000);\n arrowSpacingStepper.setMinValue(0);\n arrowSpacingStepper.setValueWraps(false);\n arrowSpacingStepper.setAutorepeat(true);\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender) {\n var value = 0 + sender.integerValue();\n arrowSpacingField.setStringValue(String(value));\n });\n\n view.addSubview(arrowSpacingStepper);\n // view.addSubview(formatter)\n\n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\n \"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \",\n false,\n -1,\n viewHeight - 285,\n 300,\n 60\n );\n view.addSubview(arrowSpacingInfoLabel);\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\n \"Other Settings\",\n true,\n -1,\n viewHeight - 330,\n 280,\n 40\n );\n view.addSubview(otherSettingsLabel);\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\n \"Second layer auto-align\",\n false,\n -1,\n viewHeight - 340,\n 260,\n 40\n );\n view.addSubview(checkbox);\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\n \"Align the second layer for 5px misalignment with the first one\",\n false,\n -1,\n viewHeight - 370,\n 280,\n 40\n );\n view.addSubview(autoAlignInfoLabel);\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\n \"Made by @faridSabitov with the support of EPAM.com ❤️\",\n true,\n -1,\n viewHeight - 420,\n 280,\n 40\n );\n view.addSubview(pluginInfoLabel);\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal();\n\n if (modalResponse == NSAlertFirstButtonReturn) {\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(\n alert\n .views()[0]\n .subviews()[1]\n .title(),\n \"arrowStyle\",\n docData,\n pluginKey\n );\n Settings.setSettingForKey(\n \"arrowType\",\n alert\n .views()[0]\n .subviews()[4]\n .title()\n );\n Settings.setSettingForKey(\n \"arrowSpacing\",\n alert\n .views()[0]\n .subviews()[8]\n .intValue()\n );\n Settings.setSettingForKey(\n \"autoAlign\",\n alert\n .views()[0]\n .subviews()[12]\n .state()\n );\n UI.message(\"Settings are updated 🚀\");\n }\n}\n\n// Functions\n\nfunction setActiveStyleSetting(arrowStylingField) {\n let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier(\n \"arrowStyle\",\n docData,\n pluginKey\n );\n let styles = getLayerStyles(null);\n\n if (docSettings) {\n // We have info about the settings in the current document\n\n if (docSettings != \"Default Style\") {\n // if user specified own option\n arrowStylingField.addItemWithTitle(docSettings);\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for (let i = 0; i < styles.length; i++) {\n if (styles[i].name() != docSettings) {\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n } else {\n // Need to show the default first\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for (let i = 0; i < styles.length; i++) {\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n } else {\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for (let i = 0; i < styles.length; i++) {\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n}\n\nfunction setActiveTypeSetting(arrowTypeField) {\n let docTypeSettings = Settings.settingForKey(\"arrowType\");\n\n if (docTypeSettings) {\n // We have info about the settings in the current document\n\n if (docTypeSettings == \"Angled\") {\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(0);\n }\n\n if (docTypeSettings == \"Curved\") {\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(0);\n }\n\n if (docTypeSettings == \"Straight\") {\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(0);\n }\n } else {\n // Show default\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.addItemWithTitle(\"Straight\");\n }\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight) {\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\");\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\");\n alert.addButtonWithTitle(\"Cancel\");\n\n return alert;\n}\n\nfunction alertLabel(message, state, x, y, width, height) {\n let infoLabel = NSTextField.alloc().initWithFrame(\n NSMakeRect(x, y, width, height)\n );\n\n infoLabel.setStringValue(message);\n infoLabel.setSelectable(false);\n infoLabel.setDrawsBackground(false);\n infoLabel.setBezeled(false);\n\n if (state == false) {\n infoLabel.textColor = NSColor.disabledControlTextColor();\n }\n\n return infoLabel;\n}\n\nfunction alertCheckbox(message, state, x, y, width, height) {\n let checkbox = NSButton.alloc().initWithFrame(\n NSMakeRect(x, y, width, height)\n );\n\n checkbox.setButtonType(NSSwitchButton);\n checkbox.setBezelStyle(0);\n checkbox.setTitle(message);\n if (Settings.settingForKey(\"autoAlign\")) {\n let currentState = Settings.settingForKey(\"autoAlign\");\n checkbox.setState(currentState);\n } else {\n checkbox.setState(state);\n }\n\n return checkbox;\n}\n\n\n","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\n\n\nlet docData = context.document.documentData();\n\nexport function styleLine(line, style){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey));\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/settings.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","Settings","pluginKey","document","sketch","fromNative","context","docData","documentData","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","settingForKey","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","command","setValue_forKey_onLayer_forPluginIdentifier","views","subviews","title","setSettingForKey","intValue","state","message","docSettings","valueForKey_onLayer_forPluginIdentifier","styles","getLayerStyles","addItemWithTitle","i","length","name","docTypeSettings","lastItem","setState","setMessageText","addButtonWithTitle","x","y","width","height","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","styleLine","line","style","localStyle","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","g","b","a","thickness","endMarkerType","allStyles","allLayerStyles","keyword","count","includes","push"],"mappings":"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","file":"settings.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/settings.js\");\n","import sketch from \"sketch\";\nimport { getLayerStyles } from \"./utilities/styling.js\";\n\n\nlet UI = require('sketch/ui') ;\nlet Settings = require(\"sketch/settings\");\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\n\nexport function settings(context) {\n let alert = COSAlertWindow.new();\n const viewWidth = 300;\n const viewHeight = 450;\n\n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight);\n let view = NSView.alloc().initWithFrame(\n NSMakeRect(0, 0, viewWidth, viewHeight)\n );\n alert.addAccessoryView(view);\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\n \"Arrow Style\",\n true,\n -1,\n viewHeight - 40,\n 280,\n 40\n );\n view.addSubview(arrowStyleLabel);\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(\n NSMakeRect(-2, viewHeight - 40, 300, 20)\n );\n setActiveStyleSetting(arrowStylingField);\n view.addSubview(arrowStylingField);\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\n \"Add layer style to your document that will contain $arrow name and you will be able to specify it here \",\n false,\n -1,\n viewHeight - 80,\n 300,\n 40\n );\n view.addSubview(arrowStyleInfoLabel);\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\n \"Arrow Type\",\n true,\n -1,\n viewHeight - 130,\n 280,\n 40\n );\n view.addSubview(arrowTypeLabel);\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(\n NSMakeRect(-2, viewHeight - 130, 300, 20)\n );\n setActiveTypeSetting(arrowTypeField);\n view.addSubview(arrowTypeField);\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\n \"Select one of the arrow types. Angled is used by default\",\n false,\n -1,\n viewHeight - 170,\n 300,\n 40\n );\n view.addSubview(arrowTypeInfoLabel);\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\n \"Arrow Spacing\",\n true,\n -1,\n viewHeight - 200,\n 330,\n 20\n );\n view.addSubview(arrowSpacingLabel);\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\n \"px\",\n true,\n 90,\n viewHeight - 220,\n 330,\n 20\n );\n view.addSubview(arrowSpacingPxLabel);\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(\n NSMakeRect(-2, viewHeight - 220, 80, 20)\n );\n var formatter = NSNumberFormatter.alloc()\n .init()\n .autorelease();\n arrowSpacingField.setStringValue(\n String(Settings.settingForKey(\"arrowSpacing\"))\n );\n arrowSpacingField.setFormatter(formatter);\n view.addSubview(arrowSpacingField);\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(\n NSMakeRect(70, viewHeight - 220, 20, 20)\n );\n arrowSpacingStepper.setMaxValue(1000);\n arrowSpacingStepper.setMinValue(0);\n arrowSpacingStepper.setValueWraps(false);\n arrowSpacingStepper.setAutorepeat(true);\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender) {\n var value = 0 + sender.integerValue();\n arrowSpacingField.setStringValue(String(value));\n });\n\n view.addSubview(arrowSpacingStepper);\n // view.addSubview(formatter)\n\n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\n \"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \",\n false,\n -1,\n viewHeight - 285,\n 300,\n 60\n );\n view.addSubview(arrowSpacingInfoLabel);\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\n \"Other Settings\",\n true,\n -1,\n viewHeight - 330,\n 280,\n 40\n );\n view.addSubview(otherSettingsLabel);\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\n \"Second layer auto-align\",\n false,\n -1,\n viewHeight - 340,\n 260,\n 40\n );\n view.addSubview(checkbox);\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\n \"Align the second layer for 5px misalignment with the first one\",\n false,\n -1,\n viewHeight - 370,\n 280,\n 40\n );\n view.addSubview(autoAlignInfoLabel);\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\n \"Made by @faridSabitov with the support of EPAM.com ❤️\",\n true,\n -1,\n viewHeight - 420,\n 280,\n 40\n );\n view.addSubview(pluginInfoLabel);\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal();\n\n if (modalResponse == NSAlertFirstButtonReturn) {\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(\n alert\n .views()[0]\n .subviews()[1]\n .title(),\n \"arrowStyle\",\n docData,\n pluginKey\n );\n Settings.setSettingForKey(\n \"arrowType\",\n alert\n .views()[0]\n .subviews()[4]\n .title()\n );\n Settings.setSettingForKey(\n \"arrowSpacing\",\n alert\n .views()[0]\n .subviews()[8]\n .intValue()\n );\n Settings.setSettingForKey(\n \"autoAlign\",\n alert\n .views()[0]\n .subviews()[12]\n .state()\n );\n UI.message(\"Settings are updated 🚀\");\n }\n}\n\n// Functions\n\nfunction setActiveStyleSetting(arrowStylingField) {\n let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier(\n \"arrowStyle\",\n docData,\n pluginKey\n );\n let styles = getLayerStyles(null);\n\n if (docSettings) {\n // We have info about the settings in the current document\n\n if (docSettings != \"Default Style\") {\n // if user specified own option\n arrowStylingField.addItemWithTitle(docSettings);\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for (let i = 0; i < styles.length; i++) {\n if (styles[i].name() != docSettings) {\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n } else {\n // Need to show the default first\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for (let i = 0; i < styles.length; i++) {\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n } else {\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for (let i = 0; i < styles.length; i++) {\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n}\n\nfunction setActiveTypeSetting(arrowTypeField) {\n let docTypeSettings = Settings.settingForKey(\"arrowType\");\n\n if (docTypeSettings) {\n // We have info about the settings in the current document\n\n if (docTypeSettings == \"Angled\") {\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(0);\n }\n\n if (docTypeSettings == \"Curved\") {\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(0);\n }\n\n if (docTypeSettings == \"Straight\") {\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(0);\n }\n } else {\n // Show default\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.addItemWithTitle(\"Straight\");\n }\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight) {\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\");\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\");\n alert.addButtonWithTitle(\"Cancel\");\n\n return alert;\n}\n\nfunction alertLabel(message, state, x, y, width, height) {\n let infoLabel = NSTextField.alloc().initWithFrame(\n NSMakeRect(x, y, width, height)\n );\n\n infoLabel.setStringValue(message);\n infoLabel.setSelectable(false);\n infoLabel.setDrawsBackground(false);\n infoLabel.setBezeled(false);\n\n if (state == false) {\n infoLabel.textColor = NSColor.disabledControlTextColor();\n }\n\n return infoLabel;\n}\n\nfunction alertCheckbox(message, state, x, y, width, height) {\n let checkbox = NSButton.alloc().initWithFrame(\n NSMakeRect(x, y, width, height)\n );\n\n checkbox.setButtonType(NSSwitchButton);\n checkbox.setBezelStyle(0);\n checkbox.setTitle(message);\n if (Settings.settingForKey(\"autoAlign\")) {\n let currentState = Settings.settingForKey(\"autoAlign\");\n checkbox.setState(currentState);\n } else {\n checkbox.setState(state);\n }\n\n return checkbox;\n}\n\n\n","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\n\nexport function styleLine(line, style){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey));\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/src/manifest.json b/src/manifest.json index ca79cc6..5110008 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -102,17 +102,6 @@ "icon": "icon.png", "handler": "updateSelectedArrows" }, - { - "name": "Auto update arrows between selected", - "script": "./script.js", - "handlers": { - "actions": { - "LayersMoved.finish": "autoUpdateSelectedArrows", - "LayersResized.finish": "autoUpdateSelectedArrows" - } - }, - "identifier": "autoUpdateSelectedArrows" - }, { "name": "Update arrows from the selected artboard", "description": "Update all the arrows from selected artboard", diff --git a/src/script.js b/src/script.js index 7a143f2..50786e1 100644 --- a/src/script.js +++ b/src/script.js @@ -24,7 +24,7 @@ if(context.document){ currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); connectionsData = getConnectionsData(); } else { - document = sketch.fromNative(context.actionContext.document); + // document = sketch.fromNative(context.actionContext.document); } @@ -43,39 +43,8 @@ export function createDownArrowWithCondition(context){create(context, "Down", tr export function createLeftArrowWithCondition(context){create(context, "Left", true);} export function createUpArrowWithCondition(context){create(context, "Up", true);} -export function autoUpdateSelectedArrows(context) { - // const action = context.actionContext; - - // docData = action.document.documentData(); - // pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); - // currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards - // newConnectionsData = getConnectionsData(); - - // const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer)); - // log(movedLayers[0].id); - // log(movedLayers.length); - - // // if (movedLayers.filter(layer => (layer.type == 'Artboard' || (layer.type == 'SymbolMaster' && config.arrangeSymbols))).length > 0) { - // // ArrangeArtboards(context) - // // } - - // let currentConnectionsData = newConnectionsData; // Need to refactor - - // for(let g = 0; g < movedLayers.length; g++) { - - // let connectionIndex = findConnectionIndex(movedLayers[0].id, null, currentConnectionsData); - - // log("yes "+connectionIndex); - // if(connectionIndex.length == 0){ - - // updateArrow(currentConnectionsData[connectionIndex[0]].firstObject, currentConnectionsData[connectionIndex[0]].secondObject, currentConnectionsData[connectionIndex[0]].style, currentConnectionsData[connectionIndex[0]].type, currentConnectionsData[connectionIndex[0]].direction, currentConnectionsData[connectionIndex[0]].line, currentConnectionsData[connectionIndex[0]].condition, currentConnectionsData[connectionIndex[0]].isCondition, connectionIndex[0]); - // sketch.UI.message("Current connection is updated 🤘"); - // } else { - // sketch.UI.message("There is no connection between selected layers on the plugin data"); - // } - - // } - // context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); +export function autoUpdateSelectedArrows() { + let a = true } @@ -83,32 +52,32 @@ function create(context, direction, isCondition){ let selection = context.selection; if(selection.count() > 1 && selection[0].class() != "MSArtboardGroup"){ - let sourceObjectID = getSourceObjectFromSelection(selection, direction); // Useful for selecting multiple layers + let sourceObjectID = getSourceObjectFromSelection(selection, direction); + let connectionIndex = findConnectionIndex(sourceObjectID, selection, connectionsData); for(let g = 0; g < selection.count(); g++) { if(selection[g].objectID() != sourceObjectID){ - let connectionIndex = findConnectionIndex(sourceObjectID, selection[g].objectID(), connectionsData); - log("connection Index length") - log(connectionIndex.length); if(connectionIndex.length == 0){ // Create let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition); connectionsData.push(connection); - log("Create Data"); - log(connectionsData); sketch.UI.message("New connection is created 🚀"); } else { // Update - deleteLine(connectionsData[connectionIndex].line); - if(!isCondition){deleteCondition(connectionsData[connectionIndex].condition)} + // if(!isCondition){deleteCondition(connectionsData[connectionIndex[0]].condition)} let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition); - connectionsData = deleteConnectionFromData(connectionIndex); connectionsData.push(connection); - log("Final Data: "); - log(connectionsData); sketch.UI.message("Current connection is updated 🤘"); } } } + for(let z = 0; z < connectionIndex.length; z++) { + let currentIndex = connectionIndex[z]; + deleteLine(connectionsData[currentIndex].line); + } + if(connectionIndex.length > 0){ + // Update flow + connectionsData = deleteConnectionFromData(connectionIndex, connectionsData); + } context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, "arrowConnections", docData, pluginKey); } else { // When user didn't select anything diff --git a/src/utilities/data.js b/src/utilities/data.js index 2c39e70..88e14bc 100644 --- a/src/utilities/data.js +++ b/src/utilities/data.js @@ -26,37 +26,34 @@ export function getConnectionsData() { return dataArray; } -export function findConnectionIndex(firstObjectID, secondObjectID, data) { +export function findConnectionIndex(sourceObjectID, selection, data) { let indexArray = []; - firstObjectID = String(firstObjectID); - secondObjectID = String(secondObjectID); - if (data) { - // If we have database, need to check for connections - for (let y = 0; y < data.length; y++) { - if (firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject) { - // When we need to find connection between two objects - if (secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject) { - indexArray.push(y); + for (let g = 0; g < selection.count(); g++) { + if (sourceObjectID != selection[g].objectID()) { + + let firstObjectID = String(sourceObjectID); + let secondObjectID = String(selection[g].objectID()); + + for (let y = 0; y < data.length; y++) { + if (firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject) { + if (secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject) { + indexArray.push(y); + } + } } + } } } return indexArray; } -export function deleteConnectionFromData(connectionIndex){ // Refactored - let newConnections = []; - if(pluginData){ - // If we have database - let connections = pluginData; - - for (let i = 0; i < connections.length; i ++) { - // Updating all connections without deleted one - if(i != connectionIndex){ - newConnections.push(connections[i]); - } +export function deleteConnectionFromData(connectionIndexArray, data){ + if(data){ + for (let i = connectionIndexArray.length -1; i >= 0; i--) { + data.splice(connectionIndexArray[i],1); } } - return newConnections; + return data; } diff --git a/src/utilities/getSourceObject.js b/src/utilities/getSourceObject.js index 193bf85..58f703a 100644 --- a/src/utilities/getSourceObject.js +++ b/src/utilities/getSourceObject.js @@ -1,5 +1,7 @@ import sketch from 'sketch'; let document = sketch.fromNative(context.document); +let docData = context.document.documentData(); +let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); export function getSourceObjectFromSelection(selection, direction){ @@ -13,13 +15,16 @@ export function getSourceObjectFromSelection(selection, direction){ return sourceObjectID; } -function defineSourceObject(firstObjectID, secondObjectID, direction){ //Refactored +function defineSourceObject(firstObjectID, secondObjectID, direction){ + let firstObject = document.getLayerWithID(firstObjectID); let secondObject = document.getLayerWithID(secondObjectID); + let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup}); + let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup}); let sourceObjectID; if(direction == "Right"){ - if(firstObject.frame.x <= secondObject.frame.x){ + if(firstObjectAbsPos.x <= secondObjectAbsPos.x){ // We need to get the doc position sourceObjectID = firstObject.id; } else { sourceObjectID = secondObject.id; @@ -27,7 +32,7 @@ function defineSourceObject(firstObjectID, secondObjectID, direction){ //Refacto } if(direction == "Down"){ - if(firstObject.frame.y <= secondObject.frame.y){ + if(firstObject.y <= secondObjectAbsPos.y){ sourceObjectID = firstObject.id; } else { sourceObjectID = secondObject.id; @@ -35,7 +40,7 @@ function defineSourceObject(firstObjectID, secondObjectID, direction){ //Refacto } if(direction == "Left"){ - if(firstObject.frame.x <= secondObject.frame.x){ + if(firstObjectAbsPos.x <= secondObjectAbsPos.x){ sourceObjectID = secondObject.id; } else { sourceObjectID = firstObject.id; @@ -43,7 +48,7 @@ function defineSourceObject(firstObjectID, secondObjectID, direction){ //Refacto } if(direction == "Up"){ - if(firstObject.frame.y <= secondObject.frame.y){ + if(firstObjectAbsPos.y <= secondObjectAbsPos.y){ sourceObjectID = secondObject.id; } else { sourceObjectID = firstObject.id; From e9443d31881f22fe4b682f35e433f988319573f0 Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Sun, 7 Jul 2019 21:09:47 +0300 Subject: [PATCH 33/44] fixed problem with wrong condition position --- arrows.sketchplugin/Contents/Sketch/script.js | 71 +++++++++---------- .../Contents/Sketch/script.js.map | 2 +- src/draw.js | 7 +- src/script.js | 36 +++++++--- src/utilities/data.js | 25 ------- src/utilities/groups.js | 7 +- src/utilities/lines.js | 2 +- 7 files changed, 69 insertions(+), 81 deletions(-) diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index cc2aab5..7a46951 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -382,6 +382,8 @@ function getConnectionPos(firstObject, secondObject, direction) { connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; } + log("Direction " + direction); + console.log(connectionPos); return connectionPos; } // Drawing Types @@ -775,19 +777,40 @@ function create(context, direction, isCondition) { if (selection.count() > 1 && selection[0].class() != "MSArtboardGroup") { var _sourceObjectID = Object(_utilities_getSourceObject_js__WEBPACK_IMPORTED_MODULE_3__["getSourceObjectFromSelection"])(selection, direction); - var connectionIndex = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_4__["findConnectionIndex"])(_sourceObjectID, selection, connectionsData); + var connectionIndex = []; for (var _g = 0; _g < selection.count(); _g++) { if (selection[_g].objectID() != _sourceObjectID) { - if (connectionIndex.length == 0) { + var firstObjectID = String(_sourceObjectID); + var secondObjectID = String(selection[_g].objectID()); + var _create = true; + var index = void 0; + + if (connectionsData.length > 0) { + for (var y = 0; y < connectionsData.length; y++) { + if ((firstObjectID == connectionsData[y].firstObject || firstObjectID == connectionsData[y].secondObject) && (secondObjectID == connectionsData[y].firstObject || secondObjectID == connectionsData[y].secondObject)) { + // We have this connection and need to update + _create = false; + index = y; + connectionIndex.push(y); + } + } + } + + if (_create) { // Create - var connection = Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_1__["createArrow"])(_sourceObjectID, selection[_g].objectID(), null, null, direction, null, isCondition); + var connection = Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_1__["createArrow"])(firstObjectID, secondObjectID, null, null, direction, null, isCondition); connectionsData.push(connection); sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("New connection is created 🚀"); } else { // Update - // if(!isCondition){deleteCondition(connectionsData[connectionIndex[0]].condition)} - var _connection = Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_1__["createArrow"])(_sourceObjectID, selection[_g].objectID(), null, null, direction, null, isCondition); + Object(_utilities_lines_js__WEBPACK_IMPORTED_MODULE_5__["deleteLine"])(connectionsData[index].line); + + if (!isCondition) { + Object(_utilities_conditions_js__WEBPACK_IMPORTED_MODULE_6__["deleteCondition"])(connectionsData[index].condition); + } + + var _connection = Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_1__["createArrow"])(firstObjectID, secondObjectID, null, null, direction, null, isCondition); connectionsData.push(_connection); sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Current connection is updated 🤘"); @@ -795,13 +818,8 @@ function create(context, direction, isCondition) { } } - for (var z = 0; z < connectionIndex.length; z++) { - var currentIndex = connectionIndex[z]; - Object(_utilities_lines_js__WEBPACK_IMPORTED_MODULE_5__["deleteLine"])(connectionsData[currentIndex].line); - } - if (connectionIndex.length > 0) { - // Update flow + // Update data if there was changes connectionsData = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_4__["deleteConnectionFromData"])(connectionIndex, connectionsData); } @@ -1029,13 +1047,12 @@ function deleteCondition(conditionID) { /*!*******************************!*\ !*** ./src/utilities/data.js ***! \*******************************/ -/*! exports provided: getConnectionsData, findConnectionIndex, deleteConnectionFromData */ +/*! exports provided: getConnectionsData, deleteConnectionFromData */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getConnectionsData", function() { return getConnectionsData; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "findConnectionIndex", function() { return findConnectionIndex; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteConnectionFromData", function() { return deleteConnectionFromData; }); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); @@ -1064,28 +1081,6 @@ function getConnectionsData() { return dataArray; } -function findConnectionIndex(sourceObjectID, selection, data) { - var indexArray = []; - - if (data) { - for (var g = 0; g < selection.count(); g++) { - if (sourceObjectID != selection[g].objectID()) { - var firstObjectID = String(sourceObjectID); - var secondObjectID = String(selection[g].objectID()); - - for (var y = 0; y < data.length; y++) { - if (firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject) { - if (secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject) { - indexArray.push(y); - } - } - } - } - } - } - - return indexArray; -} function deleteConnectionFromData(connectionIndexArray, data) { if (data) { for (var i = connectionIndexArray.length - 1; i >= 0; i--) { @@ -1236,6 +1231,7 @@ function addToConditionGroup(condition, x, y) { var arGroup = checkForGroup("Arrows"); var arGroupX = arGroup != null ? arGroup.frame().x() : 0; var arGroupY = arGroup != null ? arGroup.frame().y() : 0; + log("Arr group " + arGroupX); if (conGroup) { condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX); @@ -1243,8 +1239,8 @@ function addToConditionGroup(condition, x, y) { condition.parent = conGroup; conGroup.fixGeometryWithOptions(1); } else { - condition.frame.x = x - condition.frame.width / 2; - condition.frame.y = y - condition.frame.height / 2; + condition.frame.x = x - condition.frame.width / 2 + arGroupX; + condition.frame.y = y - condition.frame.height / 2 + arGroupY; var Group = __webpack_require__(/*! sketch/dom */ "sketch/dom").Group; @@ -1277,7 +1273,6 @@ __webpack_require__.r(__webpack_exports__); var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); function deleteLine(lineID) { - // refactored var lineObject = document.getLayerWithID(lineID); var selectedGroup; diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index eeb694f..e819995 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/createArrow.js","webpack://exports/./src/draw.js","webpack://exports/./src/script.js","webpack://exports/./src/updateArrow.js","webpack://exports/./src/utilities/conditions.js","webpack://exports/./src/utilities/data.js","webpack://exports/./src/utilities/getSourceObject.js","webpack://exports/./src/utilities/groups.js","webpack://exports/./src/utilities/lines.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["Settings","require","document","sketch","fromNative","context","createArrow","firstObjectID","secondObjectID","style","type","direction","conditionID","isCondition","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","firstObject","secondObject","condition","line","objectID","getLayerWithID","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","sourceObjectID","childObjectID","sourceObject","childObject","settingForKey","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","UI","docData","documentData","currentParentGroup","currentPage","currentArtboard","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","currentGroup","checkForGroup","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","layers","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","pluginKey","pluginData","connectionsData","command","valueForKey_onLayer_forPluginIdentifier","getConnectionsData","createAutoArrow","create","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","autoUpdateSelectedArrows","a","selection","count","class","getSourceObjectFromSelection","connectionIndex","findConnectionIndex","g","length","push","message","z","currentIndex","deleteLine","deleteConnectionFromData","setValue_forKey_onLayer_forPluginIdentifier","updateSelectedArrows","update","updateArtboardArrows","updateAllArrows","deleteSelectedArrows","deleteArtboardArrows","deleteAllArrows","level","isUpdate","newConnectionsData","firstObjectArtboard","secondObjectArtboard","i","updateArrow","sketchObject","parentArtboard","lineID","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","getImportableSymbolReferencesForDocument","name","includes","alert","symbolMaster","import","createNewInstance","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","fixGeometryWithOptions","id","deleteCondition","conditionObject","selectedGroup","remove","dataArray","data","indexArray","String","connectionIndexArray","splice","defineSourceObject","groupName","addLayers","Group","group","locked","moveToBack","adjustToFit","lineObject","localStyle","getLayerStyles","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","thickness","endMarkerType","allStyles","allLayerStyles","styles"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch';\nimport { drawConnection } from \"./draw.js\";\n\nvar Settings = require('sketch/settings');\nlet document = sketch.fromNative(context.document);\n\n// Main Function\n\nexport function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n return connection;\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}","import sketch from 'sketch';\nimport { styleLine } from \"./utilities/styling.js\";\nimport { addCondition, updateCondition } from \"./utilities/conditions.js\";\nimport { checkForGroup, addToArrowsGroup } from \"./utilities/groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\n// Main Function\n\nexport function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition){ // Refactored\n // Process of creating new connection \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n // Condition\n if(condition == true){\n if(conditionID != null){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY);\n }\n } else {\n connection.conditionID = null;\n }\n // connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style);\n\n // Add to group\n addToArrowsGroup(connection.line);\n \n return connection\n}\n\n// Positions\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\");\n let diffX, diffY;\n \n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n \n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n \n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n return connectionPos\n}\n\n// Drawing Types\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n \n return line;\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n \n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n \n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n \n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n \n if(firstLayerPosX 1 && selection[0].class() != \"MSArtboardGroup\"){\n let sourceObjectID = getSourceObjectFromSelection(selection, direction);\n let connectionIndex = findConnectionIndex(sourceObjectID, selection, connectionsData);\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n if(connectionIndex.length == 0){\n // Create\n let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition);\n connectionsData.push(connection);\n sketch.UI.message(\"New connection is created 🚀\");\n } else {\n // Update\n // if(!isCondition){deleteCondition(connectionsData[connectionIndex[0]].condition)}\n let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition);\n connectionsData.push(connection);\n sketch.UI.message(\"Current connection is updated 🤘\");\n }\n }\n }\n for(let z = 0; z < connectionIndex.length; z++) {\n let currentIndex = connectionIndex[z];\n deleteLine(connectionsData[currentIndex].line);\n }\n if(connectionIndex.length > 0){\n // Update flow \n connectionsData = deleteConnectionFromData(connectionIndex, connectionsData);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\n \n//\n// Plugin Incoming Commands - Update and Delete\n//\n\nexport function updateSelectedArrows(context) {update(context, 1, true);}\nexport function updateArtboardArrows(context) {update(context, 2, true);}\nexport function updateAllArrows(context) {update(context, 3, true);}\nexport function deleteSelectedArrows(context) {update(context, 1, false);}\nexport function deleteArtboardArrows(context) {update(context, 2, false);}\nexport function deleteAllArrows(context) {update(context, 3, false);}\n\nexport function update(context, level, isUpdate) {\n // 1 - selection level\n // 2 - artboard level\n // 3 - document level\n let newConnectionsData = [];\n let selection = context.selection;\n let firstObjectArtboard;\n let secondObjectArtboard;\n\n\n if (connectionsData.length > 0) {\n for (let i = 0; i < connectionsData.length; i++) {\n \n if (level == 3) {\n if(isUpdate){\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n sketch.UI.message(\"All arrows are updated\");\n } else {\n newConnectionsData = null\n sketch.UI.message(\"All arrows are deleted\");\n }\n }\n if (level == 2) {\n firstObjectArtboard = document.getLayerWithID(connectionsData[i].firstObject);\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID();\n secondObjectArtboard = document.getLayerWithID(connectionsData[i].secondObject);\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID();\n\n if (selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\") {\n\n if (firstObjectArtboard == selection[0].objectID()) {\n if (secondObjectArtboard == selection[0].objectID()) {\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n }\n }\n sketch.UI.message(\"All arrows are updated 🚀\");\n \n \n }\n let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition);\n connectionsData.push(connection);\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n sketch.UI.message(\"There is no arrows\");\n }\n}\n\n// const track = require(\"sketch-module-google-analytics\")\n// track(\"UA-138226597-1\", \"event\", {\n// ec: \"command\", \n// ea: \"create\", \n// ev: \"my-command\"\n// });\n\n\n\n\n\n","import sketch from 'sketch';\nimport { getConnectionsData, deleteConnectionFromData} from \"./utilities/data.js\"\nimport { deleteLine } from \"./utilities/lines.js\"\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\nlet connectionsData = getConnectionsData();\n\n\n\nexport function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n // let firstObject = document.getLayerWithID(firstObjectID);\n // let secondObject = document.getLayerWithID(secondObjectID);\n // let conditionObject = document.getLayerWithID(conditionID);\n // let result = false;\n \n // Need to delete data first, because we will have a new line\n // deleteLine(lineID);\n // if(conditionID && !isCondition){\n // if(conditionObject){conditionObject.remove();}\n // }\n \n connectionsData = deleteConnectionFromData(connectionIndex);\n\n // if(firstObject && secondObject){\n // // If we have all the objects, we can recreate the line\n // result = true;\n // }\n\n // return result;\n}","import sketch from 'sketch';\nimport { addToConditionGroup } from \"./groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\nexport function addCondition(keyword, x, y) {\n let libraries = sketch.getLibraries();\n let libraryObject, symbolReferences, symbol;\n\n for (let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(\n document\n );\n for (let i = 0; i < symbolReferences.length; i++) {\n if (symbolReferences[i].name.includes(keyword)) {\n libraryObject = symbolReferences[i];\n }\n }\n }\n\n if (libraryObject == null) {\n symbol = null;\n UI.alert(\n \"Condition symbol is not found\",\n 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here'\n );\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y);\n }\n\n return symbol;\n}\n\nexport function updateCondition(conditionID, x, y) {\n let condition = document.getLayerWithID(conditionID);\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n }\n return condition.id;\n}\n\nexport function deleteCondition(conditionID) {\n let conditionObject = document.getLayerWithID(conditionID);\n let selectedGroup;\n if(conditionObject){\n selectedGroup = conditionObject.parent;\n conditionObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n\n }\n \n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, connectionsData;\n\ndocument = sketch.fromNative(context.document);\ndocData = context.document.documentData();\npluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\ncurrentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n\n\n\nexport function getConnectionsData() {\n let dataArray = [];\n\n if (pluginData) {\n for (let i = 0; i < pluginData.length; i++) {\n dataArray.push(pluginData[i]);\n }\n }\n return dataArray;\n}\n\nexport function findConnectionIndex(sourceObjectID, selection, data) {\n let indexArray = [];\n if (data) {\n for (let g = 0; g < selection.count(); g++) {\n if (sourceObjectID != selection[g].objectID()) {\n\n let firstObjectID = String(sourceObjectID);\n let secondObjectID = String(selection[g].objectID());\n\n for (let y = 0; y < data.length; y++) {\n if (firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject) {\n if (secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject) {\n indexArray.push(y);\n }\n }\n }\n\n }\n }\n }\n return indexArray;\n}\n\nexport function deleteConnectionFromData(connectionIndexArray, data){\n if(data){\n for (let i = connectionIndexArray.length -1; i >= 0; i--) {\n data.splice(connectionIndexArray[i],1);\n }\n }\n return data;\n}\n","import sketch from 'sketch';\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function getSourceObjectFromSelection(selection, direction){\n let sourceObjectID = selection.firstObject().objectID();\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction);\n }\n }\n return sourceObjectID;\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){\n \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let sourceObjectID;\n\n if(direction == \"Right\"){\n if(firstObjectAbsPos.x <= secondObjectAbsPos.x){ // We need to get the doc position\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.y <= secondObjectAbsPos.y){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Left\"){\n if(firstObjectAbsPos.x <= secondObjectAbsPos.x){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n if(direction == \"Up\"){\n if(firstObjectAbsPos.y <= secondObjectAbsPos.y){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n return sourceObjectID;\n}","import sketch from 'sketch';\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function checkForGroup(groupName) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n \n return currentGroup;\n}\n\nexport function addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\");\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nexport function addToConditionGroup(condition, x, y) {\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n \n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n let Group = require(\"sketch/dom\").Group;\n let group = new Group({\n parent: currentParentGroup,\n name: \"Conditions\",\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n }","import sketch from 'sketch';\nlet document = sketch.fromNative(context.document);\n\nexport function deleteLine(lineID){ // refactored\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\n\nexport function styleLine(line, style){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey));\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/createArrow.js","webpack://exports/./src/draw.js","webpack://exports/./src/script.js","webpack://exports/./src/updateArrow.js","webpack://exports/./src/utilities/conditions.js","webpack://exports/./src/utilities/data.js","webpack://exports/./src/utilities/getSourceObject.js","webpack://exports/./src/utilities/groups.js","webpack://exports/./src/utilities/lines.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["Settings","require","document","sketch","fromNative","context","createArrow","firstObjectID","secondObjectID","style","type","direction","conditionID","isCondition","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","firstObject","secondObject","condition","line","objectID","getLayerWithID","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","sourceObjectID","childObjectID","sourceObject","childObject","settingForKey","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","UI","docData","documentData","currentParentGroup","currentPage","currentArtboard","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","currentGroup","checkForGroup","log","console","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","layers","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","pluginKey","pluginData","connectionsData","command","valueForKey_onLayer_forPluginIdentifier","getConnectionsData","createAutoArrow","create","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","autoUpdateSelectedArrows","a","selection","count","class","getSourceObjectFromSelection","connectionIndex","g","String","index","length","push","message","deleteLine","deleteCondition","deleteConnectionFromData","setValue_forKey_onLayer_forPluginIdentifier","updateSelectedArrows","update","updateArtboardArrows","updateAllArrows","deleteSelectedArrows","deleteArtboardArrows","deleteAllArrows","level","isUpdate","newConnectionsData","firstObjectArtboard","secondObjectArtboard","i","updateArrow","sketchObject","parentArtboard","lineID","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","getImportableSymbolReferencesForDocument","name","includes","alert","symbolMaster","import","createNewInstance","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","fixGeometryWithOptions","id","conditionObject","selectedGroup","remove","dataArray","connectionIndexArray","data","splice","defineSourceObject","groupName","addLayers","Group","group","locked","moveToBack","adjustToFit","lineObject","localStyle","getLayerStyles","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","thickness","endMarkerType","allStyles","allLayerStyles","styles"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch';\nimport { drawConnection } from \"./draw.js\";\n\nvar Settings = require('sketch/settings');\nlet document = sketch.fromNative(context.document);\n\n// Main Function\n\nexport function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n return connection;\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}","import sketch from 'sketch';\nimport { styleLine } from \"./utilities/styling.js\";\nimport { addCondition, updateCondition } from \"./utilities/conditions.js\";\nimport { checkForGroup, addToArrowsGroup } from \"./utilities/groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\n// Main Function\n\nexport function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition){ // Refactored\n // Process of creating new connection \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n // Condition\n if(condition == true){\n if(conditionID != null){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY);\n }\n } else {\n connection.conditionID = null;\n }\n // connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style);\n\n // Add to group\n addToArrowsGroup(connection.line);\n \n return connection\n}\n\n// Positions\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\");\n let diffX, diffY;\n \n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n \n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n \n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n log(\"Direction \"+direction)\n console.log(connectionPos)\n\n return connectionPos\n}\n\n// Drawing Types\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n \n return line;\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n \n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n \n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n \n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n \n if(firstLayerPosX 1 && selection[0].class() != \"MSArtboardGroup\"){\n let sourceObjectID = getSourceObjectFromSelection(selection, direction);\n let connectionIndex = []\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n\n let firstObjectID = String(sourceObjectID);\n let secondObjectID = String(selection[g].objectID());\n let create = true\n let index\n\n if(connectionsData.length > 0){\n for (let y = 0; y < connectionsData.length; y++) {\n if ((firstObjectID == connectionsData[y].firstObject || firstObjectID == connectionsData[y].secondObject) && (secondObjectID == connectionsData[y].firstObject || secondObjectID == connectionsData[y].secondObject)) {\n // We have this connection and need to update\n create = false;\n index = y;\n connectionIndex.push(y);\n }\n }\n } \n \n if(create){\n // Create\n let connection = createArrow(firstObjectID, secondObjectID, null, null, direction, null, isCondition);\n connectionsData.push(connection);\n sketch.UI.message(\"New connection is created 🚀\");\n } else {\n // Update\n deleteLine(connectionsData[index].line);\n if(!isCondition){deleteCondition(connectionsData[index].condition)}\n let connection = createArrow(firstObjectID, secondObjectID, null, null, direction, null, isCondition);\n connectionsData.push(connection);\n sketch.UI.message(\"Current connection is updated 🤘\");\n }\n }\n }\n if(connectionIndex.length > 0){\n // Update data if there was changes\n connectionsData = deleteConnectionFromData(connectionIndex, connectionsData);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\n \n//\n// Plugin Incoming Commands - Update and Delete\n//\n\nexport function updateSelectedArrows(context) {update(context, 1, true);}\nexport function updateArtboardArrows(context) {update(context, 2, true);}\nexport function updateAllArrows(context) {update(context, 3, true);}\nexport function deleteSelectedArrows(context) {update(context, 1, false);}\nexport function deleteArtboardArrows(context) {update(context, 2, false);}\nexport function deleteAllArrows(context) {update(context, 3, false);}\n\nexport function update(context, level, isUpdate) {\n // 1 - selection level\n // 2 - artboard level\n // 3 - document level\n let newConnectionsData = [];\n let selection = context.selection;\n let firstObjectArtboard;\n let secondObjectArtboard;\n\n\n if (connectionsData.length > 0) {\n for (let i = 0; i < connectionsData.length; i++) {\n \n if (level == 3) {\n if(isUpdate){\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n sketch.UI.message(\"All arrows are updated\");\n } else {\n newConnectionsData = null\n sketch.UI.message(\"All arrows are deleted\");\n }\n }\n if (level == 2) {\n firstObjectArtboard = document.getLayerWithID(connectionsData[i].firstObject);\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID();\n secondObjectArtboard = document.getLayerWithID(connectionsData[i].secondObject);\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID();\n\n if (selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\") {\n\n if (firstObjectArtboard == selection[0].objectID()) {\n if (secondObjectArtboard == selection[0].objectID()) {\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n }\n }\n sketch.UI.message(\"All arrows are updated 🚀\");\n \n \n }\n let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition);\n connectionsData.push(connection);\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n sketch.UI.message(\"There is no arrows\");\n }\n}\n\n// const track = require(\"sketch-module-google-analytics\")\n// track(\"UA-138226597-1\", \"event\", {\n// ec: \"command\", \n// ea: \"create\", \n// ev: \"my-command\"\n// });\n\n\n\n\n\n","import sketch from 'sketch';\nimport { getConnectionsData, deleteConnectionFromData} from \"./utilities/data.js\"\nimport { deleteLine } from \"./utilities/lines.js\"\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\nlet connectionsData = getConnectionsData();\n\n\n\nexport function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n // let firstObject = document.getLayerWithID(firstObjectID);\n // let secondObject = document.getLayerWithID(secondObjectID);\n // let conditionObject = document.getLayerWithID(conditionID);\n // let result = false;\n \n // Need to delete data first, because we will have a new line\n // deleteLine(lineID);\n // if(conditionID && !isCondition){\n // if(conditionObject){conditionObject.remove();}\n // }\n \n connectionsData = deleteConnectionFromData(connectionIndex);\n\n // if(firstObject && secondObject){\n // // If we have all the objects, we can recreate the line\n // result = true;\n // }\n\n // return result;\n}","import sketch from 'sketch';\nimport { addToConditionGroup } from \"./groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\nexport function addCondition(keyword, x, y) {\n let libraries = sketch.getLibraries();\n let libraryObject, symbolReferences, symbol;\n\n for (let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(\n document\n );\n for (let i = 0; i < symbolReferences.length; i++) {\n if (symbolReferences[i].name.includes(keyword)) {\n libraryObject = symbolReferences[i];\n }\n }\n }\n\n if (libraryObject == null) {\n symbol = null;\n UI.alert(\n \"Condition symbol is not found\",\n 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here'\n );\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y);\n }\n\n return symbol;\n}\n\nexport function updateCondition(conditionID, x, y) {\n let condition = document.getLayerWithID(conditionID);\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n }\n return condition.id;\n}\n\nexport function deleteCondition(conditionID) {\n let conditionObject = document.getLayerWithID(conditionID);\n let selectedGroup;\n if(conditionObject){\n selectedGroup = conditionObject.parent;\n conditionObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n\n }\n \n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, connectionsData;\n\ndocument = sketch.fromNative(context.document);\ndocData = context.document.documentData();\npluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\ncurrentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n\nexport function getConnectionsData() {\n let dataArray = [];\n\n if (pluginData) {\n for (let i = 0; i < pluginData.length; i++) {\n dataArray.push(pluginData[i]);\n }\n }\n return dataArray;\n}\n\nexport function deleteConnectionFromData(connectionIndexArray, data){\n if(data){\n for (let i = connectionIndexArray.length -1; i >= 0; i--) {\n data.splice(connectionIndexArray[i],1);\n }\n }\n return data;\n}\n","import sketch from 'sketch';\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function getSourceObjectFromSelection(selection, direction){\n let sourceObjectID = selection.firstObject().objectID();\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction);\n }\n }\n return sourceObjectID;\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){\n \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let sourceObjectID;\n\n if(direction == \"Right\"){\n if(firstObjectAbsPos.x <= secondObjectAbsPos.x){ // We need to get the doc position\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.y <= secondObjectAbsPos.y){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Left\"){\n if(firstObjectAbsPos.x <= secondObjectAbsPos.x){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n if(direction == \"Up\"){\n if(firstObjectAbsPos.y <= secondObjectAbsPos.y){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n return sourceObjectID;\n}","import sketch from 'sketch';\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function checkForGroup(groupName) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n \n return currentGroup;\n}\n\nexport function addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\");\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nexport function addToConditionGroup(condition, x, y) {\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n \n log(\"Arr group \"+arGroupX)\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2 + arGroupX;\n condition.frame.y = y - condition.frame.height / 2 + arGroupY;\n let Group = require(\"sketch/dom\").Group;\n let group = new Group({\n parent: currentParentGroup,\n name: \"Conditions\",\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n }","import sketch from 'sketch';\nlet document = sketch.fromNative(context.document);\n\nexport function deleteLine(lineID){\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\n\nexport function styleLine(line, style){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey));\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/src/draw.js b/src/draw.js index 0e502b5..a8bcc46 100644 --- a/src/draw.js +++ b/src/draw.js @@ -133,7 +133,9 @@ function getConnectionPos(firstObject, secondObject, direction){ // Refactored connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2; connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2; } - + log("Direction "+direction) + console.log(connectionPos) + return connectionPos } @@ -336,5 +338,4 @@ function drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondL line.setName("Curved Arrow"); return line; -} - +} \ No newline at end of file diff --git a/src/script.js b/src/script.js index 50786e1..ce52bc5 100644 --- a/src/script.js +++ b/src/script.js @@ -6,7 +6,7 @@ import sketch from 'sketch'; import { createArrow } from "./createArrow.js"; import { updateArrow } from "./updateArrow.js"; import { getSourceObjectFromSelection } from "./utilities/getSourceObject.js" -import { getConnectionsData, findConnectionIndex, deleteConnectionFromData } from "./utilities/data.js" +import { getConnectionsData, deleteConnectionFromData } from "./utilities/data.js" import { deleteLine } from "./utilities/lines.js" import { deleteCondition } from "./utilities/conditions.js"; @@ -53,29 +53,43 @@ function create(context, direction, isCondition){ if(selection.count() > 1 && selection[0].class() != "MSArtboardGroup"){ let sourceObjectID = getSourceObjectFromSelection(selection, direction); - let connectionIndex = findConnectionIndex(sourceObjectID, selection, connectionsData); + let connectionIndex = [] for(let g = 0; g < selection.count(); g++) { if(selection[g].objectID() != sourceObjectID){ - if(connectionIndex.length == 0){ + + let firstObjectID = String(sourceObjectID); + let secondObjectID = String(selection[g].objectID()); + let create = true + let index + + if(connectionsData.length > 0){ + for (let y = 0; y < connectionsData.length; y++) { + if ((firstObjectID == connectionsData[y].firstObject || firstObjectID == connectionsData[y].secondObject) && (secondObjectID == connectionsData[y].firstObject || secondObjectID == connectionsData[y].secondObject)) { + // We have this connection and need to update + create = false; + index = y; + connectionIndex.push(y); + } + } + } + + if(create){ // Create - let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition); + let connection = createArrow(firstObjectID, secondObjectID, null, null, direction, null, isCondition); connectionsData.push(connection); sketch.UI.message("New connection is created 🚀"); } else { // Update - // if(!isCondition){deleteCondition(connectionsData[connectionIndex[0]].condition)} - let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition); + deleteLine(connectionsData[index].line); + if(!isCondition){deleteCondition(connectionsData[index].condition)} + let connection = createArrow(firstObjectID, secondObjectID, null, null, direction, null, isCondition); connectionsData.push(connection); sketch.UI.message("Current connection is updated 🤘"); } } } - for(let z = 0; z < connectionIndex.length; z++) { - let currentIndex = connectionIndex[z]; - deleteLine(connectionsData[currentIndex].line); - } if(connectionIndex.length > 0){ - // Update flow + // Update data if there was changes connectionsData = deleteConnectionFromData(connectionIndex, connectionsData); } context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, "arrowConnections", docData, pluginKey); diff --git a/src/utilities/data.js b/src/utilities/data.js index 88e14bc..de42f43 100644 --- a/src/utilities/data.js +++ b/src/utilities/data.js @@ -13,8 +13,6 @@ docData = context.document.documentData(); pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards - - export function getConnectionsData() { let dataArray = []; @@ -26,29 +24,6 @@ export function getConnectionsData() { return dataArray; } -export function findConnectionIndex(sourceObjectID, selection, data) { - let indexArray = []; - if (data) { - for (let g = 0; g < selection.count(); g++) { - if (sourceObjectID != selection[g].objectID()) { - - let firstObjectID = String(sourceObjectID); - let secondObjectID = String(selection[g].objectID()); - - for (let y = 0; y < data.length; y++) { - if (firstObjectID == data[y].firstObject || firstObjectID == data[y].secondObject) { - if (secondObjectID == data[y].firstObject || secondObjectID == data[y].secondObject) { - indexArray.push(y); - } - } - } - - } - } - } - return indexArray; -} - export function deleteConnectionFromData(connectionIndexArray, data){ if(data){ for (let i = connectionIndexArray.length -1; i >= 0; i--) { diff --git a/src/utilities/groups.js b/src/utilities/groups.js index a2debd9..92a0da7 100644 --- a/src/utilities/groups.js +++ b/src/utilities/groups.js @@ -41,9 +41,12 @@ export function addToArrowsGroup(line){ export function addToConditionGroup(condition, x, y) { let conGroup = checkForGroup("Conditions"); let arGroup = checkForGroup("Arrows"); + let arGroupX = arGroup != null ? arGroup.frame().x() : 0; let arGroupY = arGroup != null ? arGroup.frame().y() : 0; + log("Arr group "+arGroupX) + if (conGroup) { condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX); @@ -52,8 +55,8 @@ export function addToConditionGroup(condition, x, y) { condition.parent = conGroup; conGroup.fixGeometryWithOptions(1); } else { - condition.frame.x = x - condition.frame.width / 2; - condition.frame.y = y - condition.frame.height / 2; + condition.frame.x = x - condition.frame.width / 2 + arGroupX; + condition.frame.y = y - condition.frame.height / 2 + arGroupY; let Group = require("sketch/dom").Group; let group = new Group({ parent: currentParentGroup, diff --git a/src/utilities/lines.js b/src/utilities/lines.js index c5bcff7..be2c127 100644 --- a/src/utilities/lines.js +++ b/src/utilities/lines.js @@ -1,7 +1,7 @@ import sketch from 'sketch'; let document = sketch.fromNative(context.document); -export function deleteLine(lineID){ // refactored +export function deleteLine(lineID){ let lineObject = document.getLayerWithID(lineID); let selectedGroup; if(lineObject){ From f04d46774a2430485ae58ae75d35b363498dca77 Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Sun, 7 Jul 2019 22:44:35 +0300 Subject: [PATCH 34/44] fixed problem with updating conditions --- arrows.sketchplugin/Contents/Sketch/script.js | 20 +++++++++---------- .../Contents/Sketch/script.js.map | 2 +- src/draw.js | 14 ++++++------- src/script.js | 7 +++++-- src/utilities/conditions.js | 3 +-- src/utilities/groups.js | 2 -- 6 files changed, 23 insertions(+), 25 deletions(-) diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index 7a46951..f9affc1 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -257,7 +257,7 @@ var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context. var docData = context.document.documentData(); var currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // Main Function -function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition) { +function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition) { // Refactored // Process of creating new connection var firstObject = document.getLayerWithID(firstObjectID); @@ -285,16 +285,17 @@ function drawConnection(firstObjectID, secondObjectID, style, type, localDirecti } // Condition - if (condition == true) { - if (conditionID != null) { + if (isCondition == true) { + if (document.getLayerWithID(conditionID)) { + log("let's update"); connection.conditionID = Object(_utilities_conditions_js__WEBPACK_IMPORTED_MODULE_2__["updateCondition"])(conditionID, connectionPos.middlePosX, connectionPos.middlePosY); } else { + log("let's NOT update"); connection.conditionID = Object(_utilities_conditions_js__WEBPACK_IMPORTED_MODULE_2__["addCondition"])("#con", connectionPos.middlePosX, connectionPos.middlePosY); } } else { connection.conditionID = null; - } // connection.conditionID = condition != false ? connection.conditionID = addCondition("#con", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null - // Style + } // Style connection.style = Object(_utilities_styling_js__WEBPACK_IMPORTED_MODULE_1__["styleLine"])(connection.line, style); // Add to group @@ -382,8 +383,6 @@ function getConnectionPos(firstObject, secondObject, direction) { connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; } - log("Direction " + direction); - console.log(connectionPos); return connectionPos; } // Drawing Types @@ -810,7 +809,7 @@ function create(context, direction, isCondition) { Object(_utilities_conditions_js__WEBPACK_IMPORTED_MODULE_6__["deleteCondition"])(connectionsData[index].condition); } - var _connection = Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_1__["createArrow"])(firstObjectID, secondObjectID, null, null, direction, null, isCondition); + var _connection = Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_1__["createArrow"])(firstObjectID, secondObjectID, null, null, direction, connectionsData[index].condition, isCondition); connectionsData.push(_connection); sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Current connection is updated 🤘"); @@ -1011,8 +1010,8 @@ function addCondition(keyword, x, y) { } function updateCondition(conditionID, x, y) { var condition = document.getLayerWithID(conditionID); - var conGroup = checkForGroup("Conditions"); - var arGroup = checkForGroup("Arrows"); + var conGroup = Object(_groups_js__WEBPACK_IMPORTED_MODULE_1__["checkForGroup"])("Conditions"); + var arGroup = Object(_groups_js__WEBPACK_IMPORTED_MODULE_1__["checkForGroup"])("Arrows"); var arGroupX = arGroup != null ? arGroup.frame().x() : 0; var arGroupY = arGroup != null ? arGroup.frame().y() : 0; @@ -1231,7 +1230,6 @@ function addToConditionGroup(condition, x, y) { var arGroup = checkForGroup("Arrows"); var arGroupX = arGroup != null ? arGroup.frame().x() : 0; var arGroupY = arGroup != null ? arGroup.frame().y() : 0; - log("Arr group " + arGroupX); if (conGroup) { condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX); diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index e819995..f09eb21 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/createArrow.js","webpack://exports/./src/draw.js","webpack://exports/./src/script.js","webpack://exports/./src/updateArrow.js","webpack://exports/./src/utilities/conditions.js","webpack://exports/./src/utilities/data.js","webpack://exports/./src/utilities/getSourceObject.js","webpack://exports/./src/utilities/groups.js","webpack://exports/./src/utilities/lines.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["Settings","require","document","sketch","fromNative","context","createArrow","firstObjectID","secondObjectID","style","type","direction","conditionID","isCondition","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","firstObject","secondObject","condition","line","objectID","getLayerWithID","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","sourceObjectID","childObjectID","sourceObject","childObject","settingForKey","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","UI","docData","documentData","currentParentGroup","currentPage","currentArtboard","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","currentGroup","checkForGroup","log","console","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","layers","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","pluginKey","pluginData","connectionsData","command","valueForKey_onLayer_forPluginIdentifier","getConnectionsData","createAutoArrow","create","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","autoUpdateSelectedArrows","a","selection","count","class","getSourceObjectFromSelection","connectionIndex","g","String","index","length","push","message","deleteLine","deleteCondition","deleteConnectionFromData","setValue_forKey_onLayer_forPluginIdentifier","updateSelectedArrows","update","updateArtboardArrows","updateAllArrows","deleteSelectedArrows","deleteArtboardArrows","deleteAllArrows","level","isUpdate","newConnectionsData","firstObjectArtboard","secondObjectArtboard","i","updateArrow","sketchObject","parentArtboard","lineID","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","getImportableSymbolReferencesForDocument","name","includes","alert","symbolMaster","import","createNewInstance","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","fixGeometryWithOptions","id","conditionObject","selectedGroup","remove","dataArray","connectionIndexArray","data","splice","defineSourceObject","groupName","addLayers","Group","group","locked","moveToBack","adjustToFit","lineObject","localStyle","getLayerStyles","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","thickness","endMarkerType","allStyles","allLayerStyles","styles"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch';\nimport { drawConnection } from \"./draw.js\";\n\nvar Settings = require('sketch/settings');\nlet document = sketch.fromNative(context.document);\n\n// Main Function\n\nexport function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n return connection;\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}","import sketch from 'sketch';\nimport { styleLine } from \"./utilities/styling.js\";\nimport { addCondition, updateCondition } from \"./utilities/conditions.js\";\nimport { checkForGroup, addToArrowsGroup } from \"./utilities/groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\n// Main Function\n\nexport function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition){ // Refactored\n // Process of creating new connection \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n // Condition\n if(condition == true){\n if(conditionID != null){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY);\n }\n } else {\n connection.conditionID = null;\n }\n // connection.conditionID = condition != false ? connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null\n\n // Style\n connection.style = styleLine(connection.line, style);\n\n // Add to group\n addToArrowsGroup(connection.line);\n \n return connection\n}\n\n// Positions\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\");\n let diffX, diffY;\n \n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n \n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n \n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n log(\"Direction \"+direction)\n console.log(connectionPos)\n\n return connectionPos\n}\n\n// Drawing Types\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n \n return line;\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n \n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n \n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n \n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n \n if(firstLayerPosX 1 && selection[0].class() != \"MSArtboardGroup\"){\n let sourceObjectID = getSourceObjectFromSelection(selection, direction);\n let connectionIndex = []\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n\n let firstObjectID = String(sourceObjectID);\n let secondObjectID = String(selection[g].objectID());\n let create = true\n let index\n\n if(connectionsData.length > 0){\n for (let y = 0; y < connectionsData.length; y++) {\n if ((firstObjectID == connectionsData[y].firstObject || firstObjectID == connectionsData[y].secondObject) && (secondObjectID == connectionsData[y].firstObject || secondObjectID == connectionsData[y].secondObject)) {\n // We have this connection and need to update\n create = false;\n index = y;\n connectionIndex.push(y);\n }\n }\n } \n \n if(create){\n // Create\n let connection = createArrow(firstObjectID, secondObjectID, null, null, direction, null, isCondition);\n connectionsData.push(connection);\n sketch.UI.message(\"New connection is created 🚀\");\n } else {\n // Update\n deleteLine(connectionsData[index].line);\n if(!isCondition){deleteCondition(connectionsData[index].condition)}\n let connection = createArrow(firstObjectID, secondObjectID, null, null, direction, null, isCondition);\n connectionsData.push(connection);\n sketch.UI.message(\"Current connection is updated 🤘\");\n }\n }\n }\n if(connectionIndex.length > 0){\n // Update data if there was changes\n connectionsData = deleteConnectionFromData(connectionIndex, connectionsData);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\n \n//\n// Plugin Incoming Commands - Update and Delete\n//\n\nexport function updateSelectedArrows(context) {update(context, 1, true);}\nexport function updateArtboardArrows(context) {update(context, 2, true);}\nexport function updateAllArrows(context) {update(context, 3, true);}\nexport function deleteSelectedArrows(context) {update(context, 1, false);}\nexport function deleteArtboardArrows(context) {update(context, 2, false);}\nexport function deleteAllArrows(context) {update(context, 3, false);}\n\nexport function update(context, level, isUpdate) {\n // 1 - selection level\n // 2 - artboard level\n // 3 - document level\n let newConnectionsData = [];\n let selection = context.selection;\n let firstObjectArtboard;\n let secondObjectArtboard;\n\n\n if (connectionsData.length > 0) {\n for (let i = 0; i < connectionsData.length; i++) {\n \n if (level == 3) {\n if(isUpdate){\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n sketch.UI.message(\"All arrows are updated\");\n } else {\n newConnectionsData = null\n sketch.UI.message(\"All arrows are deleted\");\n }\n }\n if (level == 2) {\n firstObjectArtboard = document.getLayerWithID(connectionsData[i].firstObject);\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID();\n secondObjectArtboard = document.getLayerWithID(connectionsData[i].secondObject);\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID();\n\n if (selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\") {\n\n if (firstObjectArtboard == selection[0].objectID()) {\n if (secondObjectArtboard == selection[0].objectID()) {\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n }\n }\n sketch.UI.message(\"All arrows are updated 🚀\");\n \n \n }\n let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition);\n connectionsData.push(connection);\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n sketch.UI.message(\"There is no arrows\");\n }\n}\n\n// const track = require(\"sketch-module-google-analytics\")\n// track(\"UA-138226597-1\", \"event\", {\n// ec: \"command\", \n// ea: \"create\", \n// ev: \"my-command\"\n// });\n\n\n\n\n\n","import sketch from 'sketch';\nimport { getConnectionsData, deleteConnectionFromData} from \"./utilities/data.js\"\nimport { deleteLine } from \"./utilities/lines.js\"\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\nlet connectionsData = getConnectionsData();\n\n\n\nexport function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n // let firstObject = document.getLayerWithID(firstObjectID);\n // let secondObject = document.getLayerWithID(secondObjectID);\n // let conditionObject = document.getLayerWithID(conditionID);\n // let result = false;\n \n // Need to delete data first, because we will have a new line\n // deleteLine(lineID);\n // if(conditionID && !isCondition){\n // if(conditionObject){conditionObject.remove();}\n // }\n \n connectionsData = deleteConnectionFromData(connectionIndex);\n\n // if(firstObject && secondObject){\n // // If we have all the objects, we can recreate the line\n // result = true;\n // }\n\n // return result;\n}","import sketch from 'sketch';\nimport { addToConditionGroup } from \"./groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\nexport function addCondition(keyword, x, y) {\n let libraries = sketch.getLibraries();\n let libraryObject, symbolReferences, symbol;\n\n for (let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(\n document\n );\n for (let i = 0; i < symbolReferences.length; i++) {\n if (symbolReferences[i].name.includes(keyword)) {\n libraryObject = symbolReferences[i];\n }\n }\n }\n\n if (libraryObject == null) {\n symbol = null;\n UI.alert(\n \"Condition symbol is not found\",\n 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here'\n );\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y);\n }\n\n return symbol;\n}\n\nexport function updateCondition(conditionID, x, y) {\n let condition = document.getLayerWithID(conditionID);\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n }\n return condition.id;\n}\n\nexport function deleteCondition(conditionID) {\n let conditionObject = document.getLayerWithID(conditionID);\n let selectedGroup;\n if(conditionObject){\n selectedGroup = conditionObject.parent;\n conditionObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n\n }\n \n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, connectionsData;\n\ndocument = sketch.fromNative(context.document);\ndocData = context.document.documentData();\npluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\ncurrentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n\nexport function getConnectionsData() {\n let dataArray = [];\n\n if (pluginData) {\n for (let i = 0; i < pluginData.length; i++) {\n dataArray.push(pluginData[i]);\n }\n }\n return dataArray;\n}\n\nexport function deleteConnectionFromData(connectionIndexArray, data){\n if(data){\n for (let i = connectionIndexArray.length -1; i >= 0; i--) {\n data.splice(connectionIndexArray[i],1);\n }\n }\n return data;\n}\n","import sketch from 'sketch';\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function getSourceObjectFromSelection(selection, direction){\n let sourceObjectID = selection.firstObject().objectID();\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction);\n }\n }\n return sourceObjectID;\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){\n \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let sourceObjectID;\n\n if(direction == \"Right\"){\n if(firstObjectAbsPos.x <= secondObjectAbsPos.x){ // We need to get the doc position\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.y <= secondObjectAbsPos.y){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Left\"){\n if(firstObjectAbsPos.x <= secondObjectAbsPos.x){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n if(direction == \"Up\"){\n if(firstObjectAbsPos.y <= secondObjectAbsPos.y){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n return sourceObjectID;\n}","import sketch from 'sketch';\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function checkForGroup(groupName) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n \n return currentGroup;\n}\n\nexport function addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\");\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nexport function addToConditionGroup(condition, x, y) {\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n \n log(\"Arr group \"+arGroupX)\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2 + arGroupX;\n condition.frame.y = y - condition.frame.height / 2 + arGroupY;\n let Group = require(\"sketch/dom\").Group;\n let group = new Group({\n parent: currentParentGroup,\n name: \"Conditions\",\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n }","import sketch from 'sketch';\nlet document = sketch.fromNative(context.document);\n\nexport function deleteLine(lineID){\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\n\nexport function styleLine(line, style){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey));\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/createArrow.js","webpack://exports/./src/draw.js","webpack://exports/./src/script.js","webpack://exports/./src/updateArrow.js","webpack://exports/./src/utilities/conditions.js","webpack://exports/./src/utilities/data.js","webpack://exports/./src/utilities/getSourceObject.js","webpack://exports/./src/utilities/groups.js","webpack://exports/./src/utilities/lines.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["Settings","require","document","sketch","fromNative","context","createArrow","firstObjectID","secondObjectID","style","type","direction","conditionID","isCondition","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","firstObject","secondObject","condition","line","objectID","getLayerWithID","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","sourceObjectID","childObjectID","sourceObject","childObject","settingForKey","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","UI","docData","documentData","currentParentGroup","currentPage","currentArtboard","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","log","updateCondition","addCondition","styleLine","addToArrowsGroup","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","currentGroup","checkForGroup","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","layers","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","pluginKey","pluginData","connectionsData","command","valueForKey_onLayer_forPluginIdentifier","getConnectionsData","createAutoArrow","create","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","autoUpdateSelectedArrows","a","selection","count","class","getSourceObjectFromSelection","connectionIndex","g","String","index","length","push","message","deleteLine","deleteCondition","deleteConnectionFromData","setValue_forKey_onLayer_forPluginIdentifier","updateSelectedArrows","update","updateArtboardArrows","updateAllArrows","deleteSelectedArrows","deleteArtboardArrows","deleteAllArrows","level","isUpdate","newConnectionsData","firstObjectArtboard","secondObjectArtboard","i","updateArrow","sketchObject","parentArtboard","lineID","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","getImportableSymbolReferencesForDocument","name","includes","alert","symbolMaster","import","createNewInstance","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","fixGeometryWithOptions","id","conditionObject","selectedGroup","remove","dataArray","connectionIndexArray","data","splice","defineSourceObject","groupName","addLayers","Group","group","locked","moveToBack","adjustToFit","lineObject","localStyle","getLayerStyles","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","thickness","endMarkerType","allStyles","allLayerStyles","styles"],"mappings":";;;;;;AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;;;;;;;AClFA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;;AAEA,IAAIA,QAAQ,GAAGC,mBAAO,CAAC,wCAAD,CAAtB;;AACA,IAAIC,QAAQ,GAAGC,6CAAM,CAACC,UAAP,CAAkBC,OAAO,CAACH,QAA1B,CAAf,C,CAEA;;AAEO,SAASI,WAAT,CAAqBC,aAArB,EAAoCC,cAApC,EAAoDC,KAApD,EAA2DC,IAA3D,EAAiEC,SAAjE,EAA4EC,WAA5E,EAAyFC,WAAzF,EAAsG;AAAG;AAC9G,MAAIC,cAAc,GAAGH,SAAS,IAAI,MAAb,GAAsBI,YAAY,CAACR,aAAD,EAAgBC,cAAhB,CAAlC,GAAoEG,SAAzF,CAD2G,CAG3G;;AACAK,eAAa,CAACT,aAAD,EAAgBC,cAAhB,EAAgCM,cAAhC,CAAb;AACAG,gBAAc,CAACV,aAAD,EAAgBC,cAAhB,EAAgCM,cAAhC,CAAd,CAL2G,CAO3G;;AACA,MAAII,KAAK,GAAGC,+DAAc,CAACZ,aAAD,EAAgBC,cAAhB,EAAgCC,KAAhC,EAAuCC,IAAvC,EAA6CI,cAA7C,EAA6DF,WAA7D,EAA0EC,WAA1E,CAA1B,CAR2G,CAU3G;;AACA,MAAIO,UAAU,GAAG;AACfC,eAAW,EAAGd,aADC;AAEfe,gBAAY,EAAGd,cAFA;AAGfC,SAAK,EAAGS,KAAK,CAACT,KAHC;AAIfc,aAAS,EAAGL,KAAK,CAACN,WAJH;AAKfC,eAAW,EAAGA,WALC;AAMfH,QAAI,EAAGQ,KAAK,CAACR,IANE;AAOfC,aAAS,EAAEG,cAPI;AAQfU,QAAI,EAAGN,KAAK,CAACM,IAAN,CAAWC,QAAX;AARQ,GAAjB;AAUA,SAAOL,UAAP;AACD;;AAED,SAASL,YAAT,CAAsBR,aAAtB,EAAqCC,cAArC,EAAoD;AAAE;AACpD;AACA,MAAMa,WAAW,GAAGnB,QAAQ,CAACwB,cAAT,CAAwBnB,aAAxB,CAApB;AACA,MAAMe,YAAY,GAAGpB,QAAQ,CAACwB,cAAT,CAAwBlB,cAAxB,CAArB;AACA,MAAMmB,eAAe,GAAGN,WAAW,CAACO,KAAZ,CAAkBC,CAAlB,GAAoBR,WAAW,CAACO,KAAZ,CAAkBE,KAAlB,GAAwB,CAApE;AACA,MAAMC,eAAe,GAAGV,WAAW,CAACO,KAAZ,CAAkBI,CAAlB,GAAoBX,WAAW,CAACO,KAAZ,CAAkBK,MAAlB,GAAyB,CAArE;AACA,MAAMC,gBAAgB,GAAGZ,YAAY,CAACM,KAAb,CAAmBC,CAAnB,GAAqBP,YAAY,CAACM,KAAb,CAAmBE,KAAnB,GAAyB,CAAvE;AACA,MAAMK,gBAAgB,GAAGb,YAAY,CAACM,KAAb,CAAmBI,CAAnB,GAAqBV,YAAY,CAACM,KAAb,CAAmBK,MAAnB,GAA0B,CAAxE;AAEA,MAAMG,KAAK,GAAGT,eAAe,GAAGO,gBAAhC;AACA,MAAMG,KAAK,GAAGN,eAAe,GAAGI,gBAAhC;AACA,MAAMG,QAAQ,GAAGC,IAAI,CAACC,GAAL,CAASJ,KAAT,CAAjB;AACA,MAAMK,QAAQ,GAAGF,IAAI,CAACC,GAAL,CAASH,KAAT,CAAjB;AACA,MAAI1B,SAAJ;;AAEA,MAAGuB,gBAAgB,GAAGP,eAAtB,EAAsC;AACpC;AACA,QAAGQ,gBAAgB,GAAGJ,eAAtB,EAAsC;AACpC;AACApB,eAAS,GAAGyB,KAAK,GAAGC,KAAR,GAAgB,MAAhB,GAAyB,OAArC;AACD,KAHD,MAGO;AACL;AACA1B,eAAS,GAAG2B,QAAQ,GAAGG,QAAX,GAAsB,OAAtB,GAAgC,IAA5C;AACD;AACF,GATD,MASO;AACL;AACA,QAAGN,gBAAgB,GAAGJ,eAAtB,EAAsC;AACpC;AACApB,eAAS,GAAG2B,QAAQ,GAAGG,QAAX,GAAsB,MAAtB,GAA+B,MAA3C;AACD,KAHD,MAGO;AACL;AACA9B,eAAS,GAAGyB,KAAK,GAAGC,KAAR,GAAgB,MAAhB,GAAyB,IAArC;AACD;AACF;;AAED,SAAO1B,SAAP;AACD;;AAED,SAASK,aAAT,CAAuB0B,cAAvB,EAAuCC,aAAvC,EAAsDhC,SAAtD,EAAgE;AAC9D,MAAIiC,YAAY,GAAG1C,QAAQ,CAACwB,cAAT,CAAwBgB,cAAxB,CAAnB;AACA,MAAIG,WAAW,GAAG3C,QAAQ,CAACwB,cAAT,CAAwBiB,aAAxB,CAAlB;;AAEA,MAAG3C,QAAQ,CAAC8C,aAAT,CAAuB,cAAvB,KAA0C9C,QAAQ,CAAC8C,aAAT,CAAuB,cAAvB,KAA0C,CAAvF,EAAyF;AACvF,QAAIC,cAAc,GAAG/C,QAAQ,CAAC8C,aAAT,CAAuB,cAAvB,CAArB;;AAEA,QAAGnC,SAAS,IAAI,OAAhB,EAAwB;AACtBkC,iBAAW,CAACjB,KAAZ,CAAkBC,CAAlB,GAAsBe,YAAY,CAAChB,KAAb,CAAmBC,CAAnB,GAAuBe,YAAY,CAAChB,KAAb,CAAmBE,KAA1C,GAAkDiB,cAAxE;AACD;;AAED,QAAGpC,SAAS,IAAI,MAAhB,EAAuB;AACrBkC,iBAAW,CAACjB,KAAZ,CAAkBI,CAAlB,GAAsBY,YAAY,CAAChB,KAAb,CAAmBI,CAAnB,GAAuBY,YAAY,CAAChB,KAAb,CAAmBK,MAA1C,GAAmDc,cAAzE;AACD;;AAED,QAAGpC,SAAS,IAAI,MAAhB,EAAuB;AACrBkC,iBAAW,CAACjB,KAAZ,CAAkBC,CAAlB,GAAsBe,YAAY,CAAChB,KAAb,CAAmBC,CAAnB,GAAuBgB,WAAW,CAACjB,KAAZ,CAAkBE,KAAzC,GAAiDiB,cAAvE;AACD;;AAED,QAAGpC,SAAS,IAAI,IAAhB,EAAqB;AACnBkC,iBAAW,CAACjB,KAAZ,CAAkBI,CAAlB,GAAsBY,YAAY,CAAChB,KAAb,CAAmBI,CAAnB,GAAuBa,WAAW,CAACjB,KAAZ,CAAkBK,MAAzC,GAAkDc,cAAxE;AACD;AACF;AACF;;AAED,SAAS9B,cAAT,CAAwByB,cAAxB,EAAwCC,aAAxC,EAAuDhC,SAAvD,EAAiE;AAC/D,MAAIiC,YAAY,GAAG1C,QAAQ,CAACwB,cAAT,CAAwBgB,cAAxB,CAAnB;AACA,MAAIG,WAAW,GAAG3C,QAAQ,CAACwB,cAAT,CAAwBiB,aAAxB,CAAlB;AACA,MAAIK,UAAJ,EAAgBC,SAAhB,EAA2BC,UAA3B,EAAuCC,SAAvC,EAAkDC,IAAlD;;AAEA,MAAGpD,QAAQ,CAAC8C,aAAT,CAAuB,WAAvB,CAAH,EAAuC;AACrC,QAAG9C,QAAQ,CAAC8C,aAAT,CAAuB,WAAvB,KAAuC,IAA1C,EAA+C;AAC7C;AAEA,UAAGnC,SAAS,IAAI,OAAb,IAAwBA,SAAS,IAAI,MAAxC,EAA+C;AAC7CqC,kBAAU,GAAGJ,YAAY,CAAChB,KAAb,CAAmBI,CAAnB,GAAuBY,YAAY,CAAChB,KAAb,CAAmBK,MAAnB,GAA0B,CAA9D;AACAgB,iBAAS,GAAGJ,WAAW,CAACjB,KAAZ,CAAkBI,CAAlB,GAAsBa,WAAW,CAACjB,KAAZ,CAAkBK,MAAlB,GAAyB,CAA3D;AACAmB,YAAI,GAAGJ,UAAU,GAAGC,SAApB;;AACA,YAAGG,IAAI,GAAG,CAAC,CAAR,IAAaA,IAAI,GAAG,CAAvB,EAAyB;AAACP,qBAAW,CAACjB,KAAZ,CAAkBI,CAAlB,GAAsBa,WAAW,CAACjB,KAAZ,CAAkBI,CAAlB,GAAsBoB,IAA5C;AAAkD;AAC7E;;AAED,UAAGzC,SAAS,IAAI,MAAb,IAAuBA,SAAS,IAAI,IAAvC,EAA4C;AAC1CuC,kBAAU,GAAGN,YAAY,CAAChB,KAAb,CAAmBC,CAAnB,GAAuBe,YAAY,CAAChB,KAAb,CAAmBE,KAAnB,GAAyB,CAA7D;AACAqB,iBAAS,GAAGN,WAAW,CAACjB,KAAZ,CAAkBC,CAAlB,GAAsBgB,WAAW,CAACjB,KAAZ,CAAkBE,KAAlB,GAAwB,CAA1D;AACAsB,YAAI,GAAGF,UAAU,GAAGC,SAApB;;AACA,YAAGC,IAAI,GAAG,CAAC,CAAR,IAAaA,IAAI,GAAG,CAAvB,EAAyB;AAACP,qBAAW,CAACjB,KAAZ,CAAkBC,CAAlB,GAAsBgB,WAAW,CAACjB,KAAZ,CAAkBC,CAAlB,GAAsBuB,IAA5C;AAAkD;AAC7E;AACF;AACF;AACF,C;;;;;;;;;;;;ACvHD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;;AACA,IAAIpD,QAAQ,GAAGC,mBAAO,CAAC,wCAAD,CAAtB;;AACA,IAAIoD,EAAE,GAAGpD,mBAAO,CAAC,4BAAD,CAAhB;;AAEA,IAAIC,QAAQ,GAAGC,6CAAM,CAACC,UAAP,CAAkBC,OAAO,CAACH,QAA1B,CAAf;AACA,IAAIoD,OAAO,GAAGjD,OAAO,CAACH,QAAR,CAAiBqD,YAAjB,EAAd;AACA,IAAIC,kBAAkB,GAAGF,OAAO,CAACG,WAAR,GAAsBC,eAAtB,MAA2CJ,OAAO,CAACG,WAAR,EAApE,C,CAGA;;AAEO,SAAStC,cAAT,CAAwBZ,aAAxB,EAAuCC,cAAvC,EAAuDC,KAAvD,EAA8DC,IAA9D,EAAoEI,cAApE,EAAoFF,WAApF,EAAiGC,WAAjG,EAA6G;AAAE;AACpH;AACA,MAAIQ,WAAW,GAAGnB,QAAQ,CAACwB,cAAT,CAAwBnB,aAAxB,CAAlB;AACA,MAAIe,YAAY,GAAGpB,QAAQ,CAACwB,cAAT,CAAwBlB,cAAxB,CAAnB;AACA,MAAImD,aAAa,GAAGC,gBAAgB,CAACvC,WAAD,EAAcC,YAAd,EAA4BR,cAA5B,CAApC;AACA,MAAIM,UAAU,GAAG;AACfI,QAAI,EAAE,EADS;AAEfZ,eAAW,EAAE,EAFE;AAGfF,QAAI,EAAE,EAHS;AAIfD,SAAK,EAAE,EAJQ,CAOjB;;AAPiB,GAAjB;AAQAW,YAAU,CAACV,IAAX,GAAkBA,IAAI,IAAI,IAAR,GAAeV,QAAQ,CAAC8C,aAAT,CAAuB,WAAvB,CAAf,GAAqDpC,IAAvE;;AACA,MAAGU,UAAU,CAACV,IAAX,IAAmB,QAAnB,IAA+BU,UAAU,CAACV,IAAX,IAAmB,IAArD,EAA0D;AAAEU,cAAU,CAACI,IAAX,GAAkBqC,cAAc,CAACF,aAAa,CAACG,cAAf,EAA+BH,aAAa,CAACI,cAA7C,EAA6DJ,aAAa,CAACK,UAA3E,EAAuFL,aAAa,CAACM,UAArG,EAAiHN,aAAa,CAACO,eAA/H,EAAgJP,aAAa,CAACQ,eAA9J,EAA+KrD,cAA/K,CAAhC;AAAgO;;AAC5R,MAAGM,UAAU,CAACV,IAAX,IAAmB,UAAtB,EAAiC;AAAEU,cAAU,CAACI,IAAX,GAAkB4C,gBAAgB,CAACT,aAAa,CAACG,cAAf,EAA+BH,aAAa,CAACI,cAA7C,EAA6DJ,aAAa,CAACO,eAA3E,EAA4FP,aAAa,CAACQ,eAA1G,EAA2HrD,cAA3H,CAAlC;AAA8K;;AACjN,MAAGM,UAAU,CAACV,IAAX,IAAmB,QAAtB,EAA+B;AAAEU,cAAU,CAACI,IAAX,GAAkB6C,cAAc,CAACV,aAAa,CAACG,cAAf,EAA+BH,aAAa,CAACI,cAA7C,EAA6DJ,aAAa,CAACO,eAA3E,EAA4FP,aAAa,CAACQ,eAA1G,EAA2HrD,cAA3H,CAAhC;AAA4K,GAhB3F,CAmBlH;;;AACA,MAAGD,WAAW,IAAI,IAAlB,EAAuB;AACrB,QAAGX,QAAQ,CAACwB,cAAT,CAAwBd,WAAxB,CAAH,EAAwC;AACtC0D,SAAG,CAAC,cAAD,CAAH;AACAlD,gBAAU,CAACR,WAAX,GAAyB2D,gFAAe,CAAC3D,WAAD,EAAc+C,aAAa,CAACK,UAA5B,EAAwCL,aAAa,CAACM,UAAtD,CAAxC;AACD,KAHD,MAGO;AACLK,SAAG,CAAC,kBAAD,CAAH;AACAlD,gBAAU,CAACR,WAAX,GAAyB4D,6EAAY,CAAC,MAAD,EAASb,aAAa,CAACK,UAAvB,EAAmCL,aAAa,CAACM,UAAjD,CAArC;AACD;AACF,GARD,MAQO;AACL7C,cAAU,CAACR,WAAX,GAAyB,IAAzB;AACD,GA9BiH,CAgClH;;;AACAQ,YAAU,CAACX,KAAX,GAAmBgE,uEAAS,CAACrD,UAAU,CAACI,IAAZ,EAAkBf,KAAlB,CAA5B,CAjCkH,CAmClH;;AACAiE,+EAAgB,CAACtD,UAAU,CAACI,IAAZ,CAAhB;AAEA,SAAOJ,UAAP;AACD,C,CAED;;AAEA,SAASwC,gBAAT,CAA0BvC,WAA1B,EAAuCC,YAAvC,EAAqDX,SAArD,EAA+D;AAAE;AAE7D,MAAIgE,iBAAiB,GAAGtD,WAAW,CAACO,KAAZ,CAAkBgD,WAAlB,CAA8B;AAACC,QAAI,EAAExD,WAAW,CAACyD,MAAnB;AAA2BC,MAAE,EAAEvB;AAA/B,GAA9B,CAAxB;AACA,MAAIwB,kBAAkB,GAAG1D,YAAY,CAACM,KAAb,CAAmBgD,WAAnB,CAA+B;AAACC,QAAI,EAAEvD,YAAY,CAACwD,MAApB;AAA4BC,MAAE,EAAEvB;AAAhC,GAA/B,CAAzB;AACA,MAAIyB,YAAY,GAAGC,0EAAa,CAAC,QAAD,CAAhC;AACA,MAAI9C,KAAJ,EAAWC,KAAX;;AAEA,MAAG4C,YAAH,EAAgB;AACd7C,SAAK,GAAG6C,YAAY,CAACrD,KAAb,GAAqBC,CAArB,EAAR;AACAQ,SAAK,GAAG4C,YAAY,CAACrD,KAAb,GAAqBI,CAArB,EAAR;AACD,GAHD,MAGO;AACLI,SAAK,GAAG,CAAR;AACAC,SAAK,GAAG,CAAR;AACD;;AAED,MAAIsB,aAAa,GAAG;AAClBG,kBAAc,EAAE,IADE;AAElBC,kBAAc,EAAE,IAFE;AAGlBG,mBAAe,EAAE,IAHC;AAIlBC,mBAAe,EAAE,IAJC;AAKlBH,cAAU,EAAE,IALM;AAMlBC,cAAU,EAAE,IANM,CASpB;;AAToB,GAApB;;AAUA,MAAGtD,SAAS,IAAI,IAAhB,EAAqB;AACnB;AACAgD,iBAAa,CAACG,cAAd,GAA+Ba,iBAAiB,CAAC9C,CAAlB,GAAoB8C,iBAAiB,CAAC7C,KAAlB,GAAwB,CAA5C,GAA8CM,KAA7E;AACAuB,iBAAa,CAACI,cAAd,GAA+BY,iBAAiB,CAAC3C,CAAlB,GAAoBK,KAAnD,CAHmB,CAKnB;;AACAsB,iBAAa,CAACO,eAAd,GAAgCc,kBAAkB,CAACnD,CAAnB,GAAqBmD,kBAAkB,CAAClD,KAAnB,GAAyB,CAA9C,GAAgDM,KAAhF;AACAuB,iBAAa,CAACQ,eAAd,GAAgCa,kBAAkB,CAAChD,CAAnB,GAAqBgD,kBAAkB,CAAC/C,MAAxC,GAA+CI,KAA/E,CAPmB,CASnB;;AACAsB,iBAAa,CAACK,UAAd,GAA2B,CAACL,aAAa,CAACG,cAAd,GAA+BH,aAAa,CAACO,eAA9C,IAA+D,CAA1F;AACAP,iBAAa,CAACM,UAAd,GAA2B,CAACN,aAAa,CAACI,cAAd,GAA+BJ,aAAa,CAACQ,eAA9C,IAA+D,CAA1F;AACD;;AAED,MAAGxD,SAAS,IAAI,OAAhB,EAAwB;AACtB;AACAgD,iBAAa,CAACG,cAAd,GAA+Ba,iBAAiB,CAAC9C,CAAlB,GAAoB8C,iBAAiB,CAAC7C,KAAtC,GAA4CM,KAA3E;AACAuB,iBAAa,CAACI,cAAd,GAA+BY,iBAAiB,CAAC3C,CAAlB,GAAoB2C,iBAAiB,CAAC1C,MAAlB,GAAyB,CAA7C,GAA+CI,KAA9E,CAHsB,CAKtB;;AACAsB,iBAAa,CAACO,eAAd,GAAgCc,kBAAkB,CAACnD,CAAnB,GAAqBO,KAArD;AACAuB,iBAAa,CAACQ,eAAd,GAAgCa,kBAAkB,CAAChD,CAAnB,GAAqBgD,kBAAkB,CAAC/C,MAAnB,GAA0B,CAA/C,GAAiDI,KAAjF,CAPsB,CAStB;;AACAsB,iBAAa,CAACK,UAAd,GAA2B,CAACL,aAAa,CAACG,cAAd,GAA+BH,aAAa,CAACO,eAA9C,IAA+D,CAA1F;AACAP,iBAAa,CAACM,UAAd,GAA2B,CAACN,aAAa,CAACI,cAAd,GAA+BJ,aAAa,CAACQ,eAA9C,IAA+D,CAA1F;AACD;;AAED,MAAGxD,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACAgD,iBAAa,CAACG,cAAd,GAA+Ba,iBAAiB,CAAC9C,CAAlB,GAAoB8C,iBAAiB,CAAC7C,KAAlB,GAAwB,CAA5C,GAA8CM,KAA7E;AACAuB,iBAAa,CAACI,cAAd,GAA+BY,iBAAiB,CAAC3C,CAAlB,GAAoB2C,iBAAiB,CAAC1C,MAAtC,GAA6CI,KAA5E,CAHqB,CAKrB;;AACAsB,iBAAa,CAACO,eAAd,GAAgCc,kBAAkB,CAACnD,CAAnB,GAAqBmD,kBAAkB,CAAClD,KAAnB,GAAyB,CAA9C,GAAgDM,KAAhF;AACAuB,iBAAa,CAACQ,eAAd,GAAgCa,kBAAkB,CAAChD,CAAnB,GAAqBK,KAArD,CAPqB,CASrB;;AACAsB,iBAAa,CAACK,UAAd,GAA2B,CAACL,aAAa,CAACG,cAAd,GAA+BH,aAAa,CAACO,eAA9C,IAA+D,CAA1F;AACAP,iBAAa,CAACM,UAAd,GAA2B,CAACN,aAAa,CAACI,cAAd,GAA+BJ,aAAa,CAACQ,eAA9C,IAA+D,CAA1F;AACD;;AAED,MAAGxD,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACAgD,iBAAa,CAACG,cAAd,GAA+Ba,iBAAiB,CAAC9C,CAAlB,GAAoBO,KAAnD;AACAuB,iBAAa,CAACI,cAAd,GAA+BY,iBAAiB,CAAC3C,CAAlB,GAAoB2C,iBAAiB,CAAC1C,MAAlB,GAAyB,CAA7C,GAA+CI,KAA9E,CAHqB,CAKrB;;AACAsB,iBAAa,CAACO,eAAd,GAAgCc,kBAAkB,CAACnD,CAAnB,GAAqBmD,kBAAkB,CAAClD,KAAxC,GAA8CM,KAA9E;AACAuB,iBAAa,CAACQ,eAAd,GAAgCa,kBAAkB,CAAChD,CAAnB,GAAqBgD,kBAAkB,CAAC/C,MAAnB,GAA0B,CAA/C,GAAiDI,KAAjF,CAPqB,CASrB;;AACAsB,iBAAa,CAACK,UAAd,GAA2B,CAACL,aAAa,CAACG,cAAd,GAA+BH,aAAa,CAACO,eAA9C,IAA+D,CAA1F;AACAP,iBAAa,CAACM,UAAd,GAA2B,CAACN,aAAa,CAACI,cAAd,GAA+BJ,aAAa,CAACQ,eAA9C,IAA+D,CAA1F;AACD;;AAED,SAAOR,aAAP;AACH,C,CAED;;;AAEA,SAASE,cAAT,CAAwBC,cAAxB,EAAwCC,cAAxC,EAAwDC,UAAxD,EAAoEC,UAApE,EAAgFC,eAAhF,EAAiGC,eAAjG,EAAkHxD,SAAlH,EAA4H;AAAE;AAC1H,MAAIwE,IAAI,GAAGC,YAAY,CAACC,UAAb,EAAX;;AAEA,MAAG1E,SAAS,IAAI,IAAhB,EAAqB;AACnB;AACAwE,QAAI,CAACG,WAAL,CAAiBC,WAAW,CAACzB,cAAD,EAAiBC,cAAjB,CAA5B;AACAoB,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACzB,cAAD,EAAiBG,UAAjB,CAA5B;AACAkB,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACrB,eAAD,EAAkBD,UAAlB,CAA5B;AACAkB,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACrB,eAAD,EAAkBC,eAAlB,CAA5B;AACD;;AAED,MAAGxD,SAAS,IAAI,OAAhB,EAAwB;AACtB;AACAwE,QAAI,CAACG,WAAL,CAAiBC,WAAW,CAACzB,cAAD,EAAiBC,cAAjB,CAA5B;AACAoB,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACvB,UAAD,EAAaD,cAAb,CAA5B;AACAoB,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACvB,UAAD,EAAaG,eAAb,CAA5B;AACAgB,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACrB,eAAD,EAAkBC,eAAlB,CAA5B;AACD;;AAED,MAAGxD,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACAwE,QAAI,CAACG,WAAL,CAAiBC,WAAW,CAACzB,cAAD,EAAiBC,cAAjB,CAA5B;AACAoB,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACzB,cAAD,EAAiBG,UAAjB,CAA5B;AACAkB,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACrB,eAAD,EAAkBD,UAAlB,CAA5B;AACAkB,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACrB,eAAD,EAAkBC,eAAlB,CAA5B;AACD;;AAED,MAAGxD,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACAwE,QAAI,CAACG,WAAL,CAAiBC,WAAW,CAACzB,cAAD,EAAiBC,cAAjB,CAA5B;AACAoB,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACvB,UAAD,EAAaD,cAAb,CAA5B;AACAoB,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACvB,UAAD,EAAaG,eAAb,CAA5B;AACAgB,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACrB,eAAD,EAAkBC,eAAlB,CAA5B;AACD;;AAED,MAAI3C,IAAI,GAAGiE,YAAY,CAACC,aAAb,CAA2BC,MAAM,CAACC,kBAAP,CAA0BT,IAA1B,CAA3B,CAAX;AACA,MAAIU,MAAM,GAAGrE,IAAI,CAACsE,MAAL,GAAczE,WAAd,GAA4BwE,MAA5B,EAAb;AACAA,QAAM,CAAC,CAAD,CAAN,CAAUE,YAAV,GAAyB,EAAzB;AACAF,QAAM,CAAC,CAAD,CAAN,CAAUE,YAAV,GAAyB,EAAzB;AACAvE,MAAI,CAACwE,OAAL,CAAa,cAAb;AAEA,SAAOxE,IAAP;AACH;;AAED,SAAS4C,gBAAT,CAA0BN,cAA1B,EAA0CC,cAA1C,EAA0DG,eAA1D,EAA2EC,eAA3E,EAA4FxD,SAA5F,EAAsG;AAAE;AACpG,MAAIwE,IAAI,GAAGC,YAAY,CAACC,UAAb,EAAX;;AAEA,MAAG1E,SAAS,IAAI,IAAhB,EAAqB;AACnBwE,QAAI,CAACG,WAAL,CAAiBC,WAAW,CAACzB,cAAD,EAAgBC,cAAhB,CAA5B;AACAoB,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACrB,eAAD,EAAiBC,eAAjB,CAA5B;AACD;;AAED,MAAGxD,SAAS,IAAI,OAAhB,EAAwB;AACtBwE,QAAI,CAACG,WAAL,CAAiBC,WAAW,CAACzB,cAAD,EAAgBC,cAAhB,CAA5B;AACAoB,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACrB,eAAD,EAAiBC,eAAjB,CAA5B;AACD;;AAED,MAAGxD,SAAS,IAAI,MAAhB,EAAuB;AACrBwE,QAAI,CAACG,WAAL,CAAiBC,WAAW,CAACzB,cAAD,EAAgBC,cAAhB,CAA5B;AACAoB,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACrB,eAAD,EAAiBC,eAAjB,CAA5B;AACD;;AAED,MAAGxD,SAAS,IAAI,MAAhB,EAAuB;AACrBwE,QAAI,CAACG,WAAL,CAAiBC,WAAW,CAACzB,cAAD,EAAgBC,cAAhB,CAA5B;AACAoB,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACrB,eAAD,EAAiBC,eAAjB,CAA5B;AACD;;AAED,MAAI3C,IAAI,GAAGiE,YAAY,CAACC,aAAb,CAA2BC,MAAM,CAACC,kBAAP,CAA0BT,IAA1B,CAA3B,CAAX;AACA3D,MAAI,CAACwE,OAAL,CAAa,gBAAb;AAEA,SAAOxE,IAAP;AACH;;AAED,SAAS6C,cAAT,CAAwBP,cAAxB,EAAwCC,cAAxC,EAAwDG,eAAxD,EAAyEC,eAAzE,EAA0FxD,SAA1F,EAAoG;AAAE;AAClG,MAAIwE,IAAI,GAAGC,YAAY,CAACC,UAAb,EAAX;AACA,MAAI7D,IAAJ;;AAEA,MAAGb,SAAS,IAAI,IAAhB,EAAqB;AACnB;AACAwE,QAAI,CAACG,WAAL,CAAiBC,WAAW,CAACzB,cAAD,EAAgBC,cAAhB,CAA5B;AACAoB,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACrB,eAAD,EAAiBC,eAAjB,CAA5B,EAHmB,CAKnB;;AACA3C,QAAI,GAAGiE,YAAY,CAACC,aAAb,CAA2BC,MAAM,CAACC,kBAAP,CAA0BT,IAA1B,CAA3B,CAAP;AACA,QAAIU,MAAM,GAAGrE,IAAI,CAACsE,MAAL,GAAczE,WAAd,GAA4BwE,MAA5B,EAAb;AAEAA,UAAM,CAAC,CAAD,CAAN,CAAUI,SAAV,GAAsB,CAAtB;AACAJ,UAAM,CAAC,CAAD,CAAN,CAAUI,SAAV,GAAsB,CAAtB;AACAJ,UAAM,CAAC,CAAD,CAAN,CAAUK,YAAV,GAAyB,IAAzB;AACAL,UAAM,CAAC,CAAD,CAAN,CAAUM,UAAV,GAAuB,IAAvB;;AAEA,QAAGrC,cAAc,GAACI,eAAlB,EAAkC;AAChC2B,YAAM,CAAC,CAAD,CAAN,CAAUO,SAAV,GAAsB;AAACvE,SAAC,EAAE,CAAJ;AAAOG,SAAC,EAAE;AAAV,OAAtB;AACA6D,YAAM,CAAC,CAAD,CAAN,CAAUQ,OAAV,GAAoB;AAACxE,SAAC,EAAE,CAAC,GAAL;AAAUG,SAAC,EAAE;AAAb,OAApB;AAEA6D,YAAM,CAAC,CAAD,CAAN,CAAUO,SAAV,GAAsB;AAACvE,SAAC,EAAE,CAAJ;AAAOG,SAAC,EAAE;AAAV,OAAtB;AACA6D,YAAM,CAAC,CAAD,CAAN,CAAUQ,OAAV,GAAoB;AAACxE,SAAC,EAAE,CAAJ;AAAOG,SAAC,EAAE;AAAV,OAApB;AACD,KAND,MAMO;AACL6D,YAAM,CAAC,CAAD,CAAN,CAAUO,SAAV,GAAsB;AAACvE,SAAC,EAAE,CAAJ;AAAOG,SAAC,EAAE;AAAV,OAAtB;AACA6D,YAAM,CAAC,CAAD,CAAN,CAAUQ,OAAV,GAAoB;AAACxE,SAAC,EAAE,CAAC,GAAL;AAAUG,SAAC,EAAC;AAAZ,OAApB;AAEA6D,YAAM,CAAC,CAAD,CAAN,CAAUO,SAAV,GAAsB;AAACvE,SAAC,EAAE,CAAJ;AAAOG,SAAC,EAAE;AAAV,OAAtB;AACA6D,YAAM,CAAC,CAAD,CAAN,CAAUQ,OAAV,GAAoB;AAACxE,SAAC,EAAE,CAAJ;AAAOG,SAAC,EAAE;AAAV,OAApB;AACD;AACF;;AAED,MAAGrB,SAAS,IAAI,OAAhB,EAAwB;AACtB;AACAwE,QAAI,CAACG,WAAL,CAAiBC,WAAW,CAACzB,cAAD,EAAgBC,cAAhB,CAA5B;AACAoB,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACrB,eAAD,EAAiBC,eAAjB,CAA5B,EAHsB,CAKtB;;AACA3C,QAAI,GAAGiE,YAAY,CAACC,aAAb,CAA2BC,MAAM,CAACC,kBAAP,CAA0BT,IAA1B,CAA3B,CAAP;;AACA,QAAIU,OAAM,GAAGrE,IAAI,CAACsE,MAAL,GAAczE,WAAd,GAA4BwE,MAA5B,EAAb;;AAEAA,WAAM,CAAC,CAAD,CAAN,CAAUI,SAAV,GAAsB,CAAtB;AACAJ,WAAM,CAAC,CAAD,CAAN,CAAUI,SAAV,GAAsB,CAAtB;AACAJ,WAAM,CAAC,CAAD,CAAN,CAAUK,YAAV,GAAyB,IAAzB;AACAL,WAAM,CAAC,CAAD,CAAN,CAAUM,UAAV,GAAuB,IAAvB;;AAEA,QAAGpC,cAAc,GAACI,eAAlB,EAAkC;AAChC0B,aAAM,CAAC,CAAD,CAAN,CAAUO,SAAV,GAAsB;AAACvE,SAAC,EAAE,GAAJ;AAASG,SAAC,EAAE;AAAZ,OAAtB;AACA6D,aAAM,CAAC,CAAD,CAAN,CAAUQ,OAAV,GAAoB;AAACxE,SAAC,EAAE,CAAC,GAAL;AAASG,SAAC,EAAC;AAAX,OAApB;AAEA6D,aAAM,CAAC,CAAD,CAAN,CAAUO,SAAV,GAAsB;AAACvE,SAAC,EAAE,CAAJ;AAAMG,SAAC,EAAE;AAAT,OAAtB;AACA6D,aAAM,CAAC,CAAD,CAAN,CAAUQ,OAAV,GAAoB;AAACxE,SAAC,EAAE,GAAJ;AAAQG,SAAC,EAAE;AAAX,OAApB;AACD,KAND,MAMO;AACL6D,aAAM,CAAC,CAAD,CAAN,CAAUO,SAAV,GAAsB;AAACvE,SAAC,EAAE,GAAJ;AAASG,SAAC,EAAE;AAAZ,OAAtB;AACA6D,aAAM,CAAC,CAAD,CAAN,CAAUQ,OAAV,GAAoB;AAACxE,SAAC,EAAE,CAAC,GAAL;AAASG,SAAC,EAAC;AAAX,OAApB;AAEA6D,aAAM,CAAC,CAAD,CAAN,CAAUO,SAAV,GAAsB;AAACvE,SAAC,EAAE,CAAJ;AAAMG,SAAC,EAAE;AAAT,OAAtB;AACA6D,aAAM,CAAC,CAAD,CAAN,CAAUQ,OAAV,GAAoB;AAACxE,SAAC,EAAE,GAAJ;AAAQG,SAAC,EAAE;AAAX,OAApB;AACD;AACF;;AAED,MAAGrB,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACAwE,QAAI,CAACG,WAAL,CAAiBC,WAAW,CAACzB,cAAD,EAAgBC,cAAhB,CAA5B;AACAoB,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACrB,eAAD,EAAiBC,eAAjB,CAA5B,EAHqB,CAKrB;;AACA3C,QAAI,GAAGiE,YAAY,CAACC,aAAb,CAA2BC,MAAM,CAACC,kBAAP,CAA0BT,IAA1B,CAA3B,CAAP;;AACA,QAAIU,QAAM,GAAGrE,IAAI,CAACsE,MAAL,GAAczE,WAAd,GAA4BwE,MAA5B,EAAb;;AAEAA,YAAM,CAAC,CAAD,CAAN,CAAUI,SAAV,GAAsB,CAAtB;AACAJ,YAAM,CAAC,CAAD,CAAN,CAAUI,SAAV,GAAsB,CAAtB;AACAJ,YAAM,CAAC,CAAD,CAAN,CAAUK,YAAV,GAAyB,IAAzB;AACAL,YAAM,CAAC,CAAD,CAAN,CAAUM,UAAV,GAAuB,IAAvB;;AAEA,QAAGrC,cAAc,GAACI,eAAlB,EAAkC;AAChC2B,cAAM,CAAC,CAAD,CAAN,CAAUO,SAAV,GAAsB;AAACvE,SAAC,EAAE,CAAJ;AAAOG,SAAC,EAAE;AAAV,OAAtB;AACA6D,cAAM,CAAC,CAAD,CAAN,CAAUQ,OAAV,GAAoB;AAACxE,SAAC,EAAE,CAAC,GAAL;AAASG,SAAC,EAAC;AAAX,OAApB;AAEA6D,cAAM,CAAC,CAAD,CAAN,CAAUO,SAAV,GAAsB;AAACvE,SAAC,EAAE,CAAJ;AAAMG,SAAC,EAAE;AAAT,OAAtB;AACA6D,cAAM,CAAC,CAAD,CAAN,CAAUQ,OAAV,GAAoB;AAACxE,SAAC,EAAE,CAAJ;AAAMG,SAAC,EAAE;AAAT,OAApB;AACD,KAND,MAMO;AACL6D,cAAM,CAAC,CAAD,CAAN,CAAUO,SAAV,GAAsB;AAACvE,SAAC,EAAE,CAAJ;AAAOG,SAAC,EAAE;AAAV,OAAtB;AACA6D,cAAM,CAAC,CAAD,CAAN,CAAUQ,OAAV,GAAoB;AAACxE,SAAC,EAAE,CAAC,GAAL;AAASG,SAAC,EAAC;AAAX,OAApB;AAEA6D,cAAM,CAAC,CAAD,CAAN,CAAUO,SAAV,GAAsB;AAACvE,SAAC,EAAE,CAAJ;AAAMG,SAAC,EAAE;AAAT,OAAtB;AACA6D,cAAM,CAAC,CAAD,CAAN,CAAUQ,OAAV,GAAoB;AAACxE,SAAC,EAAE,CAAJ;AAAMG,SAAC,EAAE;AAAT,OAApB;AACD;AACF;;AAED,MAAGrB,SAAS,IAAI,MAAhB,EAAuB;AACrB;AACAwE,QAAI,CAACG,WAAL,CAAiBC,WAAW,CAACzB,cAAD,EAAgBC,cAAhB,CAA5B;AACAoB,QAAI,CAACK,WAAL,CAAiBD,WAAW,CAACrB,eAAD,EAAiBC,eAAjB,CAA5B,EAHqB,CAKrB;;AACA3C,QAAI,GAAGiE,YAAY,CAACC,aAAb,CAA2BC,MAAM,CAACC,kBAAP,CAA0BT,IAA1B,CAA3B,CAAP;;AACA,QAAIU,QAAM,GAAGrE,IAAI,CAACsE,MAAL,GAAczE,WAAd,GAA4BwE,MAA5B,EAAb;;AAEAA,YAAM,CAAC,CAAD,CAAN,CAAUI,SAAV,GAAsB,CAAtB;AACAJ,YAAM,CAAC,CAAD,CAAN,CAAUI,SAAV,GAAsB,CAAtB;AACAJ,YAAM,CAAC,CAAD,CAAN,CAAUK,YAAV,GAAyB,IAAzB;AACAL,YAAM,CAAC,CAAD,CAAN,CAAUM,UAAV,GAAuB,IAAvB;;AAEA,QAAGpC,cAAc,GAACI,eAAlB,EAAkC;AAChC0B,cAAM,CAAC,CAAD,CAAN,CAAUO,SAAV,GAAsB;AAACvE,SAAC,EAAE,GAAJ;AAASG,SAAC,EAAE;AAAZ,OAAtB;AACA6D,cAAM,CAAC,CAAD,CAAN,CAAUQ,OAAV,GAAoB;AAACxE,SAAC,EAAE,CAAC,GAAL;AAASG,SAAC,EAAC;AAAX,OAApB;AAEA6D,cAAM,CAAC,CAAD,CAAN,CAAUO,SAAV,GAAsB;AAACvE,SAAC,EAAE,CAAJ;AAAMG,SAAC,EAAE;AAAT,OAAtB;AACA6D,cAAM,CAAC,CAAD,CAAN,CAAUQ,OAAV,GAAoB;AAACxE,SAAC,EAAE,GAAJ;AAAQG,SAAC,EAAE;AAAX,OAApB;AACD,KAND,MAMO;AACL6D,cAAM,CAAC,CAAD,CAAN,CAAUO,SAAV,GAAsB;AAACvE,SAAC,EAAE,GAAJ;AAASG,SAAC,EAAE;AAAZ,OAAtB;AACA6D,cAAM,CAAC,CAAD,CAAN,CAAUQ,OAAV,GAAoB;AAACxE,SAAC,EAAE,CAAC,GAAL;AAASG,SAAC,EAAC;AAAX,OAApB;AAEA6D,cAAM,CAAC,CAAD,CAAN,CAAUO,SAAV,GAAsB;AAACvE,SAAC,EAAE,CAAJ;AAAMG,SAAC,EAAE;AAAT,OAAtB;AACA6D,cAAM,CAAC,CAAD,CAAN,CAAUQ,OAAV,GAAoB;AAACxE,SAAC,EAAE,GAAJ;AAAQG,SAAC,EAAE;AAAX,OAApB;AACD;AACF,GAtH+F,CAwHhG;;;AACAR,MAAI,CAACwE,OAAL,CAAa,cAAb;AAEA,SAAOxE,IAAP;AACH,C;;;;;;;;;;;;ACpVD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAI6B,EAAE,GAAGpD,mBAAO,CAAC,4BAAD,CAAhB;;AACA,IAAID,QAAQ,GAAGC,mBAAO,CAAC,wCAAD,CAAtB;;AAEA,IAAMqG,SAAS,GAAG,YAAlB;AACA,IAAIpG,QAAJ;AAEA,IAAIoD,OAAJ,EAAaiD,UAAb,EAAyB/C,kBAAzB,EAA6CgD,eAA7C;;AACA,IAAGnG,OAAO,CAACH,QAAX,EAAoB;AAClBA,UAAQ,GAAGC,6CAAM,CAACC,UAAP,CAAkBC,OAAO,CAACH,QAA1B,CAAX;AACAoD,SAAO,GAAGjD,OAAO,CAACH,QAAR,CAAiBqD,YAAjB,EAAV;AACAgD,YAAU,GAAGlG,OAAO,CAACoG,OAAR,CAAgBC,uCAAhB,CAAwD,kBAAxD,EAA4EpD,OAA5E,EAAqFgD,SAArF,CAAb;AACA9C,oBAAkB,GAAGF,OAAO,CAACG,WAAR,GAAsBC,eAAtB,MAA2CJ,OAAO,CAACG,WAAR,EAAhE;AACA+C,iBAAe,GAAGG,6EAAkB,EAApC;AACD,CAND,MAMO,CAEN,CARD,CAOE;AAIF;AACA;AACA;;;AAEO,SAASC,eAAT,CAAyBvG,OAAzB,EAAiC;AAACwG,QAAM,CAACxG,OAAD,EAAU,MAAV,EAAkB,KAAlB,CAAN;AAAgC;AAClE,SAASyG,gBAAT,CAA0BzG,OAA1B,EAAkC;AAACwG,QAAM,CAACxG,OAAD,EAAU,OAAV,EAAmB,KAAnB,CAAN;AAAiC;AACpE,SAAS0G,eAAT,CAAyB1G,OAAzB,EAAiC;AAACwG,QAAM,CAACxG,OAAD,EAAU,MAAV,EAAkB,KAAlB,CAAN;AAAgC;AAClE,SAAS2G,eAAT,CAAyB3G,OAAzB,EAAiC;AAACwG,QAAM,CAACxG,OAAD,EAAU,MAAV,EAAkB,KAAlB,CAAN;AAAgC;AAClE,SAAS4G,aAAT,CAAuB5G,OAAvB,EAA+B;AAACwG,QAAM,CAACxG,OAAD,EAAU,IAAV,EAAgB,KAAhB,CAAN;AAA8B;AAE9D,SAAS6G,6BAAT,CAAuC7G,OAAvC,EAA+C;AAACwG,QAAM,CAACxG,OAAD,EAAU,OAAV,EAAmB,IAAnB,CAAN;AAAgC;AAChF,SAAS8G,4BAAT,CAAsC9G,OAAtC,EAA8C;AAACwG,QAAM,CAACxG,OAAD,EAAU,MAAV,EAAkB,IAAlB,CAAN;AAA+B;AAC9E,SAAS+G,4BAAT,CAAsC/G,OAAtC,EAA8C;AAACwG,QAAM,CAACxG,OAAD,EAAU,MAAV,EAAkB,IAAlB,CAAN;AAA+B;AAC9E,SAASgH,0BAAT,CAAoChH,OAApC,EAA4C;AAACwG,QAAM,CAACxG,OAAD,EAAU,IAAV,EAAgB,IAAhB,CAAN;AAA6B;AAE1E,SAASiH,wBAAT,GAAoC;AACzC,MAAIC,CAAC,GAAG,IAAR;AACD;;AAGD,SAASV,MAAT,CAAgBxG,OAAhB,EAAyBM,SAAzB,EAAoCE,WAApC,EAAgD;AAC9C,MAAI2G,SAAS,GAAGnH,OAAO,CAACmH,SAAxB;;AAEA,MAAGA,SAAS,CAACC,KAAV,KAAoB,CAApB,IAAyBD,SAAS,CAAC,CAAD,CAAT,CAAaE,KAAb,MAAwB,iBAApD,EAAsE;AACpE,QAAIhF,eAAc,GAAGiF,kGAA4B,CAACH,SAAD,EAAY7G,SAAZ,CAAjD;;AACA,QAAIiH,eAAe,GAAG,EAAtB;;AACA,SAAI,IAAIC,EAAC,GAAG,CAAZ,EAAeA,EAAC,GAAGL,SAAS,CAACC,KAAV,EAAnB,EAAsCI,EAAC,EAAvC,EAA2C;AACzC,UAAGL,SAAS,CAACK,EAAD,CAAT,CAAapG,QAAb,MAA2BiB,eAA9B,EAA6C;AAE3C,YAAInC,aAAa,GAAGuH,MAAM,CAACpF,eAAD,CAA1B;AACA,YAAIlC,cAAc,GAAGsH,MAAM,CAACN,SAAS,CAACK,EAAD,CAAT,CAAapG,QAAb,EAAD,CAA3B;AACA,YAAIoF,OAAM,GAAG,IAAb;AACA,YAAIkB,KAAK,SAAT;;AAEA,YAAGvB,eAAe,CAACwB,MAAhB,GAAyB,CAA5B,EAA8B;AAC5B,eAAK,IAAIhG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwE,eAAe,CAACwB,MAApC,EAA4ChG,CAAC,EAA7C,EAAiD;AAC/C,gBAAI,CAACzB,aAAa,IAAIiG,eAAe,CAACxE,CAAD,CAAf,CAAmBX,WAApC,IAAmDd,aAAa,IAAIiG,eAAe,CAACxE,CAAD,CAAf,CAAmBV,YAAxF,MAA0Gd,cAAc,IAAIgG,eAAe,CAACxE,CAAD,CAAf,CAAmBX,WAArC,IAAoDb,cAAc,IAAIgG,eAAe,CAACxE,CAAD,CAAf,CAAmBV,YAAnM,CAAJ,EAAsN;AACpN;AACAuF,qBAAM,GAAG,KAAT;AACAkB,mBAAK,GAAG/F,CAAR;AACA4F,6BAAe,CAACK,IAAhB,CAAqBjG,CAArB;AACD;AACF;AACF;;AAED,YAAG6E,OAAH,EAAU;AACR;AACA,cAAIzF,UAAU,GAAGd,mEAAW,CAACC,aAAD,EAAgBC,cAAhB,EAAgC,IAAhC,EAAsC,IAAtC,EAA4CG,SAA5C,EAAuD,IAAvD,EAA6DE,WAA7D,CAA5B;AACA2F,yBAAe,CAACyB,IAAhB,CAAqB7G,UAArB;AACAjB,uDAAM,CAACkD,EAAP,CAAU6E,OAAV,CAAkB,8BAAlB;AACD,SALD,MAKO;AACL;AACAC,gFAAU,CAAC3B,eAAe,CAACuB,KAAD,CAAf,CAAuBvG,IAAxB,CAAV;;AACA,cAAI,CAACX,WAAL,EAAkB;AAChBuH,4FAAe,CAAC5B,eAAe,CAACuB,KAAD,CAAf,CAAuBxG,SAAxB,CAAf;AACD;;AAED,cAAIH,WAAU,GAAGd,mEAAW,CAACC,aAAD,EAAgBC,cAAhB,EAAgC,IAAhC,EAAsC,IAAtC,EAA4CG,SAA5C,EAAuD6F,eAAe,CAACuB,KAAD,CAAf,CAAuBxG,SAA9E,EAAyFV,WAAzF,CAA5B;;AACA2F,yBAAe,CAACyB,IAAhB,CAAqB7G,WAArB;AACAjB,uDAAM,CAACkD,EAAP,CAAU6E,OAAV,CAAkB,kCAAlB;AACD;AACF;AACF;;AACD,QAAGN,eAAe,CAACI,MAAhB,GAAyB,CAA5B,EAA8B;AAC5B;AACAxB,qBAAe,GAAG6B,mFAAwB,CAACT,eAAD,EAAkBpB,eAAlB,CAA1C;AACD;;AACDnG,WAAO,CAACoG,OAAR,CAAgB6B,2CAAhB,CAA4D9B,eAA5D,EAA6E,kBAA7E,EAAiGlD,OAAjG,EAA0GgD,SAA1G;AACD,GA7CD,MA6CO;AACL;AACAnG,iDAAM,CAACkD,EAAP,CAAU6E,OAAV,CAAkB,kEAAlB;AACD;AACF,C,CAGD;AACA;AACA;;;AAEO,SAASK,oBAAT,CAA8BlI,OAA9B,EAAuC;AAACmI,QAAM,CAACnI,OAAD,EAAU,CAAV,EAAa,IAAb,CAAN;AAA0B;AAClE,SAASoI,oBAAT,CAA8BpI,OAA9B,EAAuC;AAACmI,QAAM,CAACnI,OAAD,EAAU,CAAV,EAAa,IAAb,CAAN;AAA0B;AAClE,SAASqI,eAAT,CAAyBrI,OAAzB,EAAkC;AAACmI,QAAM,CAACnI,OAAD,EAAU,CAAV,EAAa,IAAb,CAAN;AAA0B;AAC7D,SAASsI,oBAAT,CAA8BtI,OAA9B,EAAuC;AAACmI,QAAM,CAACnI,OAAD,EAAU,CAAV,EAAa,KAAb,CAAN;AAA2B;AACnE,SAASuI,oBAAT,CAA8BvI,OAA9B,EAAuC;AAACmI,QAAM,CAACnI,OAAD,EAAU,CAAV,EAAa,KAAb,CAAN;AAA2B;AACnE,SAASwI,eAAT,CAAyBxI,OAAzB,EAAkC;AAACmI,QAAM,CAACnI,OAAD,EAAU,CAAV,EAAa,KAAb,CAAN;AAA2B;AAE9D,SAASmI,MAAT,CAAgBnI,OAAhB,EAAyByI,KAAzB,EAAgCC,QAAhC,EAA0C;AAC/C;AACA;AACA;AACA,MAAIC,kBAAkB,GAAG,EAAzB;AACA,MAAIxB,SAAS,GAAGnH,OAAO,CAACmH,SAAxB;AACA,MAAIyB,mBAAJ;AACA,MAAIC,oBAAJ;;AAGA,MAAI1C,eAAe,CAACwB,MAAhB,GAAyB,CAA7B,EAAgC;AAC5B,SAAK,IAAImB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG3C,eAAe,CAACwB,MAApC,EAA4CmB,CAAC,EAA7C,EAAiD;AAE7C,UAAIL,KAAK,IAAI,CAAb,EAAgB;AACZ,YAAGC,QAAH,EAAY;AACRK,6EAAW,CAAC5C,eAAe,CAAC2C,CAAD,CAAf,CAAmB9H,WAApB,EAAiCmF,eAAe,CAAC2C,CAAD,CAAf,CAAmB7H,YAApD,EAAkEkF,eAAe,CAAC2C,CAAD,CAAf,CAAmB1I,KAArF,EAA4F+F,eAAe,CAAC2C,CAAD,CAAf,CAAmBzI,IAA/G,EAAqH8F,eAAe,CAAC2C,CAAD,CAAf,CAAmBxI,SAAxI,EAAmJ6F,eAAe,CAAC2C,CAAD,CAAf,CAAmB3H,IAAtK,EAA4KgF,eAAe,CAAC2C,CAAD,CAAf,CAAmB5H,SAA/L,EAA0M4H,CAA1M,CAAX;AACAhJ,uDAAM,CAACkD,EAAP,CAAU6E,OAAV,CAAkB,wBAAlB;AACH,SAHD,MAGO;AACHc,4BAAkB,GAAG,IAArB;AACA7I,uDAAM,CAACkD,EAAP,CAAU6E,OAAV,CAAkB,wBAAlB;AACH;AACJ;;AACD,UAAIY,KAAK,IAAI,CAAb,EAAgB;AACZG,2BAAmB,GAAG/I,QAAQ,CAACwB,cAAT,CAAwB8E,eAAe,CAAC2C,CAAD,CAAf,CAAmB9H,WAA3C,CAAtB;AACA4H,2BAAmB,GAAGA,mBAAmB,CAACI,YAApB,CAAiCC,cAAjC,GAAkD7H,QAAlD,EAAtB;AACAyH,4BAAoB,GAAGhJ,QAAQ,CAACwB,cAAT,CAAwB8E,eAAe,CAAC2C,CAAD,CAAf,CAAmB7H,YAA3C,CAAvB;AACA4H,4BAAoB,GAAGA,oBAAoB,CAACG,YAArB,CAAkCC,cAAlC,GAAmD7H,QAAnD,EAAvB;;AAEA,YAAI+F,SAAS,CAACC,KAAV,MAAqB,CAArB,IAA0BD,SAAS,CAAC,CAAD,CAAT,CAAaE,KAAb,MAAwB,iBAAtD,EAAyE;AAErE,cAAIuB,mBAAmB,IAAIzB,SAAS,CAAC,CAAD,CAAT,CAAa/F,QAAb,EAA3B,EAAoD;AAChD,gBAAIyH,oBAAoB,IAAI1B,SAAS,CAAC,CAAD,CAAT,CAAa/F,QAAb,EAA5B,EAAqD;AACjD2H,iFAAW,CAAC5C,eAAe,CAAC2C,CAAD,CAAf,CAAmB9H,WAApB,EAAiCmF,eAAe,CAAC2C,CAAD,CAAf,CAAmB7H,YAApD,EAAkEkF,eAAe,CAAC2C,CAAD,CAAf,CAAmB1I,KAArF,EAA4F+F,eAAe,CAAC2C,CAAD,CAAf,CAAmBzI,IAA/G,EAAqH8F,eAAe,CAAC2C,CAAD,CAAf,CAAmBxI,SAAxI,EAAmJ6F,eAAe,CAAC2C,CAAD,CAAf,CAAmB3H,IAAtK,EAA4KgF,eAAe,CAAC2C,CAAD,CAAf,CAAmB5H,SAA/L,EAA0M4H,CAA1M,CAAX;AACH,aAFD,MAEO;AACHH,gCAAkB,CAACf,IAAnB,CAAwBzB,eAAe,CAAC2C,CAAD,CAAvC;AACH;AACJ,WAND,MAMO;AACHH,8BAAkB,CAACf,IAAnB,CAAwBzB,eAAe,CAAC2C,CAAD,CAAvC;AACH;AACJ;AACJ;;AACDhJ,mDAAM,CAACkD,EAAP,CAAU6E,OAAV,CAAkB,2BAAlB;AAGH;;AACD,QAAI9G,UAAU,GAAGd,mEAAW,CAACoC,cAAD,EAAiB8E,SAAS,CAACK,CAAD,CAAT,CAAapG,QAAb,EAAjB,EAA0C,IAA1C,EAAgD,IAAhD,EAAsDd,SAAtD,EAAiE,IAAjE,EAAuEE,WAAvE,CAA5B;AACA2F,mBAAe,CAACyB,IAAhB,CAAqB7G,UAArB;AACAf,WAAO,CAACoG,OAAR,CAAgB6B,2CAAhB,CAA4D9B,eAA5D,EAA6E,kBAA7E,EAAiGlD,OAAjG,EAA0GgD,SAA1G;AACH,GAtCD,MAsCO;AACHnG,iDAAM,CAACkD,EAAP,CAAU6E,OAAV,CAAkB,oBAAlB;AACH;AACF,C,CAED;AACA;AACA;AACA;AACA;AACA,M;;;;;;;;;;;;AC9KA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;;AAEA,IAAI7E,EAAE,GAAGpD,mBAAO,CAAC,4BAAD,CAAhB;;AACA,IAAID,QAAQ,GAAGC,mBAAO,CAAC,wCAAD,CAAtB;;AACA,IAAMqG,SAAS,GAAG,YAAlB;AACA,IAAIpG,QAAQ,GAAGC,6CAAM,CAACC,UAAP,CAAkBC,OAAO,CAACH,QAA1B,CAAf;AACA,IAAIoD,OAAO,GAAGjD,OAAO,CAACH,QAAR,CAAiBqD,YAAjB,EAAd;AACA,IAAIgD,UAAU,GAAGlG,OAAO,CAACoG,OAAR,CAAgBC,uCAAhB,CAAwD,kBAAxD,EAA4EpD,OAA5E,EAAqFgD,SAArF,CAAjB;AACA,IAAI9C,kBAAkB,GAAGF,OAAO,CAACG,WAAR,GAAsBC,eAAtB,MAA2CJ,OAAO,CAACG,WAAR,EAApE,C,CAA2F;;AAC3F,IAAI+C,eAAe,GAAGG,6EAAkB,EAAxC;AAIO,SAASyC,WAAT,CAAqB7I,aAArB,EAAoCC,cAApC,EAAoDC,KAApD,EAA2DC,IAA3D,EAAiEC,SAAjE,EAA4E4I,MAA5E,EAAoF3I,WAApF,EAAiGC,WAAjG,EAA8G+G,eAA9G,EAA+H;AAAE;AACtI;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEApB,iBAAe,GAAG6B,mFAAwB,CAACT,eAAD,CAA1C,CAboI,CAepI;AACA;AACA;AACA;AAEA;AACD,C;;;;;;;;;;;;ACpCD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;;AACA,IAAI5H,QAAQ,GAAGC,mBAAO,CAAC,wCAAD,CAAtB;;AACA,IAAIoD,EAAE,GAAGpD,mBAAO,CAAC,4BAAD,CAAhB;;AAEA,IAAIC,QAAQ,GAAGC,6CAAM,CAACC,UAAP,CAAkBC,OAAO,CAACH,QAA1B,CAAf;AACA,IAAIoD,OAAO,GAAGjD,OAAO,CAACH,QAAR,CAAiBqD,YAAjB,EAAd;AACA,IAAIC,kBAAkB,GAAGF,OAAO,CAACG,WAAR,GAAsBC,eAAtB,MAA2CJ,OAAO,CAACG,WAAR,EAApE;AAEO,SAASe,YAAT,CAAsBgF,OAAtB,EAA+B3H,CAA/B,EAAkCG,CAAlC,EAAqC;AAC1C,MAAIyH,SAAS,GAAGtJ,6CAAM,CAACuJ,YAAP,EAAhB;AACA,MAAIC,aAAJ,EAAmBC,gBAAnB,EAAqCC,MAArC;;AAEA,OAAK,IAAIhC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4B,SAAS,CAACzB,MAA9B,EAAsCH,CAAC,EAAvC,EAA2C;AACzC+B,oBAAgB,GAAGH,SAAS,CAAC5B,CAAD,CAAT,CAAaiC,wCAAb,CACjB5J,QADiB,CAAnB;;AAGA,SAAK,IAAIiJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGS,gBAAgB,CAAC5B,MAArC,EAA6CmB,CAAC,EAA9C,EAAkD;AAChD,UAAIS,gBAAgB,CAACT,CAAD,CAAhB,CAAoBY,IAApB,CAAyBC,QAAzB,CAAkCR,OAAlC,CAAJ,EAAgD;AAC9CG,qBAAa,GAAGC,gBAAgB,CAACT,CAAD,CAAhC;AACD;AACF;AACF;;AAED,MAAIQ,aAAa,IAAI,IAArB,EAA2B;AACzBE,UAAM,GAAG,IAAT;AACAxG,MAAE,CAAC4G,KAAH,CACE,+BADF,EAEE,kWAFF;AAID,GAND,MAMO;AACL,QAAIC,YAAY,GAAGP,aAAa,CAACQ,MAAd,EAAnB;AACAN,UAAM,GAAGK,YAAY,CAACE,iBAAb,EAAT;AACAP,UAAM,GAAGQ,sEAAmB,CAACR,MAAD,EAAShI,CAAT,EAAYG,CAAZ,CAA5B;AACD;;AACD,SAAO6H,MAAP;AACD;AAEM,SAAStF,eAAT,CAAyB3D,WAAzB,EAAsCiB,CAAtC,EAAyCG,CAAzC,EAA4C;AACjD,MAAIT,SAAS,GAAGrB,QAAQ,CAACwB,cAAT,CAAwBd,WAAxB,CAAhB;AACA,MAAI0J,QAAQ,GAAGpF,gEAAa,CAAC,YAAD,CAA5B;AACA,MAAIqF,OAAO,GAAGrF,gEAAa,CAAC,QAAD,CAA3B;AACA,MAAIsF,QAAQ,GAAGD,OAAO,IAAI,IAAX,GAAkBA,OAAO,CAAC3I,KAAR,GAAgBC,CAAhB,EAAlB,GAAwC,CAAvD;AACA,MAAI4I,QAAQ,GAAGF,OAAO,IAAI,IAAX,GAAkBA,OAAO,CAAC3I,KAAR,GAAgBI,CAAhB,EAAlB,GAAwC,CAAvD;;AAEA,MAAIsI,QAAJ,EAAc;AACZ/I,aAAS,CAACK,KAAV,CAAgBC,CAAhB,GACEA,CAAC,GAAGN,SAAS,CAACK,KAAV,CAAgBE,KAAhB,GAAwB,CAA5B,IAAiCwI,QAAQ,CAAC1I,KAAT,GAAiBC,CAAjB,KAAuB2I,QAAxD,CADF;AAEAjJ,aAAS,CAACK,KAAV,CAAgBI,CAAhB,GACEA,CAAC,GAAGT,SAAS,CAACK,KAAV,CAAgBK,MAAhB,GAAyB,CAA7B,IAAkCqI,QAAQ,CAAC1I,KAAT,GAAiBI,CAAjB,KAAuByI,QAAzD,CADF;AAEAH,YAAQ,CAACI,sBAAT,CAAgC,CAAhC;AACD,GAND,MAMO;AACLnJ,aAAS,CAACK,KAAV,CAAgBC,CAAhB,GAAoBA,CAAC,GAAGN,SAAS,CAACK,KAAV,CAAgBE,KAAhB,GAAwB,CAAhD;AACAP,aAAS,CAACK,KAAV,CAAgBI,CAAhB,GAAoBA,CAAC,GAAGT,SAAS,CAACK,KAAV,CAAgBK,MAAhB,GAAyB,CAAjD;AACD;;AACD,SAAOV,SAAS,CAACoJ,EAAjB;AACD;AAEM,SAASvC,eAAT,CAAyBxH,WAAzB,EAAsC;AACzC,MAAIgK,eAAe,GAAG1K,QAAQ,CAACwB,cAAT,CAAwBd,WAAxB,CAAtB;AACA,MAAIiK,aAAJ;;AACA,MAAGD,eAAH,EAAmB;AACjBC,iBAAa,GAAGD,eAAe,CAAC9F,MAAhC;AACA8F,mBAAe,CAACE,MAAhB;;AACA,QAAGD,aAAa,CAAC/E,MAAd,CAAqBkC,MAArB,IAA+B,CAAlC,EAAoC;AAClC6C,mBAAa,CAACC,MAAd;AACD;AACF;AAEF,C;;;;;;;;;;;;ACrEH;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA,IAAIzH,EAAE,GAAGpD,mBAAO,CAAC,4BAAD,CAAhB;;AACA,IAAID,QAAQ,GAAGC,mBAAO,CAAC,wCAAD,CAAtB;;AAEA,IAAMqG,SAAS,GAAG,YAAlB;AACA,IAAIpG,QAAJ;AAEA,IAAIoD,OAAJ,EAAaiD,UAAb,EAAyB/C,kBAAzB,EAA6CgD,eAA7C;AAEAtG,QAAQ,GAAGC,6CAAM,CAACC,UAAP,CAAkBC,OAAO,CAACH,QAA1B,CAAX;AACAoD,OAAO,GAAGjD,OAAO,CAACH,QAAR,CAAiBqD,YAAjB,EAAV;AACAgD,UAAU,GAAGlG,OAAO,CAACoG,OAAR,CAAgBC,uCAAhB,CAAwD,kBAAxD,EAA4EpD,OAA5E,EAAqFgD,SAArF,CAAb;AACA9C,kBAAkB,GAAGF,OAAO,CAACG,WAAR,GAAsBC,eAAtB,MAA2CJ,OAAO,CAACG,WAAR,EAAhE,C,CAAuF;;AAEhF,SAASkD,kBAAT,GAA8B;AACnC,MAAIoE,SAAS,GAAG,EAAhB;;AAEA,MAAIxE,UAAJ,EAAgB;AACd,SAAK,IAAI4C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG5C,UAAU,CAACyB,MAA/B,EAAuCmB,CAAC,EAAxC,EAA4C;AAC1C4B,eAAS,CAAC9C,IAAV,CAAe1B,UAAU,CAAC4C,CAAD,CAAzB;AACD;AACF;;AACD,SAAO4B,SAAP;AACD;AAEM,SAAS1C,wBAAT,CAAkC2C,oBAAlC,EAAwDC,IAAxD,EAA6D;AAClE,MAAGA,IAAH,EAAQ;AACN,SAAK,IAAI9B,CAAC,GAAG6B,oBAAoB,CAAChD,MAArB,GAA6B,CAA1C,EAA6CmB,CAAC,IAAI,CAAlD,EAAqDA,CAAC,EAAtD,EAA0D;AACxD8B,UAAI,CAACC,MAAL,CAAYF,oBAAoB,CAAC7B,CAAD,CAAhC,EAAoC,CAApC;AACD;AACF;;AACD,SAAO8B,IAAP;AACD,C;;;;;;;;;;;;ACjCD;AAAA;AAAA;AAAA;AAAA;AACA,IAAI/K,QAAQ,GAAGC,6CAAM,CAACC,UAAP,CAAkBC,OAAO,CAACH,QAA1B,CAAf;AACA,IAAIoD,OAAO,GAAGjD,OAAO,CAACH,QAAR,CAAiBqD,YAAjB,EAAd;AACA,IAAIC,kBAAkB,GAAGF,OAAO,CAACG,WAAR,GAAsBC,eAAtB,MAA2CJ,OAAO,CAACG,WAAR,EAApE;AAGO,SAASkE,4BAAT,CAAsCH,SAAtC,EAAiD7G,SAAjD,EAA2D;AAChE,MAAI+B,cAAc,GAAG8E,SAAS,CAACnG,WAAV,GAAwBI,QAAxB,EAArB;;AAEA,MAAGd,SAAS,IAAI,MAAhB,EAAuB;AACrB,SAAI,IAAIkH,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGL,SAAS,CAACC,KAAV,EAAnB,EAAsCI,CAAC,EAAvC,EAA2C;AACzCnF,oBAAc,GAAGyI,kBAAkB,CAACzI,cAAD,EAAiB8E,SAAS,CAACK,CAAD,CAAT,CAAapG,QAAb,EAAjB,EAA0Cd,SAA1C,CAAnC;AACD;AACF;;AACD,SAAO+B,cAAP;AACD;;AAED,SAASyI,kBAAT,CAA4B5K,aAA5B,EAA2CC,cAA3C,EAA2DG,SAA3D,EAAqE;AAEnE,MAAIU,WAAW,GAAGnB,QAAQ,CAACwB,cAAT,CAAwBnB,aAAxB,CAAlB;AACA,MAAIe,YAAY,GAAGpB,QAAQ,CAACwB,cAAT,CAAwBlB,cAAxB,CAAnB;AACA,MAAImE,iBAAiB,GAAGtD,WAAW,CAACO,KAAZ,CAAkBgD,WAAlB,CAA8B;AAACC,QAAI,EAAExD,WAAW,CAACyD,MAAnB;AAA2BC,MAAE,EAAEvB;AAA/B,GAA9B,CAAxB;AACA,MAAIwB,kBAAkB,GAAG1D,YAAY,CAACM,KAAb,CAAmBgD,WAAnB,CAA+B;AAACC,QAAI,EAAEvD,YAAY,CAACwD,MAApB;AAA4BC,MAAE,EAAEvB;AAAhC,GAA/B,CAAzB;AACA,MAAId,cAAJ;;AAEA,MAAG/B,SAAS,IAAI,OAAhB,EAAwB;AACtB,QAAGgE,iBAAiB,CAAC9C,CAAlB,IAAuBmD,kBAAkB,CAACnD,CAA7C,EAA+C;AAAE;AAC/Ca,oBAAc,GAAGrB,WAAW,CAACsJ,EAA7B;AACD,KAFD,MAEO;AACLjI,oBAAc,GAAGpB,YAAY,CAACqJ,EAA9B;AACD;AACF;;AAED,MAAGhK,SAAS,IAAI,MAAhB,EAAuB;AACrB,QAAGU,WAAW,CAACW,CAAZ,IAAiBgD,kBAAkB,CAAChD,CAAvC,EAAyC;AACvCU,oBAAc,GAAGrB,WAAW,CAACsJ,EAA7B;AACD,KAFD,MAEO;AACLjI,oBAAc,GAAGpB,YAAY,CAACqJ,EAA9B;AACD;AACF;;AAED,MAAGhK,SAAS,IAAI,MAAhB,EAAuB;AACrB,QAAGgE,iBAAiB,CAAC9C,CAAlB,IAAuBmD,kBAAkB,CAACnD,CAA7C,EAA+C;AAC7Ca,oBAAc,GAAGpB,YAAY,CAACqJ,EAA9B;AACD,KAFD,MAEO;AACLjI,oBAAc,GAAGrB,WAAW,CAACsJ,EAA7B;AACD;AACF;;AAED,MAAGhK,SAAS,IAAI,IAAhB,EAAqB;AACnB,QAAGgE,iBAAiB,CAAC3C,CAAlB,IAAuBgD,kBAAkB,CAAChD,CAA7C,EAA+C;AAC7CU,oBAAc,GAAGpB,YAAY,CAACqJ,EAA9B;AACD,KAFD,MAEO;AACLjI,oBAAc,GAAGrB,WAAW,CAACsJ,EAA7B;AACD;AACF;;AAED,SAAOjI,cAAP;AACD,C;;;;;;;;;;;;AC1DD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA,IAAI1C,QAAQ,GAAGC,mBAAO,CAAC,wCAAD,CAAtB;;AACA,IAAIoD,EAAE,GAAGpD,mBAAO,CAAC,4BAAD,CAAhB;;AAEA,IAAIC,QAAQ,GAAGC,6CAAM,CAACC,UAAP,CAAkBC,OAAO,CAACH,QAA1B,CAAf;AACA,IAAIoD,OAAO,GAAGjD,OAAO,CAACH,QAAR,CAAiBqD,YAAjB,EAAd;AACA,IAAIC,kBAAkB,GAAGF,OAAO,CAACG,WAAR,GAAsBC,eAAtB,MAA2CJ,OAAO,CAACG,WAAR,EAApE;AAGO,SAASyB,aAAT,CAAuBkG,SAAvB,EAAkC;AAAE;AACvC,MAAInG,YAAY,GAAG,IAAnB,CADqC,CAGrC;;AACA,OAAI,IAAIkE,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAG3F,kBAAkB,CAACsC,MAAnB,GAA4B2B,KAA5B,EAAnB,EAAwD0B,CAAC,EAAzD,EAA4D;AAC1D,QAAG3F,kBAAkB,CAACsC,MAAnB,GAA4BqD,CAA5B,EAA+BY,IAA/B,MAAyCqB,SAA5C,EAAuD;AACrDnG,kBAAY,GAAGzB,kBAAkB,CAACsC,MAAnB,GAA4BqD,CAA5B,CAAf;AACD;AACF;;AAED,SAAOlE,YAAP;AACH;AAEM,SAASP,gBAAT,CAA0BlD,IAA1B,EAA+B;AAClC,MAAIyD,YAAY,GAAGC,aAAa,CAAC,QAAD,CAAhC;;AACA,MAAGD,YAAH,EAAgB;AACdA,gBAAY,CAACoG,SAAb,CAAuB,CAAC7J,IAAD,CAAvB;AACAyD,gBAAY,CAACyF,sBAAb,CAAoC,CAApC;AACD,GAHD,MAGO;AACL,QAAIY,KAAK,GAAGrL,mBAAO,CAAC,8BAAD,CAAP,CAAsBqL,KAAlC;;AACA,QAAIC,KAAK,GAAG,IAAID,KAAJ,CAAU;AACpBxG,YAAM,EAAEtB,kBADY;AAEpBuG,UAAI,EAAE,QAFc;AAGpByB,YAAM,EAAE,IAHY;AAIpB1F,YAAM,EAAE,CAACtE,IAAD;AAJY,KAAV,CAAZ;AAMA+J,SAAK,CAACE,UAAN;AACAF,SAAK,CAACG,WAAN;AACD;AACJ;AAEM,SAASrB,mBAAT,CAA6B9I,SAA7B,EAAwCM,CAAxC,EAA2CG,CAA3C,EAA8C;AACjD,MAAIsI,QAAQ,GAAGpF,aAAa,CAAC,YAAD,CAA5B;AACA,MAAIqF,OAAO,GAAGrF,aAAa,CAAC,QAAD,CAA3B;AAEA,MAAIsF,QAAQ,GAAGD,OAAO,IAAI,IAAX,GAAkBA,OAAO,CAAC3I,KAAR,GAAgBC,CAAhB,EAAlB,GAAwC,CAAvD;AACA,MAAI4I,QAAQ,GAAGF,OAAO,IAAI,IAAX,GAAkBA,OAAO,CAAC3I,KAAR,GAAgBI,CAAhB,EAAlB,GAAwC,CAAvD;;AAEA,MAAIsI,QAAJ,EAAc;AACZ/I,aAAS,CAACK,KAAV,CAAgBC,CAAhB,GACEA,CAAC,GAAGN,SAAS,CAACK,KAAV,CAAgBE,KAAhB,GAAwB,CAA5B,IAAiCwI,QAAQ,CAAC1I,KAAT,GAAiBC,CAAjB,KAAuB2I,QAAxD,CADF;AAEAjJ,aAAS,CAACK,KAAV,CAAgBI,CAAhB,GACEA,CAAC,GAAGT,SAAS,CAACK,KAAV,CAAgBK,MAAhB,GAAyB,CAA7B,IAAkCqI,QAAQ,CAAC1I,KAAT,GAAiBI,CAAjB,KAAuByI,QAAzD,CADF;AAEAlJ,aAAS,CAACuD,MAAV,GAAmBwF,QAAnB;AACAA,YAAQ,CAACI,sBAAT,CAAgC,CAAhC;AACD,GAPD,MAOO;AACLnJ,aAAS,CAACK,KAAV,CAAgBC,CAAhB,GAAoBA,CAAC,GAAGN,SAAS,CAACK,KAAV,CAAgBE,KAAhB,GAAwB,CAA5B,GAAgC0I,QAApD;AACAjJ,aAAS,CAACK,KAAV,CAAgBI,CAAhB,GAAoBA,CAAC,GAAGT,SAAS,CAACK,KAAV,CAAgBK,MAAhB,GAAyB,CAA7B,GAAiCwI,QAArD;;AACA,QAAIa,KAAK,GAAGrL,mBAAO,CAAC,8BAAD,CAAP,CAAsBqL,KAAlC;;AACA,QAAIC,KAAK,GAAG,IAAID,KAAJ,CAAU;AACpBxG,YAAM,EAAEtB,kBADY;AAEpBuG,UAAI,EAAE,YAFc;AAGpBjE,YAAM,EAAE,CAACvE,SAAD;AAHY,KAAV,CAAZ;AAKAgK,SAAK,CAACE,UAAN;AACAF,SAAK,CAACG,WAAN;AACD;;AACD,SAAOnK,SAAS,CAACoJ,EAAjB;AACD,C;;;;;;;;;;;;ACnEH;AAAA;AAAA;AAAA;AAAA;AACA,IAAIzK,QAAQ,GAAGC,6CAAM,CAACC,UAAP,CAAkBC,OAAO,CAACH,QAA1B,CAAf;AAEO,SAASiI,UAAT,CAAoBoB,MAApB,EAA2B;AAC9B,MAAIoC,UAAU,GAAGzL,QAAQ,CAACwB,cAAT,CAAwB6H,MAAxB,CAAjB;AACA,MAAIsB,aAAJ;;AACA,MAAGc,UAAH,EAAc;AACZd,iBAAa,GAAGc,UAAU,CAAC7G,MAA3B;AACA6G,cAAU,CAACb,MAAX;;AACA,QAAGD,aAAa,CAAC/E,MAAd,CAAqBkC,MAArB,IAA+B,CAAlC,EAAoC;AAClC6C,mBAAa,CAACC,MAAd;AACD;AACF;AACJ,C;;;;;;;;;;;;ACbD;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,IAAMxE,SAAS,GAAG,YAAlB;AACA,IAAIpG,QAAQ,GAAGC,6CAAM,CAACC,UAAP,CAAkBC,OAAO,CAACH,QAA1B,CAAf;AACA,IAAIoD,OAAO,GAAGjD,OAAO,CAACH,QAAR,CAAiBqD,YAAjB,EAAd;AAEO,SAASkB,SAAT,CAAmBjD,IAAnB,EAAyBf,KAAzB,EAA+B;AAAE;AACpC,MAAImL,UAAJ;;AAEA,MAAGnL,KAAK,IAAI,IAAZ,EAAiB;AACf;AACA,QAAGoL,cAAc,CAACpL,KAAD,CAAd,IAAyB,IAAzB,IAAiCA,KAAK,IAAI,eAA7C,EAA6D;AAC3D;AACAmL,gBAAU,GAAGnL,KAAb;AACA,UAAIqL,QAAQ,GAAGD,cAAc,CAACpL,KAAD,CAA7B;AACAe,UAAI,CAACuK,WAAL,GAAmBD,QAAQ,CAAC,CAAD,CAA3B;AACD,KALD,MAKO;AACL;AACAF,gBAAU,GAAG,eAAb;AACA,UAAII,MAAM,GAAGxK,IAAI,CAACf,KAAL,GAAawL,kBAAb,CAAgC,CAAhC,CAAb;AACAD,YAAM,CAACE,KAAP,GAAeC,OAAO,CAACC,uBAAR,CAAgC;AAACC,SAAC,EAAE,IAAJ;AAAUxE,SAAC,EAAE,IAAb;AAAmByE,SAAC,EAAE,IAAtB;AAA4B/E,SAAC,EAAE;AAA/B,OAAhC,CAAf;AACAyE,YAAM,CAACO,SAAP,GAAmB,CAAnB;AACA/K,UAAI,CAACf,KAAL,GAAa+L,aAAb,GAA6B,CAA7B;AACD;AACF,GAfD,MAeO;AACL;AACA,QAAGnM,OAAO,CAACoG,OAAR,CAAgBC,uCAAhB,CAAwD,YAAxD,EAAsEpD,OAAtE,EAA+EgD,SAA/E,KAA6F,IAA7F,IAAqGjG,OAAO,CAACoG,OAAR,CAAgBC,uCAAhB,CAAwD,YAAxD,EAAsEpD,OAAtE,EAA+EgD,SAA/E,KAA6F,eAArM,EAAqN;AACnN;AACAsF,gBAAU,GAAGC,cAAc,CAACxL,OAAO,CAACoG,OAAR,CAAgBC,uCAAhB,CAAwD,YAAxD,EAAsEpD,OAAtE,EAA+EgD,SAA/E,CAAD,CAA3B;AACA9E,UAAI,CAACuK,WAAL,GAAmBH,UAAU,CAAC,CAAD,CAA7B;AACAA,gBAAU,GAAGA,UAAU,CAAC,CAAD,CAAV,CAAc7B,IAAd,EAAb;AACD,KALD,MAKO;AACL6B,gBAAU,GAAG,eAAb;;AACA,UAAII,OAAM,GAAGxK,IAAI,CAACf,KAAL,GAAawL,kBAAb,CAAgC,CAAhC,CAAb;;AACAD,aAAM,CAACE,KAAP,GAAeC,OAAO,CAACC,uBAAR,CAAgC;AAACC,SAAC,EAAE,IAAJ;AAAUxE,SAAC,EAAE,IAAb;AAAmByE,SAAC,EAAE,IAAtB;AAA4B/E,SAAC,EAAE;AAA/B,OAAhC,CAAf;AACAyE,aAAM,CAACO,SAAP,GAAmB,CAAnB;AACA/K,UAAI,CAACf,KAAL,GAAa+L,aAAb,GAA6B,CAA7B;AACD;AACF;;AAED,SAAOZ,UAAP;AACH;AAEM,SAASC,cAAT,CAAwB9B,IAAxB,EAA8B;AAAE;AACnC,MAAI0C,SAAS,GAAGnJ,OAAO,CAACoJ,cAAR,EAAhB;AACA,MAAIlD,OAAO,GAAG,QAAd;AACA,MAAImD,MAAM,GAAG,EAAb;;AAEA,OAAI,IAAIxD,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGsD,SAAS,CAAChF,KAAV,EAAnB,EAAsC0B,CAAC,EAAvC,EAA0C;AACxC,QAAGY,IAAI,IAAI,IAAX,EAAiB;AACf,UAAG0C,SAAS,CAACtD,CAAD,CAAT,CAAaY,IAAb,GAAoBC,QAApB,CAA6BR,OAA7B,CAAH,EAAyC;AAACmD,cAAM,CAAC1E,IAAP,CAAYwE,SAAS,CAACtD,CAAD,CAArB;AAA2B;AACtE,KAFD,MAEO;AACL,UAAGsD,SAAS,CAACtD,CAAD,CAAT,CAAaY,IAAb,MAAuBA,IAA1B,EAA+B;AAAC4C,cAAM,CAAC1E,IAAP,CAAYwE,SAAS,CAACtD,CAAD,CAArB;AAA2B;AAC5D;AACF;;AACC,SAAOwD,MAAP;AACL,C;;;;;;;;;;;ACvDD,mC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,4C;;;;;;;;;;;ACAA,sC","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch';\nimport { drawConnection } from \"./draw.js\";\n\nvar Settings = require('sketch/settings');\nlet document = sketch.fromNative(context.document);\n\n// Main Function\n\nexport function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n return connection;\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}","import sketch from 'sketch';\nimport { styleLine } from \"./utilities/styling.js\";\nimport { addCondition, updateCondition } from \"./utilities/conditions.js\";\nimport { checkForGroup, addToArrowsGroup } from \"./utilities/groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\n// Main Function\n\nexport function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition){ // Refactored\n // Process of creating new connection \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n\n // Condition\n if(isCondition == true){\n if(document.getLayerWithID(conditionID)){\n log(\"let's update\")\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY);\n } else {\n log(\"let's NOT update\")\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY);\n }\n } else {\n connection.conditionID = null;\n }\n \n // Style\n connection.style = styleLine(connection.line, style);\n\n // Add to group\n addToArrowsGroup(connection.line);\n \n return connection\n}\n\n// Positions\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\");\n let diffX, diffY;\n \n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n \n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n \n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n\n return connectionPos\n}\n\n// Drawing Types\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n \n return line;\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n \n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n \n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n \n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n \n if(firstLayerPosX 1 && selection[0].class() != \"MSArtboardGroup\"){\n let sourceObjectID = getSourceObjectFromSelection(selection, direction);\n let connectionIndex = []\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n\n let firstObjectID = String(sourceObjectID);\n let secondObjectID = String(selection[g].objectID());\n let create = true\n let index\n\n if(connectionsData.length > 0){\n for (let y = 0; y < connectionsData.length; y++) {\n if ((firstObjectID == connectionsData[y].firstObject || firstObjectID == connectionsData[y].secondObject) && (secondObjectID == connectionsData[y].firstObject || secondObjectID == connectionsData[y].secondObject)) {\n // We have this connection and need to update\n create = false;\n index = y;\n connectionIndex.push(y);\n }\n }\n } \n \n if(create){\n // Create\n let connection = createArrow(firstObjectID, secondObjectID, null, null, direction, null, isCondition);\n connectionsData.push(connection);\n sketch.UI.message(\"New connection is created 🚀\");\n } else {\n // Update\n deleteLine(connectionsData[index].line);\n if (!isCondition) { \n deleteCondition(connectionsData[index].condition) \n }\n\n let connection = createArrow(firstObjectID, secondObjectID, null, null, direction, connectionsData[index].condition, isCondition);\n connectionsData.push(connection);\n sketch.UI.message(\"Current connection is updated 🤘\");\n }\n }\n }\n if(connectionIndex.length > 0){\n // Update data if there was changes\n connectionsData = deleteConnectionFromData(connectionIndex, connectionsData);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\n \n//\n// Plugin Incoming Commands - Update and Delete\n//\n\nexport function updateSelectedArrows(context) {update(context, 1, true);}\nexport function updateArtboardArrows(context) {update(context, 2, true);}\nexport function updateAllArrows(context) {update(context, 3, true);}\nexport function deleteSelectedArrows(context) {update(context, 1, false);}\nexport function deleteArtboardArrows(context) {update(context, 2, false);}\nexport function deleteAllArrows(context) {update(context, 3, false);}\n\nexport function update(context, level, isUpdate) {\n // 1 - selection level\n // 2 - artboard level\n // 3 - document level\n let newConnectionsData = [];\n let selection = context.selection;\n let firstObjectArtboard;\n let secondObjectArtboard;\n\n\n if (connectionsData.length > 0) {\n for (let i = 0; i < connectionsData.length; i++) {\n \n if (level == 3) {\n if(isUpdate){\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n sketch.UI.message(\"All arrows are updated\");\n } else {\n newConnectionsData = null\n sketch.UI.message(\"All arrows are deleted\");\n }\n }\n if (level == 2) {\n firstObjectArtboard = document.getLayerWithID(connectionsData[i].firstObject);\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID();\n secondObjectArtboard = document.getLayerWithID(connectionsData[i].secondObject);\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID();\n\n if (selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\") {\n\n if (firstObjectArtboard == selection[0].objectID()) {\n if (secondObjectArtboard == selection[0].objectID()) {\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n }\n }\n sketch.UI.message(\"All arrows are updated 🚀\");\n \n \n }\n let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition);\n connectionsData.push(connection);\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n sketch.UI.message(\"There is no arrows\");\n }\n}\n\n// const track = require(\"sketch-module-google-analytics\")\n// track(\"UA-138226597-1\", \"event\", {\n// ec: \"command\", \n// ea: \"create\", \n// ev: \"my-command\"\n// });\n\n\n\n\n\n","import sketch from 'sketch';\nimport { getConnectionsData, deleteConnectionFromData} from \"./utilities/data.js\"\nimport { deleteLine } from \"./utilities/lines.js\"\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\nlet connectionsData = getConnectionsData();\n\n\n\nexport function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n // let firstObject = document.getLayerWithID(firstObjectID);\n // let secondObject = document.getLayerWithID(secondObjectID);\n // let conditionObject = document.getLayerWithID(conditionID);\n // let result = false;\n \n // Need to delete data first, because we will have a new line\n // deleteLine(lineID);\n // if(conditionID && !isCondition){\n // if(conditionObject){conditionObject.remove();}\n // }\n \n connectionsData = deleteConnectionFromData(connectionIndex);\n\n // if(firstObject && secondObject){\n // // If we have all the objects, we can recreate the line\n // result = true;\n // }\n\n // return result;\n}","import sketch from 'sketch';\nimport { addToConditionGroup, checkForGroup } from \"./groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\nexport function addCondition(keyword, x, y) {\n let libraries = sketch.getLibraries();\n let libraryObject, symbolReferences, symbol;\n\n for (let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(\n document\n );\n for (let i = 0; i < symbolReferences.length; i++) {\n if (symbolReferences[i].name.includes(keyword)) {\n libraryObject = symbolReferences[i];\n }\n }\n }\n\n if (libraryObject == null) {\n symbol = null;\n UI.alert(\n \"Condition symbol is not found\",\n 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here'\n );\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y);\n }\n return symbol;\n}\n\nexport function updateCondition(conditionID, x, y) {\n let condition = document.getLayerWithID(conditionID);\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n }\n return condition.id;\n}\n\nexport function deleteCondition(conditionID) {\n let conditionObject = document.getLayerWithID(conditionID);\n let selectedGroup;\n if(conditionObject){\n selectedGroup = conditionObject.parent;\n conditionObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n\n }\n \n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, connectionsData;\n\ndocument = sketch.fromNative(context.document);\ndocData = context.document.documentData();\npluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\ncurrentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n\nexport function getConnectionsData() {\n let dataArray = [];\n\n if (pluginData) {\n for (let i = 0; i < pluginData.length; i++) {\n dataArray.push(pluginData[i]);\n }\n }\n return dataArray;\n}\n\nexport function deleteConnectionFromData(connectionIndexArray, data){\n if(data){\n for (let i = connectionIndexArray.length -1; i >= 0; i--) {\n data.splice(connectionIndexArray[i],1);\n }\n }\n return data;\n}\n","import sketch from 'sketch';\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function getSourceObjectFromSelection(selection, direction){\n let sourceObjectID = selection.firstObject().objectID();\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction);\n }\n }\n return sourceObjectID;\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){\n \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let sourceObjectID;\n\n if(direction == \"Right\"){\n if(firstObjectAbsPos.x <= secondObjectAbsPos.x){ // We need to get the doc position\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.y <= secondObjectAbsPos.y){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Left\"){\n if(firstObjectAbsPos.x <= secondObjectAbsPos.x){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n if(direction == \"Up\"){\n if(firstObjectAbsPos.y <= secondObjectAbsPos.y){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n return sourceObjectID;\n}","import sketch from 'sketch';\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function checkForGroup(groupName) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n \n return currentGroup;\n}\n\nexport function addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\");\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nexport function addToConditionGroup(condition, x, y) {\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2 + arGroupX;\n condition.frame.y = y - condition.frame.height / 2 + arGroupY;\n let Group = require(\"sketch/dom\").Group;\n let group = new Group({\n parent: currentParentGroup,\n name: \"Conditions\",\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n }","import sketch from 'sketch';\nlet document = sketch.fromNative(context.document);\n\nexport function deleteLine(lineID){\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\n\nexport function styleLine(line, style){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey));\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/src/draw.js b/src/draw.js index a8bcc46..02761dc 100644 --- a/src/draw.js +++ b/src/draw.js @@ -12,7 +12,7 @@ let currentParentGroup = docData.currentPage().currentArtboard() || docData.curr // Main Function -export function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, condition){ // Refactored +export function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition){ // Refactored // Process of creating new connection let firstObject = document.getLayerWithID(firstObjectID); let secondObject = document.getLayerWithID(secondObjectID); @@ -30,18 +30,20 @@ export function drawConnection(firstObjectID, secondObjectID, style, type, local if(connection.type == "Straight"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);} if(connection.type == "Curved"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);} + // Condition - if(condition == true){ - if(conditionID != null){ + if(isCondition == true){ + if(document.getLayerWithID(conditionID)){ + log("let's update") connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY); } else { + log("let's NOT update") connection.conditionID = addCondition("#con", connectionPos.middlePosX, connectionPos.middlePosY); } } else { connection.conditionID = null; } - // connection.conditionID = condition != false ? connection.conditionID = addCondition("#con", connectionPos.middlePosX, connectionPos.middlePosY) : connection.conditionID = null - + // Style connection.style = styleLine(connection.line, style); @@ -133,8 +135,6 @@ function getConnectionPos(firstObject, secondObject, direction){ // Refactored connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2; connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2; } - log("Direction "+direction) - console.log(connectionPos) return connectionPos } diff --git a/src/script.js b/src/script.js index ce52bc5..a52b607 100644 --- a/src/script.js +++ b/src/script.js @@ -81,8 +81,11 @@ function create(context, direction, isCondition){ } else { // Update deleteLine(connectionsData[index].line); - if(!isCondition){deleteCondition(connectionsData[index].condition)} - let connection = createArrow(firstObjectID, secondObjectID, null, null, direction, null, isCondition); + if (!isCondition) { + deleteCondition(connectionsData[index].condition) + } + + let connection = createArrow(firstObjectID, secondObjectID, null, null, direction, connectionsData[index].condition, isCondition); connectionsData.push(connection); sketch.UI.message("Current connection is updated 🤘"); } diff --git a/src/utilities/conditions.js b/src/utilities/conditions.js index 4272a9b..917cf46 100644 --- a/src/utilities/conditions.js +++ b/src/utilities/conditions.js @@ -1,5 +1,5 @@ import sketch from 'sketch'; -import { addToConditionGroup } from "./groups.js"; +import { addToConditionGroup, checkForGroup } from "./groups.js"; let Settings = require('sketch/settings'); let UI = require('sketch/ui') ; @@ -33,7 +33,6 @@ export function addCondition(keyword, x, y) { symbol = symbolMaster.createNewInstance(); symbol = addToConditionGroup(symbol, x, y); } - return symbol; } diff --git a/src/utilities/groups.js b/src/utilities/groups.js index 92a0da7..e335195 100644 --- a/src/utilities/groups.js +++ b/src/utilities/groups.js @@ -44,8 +44,6 @@ export function addToConditionGroup(condition, x, y) { let arGroupX = arGroup != null ? arGroup.frame().x() : 0; let arGroupY = arGroup != null ? arGroup.frame().y() : 0; - - log("Arr group "+arGroupX) if (conGroup) { condition.frame.x = From f6abbf5ac5894390c90bad781564706959750ead Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Sun, 7 Jul 2019 23:20:32 +0300 Subject: [PATCH 35/44] couldn't fix problem with group position --- arrows.sketchplugin/Contents/Sketch/script.js | 2 -- arrows.sketchplugin/Contents/Sketch/script.js.map | 2 +- src/draw.js | 2 -- src/utilities/groups.js | 2 +- 4 files changed, 2 insertions(+), 6 deletions(-) diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index f9affc1..6026867 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -287,10 +287,8 @@ function drawConnection(firstObjectID, secondObjectID, style, type, localDirecti if (isCondition == true) { if (document.getLayerWithID(conditionID)) { - log("let's update"); connection.conditionID = Object(_utilities_conditions_js__WEBPACK_IMPORTED_MODULE_2__["updateCondition"])(conditionID, connectionPos.middlePosX, connectionPos.middlePosY); } else { - log("let's NOT update"); connection.conditionID = Object(_utilities_conditions_js__WEBPACK_IMPORTED_MODULE_2__["addCondition"])("#con", connectionPos.middlePosX, connectionPos.middlePosY); } } else { diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index f09eb21..88cdca0 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/createArrow.js","webpack://exports/./src/draw.js","webpack://exports/./src/script.js","webpack://exports/./src/updateArrow.js","webpack://exports/./src/utilities/conditions.js","webpack://exports/./src/utilities/data.js","webpack://exports/./src/utilities/getSourceObject.js","webpack://exports/./src/utilities/groups.js","webpack://exports/./src/utilities/lines.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["Settings","require","document","sketch","fromNative","context","createArrow","firstObjectID","secondObjectID","style","type","direction","conditionID","isCondition","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","firstObject","secondObject","condition","line","objectID","getLayerWithID","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","sourceObjectID","childObjectID","sourceObject","childObject","settingForKey","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","UI","docData","documentData","currentParentGroup","currentPage","currentArtboard","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","log","updateCondition","addCondition","styleLine","addToArrowsGroup","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","currentGroup","checkForGroup","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","layers","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","pluginKey","pluginData","connectionsData","command","valueForKey_onLayer_forPluginIdentifier","getConnectionsData","createAutoArrow","create","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","autoUpdateSelectedArrows","a","selection","count","class","getSourceObjectFromSelection","connectionIndex","g","String","index","length","push","message","deleteLine","deleteCondition","deleteConnectionFromData","setValue_forKey_onLayer_forPluginIdentifier","updateSelectedArrows","update","updateArtboardArrows","updateAllArrows","deleteSelectedArrows","deleteArtboardArrows","deleteAllArrows","level","isUpdate","newConnectionsData","firstObjectArtboard","secondObjectArtboard","i","updateArrow","sketchObject","parentArtboard","lineID","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","getImportableSymbolReferencesForDocument","name","includes","alert","symbolMaster","import","createNewInstance","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","fixGeometryWithOptions","id","conditionObject","selectedGroup","remove","dataArray","connectionIndexArray","data","splice","defineSourceObject","groupName","addLayers","Group","group","locked","moveToBack","adjustToFit","lineObject","localStyle","getLayerStyles","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","thickness","endMarkerType","allStyles","allLayerStyles","styles"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch';\nimport { drawConnection } from \"./draw.js\";\n\nvar Settings = require('sketch/settings');\nlet document = sketch.fromNative(context.document);\n\n// Main Function\n\nexport function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n return connection;\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}","import sketch from 'sketch';\nimport { styleLine } from \"./utilities/styling.js\";\nimport { addCondition, updateCondition } from \"./utilities/conditions.js\";\nimport { checkForGroup, addToArrowsGroup } from \"./utilities/groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\n// Main Function\n\nexport function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition){ // Refactored\n // Process of creating new connection \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n\n // Condition\n if(isCondition == true){\n if(document.getLayerWithID(conditionID)){\n log(\"let's update\")\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY);\n } else {\n log(\"let's NOT update\")\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY);\n }\n } else {\n connection.conditionID = null;\n }\n \n // Style\n connection.style = styleLine(connection.line, style);\n\n // Add to group\n addToArrowsGroup(connection.line);\n \n return connection\n}\n\n// Positions\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\");\n let diffX, diffY;\n \n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n \n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n \n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n\n return connectionPos\n}\n\n// Drawing Types\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n \n return line;\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n \n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n \n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n \n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n \n if(firstLayerPosX 1 && selection[0].class() != \"MSArtboardGroup\"){\n let sourceObjectID = getSourceObjectFromSelection(selection, direction);\n let connectionIndex = []\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n\n let firstObjectID = String(sourceObjectID);\n let secondObjectID = String(selection[g].objectID());\n let create = true\n let index\n\n if(connectionsData.length > 0){\n for (let y = 0; y < connectionsData.length; y++) {\n if ((firstObjectID == connectionsData[y].firstObject || firstObjectID == connectionsData[y].secondObject) && (secondObjectID == connectionsData[y].firstObject || secondObjectID == connectionsData[y].secondObject)) {\n // We have this connection and need to update\n create = false;\n index = y;\n connectionIndex.push(y);\n }\n }\n } \n \n if(create){\n // Create\n let connection = createArrow(firstObjectID, secondObjectID, null, null, direction, null, isCondition);\n connectionsData.push(connection);\n sketch.UI.message(\"New connection is created 🚀\");\n } else {\n // Update\n deleteLine(connectionsData[index].line);\n if (!isCondition) { \n deleteCondition(connectionsData[index].condition) \n }\n\n let connection = createArrow(firstObjectID, secondObjectID, null, null, direction, connectionsData[index].condition, isCondition);\n connectionsData.push(connection);\n sketch.UI.message(\"Current connection is updated 🤘\");\n }\n }\n }\n if(connectionIndex.length > 0){\n // Update data if there was changes\n connectionsData = deleteConnectionFromData(connectionIndex, connectionsData);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\n \n//\n// Plugin Incoming Commands - Update and Delete\n//\n\nexport function updateSelectedArrows(context) {update(context, 1, true);}\nexport function updateArtboardArrows(context) {update(context, 2, true);}\nexport function updateAllArrows(context) {update(context, 3, true);}\nexport function deleteSelectedArrows(context) {update(context, 1, false);}\nexport function deleteArtboardArrows(context) {update(context, 2, false);}\nexport function deleteAllArrows(context) {update(context, 3, false);}\n\nexport function update(context, level, isUpdate) {\n // 1 - selection level\n // 2 - artboard level\n // 3 - document level\n let newConnectionsData = [];\n let selection = context.selection;\n let firstObjectArtboard;\n let secondObjectArtboard;\n\n\n if (connectionsData.length > 0) {\n for (let i = 0; i < connectionsData.length; i++) {\n \n if (level == 3) {\n if(isUpdate){\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n sketch.UI.message(\"All arrows are updated\");\n } else {\n newConnectionsData = null\n sketch.UI.message(\"All arrows are deleted\");\n }\n }\n if (level == 2) {\n firstObjectArtboard = document.getLayerWithID(connectionsData[i].firstObject);\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID();\n secondObjectArtboard = document.getLayerWithID(connectionsData[i].secondObject);\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID();\n\n if (selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\") {\n\n if (firstObjectArtboard == selection[0].objectID()) {\n if (secondObjectArtboard == selection[0].objectID()) {\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n }\n }\n sketch.UI.message(\"All arrows are updated 🚀\");\n \n \n }\n let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition);\n connectionsData.push(connection);\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n sketch.UI.message(\"There is no arrows\");\n }\n}\n\n// const track = require(\"sketch-module-google-analytics\")\n// track(\"UA-138226597-1\", \"event\", {\n// ec: \"command\", \n// ea: \"create\", \n// ev: \"my-command\"\n// });\n\n\n\n\n\n","import sketch from 'sketch';\nimport { getConnectionsData, deleteConnectionFromData} from \"./utilities/data.js\"\nimport { deleteLine } from \"./utilities/lines.js\"\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\nlet connectionsData = getConnectionsData();\n\n\n\nexport function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n // let firstObject = document.getLayerWithID(firstObjectID);\n // let secondObject = document.getLayerWithID(secondObjectID);\n // let conditionObject = document.getLayerWithID(conditionID);\n // let result = false;\n \n // Need to delete data first, because we will have a new line\n // deleteLine(lineID);\n // if(conditionID && !isCondition){\n // if(conditionObject){conditionObject.remove();}\n // }\n \n connectionsData = deleteConnectionFromData(connectionIndex);\n\n // if(firstObject && secondObject){\n // // If we have all the objects, we can recreate the line\n // result = true;\n // }\n\n // return result;\n}","import sketch from 'sketch';\nimport { addToConditionGroup, checkForGroup } from \"./groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\nexport function addCondition(keyword, x, y) {\n let libraries = sketch.getLibraries();\n let libraryObject, symbolReferences, symbol;\n\n for (let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(\n document\n );\n for (let i = 0; i < symbolReferences.length; i++) {\n if (symbolReferences[i].name.includes(keyword)) {\n libraryObject = symbolReferences[i];\n }\n }\n }\n\n if (libraryObject == null) {\n symbol = null;\n UI.alert(\n \"Condition symbol is not found\",\n 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here'\n );\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y);\n }\n return symbol;\n}\n\nexport function updateCondition(conditionID, x, y) {\n let condition = document.getLayerWithID(conditionID);\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n }\n return condition.id;\n}\n\nexport function deleteCondition(conditionID) {\n let conditionObject = document.getLayerWithID(conditionID);\n let selectedGroup;\n if(conditionObject){\n selectedGroup = conditionObject.parent;\n conditionObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n\n }\n \n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, connectionsData;\n\ndocument = sketch.fromNative(context.document);\ndocData = context.document.documentData();\npluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\ncurrentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n\nexport function getConnectionsData() {\n let dataArray = [];\n\n if (pluginData) {\n for (let i = 0; i < pluginData.length; i++) {\n dataArray.push(pluginData[i]);\n }\n }\n return dataArray;\n}\n\nexport function deleteConnectionFromData(connectionIndexArray, data){\n if(data){\n for (let i = connectionIndexArray.length -1; i >= 0; i--) {\n data.splice(connectionIndexArray[i],1);\n }\n }\n return data;\n}\n","import sketch from 'sketch';\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function getSourceObjectFromSelection(selection, direction){\n let sourceObjectID = selection.firstObject().objectID();\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction);\n }\n }\n return sourceObjectID;\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){\n \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let sourceObjectID;\n\n if(direction == \"Right\"){\n if(firstObjectAbsPos.x <= secondObjectAbsPos.x){ // We need to get the doc position\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.y <= secondObjectAbsPos.y){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Left\"){\n if(firstObjectAbsPos.x <= secondObjectAbsPos.x){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n if(direction == \"Up\"){\n if(firstObjectAbsPos.y <= secondObjectAbsPos.y){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n return sourceObjectID;\n}","import sketch from 'sketch';\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function checkForGroup(groupName) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n \n return currentGroup;\n}\n\nexport function addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\");\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nexport function addToConditionGroup(condition, x, y) {\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2 + arGroupX;\n condition.frame.y = y - condition.frame.height / 2 + arGroupY;\n let Group = require(\"sketch/dom\").Group;\n let group = new Group({\n parent: currentParentGroup,\n name: \"Conditions\",\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n }","import sketch from 'sketch';\nlet document = sketch.fromNative(context.document);\n\nexport function deleteLine(lineID){\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\n\nexport function styleLine(line, style){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey));\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/createArrow.js","webpack://exports/./src/draw.js","webpack://exports/./src/script.js","webpack://exports/./src/updateArrow.js","webpack://exports/./src/utilities/conditions.js","webpack://exports/./src/utilities/data.js","webpack://exports/./src/utilities/getSourceObject.js","webpack://exports/./src/utilities/groups.js","webpack://exports/./src/utilities/lines.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["Settings","require","document","sketch","fromNative","context","createArrow","firstObjectID","secondObjectID","style","type","direction","conditionID","isCondition","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","firstObject","secondObject","condition","line","objectID","getLayerWithID","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","sourceObjectID","childObjectID","sourceObject","childObject","settingForKey","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","UI","docData","documentData","currentParentGroup","currentPage","currentArtboard","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","currentGroup","checkForGroup","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","layers","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","pluginKey","pluginData","connectionsData","command","valueForKey_onLayer_forPluginIdentifier","getConnectionsData","createAutoArrow","create","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","autoUpdateSelectedArrows","a","selection","count","class","getSourceObjectFromSelection","connectionIndex","g","String","index","length","push","message","deleteLine","deleteCondition","deleteConnectionFromData","setValue_forKey_onLayer_forPluginIdentifier","updateSelectedArrows","update","updateArtboardArrows","updateAllArrows","deleteSelectedArrows","deleteArtboardArrows","deleteAllArrows","level","isUpdate","newConnectionsData","firstObjectArtboard","secondObjectArtboard","i","updateArrow","sketchObject","parentArtboard","lineID","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","getImportableSymbolReferencesForDocument","name","includes","alert","symbolMaster","import","createNewInstance","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","fixGeometryWithOptions","id","conditionObject","selectedGroup","remove","dataArray","connectionIndexArray","data","splice","defineSourceObject","groupName","addLayers","Group","group","locked","moveToBack","adjustToFit","lineObject","localStyle","getLayerStyles","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","thickness","endMarkerType","allStyles","allLayerStyles","styles"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch';\nimport { drawConnection } from \"./draw.js\";\n\nvar Settings = require('sketch/settings');\nlet document = sketch.fromNative(context.document);\n\n// Main Function\n\nexport function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n return connection;\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}","import sketch from 'sketch';\nimport { styleLine } from \"./utilities/styling.js\";\nimport { addCondition, updateCondition } from \"./utilities/conditions.js\";\nimport { checkForGroup, addToArrowsGroup } from \"./utilities/groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\n// Main Function\n\nexport function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition){ // Refactored\n // Process of creating new connection \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n\n // Condition\n if(isCondition == true){\n if(document.getLayerWithID(conditionID)){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY);\n }\n } else {\n connection.conditionID = null;\n }\n \n // Style\n connection.style = styleLine(connection.line, style);\n\n // Add to group\n addToArrowsGroup(connection.line);\n \n return connection\n}\n\n// Positions\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\");\n let diffX, diffY;\n \n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n \n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n \n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n\n return connectionPos\n}\n\n// Drawing Types\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n \n return line;\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n \n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n \n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n \n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n \n if(firstLayerPosX 1 && selection[0].class() != \"MSArtboardGroup\"){\n let sourceObjectID = getSourceObjectFromSelection(selection, direction);\n let connectionIndex = []\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n\n let firstObjectID = String(sourceObjectID);\n let secondObjectID = String(selection[g].objectID());\n let create = true\n let index\n\n if(connectionsData.length > 0){\n for (let y = 0; y < connectionsData.length; y++) {\n if ((firstObjectID == connectionsData[y].firstObject || firstObjectID == connectionsData[y].secondObject) && (secondObjectID == connectionsData[y].firstObject || secondObjectID == connectionsData[y].secondObject)) {\n // We have this connection and need to update\n create = false;\n index = y;\n connectionIndex.push(y);\n }\n }\n } \n \n if(create){\n // Create\n let connection = createArrow(firstObjectID, secondObjectID, null, null, direction, null, isCondition);\n connectionsData.push(connection);\n sketch.UI.message(\"New connection is created 🚀\");\n } else {\n // Update\n deleteLine(connectionsData[index].line);\n if (!isCondition) { \n deleteCondition(connectionsData[index].condition) \n }\n\n let connection = createArrow(firstObjectID, secondObjectID, null, null, direction, connectionsData[index].condition, isCondition);\n connectionsData.push(connection);\n sketch.UI.message(\"Current connection is updated 🤘\");\n }\n }\n }\n if(connectionIndex.length > 0){\n // Update data if there was changes\n connectionsData = deleteConnectionFromData(connectionIndex, connectionsData);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\n \n//\n// Plugin Incoming Commands - Update and Delete\n//\n\nexport function updateSelectedArrows(context) {update(context, 1, true);}\nexport function updateArtboardArrows(context) {update(context, 2, true);}\nexport function updateAllArrows(context) {update(context, 3, true);}\nexport function deleteSelectedArrows(context) {update(context, 1, false);}\nexport function deleteArtboardArrows(context) {update(context, 2, false);}\nexport function deleteAllArrows(context) {update(context, 3, false);}\n\nexport function update(context, level, isUpdate) {\n // 1 - selection level\n // 2 - artboard level\n // 3 - document level\n let newConnectionsData = [];\n let selection = context.selection;\n let firstObjectArtboard;\n let secondObjectArtboard;\n\n\n if (connectionsData.length > 0) {\n for (let i = 0; i < connectionsData.length; i++) {\n \n if (level == 3) {\n if(isUpdate){\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n sketch.UI.message(\"All arrows are updated\");\n } else {\n newConnectionsData = null\n sketch.UI.message(\"All arrows are deleted\");\n }\n }\n if (level == 2) {\n firstObjectArtboard = document.getLayerWithID(connectionsData[i].firstObject);\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID();\n secondObjectArtboard = document.getLayerWithID(connectionsData[i].secondObject);\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID();\n\n if (selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\") {\n\n if (firstObjectArtboard == selection[0].objectID()) {\n if (secondObjectArtboard == selection[0].objectID()) {\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n }\n }\n sketch.UI.message(\"All arrows are updated 🚀\");\n \n \n }\n let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition);\n connectionsData.push(connection);\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n sketch.UI.message(\"There is no arrows\");\n }\n}\n\n// const track = require(\"sketch-module-google-analytics\")\n// track(\"UA-138226597-1\", \"event\", {\n// ec: \"command\", \n// ea: \"create\", \n// ev: \"my-command\"\n// });\n\n\n\n\n\n","import sketch from 'sketch';\nimport { getConnectionsData, deleteConnectionFromData} from \"./utilities/data.js\"\nimport { deleteLine } from \"./utilities/lines.js\"\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\nlet connectionsData = getConnectionsData();\n\n\n\nexport function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n // let firstObject = document.getLayerWithID(firstObjectID);\n // let secondObject = document.getLayerWithID(secondObjectID);\n // let conditionObject = document.getLayerWithID(conditionID);\n // let result = false;\n \n // Need to delete data first, because we will have a new line\n // deleteLine(lineID);\n // if(conditionID && !isCondition){\n // if(conditionObject){conditionObject.remove();}\n // }\n \n connectionsData = deleteConnectionFromData(connectionIndex);\n\n // if(firstObject && secondObject){\n // // If we have all the objects, we can recreate the line\n // result = true;\n // }\n\n // return result;\n}","import sketch from 'sketch';\nimport { addToConditionGroup, checkForGroup } from \"./groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\nexport function addCondition(keyword, x, y) {\n let libraries = sketch.getLibraries();\n let libraryObject, symbolReferences, symbol;\n\n for (let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(\n document\n );\n for (let i = 0; i < symbolReferences.length; i++) {\n if (symbolReferences[i].name.includes(keyword)) {\n libraryObject = symbolReferences[i];\n }\n }\n }\n\n if (libraryObject == null) {\n symbol = null;\n UI.alert(\n \"Condition symbol is not found\",\n 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here'\n );\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y);\n }\n return symbol;\n}\n\nexport function updateCondition(conditionID, x, y) {\n let condition = document.getLayerWithID(conditionID);\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n }\n return condition.id;\n}\n\nexport function deleteCondition(conditionID) {\n let conditionObject = document.getLayerWithID(conditionID);\n let selectedGroup;\n if(conditionObject){\n selectedGroup = conditionObject.parent;\n conditionObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n\n }\n \n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, connectionsData;\n\ndocument = sketch.fromNative(context.document);\ndocData = context.document.documentData();\npluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\ncurrentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n\nexport function getConnectionsData() {\n let dataArray = [];\n\n if (pluginData) {\n for (let i = 0; i < pluginData.length; i++) {\n dataArray.push(pluginData[i]);\n }\n }\n return dataArray;\n}\n\nexport function deleteConnectionFromData(connectionIndexArray, data){\n if(data){\n for (let i = connectionIndexArray.length -1; i >= 0; i--) {\n data.splice(connectionIndexArray[i],1);\n }\n }\n return data;\n}\n","import sketch from 'sketch';\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function getSourceObjectFromSelection(selection, direction){\n let sourceObjectID = selection.firstObject().objectID();\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction);\n }\n }\n return sourceObjectID;\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){\n \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let sourceObjectID;\n\n if(direction == \"Right\"){\n if(firstObjectAbsPos.x <= secondObjectAbsPos.x){ // We need to get the doc position\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.y <= secondObjectAbsPos.y){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Left\"){\n if(firstObjectAbsPos.x <= secondObjectAbsPos.x){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n if(direction == \"Up\"){\n if(firstObjectAbsPos.y <= secondObjectAbsPos.y){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n return sourceObjectID;\n}","import sketch from 'sketch';\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function checkForGroup(groupName) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n\n return currentGroup;\n}\n\nexport function addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\");\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nexport function addToConditionGroup(condition, x, y) {\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2 + arGroupX;\n condition.frame.y = y - condition.frame.height / 2 + arGroupY;\n let Group = require(\"sketch/dom\").Group;\n let group = new Group({\n parent: currentParentGroup,\n name: \"Conditions\",\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n }","import sketch from 'sketch';\nlet document = sketch.fromNative(context.document);\n\nexport function deleteLine(lineID){\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\n\nexport function styleLine(line, style){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey));\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/src/draw.js b/src/draw.js index 02761dc..25f2693 100644 --- a/src/draw.js +++ b/src/draw.js @@ -34,10 +34,8 @@ export function drawConnection(firstObjectID, secondObjectID, style, type, local // Condition if(isCondition == true){ if(document.getLayerWithID(conditionID)){ - log("let's update") connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY); } else { - log("let's NOT update") connection.conditionID = addCondition("#con", connectionPos.middlePosX, connectionPos.middlePosY); } } else { diff --git a/src/utilities/groups.js b/src/utilities/groups.js index e335195..98c3bc1 100644 --- a/src/utilities/groups.js +++ b/src/utilities/groups.js @@ -16,7 +16,7 @@ export function checkForGroup(groupName) { // refactored currentGroup = currentParentGroup.layers()[i]; } } - + return currentGroup; } From 93390d154de52b5fe3d0704c5ff615565d81514d Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Mon, 8 Jul 2019 09:13:01 +0300 Subject: [PATCH 36/44] working on live reload --- .../Contents/Sketch/autoUpdate.js | 422 ++++++++++++++++++ .../Contents/Sketch/autoUpdate.js.map | 1 + .../Contents/Sketch/manifest.json | 11 + arrows.sketchplugin/Contents/Sketch/script.js | 35 +- .../Contents/Sketch/script.js.map | 2 +- src/autoUpdate.js | 62 +++ src/manifest.json | 11 + src/script.js | 28 +- src/utilities/conditions.js | 4 +- src/utilities/lines.js | 5 +- 10 files changed, 534 insertions(+), 47 deletions(-) create mode 100644 arrows.sketchplugin/Contents/Sketch/autoUpdate.js create mode 100644 arrows.sketchplugin/Contents/Sketch/autoUpdate.js.map create mode 100644 src/autoUpdate.js diff --git a/arrows.sketchplugin/Contents/Sketch/autoUpdate.js b/arrows.sketchplugin/Contents/Sketch/autoUpdate.js new file mode 100644 index 0000000..cbbae61 --- /dev/null +++ b/arrows.sketchplugin/Contents/Sketch/autoUpdate.js @@ -0,0 +1,422 @@ +var that = this; +function __skpm_run (key, context) { + that.context = context; + +var exports = +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = "./src/autoUpdate.js"); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./src/autoUpdate.js": +/*!***************************!*\ + !*** ./src/autoUpdate.js ***! + \***************************/ +/*! exports provided: autoUpdateSelectedArrows */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "autoUpdateSelectedArrows", function() { return autoUpdateSelectedArrows; }); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _utilities_lines_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utilities/lines.js */ "./src/utilities/lines.js"); +/* harmony import */ var _utilities_conditions_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utilities/conditions.js */ "./src/utilities/conditions.js"); + + +var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); + +var pluginKey = "flowArrows"; + + +function autoUpdateSelectedArrows(context) { + var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.actionContext.document); + var action = context.actionContext; + var docData = action.document.documentData(); + var pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); + var connectionsData = []; + + if (pluginData) { + for (var i = 0; i < pluginData.length; i++) { + connectionsData.push(pluginData[i]); + } + } + + console.log(connectionsData); + var movedLayers = Array.from(context.actionContext.layers).map(function (layer) { + return sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(layer); + }); + var firstObjectID = String(movedLayers[0].id); + var connectionIndex = []; + + if (connectionsData.length > 0) { + for (var y = 0; y < connectionsData.length; y++) { + if (firstObjectID == connectionsData[y].firstObject || firstObjectID == connectionsData[y].secondObject) { + connectionIndex.push(y); + } + } + } + + if (connectionIndex.length > 0) { + for (var x = 0; x < connectionIndex.length; x++) { + Object(_utilities_lines_js__WEBPACK_IMPORTED_MODULE_1__["deleteLine"])(connectionsData[connectionIndex[x]].line, document); + + if (!isCondition) { + Object(_utilities_conditions_js__WEBPACK_IMPORTED_MODULE_2__["deleteCondition"])(connectionsData[connectionIndex[x]].condition, document); + } + + var connection = createArrow(connectionsData[connectionIndex[x]].firstObject, connectionsData[connectionIndex[x]].secondObject, connectionsData[connectionIndex[x]].style, connectionsData[connectionIndex[x]].type, connectionsData[connectionIndex[x]].direction, connectionsData[connectionIndex[x]].conditionID, connectionsData[connectionIndex[x]].isCondition); + connectionsData.push(connection); + } + } + + if (connectionIndex.length > 0) { + // Update data if there was changes + connectionsData = deleteConnectionFromData(connectionIndex, connectionsData); + } + + context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, "arrowConnections", docData, pluginKey); +} + +/***/ }), + +/***/ "./src/utilities/conditions.js": +/*!*************************************!*\ + !*** ./src/utilities/conditions.js ***! + \*************************************/ +/*! exports provided: addCondition, updateCondition, deleteCondition */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addCondition", function() { return addCondition; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateCondition", function() { return updateCondition; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteCondition", function() { return deleteCondition; }); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _groups_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./groups.js */ "./src/utilities/groups.js"); + + + +var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); + +var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); + +var docData = context.document.documentData(); +var currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); +function addCondition(keyword, x, y) { + var libraries = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.getLibraries(); + var libraryObject, symbolReferences, symbol; + + for (var g = 0; g < libraries.length; g++) { + symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document); + + for (var i = 0; i < symbolReferences.length; i++) { + if (symbolReferences[i].name.includes(keyword)) { + libraryObject = symbolReferences[i]; + } + } + } + + if (libraryObject == null) { + symbol = null; + UI.alert("Condition symbol is not found", 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as "#condition" so it will be added here'); + } else { + var symbolMaster = libraryObject.import(); + symbol = symbolMaster.createNewInstance(); + symbol = Object(_groups_js__WEBPACK_IMPORTED_MODULE_1__["addToConditionGroup"])(symbol, x, y); + } + + return symbol; +} +function updateCondition(conditionID, x, y) { + var condition = document.getLayerWithID(conditionID); + var conGroup = Object(_groups_js__WEBPACK_IMPORTED_MODULE_1__["checkForGroup"])("Conditions"); + var arGroup = Object(_groups_js__WEBPACK_IMPORTED_MODULE_1__["checkForGroup"])("Arrows"); + var arGroupX = arGroup != null ? arGroup.frame().x() : 0; + var arGroupY = arGroup != null ? arGroup.frame().y() : 0; + + if (conGroup) { + condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX); + condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY); + conGroup.fixGeometryWithOptions(1); + } else { + condition.frame.x = x - condition.frame.width / 2; + condition.frame.y = y - condition.frame.height / 2; + } + + return condition.id; +} +function deleteCondition(conditionID, document) { + var conditionObject = document.getLayerWithID(conditionID); + var selectedGroup; + + if (conditionObject) { + selectedGroup = conditionObject.parent; + conditionObject.remove(); + + if (selectedGroup.layers.length == 0) { + selectedGroup.remove(); + } + } +} + +/***/ }), + +/***/ "./src/utilities/groups.js": +/*!*********************************!*\ + !*** ./src/utilities/groups.js ***! + \*********************************/ +/*! exports provided: checkForGroup, addToArrowsGroup, addToConditionGroup */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "checkForGroup", function() { return checkForGroup; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addToArrowsGroup", function() { return addToArrowsGroup; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addToConditionGroup", function() { return addToConditionGroup; }); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); + + +var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); + +var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); + +var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); +var docData = context.document.documentData(); +var currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); +function checkForGroup(groupName) { + // refactored + var currentGroup = null; // Checking all the groups that we have + + for (var i = 0; i < currentParentGroup.layers().count(); i++) { + if (currentParentGroup.layers()[i].name() == groupName) { + currentGroup = currentParentGroup.layers()[i]; + } + } + + return currentGroup; +} +function addToArrowsGroup(line) { + var currentGroup = checkForGroup("Arrows"); + + if (currentGroup) { + currentGroup.addLayers([line]); + currentGroup.fixGeometryWithOptions(1); + } else { + var Group = __webpack_require__(/*! sketch/dom */ "sketch/dom").Group; + + var group = new Group({ + parent: currentParentGroup, + name: 'Arrows', + locked: true, + layers: [line] + }); + group.moveToBack(); + group.adjustToFit(); + } +} +function addToConditionGroup(condition, x, y) { + var conGroup = checkForGroup("Conditions"); + var arGroup = checkForGroup("Arrows"); + var arGroupX = arGroup != null ? arGroup.frame().x() : 0; + var arGroupY = arGroup != null ? arGroup.frame().y() : 0; + + if (conGroup) { + condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX); + condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY); + condition.parent = conGroup; + conGroup.fixGeometryWithOptions(1); + } else { + condition.frame.x = x - condition.frame.width / 2 + arGroupX; + condition.frame.y = y - condition.frame.height / 2 + arGroupY; + + var Group = __webpack_require__(/*! sketch/dom */ "sketch/dom").Group; + + var group = new Group({ + parent: currentParentGroup, + name: "Conditions", + layers: [condition] + }); + group.moveToBack(); + group.adjustToFit(); + } + + return condition.id; +} + +/***/ }), + +/***/ "./src/utilities/lines.js": +/*!********************************!*\ + !*** ./src/utilities/lines.js ***! + \********************************/ +/*! exports provided: deleteLine */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteLine", function() { return deleteLine; }); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); + + +var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); + +function deleteLine(lineID, document) { + log(lineID); + var lineObject = document.getLayerWithID(lineID); + var selectedGroup; + + if (lineObject) { + selectedGroup = lineObject.parent; + lineObject.remove(); + + if (selectedGroup.layers.length == 0) { + selectedGroup.remove(); + } + } +} + +/***/ }), + +/***/ "sketch": +/*!*************************!*\ + !*** external "sketch" ***! + \*************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = require("sketch"); + +/***/ }), + +/***/ "sketch/dom": +/*!*****************************!*\ + !*** external "sketch/dom" ***! + \*****************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = require("sketch/dom"); + +/***/ }), + +/***/ "sketch/settings": +/*!**********************************!*\ + !*** external "sketch/settings" ***! + \**********************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = require("sketch/settings"); + +/***/ }), + +/***/ "sketch/ui": +/*!****************************!*\ + !*** external "sketch/ui" ***! + \****************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = require("sketch/ui"); + +/***/ }) + +/******/ }); + if (key === 'default' && typeof exports === 'function') { + exports(context); + } else { + exports[key](context); + } +} +that['autoUpdateSelectedArrows'] = __skpm_run.bind(this, 'autoUpdateSelectedArrows'); +that['autoUpdateSelectedArrows'] = __skpm_run.bind(this, 'autoUpdateSelectedArrows'); +that['onRun'] = __skpm_run.bind(this, 'default') + +//# sourceMappingURL=autoUpdate.js.map \ No newline at end of file diff --git a/arrows.sketchplugin/Contents/Sketch/autoUpdate.js.map b/arrows.sketchplugin/Contents/Sketch/autoUpdate.js.map new file mode 100644 index 0000000..453454d --- /dev/null +++ b/arrows.sketchplugin/Contents/Sketch/autoUpdate.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/autoUpdate.js","webpack://exports/./src/utilities/conditions.js","webpack://exports/./src/utilities/groups.js","webpack://exports/./src/utilities/lines.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","pluginKey","autoUpdateSelectedArrows","context","document","sketch","fromNative","actionContext","action","docData","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","connectionsData","i","length","push","console","log","movedLayers","Array","from","layers","map","layer","firstObjectID","String","id","connectionIndex","y","firstObject","secondObject","x","deleteLine","line","isCondition","deleteCondition","condition","connection","createArrow","style","type","direction","conditionID","deleteConnectionFromData","setValue_forKey_onLayer_forPluginIdentifier","Settings","currentParentGroup","currentPage","currentArtboard","addCondition","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","g","getImportableSymbolReferencesForDocument","name","includes","alert","symbolMaster","import","createNewInstance","addToConditionGroup","updateCondition","getLayerWithID","conGroup","checkForGroup","arGroup","arGroupX","frame","arGroupY","width","height","fixGeometryWithOptions","conditionObject","selectedGroup","parent","remove","groupName","currentGroup","count","addToArrowsGroup","addLayers","Group","group","locked","moveToBack","adjustToFit","lineID","lineObject"],"mappings":";;;;;;AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;;;;;;;AClFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA,IAAIA,EAAE,GAAGC,mBAAO,CAAC,4BAAD,CAAhB;;AACA,IAAMC,SAAS,GAAG,YAAlB;AACA;AACA;AAIO,SAASC,wBAAT,CAAkCC,OAAlC,EAA2C;AAC9C,MAAIC,QAAQ,GAAGC,6CAAM,CAACC,UAAP,CAAkBH,OAAO,CAACI,aAAR,CAAsBH,QAAxC,CAAf;AACA,MAAMI,MAAM,GAAGL,OAAO,CAACI,aAAvB;AACA,MAAIE,OAAO,GAAGD,MAAM,CAACJ,QAAP,CAAgBM,YAAhB,EAAd;AACA,MAAIC,UAAU,GAAGR,OAAO,CAACS,OAAR,CAAgBC,uCAAhB,CAAwD,kBAAxD,EAA4EJ,OAA5E,EAAqFR,SAArF,CAAjB;AAEA,MAAIa,eAAe,GAAG,EAAtB;;AAEA,MAAIH,UAAJ,EAAgB;AACZ,SAAK,IAAII,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGJ,UAAU,CAACK,MAA/B,EAAuCD,CAAC,EAAxC,EAA4C;AACxCD,qBAAe,CAACG,IAAhB,CAAqBN,UAAU,CAACI,CAAD,CAA/B;AACH;AACJ;;AAEDG,SAAO,CAACC,GAAR,CAAYL,eAAZ;AAEA,MAAMM,WAAW,GAAGC,KAAK,CAACC,IAAN,CAAWnB,OAAO,CAACI,aAAR,CAAsBgB,MAAjC,EAAyCC,GAAzC,CAA6C,UAAAC,KAAK;AAAA,WAAIpB,6CAAM,CAACC,UAAP,CAAkBmB,KAAlB,CAAJ;AAAA,GAAlD,CAApB;AACA,MAAIC,aAAa,GAAGC,MAAM,CAACP,WAAW,CAAC,CAAD,CAAX,CAAeQ,EAAhB,CAA1B;AACA,MAAIC,eAAe,GAAG,EAAtB;;AAEA,MAAGf,eAAe,CAACE,MAAhB,GAAyB,CAA5B,EAA8B;AAC1B,SAAK,IAAIc,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGhB,eAAe,CAACE,MAApC,EAA4Cc,CAAC,EAA7C,EAAiD;AAC7C,UAAIJ,aAAa,IAAIZ,eAAe,CAACgB,CAAD,CAAf,CAAmBC,WAApC,IAAmDL,aAAa,IAAIZ,eAAe,CAACgB,CAAD,CAAf,CAAmBE,YAA3F,EAAyG;AACrGH,uBAAe,CAACZ,IAAhB,CAAqBa,CAArB;AACH;AACJ;AACJ;;AAED,MAAGD,eAAe,CAACb,MAAhB,GAAyB,CAA5B,EAA8B;AAC1B,SAAK,IAAIiB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGJ,eAAe,CAACb,MAApC,EAA4CiB,CAAC,EAA7C,EAAiD;AAC7CC,4EAAU,CAACpB,eAAe,CAACe,eAAe,CAACI,CAAD,CAAhB,CAAf,CAAoCE,IAArC,EAA2C/B,QAA3C,CAAV;;AACA,UAAI,CAACgC,WAAL,EAAkB;AACdC,wFAAe,CAACvB,eAAe,CAACe,eAAe,CAACI,CAAD,CAAhB,CAAf,CAAoCK,SAArC,EAAgDlC,QAAhD,CAAf;AACH;;AACD,UAAImC,UAAU,GAAGC,WAAW,CACxB1B,eAAe,CAACe,eAAe,CAACI,CAAD,CAAhB,CAAf,CAAoCF,WADZ,EAExBjB,eAAe,CAACe,eAAe,CAACI,CAAD,CAAhB,CAAf,CAAoCD,YAFZ,EAGxBlB,eAAe,CAACe,eAAe,CAACI,CAAD,CAAhB,CAAf,CAAoCQ,KAHZ,EAIxB3B,eAAe,CAACe,eAAe,CAACI,CAAD,CAAhB,CAAf,CAAoCS,IAJZ,EAKxB5B,eAAe,CAACe,eAAe,CAACI,CAAD,CAAhB,CAAf,CAAoCU,SALZ,EAMxB7B,eAAe,CAACe,eAAe,CAACI,CAAD,CAAhB,CAAf,CAAoCW,WANZ,EAOxB9B,eAAe,CAACe,eAAe,CAACI,CAAD,CAAhB,CAAf,CAAoCG,WAPZ,CAA5B;AASAtB,qBAAe,CAACG,IAAhB,CAAqBsB,UAArB;AACH;AACJ;;AAED,MAAGV,eAAe,CAACb,MAAhB,GAAyB,CAA5B,EAA8B;AAC1B;AACAF,mBAAe,GAAG+B,wBAAwB,CAAChB,eAAD,EAAkBf,eAAlB,CAA1C;AACH;;AACDX,SAAO,CAACS,OAAR,CAAgBkC,2CAAhB,CAA4DhC,eAA5D,EAA6E,kBAA7E,EAAiGL,OAAjG,EAA0GR,SAA1G;AAEH,C;;;;;;;;;;;;AC7DD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;;AACA,IAAI8C,QAAQ,GAAG/C,mBAAO,CAAC,wCAAD,CAAtB;;AACA,IAAID,EAAE,GAAGC,mBAAO,CAAC,4BAAD,CAAhB;;AAEA,IAAIS,OAAO,GAAGN,OAAO,CAACC,QAAR,CAAiBM,YAAjB,EAAd;AACA,IAAIsC,kBAAkB,GAAGvC,OAAO,CAACwC,WAAR,GAAsBC,eAAtB,MAA2CzC,OAAO,CAACwC,WAAR,EAApE;AAEO,SAASE,YAAT,CAAsBC,OAAtB,EAA+BnB,CAA/B,EAAkCH,CAAlC,EAAqC;AAC1C,MAAIuB,SAAS,GAAGhD,6CAAM,CAACiD,YAAP,EAAhB;AACA,MAAIC,aAAJ,EAAmBC,gBAAnB,EAAqCC,MAArC;;AAEA,OAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGL,SAAS,CAACrC,MAA9B,EAAsC0C,CAAC,EAAvC,EAA2C;AACzCF,oBAAgB,GAAGH,SAAS,CAACK,CAAD,CAAT,CAAaC,wCAAb,CACjBvD,QADiB,CAAnB;;AAGA,SAAK,IAAIW,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyC,gBAAgB,CAACxC,MAArC,EAA6CD,CAAC,EAA9C,EAAkD;AAChD,UAAIyC,gBAAgB,CAACzC,CAAD,CAAhB,CAAoB6C,IAApB,CAAyBC,QAAzB,CAAkCT,OAAlC,CAAJ,EAAgD;AAC9CG,qBAAa,GAAGC,gBAAgB,CAACzC,CAAD,CAAhC;AACD;AACF;AACF;;AAED,MAAIwC,aAAa,IAAI,IAArB,EAA2B;AACzBE,UAAM,GAAG,IAAT;AACA1D,MAAE,CAAC+D,KAAH,CACE,+BADF,EAEE,kWAFF;AAID,GAND,MAMO;AACL,QAAIC,YAAY,GAAGR,aAAa,CAACS,MAAd,EAAnB;AACAP,UAAM,GAAGM,YAAY,CAACE,iBAAb,EAAT;AACAR,UAAM,GAAGS,sEAAmB,CAACT,MAAD,EAASxB,CAAT,EAAYH,CAAZ,CAA5B;AACD;;AACD,SAAO2B,MAAP;AACD;AAEM,SAASU,eAAT,CAAyBvB,WAAzB,EAAsCX,CAAtC,EAAyCH,CAAzC,EAA4C;AACjD,MAAIQ,SAAS,GAAGlC,QAAQ,CAACgE,cAAT,CAAwBxB,WAAxB,CAAhB;AACA,MAAIyB,QAAQ,GAAGC,gEAAa,CAAC,YAAD,CAA5B;AACA,MAAIC,OAAO,GAAGD,gEAAa,CAAC,QAAD,CAA3B;AACA,MAAIE,QAAQ,GAAGD,OAAO,IAAI,IAAX,GAAkBA,OAAO,CAACE,KAAR,GAAgBxC,CAAhB,EAAlB,GAAwC,CAAvD;AACA,MAAIyC,QAAQ,GAAGH,OAAO,IAAI,IAAX,GAAkBA,OAAO,CAACE,KAAR,GAAgB3C,CAAhB,EAAlB,GAAwC,CAAvD;;AAEA,MAAIuC,QAAJ,EAAc;AACZ/B,aAAS,CAACmC,KAAV,CAAgBxC,CAAhB,GACEA,CAAC,GAAGK,SAAS,CAACmC,KAAV,CAAgBE,KAAhB,GAAwB,CAA5B,IAAiCN,QAAQ,CAACI,KAAT,GAAiBxC,CAAjB,KAAuBuC,QAAxD,CADF;AAEAlC,aAAS,CAACmC,KAAV,CAAgB3C,CAAhB,GACEA,CAAC,GAAGQ,SAAS,CAACmC,KAAV,CAAgBG,MAAhB,GAAyB,CAA7B,IAAkCP,QAAQ,CAACI,KAAT,GAAiB3C,CAAjB,KAAuB4C,QAAzD,CADF;AAEAL,YAAQ,CAACQ,sBAAT,CAAgC,CAAhC;AACD,GAND,MAMO;AACLvC,aAAS,CAACmC,KAAV,CAAgBxC,CAAhB,GAAoBA,CAAC,GAAGK,SAAS,CAACmC,KAAV,CAAgBE,KAAhB,GAAwB,CAAhD;AACArC,aAAS,CAACmC,KAAV,CAAgB3C,CAAhB,GAAoBA,CAAC,GAAGQ,SAAS,CAACmC,KAAV,CAAgBG,MAAhB,GAAyB,CAAjD;AACD;;AACD,SAAOtC,SAAS,CAACV,EAAjB;AACD;AAEM,SAASS,eAAT,CAAyBO,WAAzB,EAAsCxC,QAAtC,EAAgD;AACnD,MAAI0E,eAAe,GAAG1E,QAAQ,CAACgE,cAAT,CAAwBxB,WAAxB,CAAtB;AACA,MAAImC,aAAJ;;AACA,MAAGD,eAAH,EAAmB;AACjBC,iBAAa,GAAGD,eAAe,CAACE,MAAhC;AACAF,mBAAe,CAACG,MAAhB;;AACA,QAAGF,aAAa,CAACxD,MAAd,CAAqBP,MAArB,IAA+B,CAAlC,EAAoC;AAClC+D,mBAAa,CAACE,MAAd;AACD;AACF;AACF,C;;;;;;;;;;;;ACnEH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA,IAAIlC,QAAQ,GAAG/C,mBAAO,CAAC,wCAAD,CAAtB;;AACA,IAAID,EAAE,GAAGC,mBAAO,CAAC,4BAAD,CAAhB;;AAEA,IAAII,QAAQ,GAAGC,6CAAM,CAACC,UAAP,CAAkBH,OAAO,CAACC,QAA1B,CAAf;AACA,IAAIK,OAAO,GAAGN,OAAO,CAACC,QAAR,CAAiBM,YAAjB,EAAd;AACA,IAAIsC,kBAAkB,GAAGvC,OAAO,CAACwC,WAAR,GAAsBC,eAAtB,MAA2CzC,OAAO,CAACwC,WAAR,EAApE;AAGO,SAASqB,aAAT,CAAuBY,SAAvB,EAAkC;AAAE;AACvC,MAAIC,YAAY,GAAG,IAAnB,CADqC,CAGrC;;AACA,OAAI,IAAIpE,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGiC,kBAAkB,CAACzB,MAAnB,GAA4B6D,KAA5B,EAAnB,EAAwDrE,CAAC,EAAzD,EAA4D;AAC1D,QAAGiC,kBAAkB,CAACzB,MAAnB,GAA4BR,CAA5B,EAA+B6C,IAA/B,MAAyCsB,SAA5C,EAAuD;AACrDC,kBAAY,GAAGnC,kBAAkB,CAACzB,MAAnB,GAA4BR,CAA5B,CAAf;AACD;AACF;;AAED,SAAOoE,YAAP;AACH;AAEM,SAASE,gBAAT,CAA0BlD,IAA1B,EAA+B;AAClC,MAAIgD,YAAY,GAAGb,aAAa,CAAC,QAAD,CAAhC;;AACA,MAAGa,YAAH,EAAgB;AACdA,gBAAY,CAACG,SAAb,CAAuB,CAACnD,IAAD,CAAvB;AACAgD,gBAAY,CAACN,sBAAb,CAAoC,CAApC;AACD,GAHD,MAGO;AACL,QAAIU,KAAK,GAAGvF,mBAAO,CAAC,8BAAD,CAAP,CAAsBuF,KAAlC;;AACA,QAAIC,KAAK,GAAG,IAAID,KAAJ,CAAU;AACpBP,YAAM,EAAEhC,kBADY;AAEpBY,UAAI,EAAE,QAFc;AAGpB6B,YAAM,EAAE,IAHY;AAIpBlE,YAAM,EAAE,CAACY,IAAD;AAJY,KAAV,CAAZ;AAMAqD,SAAK,CAACE,UAAN;AACAF,SAAK,CAACG,WAAN;AACD;AACJ;AAEM,SAASzB,mBAAT,CAA6B5B,SAA7B,EAAwCL,CAAxC,EAA2CH,CAA3C,EAA8C;AACjD,MAAIuC,QAAQ,GAAGC,aAAa,CAAC,YAAD,CAA5B;AACA,MAAIC,OAAO,GAAGD,aAAa,CAAC,QAAD,CAA3B;AAEA,MAAIE,QAAQ,GAAGD,OAAO,IAAI,IAAX,GAAkBA,OAAO,CAACE,KAAR,GAAgBxC,CAAhB,EAAlB,GAAwC,CAAvD;AACA,MAAIyC,QAAQ,GAAGH,OAAO,IAAI,IAAX,GAAkBA,OAAO,CAACE,KAAR,GAAgB3C,CAAhB,EAAlB,GAAwC,CAAvD;;AAEA,MAAIuC,QAAJ,EAAc;AACZ/B,aAAS,CAACmC,KAAV,CAAgBxC,CAAhB,GACEA,CAAC,GAAGK,SAAS,CAACmC,KAAV,CAAgBE,KAAhB,GAAwB,CAA5B,IAAiCN,QAAQ,CAACI,KAAT,GAAiBxC,CAAjB,KAAuBuC,QAAxD,CADF;AAEAlC,aAAS,CAACmC,KAAV,CAAgB3C,CAAhB,GACEA,CAAC,GAAGQ,SAAS,CAACmC,KAAV,CAAgBG,MAAhB,GAAyB,CAA7B,IAAkCP,QAAQ,CAACI,KAAT,GAAiB3C,CAAjB,KAAuB4C,QAAzD,CADF;AAEApC,aAAS,CAAC0C,MAAV,GAAmBX,QAAnB;AACAA,YAAQ,CAACQ,sBAAT,CAAgC,CAAhC;AACD,GAPD,MAOO;AACLvC,aAAS,CAACmC,KAAV,CAAgBxC,CAAhB,GAAoBA,CAAC,GAAGK,SAAS,CAACmC,KAAV,CAAgBE,KAAhB,GAAwB,CAA5B,GAAgCH,QAApD;AACAlC,aAAS,CAACmC,KAAV,CAAgB3C,CAAhB,GAAoBA,CAAC,GAAGQ,SAAS,CAACmC,KAAV,CAAgBG,MAAhB,GAAyB,CAA7B,GAAiCF,QAArD;;AACA,QAAIa,KAAK,GAAGvF,mBAAO,CAAC,8BAAD,CAAP,CAAsBuF,KAAlC;;AACA,QAAIC,KAAK,GAAG,IAAID,KAAJ,CAAU;AACpBP,YAAM,EAAEhC,kBADY;AAEpBY,UAAI,EAAE,YAFc;AAGpBrC,YAAM,EAAE,CAACe,SAAD;AAHY,KAAV,CAAZ;AAKAkD,SAAK,CAACE,UAAN;AACAF,SAAK,CAACG,WAAN;AACD;;AACD,SAAOrD,SAAS,CAACV,EAAjB;AACD,C;;;;;;;;;;;;ACnEH;AAAA;AAAA;AAAA;AAAA;;AACA,IAAI7B,EAAE,GAAGC,mBAAO,CAAC,4BAAD,CAAhB;;AAEO,SAASkC,UAAT,CAAoB0D,MAApB,EAA4BxF,QAA5B,EAAqC;AACxCe,KAAG,CAACyE,MAAD,CAAH;AACA,MAAIC,UAAU,GAAGzF,QAAQ,CAACgE,cAAT,CAAwBwB,MAAxB,CAAjB;AACA,MAAIb,aAAJ;;AACA,MAAGc,UAAH,EAAc;AACZd,iBAAa,GAAGc,UAAU,CAACb,MAA3B;AACAa,cAAU,CAACZ,MAAX;;AACA,QAAGF,aAAa,CAACxD,MAAd,CAAqBP,MAArB,IAA+B,CAAlC,EAAoC;AAClC+D,mBAAa,CAACE,MAAd;AACD;AACF;AACJ,C;;;;;;;;;;;ACdD,mC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,4C;;;;;;;;;;;ACAA,sC","file":"autoUpdate.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/autoUpdate.js\");\n","import sketch from 'sketch';\nlet UI = require('sketch/ui');\nconst pluginKey = \"flowArrows\";\nimport { deleteLine } from \"./utilities/lines.js\"\nimport { deleteCondition } from \"./utilities/conditions.js\";\n\n\n\nexport function autoUpdateSelectedArrows(context) {\n let document = sketch.fromNative(context.actionContext.document)\n const action = context.actionContext\n let docData = action.document.documentData();\n let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey)\n\n let connectionsData = [];\n\n if (pluginData) {\n for (let i = 0; i < pluginData.length; i++) {\n connectionsData.push(pluginData[i]);\n }\n }\n\n console.log(connectionsData)\n \n const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer))\n let firstObjectID = String(movedLayers[0].id);\n let connectionIndex = []\n\n if(connectionsData.length > 0){\n for (let y = 0; y < connectionsData.length; y++) {\n if (firstObjectID == connectionsData[y].firstObject || firstObjectID == connectionsData[y].secondObject) {\n connectionIndex.push(y);\n }\n }\n } \n\n if(connectionIndex.length > 0){\n for (let x = 0; x < connectionIndex.length; x++) {\n deleteLine(connectionsData[connectionIndex[x]].line, document);\n if (!isCondition) { \n deleteCondition(connectionsData[connectionIndex[x]].condition, document);\n }\n let connection = createArrow(\n connectionsData[connectionIndex[x]].firstObject, \n connectionsData[connectionIndex[x]].secondObject, \n connectionsData[connectionIndex[x]].style,\n connectionsData[connectionIndex[x]].type, \n connectionsData[connectionIndex[x]].direction, \n connectionsData[connectionIndex[x]].conditionID, \n connectionsData[connectionIndex[x]].isCondition\n );\n connectionsData.push(connection);\n }\n }\n\n if(connectionIndex.length > 0){\n // Update data if there was changes\n connectionsData = deleteConnectionFromData(connectionIndex, connectionsData);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n\n}","import sketch from 'sketch';\nimport { addToConditionGroup, checkForGroup } from \"./groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\nexport function addCondition(keyword, x, y) {\n let libraries = sketch.getLibraries();\n let libraryObject, symbolReferences, symbol;\n\n for (let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(\n document\n );\n for (let i = 0; i < symbolReferences.length; i++) {\n if (symbolReferences[i].name.includes(keyword)) {\n libraryObject = symbolReferences[i];\n }\n }\n }\n\n if (libraryObject == null) {\n symbol = null;\n UI.alert(\n \"Condition symbol is not found\",\n 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here'\n );\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y);\n }\n return symbol;\n}\n\nexport function updateCondition(conditionID, x, y) {\n let condition = document.getLayerWithID(conditionID);\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n }\n return condition.id;\n}\n\nexport function deleteCondition(conditionID, document) {\n let conditionObject = document.getLayerWithID(conditionID);\n let selectedGroup;\n if(conditionObject){\n selectedGroup = conditionObject.parent;\n conditionObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n }\n \n","import sketch from 'sketch';\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function checkForGroup(groupName) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n\n return currentGroup;\n}\n\nexport function addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\");\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nexport function addToConditionGroup(condition, x, y) {\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2 + arGroupX;\n condition.frame.y = y - condition.frame.height / 2 + arGroupY;\n let Group = require(\"sketch/dom\").Group;\n let group = new Group({\n parent: currentParentGroup,\n name: \"Conditions\",\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n }","import sketch from 'sketch';\nlet UI = require('sketch/ui');\n\nexport function deleteLine(lineID, document){\n log(lineID)\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/arrows.sketchplugin/Contents/Sketch/manifest.json b/arrows.sketchplugin/Contents/Sketch/manifest.json index eff8449..2e59739 100644 --- a/arrows.sketchplugin/Contents/Sketch/manifest.json +++ b/arrows.sketchplugin/Contents/Sketch/manifest.json @@ -102,6 +102,17 @@ "icon": "icon.png", "handler": "updateSelectedArrows" }, + { + "name": "Auto update arrows between selected", + "script": "autoUpdate.js", + "handlers": { + "actions": { + "LayersMoved.finish": "autoUpdateSelectedArrows", + "LayersResized.finish": "autoUpdateSelectedArrows" + } + }, + "identifier": "autoUpdateSelectedArrows" + }, { "name": "Update arrows from the selected artboard", "description": "Update all the arrows from selected artboard", diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index 6026867..2ecc92d 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -676,7 +676,7 @@ function drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondL /*!***********************!*\ !*** ./src/script.js ***! \***********************/ -/*! exports provided: createAutoArrow, createRightArrow, createDownArrow, createLeftArrow, createUpArrow, createRightArrowWithCondition, createDownArrowWithCondition, createLeftArrowWithCondition, createUpArrowWithCondition, autoUpdateSelectedArrows, updateSelectedArrows, updateArtboardArrows, updateAllArrows, deleteSelectedArrows, deleteArtboardArrows, deleteAllArrows, update */ +/*! exports provided: createAutoArrow, createRightArrow, createDownArrow, createLeftArrow, createUpArrow, createRightArrowWithCondition, createDownArrowWithCondition, createLeftArrowWithCondition, createUpArrowWithCondition, updateSelectedArrows, updateArtboardArrows, updateAllArrows, deleteSelectedArrows, deleteArtboardArrows, deleteAllArrows, update */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -690,7 +690,6 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createDownArrowWithCondition", function() { return createDownArrowWithCondition; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createLeftArrowWithCondition", function() { return createLeftArrowWithCondition; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createUpArrowWithCondition", function() { return createUpArrowWithCondition; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "autoUpdateSelectedArrows", function() { return autoUpdateSelectedArrows; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateSelectedArrows", function() { return updateSelectedArrows; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateArtboardArrows", function() { return updateArtboardArrows; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAllArrows", function() { return updateAllArrows; }); @@ -722,21 +721,14 @@ var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); var pluginKey = "flowArrows"; -var document; -var docData, pluginData, currentParentGroup, connectionsData; +var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); +var docData = context.document.documentData(); // let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); +// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); -if (context.document) { - document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); - docData = context.document.documentData(); - pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); - currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); - connectionsData = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_4__["getConnectionsData"])(); -} else {} // document = sketch.fromNative(context.actionContext.document); -// +var connectionsData = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_4__["getConnectionsData"])(); // // Plugin Incoming Commands - Create // - function createAutoArrow(context) { create(context, "Auto", false); } @@ -764,9 +756,6 @@ function createLeftArrowWithCondition(context) { function createUpArrowWithCondition(context) { create(context, "Up", true); } -function autoUpdateSelectedArrows() { - var a = true; -} function create(context, direction, isCondition) { var selection = context.selection; @@ -801,10 +790,10 @@ function create(context, direction, isCondition) { sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("New connection is created 🚀"); } else { // Update - Object(_utilities_lines_js__WEBPACK_IMPORTED_MODULE_5__["deleteLine"])(connectionsData[index].line); + Object(_utilities_lines_js__WEBPACK_IMPORTED_MODULE_5__["deleteLine"])(connectionsData[index].line, document); if (!isCondition) { - Object(_utilities_conditions_js__WEBPACK_IMPORTED_MODULE_6__["deleteCondition"])(connectionsData[index].condition); + Object(_utilities_conditions_js__WEBPACK_IMPORTED_MODULE_6__["deleteCondition"])(connectionsData[index].condition, document); } var _connection = Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_1__["createArrow"])(firstObjectID, secondObjectID, null, null, direction, connectionsData[index].condition, isCondition); @@ -978,7 +967,6 @@ var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); -var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); var docData = context.document.documentData(); var currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); function addCondition(keyword, x, y) { @@ -1024,7 +1012,7 @@ function updateCondition(conditionID, x, y) { return condition.id; } -function deleteCondition(conditionID) { +function deleteCondition(conditionID, document) { var conditionObject = document.getLayerWithID(conditionID); var selectedGroup; @@ -1267,8 +1255,11 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); -var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); -function deleteLine(lineID) { + +var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); + +function deleteLine(lineID, document) { + log(lineID); var lineObject = document.getLayerWithID(lineID); var selectedGroup; diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index 88cdca0..880ee8f 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/createArrow.js","webpack://exports/./src/draw.js","webpack://exports/./src/script.js","webpack://exports/./src/updateArrow.js","webpack://exports/./src/utilities/conditions.js","webpack://exports/./src/utilities/data.js","webpack://exports/./src/utilities/getSourceObject.js","webpack://exports/./src/utilities/groups.js","webpack://exports/./src/utilities/lines.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["Settings","require","document","sketch","fromNative","context","createArrow","firstObjectID","secondObjectID","style","type","direction","conditionID","isCondition","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","firstObject","secondObject","condition","line","objectID","getLayerWithID","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","sourceObjectID","childObjectID","sourceObject","childObject","settingForKey","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","UI","docData","documentData","currentParentGroup","currentPage","currentArtboard","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","currentGroup","checkForGroup","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","layers","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","pluginKey","pluginData","connectionsData","command","valueForKey_onLayer_forPluginIdentifier","getConnectionsData","createAutoArrow","create","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","autoUpdateSelectedArrows","a","selection","count","class","getSourceObjectFromSelection","connectionIndex","g","String","index","length","push","message","deleteLine","deleteCondition","deleteConnectionFromData","setValue_forKey_onLayer_forPluginIdentifier","updateSelectedArrows","update","updateArtboardArrows","updateAllArrows","deleteSelectedArrows","deleteArtboardArrows","deleteAllArrows","level","isUpdate","newConnectionsData","firstObjectArtboard","secondObjectArtboard","i","updateArrow","sketchObject","parentArtboard","lineID","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","getImportableSymbolReferencesForDocument","name","includes","alert","symbolMaster","import","createNewInstance","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","fixGeometryWithOptions","id","conditionObject","selectedGroup","remove","dataArray","connectionIndexArray","data","splice","defineSourceObject","groupName","addLayers","Group","group","locked","moveToBack","adjustToFit","lineObject","localStyle","getLayerStyles","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","thickness","endMarkerType","allStyles","allLayerStyles","styles"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch';\nimport { drawConnection } from \"./draw.js\";\n\nvar Settings = require('sketch/settings');\nlet document = sketch.fromNative(context.document);\n\n// Main Function\n\nexport function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n return connection;\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}","import sketch from 'sketch';\nimport { styleLine } from \"./utilities/styling.js\";\nimport { addCondition, updateCondition } from \"./utilities/conditions.js\";\nimport { checkForGroup, addToArrowsGroup } from \"./utilities/groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\n// Main Function\n\nexport function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition){ // Refactored\n // Process of creating new connection \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n\n // Condition\n if(isCondition == true){\n if(document.getLayerWithID(conditionID)){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY);\n }\n } else {\n connection.conditionID = null;\n }\n \n // Style\n connection.style = styleLine(connection.line, style);\n\n // Add to group\n addToArrowsGroup(connection.line);\n \n return connection\n}\n\n// Positions\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\");\n let diffX, diffY;\n \n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n \n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n \n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n\n return connectionPos\n}\n\n// Drawing Types\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n \n return line;\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n \n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n \n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n \n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n \n if(firstLayerPosX 1 && selection[0].class() != \"MSArtboardGroup\"){\n let sourceObjectID = getSourceObjectFromSelection(selection, direction);\n let connectionIndex = []\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n\n let firstObjectID = String(sourceObjectID);\n let secondObjectID = String(selection[g].objectID());\n let create = true\n let index\n\n if(connectionsData.length > 0){\n for (let y = 0; y < connectionsData.length; y++) {\n if ((firstObjectID == connectionsData[y].firstObject || firstObjectID == connectionsData[y].secondObject) && (secondObjectID == connectionsData[y].firstObject || secondObjectID == connectionsData[y].secondObject)) {\n // We have this connection and need to update\n create = false;\n index = y;\n connectionIndex.push(y);\n }\n }\n } \n \n if(create){\n // Create\n let connection = createArrow(firstObjectID, secondObjectID, null, null, direction, null, isCondition);\n connectionsData.push(connection);\n sketch.UI.message(\"New connection is created 🚀\");\n } else {\n // Update\n deleteLine(connectionsData[index].line);\n if (!isCondition) { \n deleteCondition(connectionsData[index].condition) \n }\n\n let connection = createArrow(firstObjectID, secondObjectID, null, null, direction, connectionsData[index].condition, isCondition);\n connectionsData.push(connection);\n sketch.UI.message(\"Current connection is updated 🤘\");\n }\n }\n }\n if(connectionIndex.length > 0){\n // Update data if there was changes\n connectionsData = deleteConnectionFromData(connectionIndex, connectionsData);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\n \n//\n// Plugin Incoming Commands - Update and Delete\n//\n\nexport function updateSelectedArrows(context) {update(context, 1, true);}\nexport function updateArtboardArrows(context) {update(context, 2, true);}\nexport function updateAllArrows(context) {update(context, 3, true);}\nexport function deleteSelectedArrows(context) {update(context, 1, false);}\nexport function deleteArtboardArrows(context) {update(context, 2, false);}\nexport function deleteAllArrows(context) {update(context, 3, false);}\n\nexport function update(context, level, isUpdate) {\n // 1 - selection level\n // 2 - artboard level\n // 3 - document level\n let newConnectionsData = [];\n let selection = context.selection;\n let firstObjectArtboard;\n let secondObjectArtboard;\n\n\n if (connectionsData.length > 0) {\n for (let i = 0; i < connectionsData.length; i++) {\n \n if (level == 3) {\n if(isUpdate){\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n sketch.UI.message(\"All arrows are updated\");\n } else {\n newConnectionsData = null\n sketch.UI.message(\"All arrows are deleted\");\n }\n }\n if (level == 2) {\n firstObjectArtboard = document.getLayerWithID(connectionsData[i].firstObject);\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID();\n secondObjectArtboard = document.getLayerWithID(connectionsData[i].secondObject);\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID();\n\n if (selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\") {\n\n if (firstObjectArtboard == selection[0].objectID()) {\n if (secondObjectArtboard == selection[0].objectID()) {\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n }\n }\n sketch.UI.message(\"All arrows are updated 🚀\");\n \n \n }\n let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition);\n connectionsData.push(connection);\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n sketch.UI.message(\"There is no arrows\");\n }\n}\n\n// const track = require(\"sketch-module-google-analytics\")\n// track(\"UA-138226597-1\", \"event\", {\n// ec: \"command\", \n// ea: \"create\", \n// ev: \"my-command\"\n// });\n\n\n\n\n\n","import sketch from 'sketch';\nimport { getConnectionsData, deleteConnectionFromData} from \"./utilities/data.js\"\nimport { deleteLine } from \"./utilities/lines.js\"\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\nlet connectionsData = getConnectionsData();\n\n\n\nexport function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n // let firstObject = document.getLayerWithID(firstObjectID);\n // let secondObject = document.getLayerWithID(secondObjectID);\n // let conditionObject = document.getLayerWithID(conditionID);\n // let result = false;\n \n // Need to delete data first, because we will have a new line\n // deleteLine(lineID);\n // if(conditionID && !isCondition){\n // if(conditionObject){conditionObject.remove();}\n // }\n \n connectionsData = deleteConnectionFromData(connectionIndex);\n\n // if(firstObject && secondObject){\n // // If we have all the objects, we can recreate the line\n // result = true;\n // }\n\n // return result;\n}","import sketch from 'sketch';\nimport { addToConditionGroup, checkForGroup } from \"./groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\nexport function addCondition(keyword, x, y) {\n let libraries = sketch.getLibraries();\n let libraryObject, symbolReferences, symbol;\n\n for (let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(\n document\n );\n for (let i = 0; i < symbolReferences.length; i++) {\n if (symbolReferences[i].name.includes(keyword)) {\n libraryObject = symbolReferences[i];\n }\n }\n }\n\n if (libraryObject == null) {\n symbol = null;\n UI.alert(\n \"Condition symbol is not found\",\n 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here'\n );\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y);\n }\n return symbol;\n}\n\nexport function updateCondition(conditionID, x, y) {\n let condition = document.getLayerWithID(conditionID);\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n }\n return condition.id;\n}\n\nexport function deleteCondition(conditionID) {\n let conditionObject = document.getLayerWithID(conditionID);\n let selectedGroup;\n if(conditionObject){\n selectedGroup = conditionObject.parent;\n conditionObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n\n }\n \n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, connectionsData;\n\ndocument = sketch.fromNative(context.document);\ndocData = context.document.documentData();\npluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\ncurrentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n\nexport function getConnectionsData() {\n let dataArray = [];\n\n if (pluginData) {\n for (let i = 0; i < pluginData.length; i++) {\n dataArray.push(pluginData[i]);\n }\n }\n return dataArray;\n}\n\nexport function deleteConnectionFromData(connectionIndexArray, data){\n if(data){\n for (let i = connectionIndexArray.length -1; i >= 0; i--) {\n data.splice(connectionIndexArray[i],1);\n }\n }\n return data;\n}\n","import sketch from 'sketch';\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function getSourceObjectFromSelection(selection, direction){\n let sourceObjectID = selection.firstObject().objectID();\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction);\n }\n }\n return sourceObjectID;\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){\n \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let sourceObjectID;\n\n if(direction == \"Right\"){\n if(firstObjectAbsPos.x <= secondObjectAbsPos.x){ // We need to get the doc position\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.y <= secondObjectAbsPos.y){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Left\"){\n if(firstObjectAbsPos.x <= secondObjectAbsPos.x){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n if(direction == \"Up\"){\n if(firstObjectAbsPos.y <= secondObjectAbsPos.y){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n return sourceObjectID;\n}","import sketch from 'sketch';\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function checkForGroup(groupName) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n\n return currentGroup;\n}\n\nexport function addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\");\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nexport function addToConditionGroup(condition, x, y) {\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2 + arGroupX;\n condition.frame.y = y - condition.frame.height / 2 + arGroupY;\n let Group = require(\"sketch/dom\").Group;\n let group = new Group({\n parent: currentParentGroup,\n name: \"Conditions\",\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n }","import sketch from 'sketch';\nlet document = sketch.fromNative(context.document);\n\nexport function deleteLine(lineID){\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\n\nexport function styleLine(line, style){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey));\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/createArrow.js","webpack://exports/./src/draw.js","webpack://exports/./src/script.js","webpack://exports/./src/updateArrow.js","webpack://exports/./src/utilities/conditions.js","webpack://exports/./src/utilities/data.js","webpack://exports/./src/utilities/getSourceObject.js","webpack://exports/./src/utilities/groups.js","webpack://exports/./src/utilities/lines.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["Settings","require","document","sketch","fromNative","context","createArrow","firstObjectID","secondObjectID","style","type","direction","conditionID","isCondition","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","firstObject","secondObject","condition","line","objectID","getLayerWithID","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","sourceObjectID","childObjectID","sourceObject","childObject","settingForKey","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","UI","docData","documentData","currentParentGroup","currentPage","currentArtboard","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","currentGroup","checkForGroup","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","layers","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","pluginKey","connectionsData","getConnectionsData","createAutoArrow","create","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","selection","count","class","getSourceObjectFromSelection","connectionIndex","g","String","index","length","push","message","deleteLine","deleteCondition","deleteConnectionFromData","command","setValue_forKey_onLayer_forPluginIdentifier","updateSelectedArrows","update","updateArtboardArrows","updateAllArrows","deleteSelectedArrows","deleteArtboardArrows","deleteAllArrows","level","isUpdate","newConnectionsData","firstObjectArtboard","secondObjectArtboard","i","updateArrow","sketchObject","parentArtboard","pluginData","valueForKey_onLayer_forPluginIdentifier","lineID","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","getImportableSymbolReferencesForDocument","name","includes","alert","symbolMaster","import","createNewInstance","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","fixGeometryWithOptions","id","conditionObject","selectedGroup","remove","dataArray","connectionIndexArray","data","splice","defineSourceObject","groupName","addLayers","Group","group","locked","moveToBack","adjustToFit","log","lineObject","localStyle","getLayerStyles","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","allStyles","allLayerStyles","styles"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch';\nimport { drawConnection } from \"./draw.js\";\n\nvar Settings = require('sketch/settings');\nlet document = sketch.fromNative(context.document);\n\n// Main Function\n\nexport function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n return connection;\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}","import sketch from 'sketch';\nimport { styleLine } from \"./utilities/styling.js\";\nimport { addCondition, updateCondition } from \"./utilities/conditions.js\";\nimport { checkForGroup, addToArrowsGroup } from \"./utilities/groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\n// Main Function\n\nexport function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition){ // Refactored\n // Process of creating new connection \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n\n // Condition\n if(isCondition == true){\n if(document.getLayerWithID(conditionID)){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY);\n }\n } else {\n connection.conditionID = null;\n }\n \n // Style\n connection.style = styleLine(connection.line, style);\n\n // Add to group\n addToArrowsGroup(connection.line);\n \n return connection\n}\n\n// Positions\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\");\n let diffX, diffY;\n \n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n \n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n \n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n\n return connectionPos\n}\n\n// Drawing Types\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n \n return line;\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n \n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n \n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n \n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n \n if(firstLayerPosX 1 && selection[0].class() != \"MSArtboardGroup\"){\n let sourceObjectID = getSourceObjectFromSelection(selection, direction);\n let connectionIndex = []\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n\n let firstObjectID = String(sourceObjectID);\n let secondObjectID = String(selection[g].objectID());\n let create = true\n let index\n\n if(connectionsData.length > 0){\n for (let y = 0; y < connectionsData.length; y++) {\n if ((firstObjectID == connectionsData[y].firstObject || firstObjectID == connectionsData[y].secondObject) && (secondObjectID == connectionsData[y].firstObject || secondObjectID == connectionsData[y].secondObject)) {\n // We have this connection and need to update\n create = false;\n index = y;\n connectionIndex.push(y);\n }\n }\n } \n \n if(create){\n // Create\n let connection = createArrow(firstObjectID, secondObjectID, null, null, direction, null, isCondition);\n connectionsData.push(connection);\n sketch.UI.message(\"New connection is created 🚀\");\n } else {\n // Update\n deleteLine(connectionsData[index].line, document);\n if (!isCondition) { \n deleteCondition(connectionsData[index].condition, document) \n }\n\n let connection = createArrow(firstObjectID, secondObjectID, null, null, direction, connectionsData[index].condition, isCondition);\n connectionsData.push(connection);\n sketch.UI.message(\"Current connection is updated 🤘\");\n }\n }\n }\n if(connectionIndex.length > 0){\n // Update data if there was changes\n connectionsData = deleteConnectionFromData(connectionIndex, connectionsData);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\n \n//\n// Plugin Incoming Commands - Update and Delete\n//\n\nexport function updateSelectedArrows(context) {update(context, 1, true);}\nexport function updateArtboardArrows(context) {update(context, 2, true);}\nexport function updateAllArrows(context) {update(context, 3, true);}\nexport function deleteSelectedArrows(context) {update(context, 1, false);}\nexport function deleteArtboardArrows(context) {update(context, 2, false);}\nexport function deleteAllArrows(context) {update(context, 3, false);}\n\nexport function update(context, level, isUpdate) {\n // 1 - selection level\n // 2 - artboard level\n // 3 - document level\n let newConnectionsData = [];\n let selection = context.selection;\n let firstObjectArtboard;\n let secondObjectArtboard;\n\n\n if (connectionsData.length > 0) {\n for (let i = 0; i < connectionsData.length; i++) {\n \n if (level == 3) {\n if(isUpdate){\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n sketch.UI.message(\"All arrows are updated\");\n } else {\n newConnectionsData = null\n sketch.UI.message(\"All arrows are deleted\");\n }\n }\n if (level == 2) {\n firstObjectArtboard = document.getLayerWithID(connectionsData[i].firstObject);\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID();\n secondObjectArtboard = document.getLayerWithID(connectionsData[i].secondObject);\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID();\n\n if (selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\") {\n\n if (firstObjectArtboard == selection[0].objectID()) {\n if (secondObjectArtboard == selection[0].objectID()) {\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n }\n }\n sketch.UI.message(\"All arrows are updated 🚀\");\n \n \n }\n let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition);\n connectionsData.push(connection);\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n sketch.UI.message(\"There is no arrows\");\n }\n}\n\n// const track = require(\"sketch-module-google-analytics\")\n// track(\"UA-138226597-1\", \"event\", {\n// ec: \"command\", \n// ea: \"create\", \n// ev: \"my-command\"\n// });\n\n\n\n\n\n","import sketch from 'sketch';\nimport { getConnectionsData, deleteConnectionFromData} from \"./utilities/data.js\"\nimport { deleteLine } from \"./utilities/lines.js\"\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\nlet connectionsData = getConnectionsData();\n\n\n\nexport function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n // let firstObject = document.getLayerWithID(firstObjectID);\n // let secondObject = document.getLayerWithID(secondObjectID);\n // let conditionObject = document.getLayerWithID(conditionID);\n // let result = false;\n \n // Need to delete data first, because we will have a new line\n // deleteLine(lineID);\n // if(conditionID && !isCondition){\n // if(conditionObject){conditionObject.remove();}\n // }\n \n connectionsData = deleteConnectionFromData(connectionIndex);\n\n // if(firstObject && secondObject){\n // // If we have all the objects, we can recreate the line\n // result = true;\n // }\n\n // return result;\n}","import sketch from 'sketch';\nimport { addToConditionGroup, checkForGroup } from \"./groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\nexport function addCondition(keyword, x, y) {\n let libraries = sketch.getLibraries();\n let libraryObject, symbolReferences, symbol;\n\n for (let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(\n document\n );\n for (let i = 0; i < symbolReferences.length; i++) {\n if (symbolReferences[i].name.includes(keyword)) {\n libraryObject = symbolReferences[i];\n }\n }\n }\n\n if (libraryObject == null) {\n symbol = null;\n UI.alert(\n \"Condition symbol is not found\",\n 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here'\n );\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y);\n }\n return symbol;\n}\n\nexport function updateCondition(conditionID, x, y) {\n let condition = document.getLayerWithID(conditionID);\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n }\n return condition.id;\n}\n\nexport function deleteCondition(conditionID, document) {\n let conditionObject = document.getLayerWithID(conditionID);\n let selectedGroup;\n if(conditionObject){\n selectedGroup = conditionObject.parent;\n conditionObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n }\n \n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, connectionsData;\n\ndocument = sketch.fromNative(context.document);\ndocData = context.document.documentData();\npluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\ncurrentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n\nexport function getConnectionsData() {\n let dataArray = [];\n\n if (pluginData) {\n for (let i = 0; i < pluginData.length; i++) {\n dataArray.push(pluginData[i]);\n }\n }\n return dataArray;\n}\n\nexport function deleteConnectionFromData(connectionIndexArray, data){\n if(data){\n for (let i = connectionIndexArray.length -1; i >= 0; i--) {\n data.splice(connectionIndexArray[i],1);\n }\n }\n return data;\n}\n","import sketch from 'sketch';\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function getSourceObjectFromSelection(selection, direction){\n let sourceObjectID = selection.firstObject().objectID();\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction);\n }\n }\n return sourceObjectID;\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){\n \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let sourceObjectID;\n\n if(direction == \"Right\"){\n if(firstObjectAbsPos.x <= secondObjectAbsPos.x){ // We need to get the doc position\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.y <= secondObjectAbsPos.y){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Left\"){\n if(firstObjectAbsPos.x <= secondObjectAbsPos.x){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n if(direction == \"Up\"){\n if(firstObjectAbsPos.y <= secondObjectAbsPos.y){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n return sourceObjectID;\n}","import sketch from 'sketch';\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function checkForGroup(groupName) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n\n return currentGroup;\n}\n\nexport function addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\");\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nexport function addToConditionGroup(condition, x, y) {\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2 + arGroupX;\n condition.frame.y = y - condition.frame.height / 2 + arGroupY;\n let Group = require(\"sketch/dom\").Group;\n let group = new Group({\n parent: currentParentGroup,\n name: \"Conditions\",\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n }","import sketch from 'sketch';\nlet UI = require('sketch/ui');\n\nexport function deleteLine(lineID, document){\n log(lineID)\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\n\nexport function styleLine(line, style){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey));\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/src/autoUpdate.js b/src/autoUpdate.js new file mode 100644 index 0000000..9d53d92 --- /dev/null +++ b/src/autoUpdate.js @@ -0,0 +1,62 @@ +import sketch from 'sketch'; +let UI = require('sketch/ui'); +const pluginKey = "flowArrows"; +import { deleteLine } from "./utilities/lines.js" +import { deleteCondition } from "./utilities/conditions.js"; + + + +export function autoUpdateSelectedArrows(context) { + let document = sketch.fromNative(context.actionContext.document) + const action = context.actionContext + let docData = action.document.documentData(); + let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey) + + let connectionsData = []; + + if (pluginData) { + for (let i = 0; i < pluginData.length; i++) { + connectionsData.push(pluginData[i]); + } + } + + console.log(connectionsData) + + const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer)) + let firstObjectID = String(movedLayers[0].id); + let connectionIndex = [] + + if(connectionsData.length > 0){ + for (let y = 0; y < connectionsData.length; y++) { + if (firstObjectID == connectionsData[y].firstObject || firstObjectID == connectionsData[y].secondObject) { + connectionIndex.push(y); + } + } + } + + if(connectionIndex.length > 0){ + for (let x = 0; x < connectionIndex.length; x++) { + deleteLine(connectionsData[connectionIndex[x]].line, document); + if (!isCondition) { + deleteCondition(connectionsData[connectionIndex[x]].condition, document); + } + let connection = createArrow( + connectionsData[connectionIndex[x]].firstObject, + connectionsData[connectionIndex[x]].secondObject, + connectionsData[connectionIndex[x]].style, + connectionsData[connectionIndex[x]].type, + connectionsData[connectionIndex[x]].direction, + connectionsData[connectionIndex[x]].conditionID, + connectionsData[connectionIndex[x]].isCondition + ); + connectionsData.push(connection); + } + } + + if(connectionIndex.length > 0){ + // Update data if there was changes + connectionsData = deleteConnectionFromData(connectionIndex, connectionsData); + } + context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, "arrowConnections", docData, pluginKey); + +} \ No newline at end of file diff --git a/src/manifest.json b/src/manifest.json index 5110008..383e735 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -102,6 +102,17 @@ "icon": "icon.png", "handler": "updateSelectedArrows" }, + { + "name": "Auto update arrows between selected", + "script": "autoUpdate.js", + "handlers": { + "actions": { + "LayersMoved.finish": "autoUpdateSelectedArrows", + "LayersResized.finish": "autoUpdateSelectedArrows" + } + }, + "identifier": "autoUpdateSelectedArrows" + }, { "name": "Update arrows from the selected artboard", "description": "Update all the arrows from selected artboard", diff --git a/src/script.js b/src/script.js index a52b607..d404f91 100644 --- a/src/script.js +++ b/src/script.js @@ -14,18 +14,13 @@ let UI = require('sketch/ui') ; var Settings = require('sketch/settings'); const pluginKey = "flowArrows"; -let document; - -let docData, pluginData, currentParentGroup, connectionsData; -if(context.document){ - document = sketch.fromNative(context.document); - docData = context.document.documentData(); - pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); - currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); - connectionsData = getConnectionsData(); -} else { - // document = sketch.fromNative(context.actionContext.document); -} + +let document = sketch.fromNative(context.document); +let docData = context.document.documentData(); +// let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); +// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); +let connectionsData = getConnectionsData(); + // @@ -43,11 +38,6 @@ export function createDownArrowWithCondition(context){create(context, "Down", tr export function createLeftArrowWithCondition(context){create(context, "Left", true);} export function createUpArrowWithCondition(context){create(context, "Up", true);} -export function autoUpdateSelectedArrows() { - let a = true -} - - function create(context, direction, isCondition){ let selection = context.selection; @@ -80,9 +70,9 @@ function create(context, direction, isCondition){ sketch.UI.message("New connection is created 🚀"); } else { // Update - deleteLine(connectionsData[index].line); + deleteLine(connectionsData[index].line, document); if (!isCondition) { - deleteCondition(connectionsData[index].condition) + deleteCondition(connectionsData[index].condition, document) } let connection = createArrow(firstObjectID, secondObjectID, null, null, direction, connectionsData[index].condition, isCondition); diff --git a/src/utilities/conditions.js b/src/utilities/conditions.js index 917cf46..2db2b20 100644 --- a/src/utilities/conditions.js +++ b/src/utilities/conditions.js @@ -3,7 +3,6 @@ import { addToConditionGroup, checkForGroup } from "./groups.js"; let Settings = require('sketch/settings'); let UI = require('sketch/ui') ; -let document = sketch.fromNative(context.document); let docData = context.document.documentData(); let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); @@ -56,7 +55,7 @@ export function updateCondition(conditionID, x, y) { return condition.id; } -export function deleteCondition(conditionID) { +export function deleteCondition(conditionID, document) { let conditionObject = document.getLayerWithID(conditionID); let selectedGroup; if(conditionObject){ @@ -66,6 +65,5 @@ export function deleteCondition(conditionID) { selectedGroup.remove(); } } - } diff --git a/src/utilities/lines.js b/src/utilities/lines.js index be2c127..9a8aae7 100644 --- a/src/utilities/lines.js +++ b/src/utilities/lines.js @@ -1,7 +1,8 @@ import sketch from 'sketch'; -let document = sketch.fromNative(context.document); +let UI = require('sketch/ui'); -export function deleteLine(lineID){ +export function deleteLine(lineID, document){ + log(lineID) let lineObject = document.getLayerWithID(lineID); let selectedGroup; if(lineObject){ From 2c422216aba29d10c82af2cf02ad88101eea6c96 Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Thu, 11 Jul 2019 22:31:24 +0300 Subject: [PATCH 37/44] auto update is working but not fully tested --- .../Contents/Sketch/autoUpdate.js | 778 +++++++++++++++++- .../Contents/Sketch/autoUpdate.js.map | 2 +- arrows.sketchplugin/Contents/Sketch/script.js | 125 ++- .../Contents/Sketch/script.js.map | 2 +- .../Contents/Sketch/settings.js | 16 +- .../Contents/Sketch/settings.js.map | 2 +- src/autoUpdate.js | 23 +- src/createArrow.js | 18 +- src/draw.js | 23 +- src/script.js | 12 +- src/updateArrow.js | 2 +- src/utilities/conditions.js | 16 +- src/utilities/data.js | 10 +- src/utilities/groups.js | 18 +- src/utilities/lines.js | 1 - src/utilities/styling.js | 14 +- 16 files changed, 873 insertions(+), 189 deletions(-) diff --git a/arrows.sketchplugin/Contents/Sketch/autoUpdate.js b/arrows.sketchplugin/Contents/Sketch/autoUpdate.js index cbbae61..d91ac61 100644 --- a/arrows.sketchplugin/Contents/Sketch/autoUpdate.js +++ b/arrows.sketchplugin/Contents/Sketch/autoUpdate.js @@ -104,7 +104,8 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _utilities_lines_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utilities/lines.js */ "./src/utilities/lines.js"); -/* harmony import */ var _utilities_conditions_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utilities/conditions.js */ "./src/utilities/conditions.js"); +/* harmony import */ var _createArrow_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./createArrow.js */ "./src/createArrow.js"); +/* harmony import */ var _utilities_data_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utilities/data.js */ "./src/utilities/data.js"); var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); @@ -112,20 +113,12 @@ var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); var pluginKey = "flowArrows"; + function autoUpdateSelectedArrows(context) { var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.actionContext.document); var action = context.actionContext; var docData = action.document.documentData(); - var pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); - var connectionsData = []; - - if (pluginData) { - for (var i = 0; i < pluginData.length; i++) { - connectionsData.push(pluginData[i]); - } - } - - console.log(connectionsData); + var connectionsData = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_3__["getConnectionsData"])(docData); var movedLayers = Array.from(context.actionContext.layers).map(function (layer) { return sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(layer); }); @@ -143,19 +136,13 @@ function autoUpdateSelectedArrows(context) { if (connectionIndex.length > 0) { for (var x = 0; x < connectionIndex.length; x++) { Object(_utilities_lines_js__WEBPACK_IMPORTED_MODULE_1__["deleteLine"])(connectionsData[connectionIndex[x]].line, document); - - if (!isCondition) { - Object(_utilities_conditions_js__WEBPACK_IMPORTED_MODULE_2__["deleteCondition"])(connectionsData[connectionIndex[x]].condition, document); - } - - var connection = createArrow(connectionsData[connectionIndex[x]].firstObject, connectionsData[connectionIndex[x]].secondObject, connectionsData[connectionIndex[x]].style, connectionsData[connectionIndex[x]].type, connectionsData[connectionIndex[x]].direction, connectionsData[connectionIndex[x]].conditionID, connectionsData[connectionIndex[x]].isCondition); + var connection = Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_2__["createArrow"])(connectionsData[connectionIndex[x]].firstObject, connectionsData[connectionIndex[x]].secondObject, connectionsData[connectionIndex[x]].style, connectionsData[connectionIndex[x]].type, connectionsData[connectionIndex[x]].direction, connectionsData[connectionIndex[x]].conditionID, connectionsData[connectionIndex[x]].isCondition, document, docData); connectionsData.push(connection); } } if (connectionIndex.length > 0) { - // Update data if there was changes - connectionsData = deleteConnectionFromData(connectionIndex, connectionsData); + connectionsData = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_3__["deleteConnectionFromData"])(connectionIndex, connectionsData); } context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, "arrowConnections", docData, pluginKey); @@ -163,6 +150,587 @@ function autoUpdateSelectedArrows(context) { /***/ }), +/***/ "./src/createArrow.js": +/*!****************************!*\ + !*** ./src/createArrow.js ***! + \****************************/ +/*! exports provided: createArrow */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createArrow", function() { return createArrow; }); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _draw_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./draw.js */ "./src/draw.js"); + + + +var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); // Main Function + + +function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition, document, docData) { + // Refactored + var localDirection = direction == "Auto" ? getDirection(firstObjectID, secondObjectID, document) : direction; // Main Operations based on the settings + + updateSpacing(firstObjectID, secondObjectID, localDirection, document); + autoAlignLayer(firstObjectID, secondObjectID, localDirection, document); // Making an Arrow + + var arrow = Object(_draw_js__WEBPACK_IMPORTED_MODULE_1__["drawConnection"])(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition, document, docData); // Storage for current connection + + var connection = { + firstObject: firstObjectID, + secondObject: secondObjectID, + style: arrow.style, + condition: arrow.conditionID, + isCondition: isCondition, + type: arrow.type, + direction: localDirection, + line: arrow.line.objectID() + }; + return connection; +} + +function getDirection(firstObjectID, secondObjectID, document) { + // Refactored + // Get direction from the source object + var firstObject = document.getLayerWithID(firstObjectID); + var secondObject = document.getLayerWithID(secondObjectID); + var firstObjectMidX = firstObject.frame.x + firstObject.frame.width / 2; + var firstObjectMidY = firstObject.frame.y + firstObject.frame.height / 2; + var secondObjectMidX = secondObject.frame.x + secondObject.frame.width / 2; + var secondObjectMidY = secondObject.frame.y + secondObject.frame.height / 2; + var diffX = firstObjectMidX - secondObjectMidX; + var diffY = firstObjectMidY - secondObjectMidY; + var absDiffX = Math.abs(diffX); + var absDiffY = Math.abs(diffY); + var direction; + + if (secondObjectMidX > firstObjectMidX) { + // Right Half + if (secondObjectMidY > firstObjectMidY) { + // Bottom quarter + direction = diffX > diffY ? "Down" : "Right"; + } else { + // Top quarter + direction = absDiffX > absDiffY ? "Right" : "Up"; + } + } else { + // Left Half + if (secondObjectMidY > firstObjectMidY) { + // Bottom quarter + direction = absDiffX > absDiffY ? "Left" : "Down"; + } else { + // Top quarter + direction = diffX > diffY ? "Left" : "Up"; + } + } + + return direction; +} + +function updateSpacing(sourceObjectID, childObjectID, direction, document) { + var sourceObject = document.getLayerWithID(sourceObjectID); + var childObject = document.getLayerWithID(childObjectID); + + if (Settings.settingForKey("arrowSpacing") && Settings.settingForKey("arrowSpacing") != 0) { + var currentSpacing = Settings.settingForKey("arrowSpacing"); + + if (direction == "Right") { + childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing; + } + + if (direction == "Down") { + childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing; + } + + if (direction == "Left") { + childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing; + } + + if (direction == "Up") { + childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing; + } + } +} + +function autoAlignLayer(sourceObjectID, childObjectID, direction, document) { + var sourceObject = document.getLayerWithID(sourceObjectID); + var childObject = document.getLayerWithID(childObjectID); + var sourceMidY, childMidY, sourceMidX, childMidX, diff; + + if (Settings.settingForKey("autoAlign")) { + if (Settings.settingForKey("autoAlign") == true) { + // If user turned on Auto-Align settings + if (direction == "Right" || direction == "Left") { + sourceMidY = sourceObject.frame.y + sourceObject.frame.height / 2; + childMidY = childObject.frame.y + childObject.frame.height / 2; + diff = sourceMidY - childMidY; + + if (diff > -6 && diff < 6) { + childObject.frame.y = childObject.frame.y + diff; + } + } + + if (direction == "Down" || direction == "Up") { + sourceMidX = sourceObject.frame.x + sourceObject.frame.width / 2; + childMidX = childObject.frame.x + childObject.frame.width / 2; + diff = sourceMidX - childMidX; + + if (diff > -6 && diff < 6) { + childObject.frame.x = childObject.frame.x + diff; + } + } + } + } +} + +/***/ }), + +/***/ "./src/draw.js": +/*!*********************!*\ + !*** ./src/draw.js ***! + \*********************/ +/*! exports provided: drawConnection */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "drawConnection", function() { return drawConnection; }); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _utilities_styling_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utilities/styling.js */ "./src/utilities/styling.js"); +/* harmony import */ var _utilities_conditions_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utilities/conditions.js */ "./src/utilities/conditions.js"); +/* harmony import */ var _utilities_groups_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utilities/groups.js */ "./src/utilities/groups.js"); + + + + + +var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); + +var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); // let document = sketch.fromNative(context.document); +// let docData = context.document.documentData(); +// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); +// Main Function + + +function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition, document, docData) { + // Refactored + // Process of creating new connection + var currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); + var firstObject = document.getLayerWithID(firstObjectID); + var secondObject = document.getLayerWithID(secondObjectID); + var connectionPos = getConnectionPos(firstObject, secondObject, localDirection, currentParentGroup); + var connection = { + line: [], + conditionID: [], + type: [], + style: [] // Type + + }; + connection.type = type == null ? Settings.settingForKey("arrowType") : type; + + if (connection.type == "Angled" || connection.type == null) { + connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection); + } + + if (connection.type == "Straight") { + connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection); + } + + if (connection.type == "Curved") { + connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection); + } // Condition + + + if (isCondition == true) { + if (document.getLayerWithID(conditionID)) { + connection.conditionID = Object(_utilities_conditions_js__WEBPACK_IMPORTED_MODULE_2__["updateCondition"])(conditionID, connectionPos.middlePosX, connectionPos.middlePosY, document, docData); + } else { + connection.conditionID = Object(_utilities_conditions_js__WEBPACK_IMPORTED_MODULE_2__["addCondition"])("#con", connectionPos.middlePosX, connectionPos.middlePosY, document, docData); + } + } else { + connection.conditionID = null; + } // Style + + + connection.style = Object(_utilities_styling_js__WEBPACK_IMPORTED_MODULE_1__["styleLine"])(connection.line, style, docData); // Add to group + + Object(_utilities_groups_js__WEBPACK_IMPORTED_MODULE_3__["addToArrowsGroup"])(connection.line, currentParentGroup); + return connection; +} // Positions + +function getConnectionPos(firstObject, secondObject, direction, currentParentGroup) { + // Refactored + var firstObjectAbsPos = firstObject.frame.changeBasis({ + from: firstObject.parent, + to: currentParentGroup + }); + var secondObjectAbsPos = secondObject.frame.changeBasis({ + from: secondObject.parent, + to: currentParentGroup + }); + var currentGroup = Object(_utilities_groups_js__WEBPACK_IMPORTED_MODULE_3__["checkForGroup"])("Arrows", currentParentGroup); + var diffX, diffY; + + if (currentGroup) { + diffX = currentGroup.frame().x(); + diffY = currentGroup.frame().y(); + } else { + diffX = 0; + diffY = 0; + } + + var connectionPos = { + firstLayerPosX: null, + firstLayerPosY: null, + secondLayerPosX: null, + secondLayerPosY: null, + middlePosX: null, + middlePosY: null // Getting all the positions + + }; + + if (direction == "Up") { + // First Layer Position Start Point Position + connectionPos.firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; + connectionPos.firstLayerPosY = firstObjectAbsPos.y - diffY; // Second Layer Position End Point Position + + connectionPos.secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; + connectionPos.secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height - diffY; // Middle Points + + connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; + connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; + } + + if (direction == "Right") { + // First Layer Position Start Point Position + connectionPos.firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width - diffX; + connectionPos.firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position + + connectionPos.secondLayerPosX = secondObjectAbsPos.x - diffX; + connectionPos.secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points + + connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; + connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; + } + + if (direction == "Down") { + // First Layer Position Start Point Position + connectionPos.firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; + connectionPos.firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height - diffY; // Second Layer Position End Point Position + + connectionPos.secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; + connectionPos.secondLayerPosY = secondObjectAbsPos.y - diffY; // Middle Points + + connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; + connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; + } + + if (direction == "Left") { + // First Layer Position Start Point Position + connectionPos.firstLayerPosX = firstObjectAbsPos.x - diffX; + connectionPos.firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position + + connectionPos.secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width - diffX; + connectionPos.secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points + + connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; + connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; + } + + return connectionPos; +} // Drawing Types + + +function drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction) { + // Refactored + var path = NSBezierPath.bezierPath(); + + if (direction == "Up") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + if (direction == "Right") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + if (direction == "Down") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + if (direction == "Left") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + var line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + var points = line.layers().firstObject().points(); + points[1].cornerRadius = 20; + points[2].cornerRadius = 20; + line.setName("Angled Arrow"); + return line; +} + +function drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction) { + // Refactored + var path = NSBezierPath.bezierPath(); + + if (direction == "Up") { + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + if (direction == "Right") { + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + if (direction == "Down") { + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + if (direction == "Left") { + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); + } + + var line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + line.setName("Straight Arrow"); + return line; +} + +function drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction) { + // Refactored + var path = NSBezierPath.bezierPath(); + var line; + + if (direction == "Up") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line + + line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + var points = line.layers().firstObject().points(); + points[0].curveMode = 4; + points[1].curveMode = 4; + points[0].hasCurveFrom = true; + points[1].hasCurveTo = true; + + if (firstLayerPosX < secondLayerPosX) { + points[0].curveFrom = { + x: 0, + y: 0.5 + }; + points[0].curveTo = { + x: -0.5, + y: 1 + }; + points[1].curveFrom = { + x: 1, + y: 1 + }; + points[1].curveTo = { + x: 1, + y: 0.5 + }; + } else { + points[0].curveFrom = { + x: 1, + y: 0.5 + }; + points[0].curveTo = { + x: -0.5, + y: 1 + }; + points[1].curveFrom = { + x: 1, + y: 1 + }; + points[1].curveTo = { + x: 0, + y: 0.5 + }; + } + } + + if (direction == "Right") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line + + line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + + var _points = line.layers().firstObject().points(); + + _points[0].curveMode = 4; + _points[1].curveMode = 4; + _points[0].hasCurveFrom = true; + _points[1].hasCurveTo = true; + + if (firstLayerPosY < secondLayerPosY) { + _points[0].curveFrom = { + x: 0.5, + y: 0 + }; + _points[0].curveTo = { + x: -0.5, + y: 1 + }; + _points[1].curveFrom = { + x: 1, + y: 1 + }; + _points[1].curveTo = { + x: 0.5, + y: 1 + }; + } else { + _points[0].curveFrom = { + x: 0.5, + y: 1 + }; + _points[0].curveTo = { + x: -0.5, + y: 1 + }; + _points[1].curveFrom = { + x: 1, + y: 1 + }; + _points[1].curveTo = { + x: 0.5, + y: 0 + }; + } + } + + if (direction == "Down") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line + + line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + + var _points2 = line.layers().firstObject().points(); + + _points2[0].curveMode = 4; + _points2[1].curveMode = 4; + _points2[0].hasCurveFrom = true; + _points2[1].hasCurveTo = true; + + if (firstLayerPosX < secondLayerPosX) { + _points2[0].curveFrom = { + x: 0, + y: 0.5 + }; + _points2[0].curveTo = { + x: -0.5, + y: 1 + }; + _points2[1].curveFrom = { + x: 1, + y: 1 + }; + _points2[1].curveTo = { + x: 1, + y: 0.5 + }; + } else { + _points2[0].curveFrom = { + x: 1, + y: 0.5 + }; + _points2[0].curveTo = { + x: -0.5, + y: 1 + }; + _points2[1].curveFrom = { + x: 1, + y: 1 + }; + _points2[1].curveTo = { + x: 0, + y: 0.5 + }; + } + } + + if (direction == "Left") { + // Connecting points + path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); + path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line + + line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); + + var _points3 = line.layers().firstObject().points(); + + _points3[0].curveMode = 4; + _points3[1].curveMode = 4; + _points3[0].hasCurveFrom = true; + _points3[1].hasCurveTo = true; + + if (firstLayerPosY < secondLayerPosY) { + _points3[0].curveFrom = { + x: 0.5, + y: 0 + }; + _points3[0].curveTo = { + x: -0.5, + y: 1 + }; + _points3[1].curveFrom = { + x: 1, + y: 1 + }; + _points3[1].curveTo = { + x: 0.5, + y: 1 + }; + } else { + _points3[0].curveFrom = { + x: 0.5, + y: 1 + }; + _points3[0].curveTo = { + x: -0.5, + y: 1 + }; + _points3[1].curveFrom = { + x: 1, + y: 1 + }; + _points3[1].curveTo = { + x: 0.5, + y: 0 + }; + } + } // Providing Settings for the arrow + + + line.setName("Curved Arrow"); + return line; +} + +/***/ }), + /***/ "./src/utilities/conditions.js": /*!*************************************!*\ !*** ./src/utilities/conditions.js ***! @@ -183,13 +751,14 @@ __webpack_require__.r(__webpack_exports__); var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); -var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); +var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); // let docData = context.document.documentData(); +// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); + -var docData = context.document.documentData(); -var currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); -function addCondition(keyword, x, y) { +function addCondition(keyword, x, y, document, docData) { var libraries = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.getLibraries(); var libraryObject, symbolReferences, symbol; + var currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); for (var g = 0; g < libraries.length; g++) { symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document); @@ -207,15 +776,16 @@ function addCondition(keyword, x, y) { } else { var symbolMaster = libraryObject.import(); symbol = symbolMaster.createNewInstance(); - symbol = Object(_groups_js__WEBPACK_IMPORTED_MODULE_1__["addToConditionGroup"])(symbol, x, y); + symbol = Object(_groups_js__WEBPACK_IMPORTED_MODULE_1__["addToConditionGroup"])(symbol, x, y, currentParentGroup); } return symbol; } -function updateCondition(conditionID, x, y) { +function updateCondition(conditionID, x, y, document, docData) { + var currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); var condition = document.getLayerWithID(conditionID); - var conGroup = Object(_groups_js__WEBPACK_IMPORTED_MODULE_1__["checkForGroup"])("Conditions"); - var arGroup = Object(_groups_js__WEBPACK_IMPORTED_MODULE_1__["checkForGroup"])("Arrows"); + var conGroup = Object(_groups_js__WEBPACK_IMPORTED_MODULE_1__["checkForGroup"])("Conditions", currentParentGroup); + var arGroup = Object(_groups_js__WEBPACK_IMPORTED_MODULE_1__["checkForGroup"])("Arrows", currentParentGroup); var arGroupX = arGroup != null ? arGroup.frame().x() : 0; var arGroupY = arGroup != null ? arGroup.frame().y() : 0; @@ -246,6 +816,50 @@ function deleteCondition(conditionID, document) { /***/ }), +/***/ "./src/utilities/data.js": +/*!*******************************!*\ + !*** ./src/utilities/data.js ***! + \*******************************/ +/*! exports provided: getConnectionsData, deleteConnectionFromData */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getConnectionsData", function() { return getConnectionsData; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteConnectionFromData", function() { return deleteConnectionFromData; }); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); + + +var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); + +var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); + +var pluginKey = "flowArrows"; +function getConnectionsData(docData) { + var pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); + var dataArray = []; + + if (pluginData) { + for (var i = 0; i < pluginData.length; i++) { + dataArray.push(pluginData[i]); + } + } + + return dataArray; +} +function deleteConnectionFromData(connectionIndexArray, data) { + if (data) { + for (var i = connectionIndexArray.length - 1; i >= 0; i--) { + data.splice(connectionIndexArray[i], 1); + } + } + + return data; +} + +/***/ }), + /***/ "./src/utilities/groups.js": /*!*********************************!*\ !*** ./src/utilities/groups.js ***! @@ -264,12 +878,12 @@ __webpack_require__.r(__webpack_exports__); var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); -var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); +var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); // let document = sketch.fromNative(context.document); +// let docData = context.document.documentData(); +// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); -var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); -var docData = context.document.documentData(); -var currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); -function checkForGroup(groupName) { + +function checkForGroup(groupName, currentParentGroup) { // refactored var currentGroup = null; // Checking all the groups that we have @@ -281,8 +895,8 @@ function checkForGroup(groupName) { return currentGroup; } -function addToArrowsGroup(line) { - var currentGroup = checkForGroup("Arrows"); +function addToArrowsGroup(line, currentParentGroup) { + var currentGroup = checkForGroup("Arrows", currentParentGroup); if (currentGroup) { currentGroup.addLayers([line]); @@ -300,9 +914,9 @@ function addToArrowsGroup(line) { group.adjustToFit(); } } -function addToConditionGroup(condition, x, y) { - var conGroup = checkForGroup("Conditions"); - var arGroup = checkForGroup("Arrows"); +function addToConditionGroup(condition, x, y, currentParentGroup) { + var conGroup = checkForGroup("Conditions", currentParentGroup); + var arGroup = checkForGroup("Arrows", currentParentGroup); var arGroupX = arGroup != null ? arGroup.frame().x() : 0; var arGroupY = arGroup != null ? arGroup.frame().y() : 0; @@ -348,7 +962,6 @@ __webpack_require__.r(__webpack_exports__); var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); function deleteLine(lineID, document) { - log(lineID); var lineObject = document.getLayerWithID(lineID); var selectedGroup; @@ -364,6 +977,95 @@ function deleteLine(lineID, document) { /***/ }), +/***/ "./src/utilities/styling.js": +/*!**********************************!*\ + !*** ./src/utilities/styling.js ***! + \**********************************/ +/*! exports provided: styleLine, getLayerStyles */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "styleLine", function() { return styleLine; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLayerStyles", function() { return getLayerStyles; }); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); +/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); + +var pluginKey = "flowArrows"; // let document = sketch.fromNative(context.document); +// let docData = context.document.documentData(); + +function styleLine(line, style, docData) { + // Refactored + var localStyle; + + if (style != null) { + // For updates + if (getLayerStyles(style, docData) != null && style != "Default Style") { + // If style is specified + localStyle = style; + var ownStyle = getLayerStyles(style, docData); + line.sharedStyle = ownStyle[0]; + } else { + // if there is no specific style + localStyle = "Default Style"; + var border = line.style().addStylePartOfType(1); + border.color = MSColor.colorWithRGBADictionary({ + r: 0.89, + g: 0.89, + b: 0.89, + a: 1 + }); + border.thickness = 2; + line.style().endMarkerType = 2; + } + } else { + // For creating new + if (context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) != "Default Style") { + // we have settins almost all the time and it's not default + localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey), docData); + line.sharedStyle = localStyle[0]; + localStyle = localStyle[0].name(); + } else { + localStyle = "Default Style"; + + var _border = line.style().addStylePartOfType(1); + + _border.color = MSColor.colorWithRGBADictionary({ + r: 0.89, + g: 0.89, + b: 0.89, + a: 1 + }); + _border.thickness = 2; + line.style().endMarkerType = 2; + } + } + + return localStyle; +} +function getLayerStyles(name, docData) { + // Refactored + var allStyles = docData.allLayerStyles(); + var keyword = "$arrow"; + var styles = []; + + for (var i = 0; i < allStyles.count(); i++) { + if (name == null) { + if (allStyles[i].name().includes(keyword)) { + styles.push(allStyles[i]); + } + } else { + if (allStyles[i].name() == name) { + styles.push(allStyles[i]); + } + } + } + + return styles; +} + +/***/ }), + /***/ "sketch": /*!*************************!*\ !*** external "sketch" ***! diff --git a/arrows.sketchplugin/Contents/Sketch/autoUpdate.js.map b/arrows.sketchplugin/Contents/Sketch/autoUpdate.js.map index 453454d..86da2fd 100644 --- a/arrows.sketchplugin/Contents/Sketch/autoUpdate.js.map +++ b/arrows.sketchplugin/Contents/Sketch/autoUpdate.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/autoUpdate.js","webpack://exports/./src/utilities/conditions.js","webpack://exports/./src/utilities/groups.js","webpack://exports/./src/utilities/lines.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","pluginKey","autoUpdateSelectedArrows","context","document","sketch","fromNative","actionContext","action","docData","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","connectionsData","i","length","push","console","log","movedLayers","Array","from","layers","map","layer","firstObjectID","String","id","connectionIndex","y","firstObject","secondObject","x","deleteLine","line","isCondition","deleteCondition","condition","connection","createArrow","style","type","direction","conditionID","deleteConnectionFromData","setValue_forKey_onLayer_forPluginIdentifier","Settings","currentParentGroup","currentPage","currentArtboard","addCondition","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","g","getImportableSymbolReferencesForDocument","name","includes","alert","symbolMaster","import","createNewInstance","addToConditionGroup","updateCondition","getLayerWithID","conGroup","checkForGroup","arGroup","arGroupX","frame","arGroupY","width","height","fixGeometryWithOptions","conditionObject","selectedGroup","parent","remove","groupName","currentGroup","count","addToArrowsGroup","addLayers","Group","group","locked","moveToBack","adjustToFit","lineID","lineObject"],"mappings":"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","file":"autoUpdate.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/autoUpdate.js\");\n","import sketch from 'sketch';\nlet UI = require('sketch/ui');\nconst pluginKey = \"flowArrows\";\nimport { deleteLine } from \"./utilities/lines.js\"\nimport { deleteCondition } from \"./utilities/conditions.js\";\n\n\n\nexport function autoUpdateSelectedArrows(context) {\n let document = sketch.fromNative(context.actionContext.document)\n const action = context.actionContext\n let docData = action.document.documentData();\n let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey)\n\n let connectionsData = [];\n\n if (pluginData) {\n for (let i = 0; i < pluginData.length; i++) {\n connectionsData.push(pluginData[i]);\n }\n }\n\n console.log(connectionsData)\n \n const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer))\n let firstObjectID = String(movedLayers[0].id);\n let connectionIndex = []\n\n if(connectionsData.length > 0){\n for (let y = 0; y < connectionsData.length; y++) {\n if (firstObjectID == connectionsData[y].firstObject || firstObjectID == connectionsData[y].secondObject) {\n connectionIndex.push(y);\n }\n }\n } \n\n if(connectionIndex.length > 0){\n for (let x = 0; x < connectionIndex.length; x++) {\n deleteLine(connectionsData[connectionIndex[x]].line, document);\n if (!isCondition) { \n deleteCondition(connectionsData[connectionIndex[x]].condition, document);\n }\n let connection = createArrow(\n connectionsData[connectionIndex[x]].firstObject, \n connectionsData[connectionIndex[x]].secondObject, \n connectionsData[connectionIndex[x]].style,\n connectionsData[connectionIndex[x]].type, \n connectionsData[connectionIndex[x]].direction, \n connectionsData[connectionIndex[x]].conditionID, \n connectionsData[connectionIndex[x]].isCondition\n );\n connectionsData.push(connection);\n }\n }\n\n if(connectionIndex.length > 0){\n // Update data if there was changes\n connectionsData = deleteConnectionFromData(connectionIndex, connectionsData);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n\n}","import sketch from 'sketch';\nimport { addToConditionGroup, checkForGroup } from \"./groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\nexport function addCondition(keyword, x, y) {\n let libraries = sketch.getLibraries();\n let libraryObject, symbolReferences, symbol;\n\n for (let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(\n document\n );\n for (let i = 0; i < symbolReferences.length; i++) {\n if (symbolReferences[i].name.includes(keyword)) {\n libraryObject = symbolReferences[i];\n }\n }\n }\n\n if (libraryObject == null) {\n symbol = null;\n UI.alert(\n \"Condition symbol is not found\",\n 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here'\n );\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y);\n }\n return symbol;\n}\n\nexport function updateCondition(conditionID, x, y) {\n let condition = document.getLayerWithID(conditionID);\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n }\n return condition.id;\n}\n\nexport function deleteCondition(conditionID, document) {\n let conditionObject = document.getLayerWithID(conditionID);\n let selectedGroup;\n if(conditionObject){\n selectedGroup = conditionObject.parent;\n conditionObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n }\n \n","import sketch from 'sketch';\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function checkForGroup(groupName) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n\n return currentGroup;\n}\n\nexport function addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\");\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nexport function addToConditionGroup(condition, x, y) {\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2 + arGroupX;\n condition.frame.y = y - condition.frame.height / 2 + arGroupY;\n let Group = require(\"sketch/dom\").Group;\n let group = new Group({\n parent: currentParentGroup,\n name: \"Conditions\",\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n }","import sketch from 'sketch';\nlet UI = require('sketch/ui');\n\nexport function deleteLine(lineID, document){\n log(lineID)\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/autoUpdate.js","webpack://exports/./src/createArrow.js","webpack://exports/./src/draw.js","webpack://exports/./src/utilities/conditions.js","webpack://exports/./src/utilities/data.js","webpack://exports/./src/utilities/groups.js","webpack://exports/./src/utilities/lines.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","pluginKey","autoUpdateSelectedArrows","context","document","sketch","fromNative","actionContext","action","docData","documentData","connectionsData","getConnectionsData","movedLayers","Array","from","layers","map","layer","firstObjectID","String","id","connectionIndex","length","y","firstObject","secondObject","push","x","deleteLine","line","connection","createArrow","style","type","direction","conditionID","isCondition","deleteConnectionFromData","command","setValue_forKey_onLayer_forPluginIdentifier","Settings","secondObjectID","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","condition","objectID","getLayerWithID","firstObjectMidX","frame","width","firstObjectMidY","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","sourceObjectID","childObjectID","sourceObject","childObject","settingForKey","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","currentParentGroup","currentPage","currentArtboard","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","firstObjectAbsPos","changeBasis","parent","to","secondObjectAbsPos","currentGroup","checkForGroup","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","g","getImportableSymbolReferencesForDocument","i","name","includes","alert","symbolMaster","import","createNewInstance","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","fixGeometryWithOptions","deleteCondition","conditionObject","selectedGroup","remove","pluginData","valueForKey_onLayer_forPluginIdentifier","dataArray","connectionIndexArray","data","splice","groupName","count","addLayers","Group","group","locked","moveToBack","adjustToFit","lineID","lineObject","localStyle","getLayerStyles","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","allStyles","allLayerStyles","styles"],"mappings":"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","file":"autoUpdate.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/autoUpdate.js\");\n","import sketch from 'sketch';\nlet UI = require('sketch/ui');\nconst pluginKey = \"flowArrows\";\nimport { deleteLine } from \"./utilities/lines.js\"\nimport { createArrow } from \"./createArrow.js\";\nimport { getConnectionsData, deleteConnectionFromData } from \"./utilities/data.js\"\n\n\n\nexport function autoUpdateSelectedArrows(context) {\n let document = sketch.fromNative(context.actionContext.document)\n let action = context.actionContext\n let docData = action.document.documentData();\n\n let connectionsData = getConnectionsData(docData);\n\n \n const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer))\n let firstObjectID = String(movedLayers[0].id);\n let connectionIndex = []\n\n if(connectionsData.length > 0){\n for (let y = 0; y < connectionsData.length; y++) {\n if (firstObjectID == connectionsData[y].firstObject || firstObjectID == connectionsData[y].secondObject) {\n connectionIndex.push(y);\n }\n }\n } \n\n if(connectionIndex.length > 0){\n for (let x = 0; x < connectionIndex.length; x++) {\n deleteLine(connectionsData[connectionIndex[x]].line, document);\n let connection = createArrow(\n connectionsData[connectionIndex[x]].firstObject, \n connectionsData[connectionIndex[x]].secondObject, \n connectionsData[connectionIndex[x]].style,\n connectionsData[connectionIndex[x]].type, \n connectionsData[connectionIndex[x]].direction, \n connectionsData[connectionIndex[x]].conditionID, \n connectionsData[connectionIndex[x]].isCondition,\n document, \n docData\n );\n connectionsData.push(connection);\n }\n }\n\n if(connectionIndex.length > 0){\n connectionsData = deleteConnectionFromData(connectionIndex, connectionsData);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n\n}","import sketch from 'sketch';\nimport { drawConnection } from \"./draw.js\";\n\nvar Settings = require('sketch/settings');\n\n\n// Main Function\n\nexport function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition, document, docData) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID, document) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection, document);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection, document);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition, document, docData);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n return connection;\n}\n\nfunction getDirection(firstObjectID, secondObjectID, document){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction, document){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction, document){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}","import sketch from 'sketch';\nimport { styleLine } from \"./utilities/styling.js\";\nimport { addCondition, updateCondition } from \"./utilities/conditions.js\";\nimport { checkForGroup, addToArrowsGroup } from \"./utilities/groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\n// Main Function\n\nexport function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition, document, docData){ // Refactored\n // Process of creating new connection \n let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection, currentParentGroup);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n\n // Condition\n if(isCondition == true){\n if(document.getLayerWithID(conditionID)){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY, document, docData);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY, document, docData);\n }\n } else {\n connection.conditionID = null;\n }\n \n // Style\n connection.style = styleLine(connection.line, style, docData);\n\n // Add to group\n addToArrowsGroup(connection.line, currentParentGroup);\n \n return connection\n}\n\n// Positions\n\nfunction getConnectionPos(firstObject, secondObject, direction, currentParentGroup){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\", currentParentGroup);\n let diffX, diffY;\n \n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n \n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n \n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n\n return connectionPos\n}\n\n// Drawing Types\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n \n return line;\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n \n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n \n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n \n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n \n if(firstLayerPosX Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here'\n );\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y, currentParentGroup);\n }\n return symbol;\n}\n\nexport function updateCondition(conditionID, x, y, document, docData) {\n let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n let condition = document.getLayerWithID(conditionID);\n let conGroup = checkForGroup(\"Conditions\", currentParentGroup);\n let arGroup = checkForGroup(\"Arrows\", currentParentGroup);\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n }\n return condition.id;\n}\n\nexport function deleteCondition(conditionID, document) {\n let conditionObject = document.getLayerWithID(conditionID);\n let selectedGroup;\n if(conditionObject){\n selectedGroup = conditionObject.parent;\n conditionObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n }\n \n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\n\n\nexport function getConnectionsData(docData) {\n let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n let dataArray = [];\n\n if (pluginData) {\n for (let i = 0; i < pluginData.length; i++) {\n dataArray.push(pluginData[i]);\n }\n }\n return dataArray;\n}\n\nexport function deleteConnectionFromData(connectionIndexArray, data){\n if(data){\n for (let i = connectionIndexArray.length -1; i >= 0; i--) {\n data.splice(connectionIndexArray[i],1);\n }\n }\n return data;\n}\n","import sketch from 'sketch';\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function checkForGroup(groupName, currentParentGroup) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n\n return currentGroup;\n}\n\nexport function addToArrowsGroup(line, currentParentGroup){\n let currentGroup = checkForGroup(\"Arrows\", currentParentGroup);\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nexport function addToConditionGroup(condition, x, y, currentParentGroup) {\n let conGroup = checkForGroup(\"Conditions\", currentParentGroup);\n let arGroup = checkForGroup(\"Arrows\", currentParentGroup);\n \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2 + arGroupX;\n condition.frame.y = y - condition.frame.height / 2 + arGroupY;\n let Group = require(\"sketch/dom\").Group;\n let group = new Group({\n parent: currentParentGroup,\n name: \"Conditions\",\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n }","import sketch from 'sketch';\nlet UI = require('sketch/ui');\n\nexport function deleteLine(lineID, document){\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n\nexport function styleLine(line, style, docData){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style, docData) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style, docData);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey), docData);\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name, docData) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index 2ecc92d..eac8b65 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -107,18 +107,17 @@ __webpack_require__.r(__webpack_exports__); -var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); +var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); // Main Function -var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); // Main Function -function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { +function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition, document, docData) { // Refactored - var localDirection = direction == "Auto" ? getDirection(firstObjectID, secondObjectID) : direction; // Main Operations based on the settings + var localDirection = direction == "Auto" ? getDirection(firstObjectID, secondObjectID, document) : direction; // Main Operations based on the settings - updateSpacing(firstObjectID, secondObjectID, localDirection); - autoAlignLayer(firstObjectID, secondObjectID, localDirection); // Making an Arrow + updateSpacing(firstObjectID, secondObjectID, localDirection, document); + autoAlignLayer(firstObjectID, secondObjectID, localDirection, document); // Making an Arrow - var arrow = Object(_draw_js__WEBPACK_IMPORTED_MODULE_1__["drawConnection"])(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition); // Storage for current connection + var arrow = Object(_draw_js__WEBPACK_IMPORTED_MODULE_1__["drawConnection"])(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition, document, docData); // Storage for current connection var connection = { firstObject: firstObjectID, @@ -133,7 +132,7 @@ function createArrow(firstObjectID, secondObjectID, style, type, direction, cond return connection; } -function getDirection(firstObjectID, secondObjectID) { +function getDirection(firstObjectID, secondObjectID, document) { // Refactored // Get direction from the source object var firstObject = document.getLayerWithID(firstObjectID); @@ -171,7 +170,7 @@ function getDirection(firstObjectID, secondObjectID) { return direction; } -function updateSpacing(sourceObjectID, childObjectID, direction) { +function updateSpacing(sourceObjectID, childObjectID, direction, document) { var sourceObject = document.getLayerWithID(sourceObjectID); var childObject = document.getLayerWithID(childObjectID); @@ -196,7 +195,7 @@ function updateSpacing(sourceObjectID, childObjectID, direction) { } } -function autoAlignLayer(sourceObjectID, childObjectID, direction) { +function autoAlignLayer(sourceObjectID, childObjectID, direction, document) { var sourceObject = document.getLayerWithID(sourceObjectID); var childObject = document.getLayerWithID(childObjectID); var sourceMidY, childMidY, sourceMidX, childMidX, diff; @@ -251,18 +250,19 @@ __webpack_require__.r(__webpack_exports__); var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); -var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); +var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); // let document = sketch.fromNative(context.document); +// let docData = context.document.documentData(); +// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); +// Main Function -var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); -var docData = context.document.documentData(); -var currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // Main Function -function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition) { +function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition, document, docData) { // Refactored // Process of creating new connection + var currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); var firstObject = document.getLayerWithID(firstObjectID); var secondObject = document.getLayerWithID(secondObjectID); - var connectionPos = getConnectionPos(firstObject, secondObject, localDirection); + var connectionPos = getConnectionPos(firstObject, secondObject, localDirection, currentParentGroup); var connection = { line: [], conditionID: [], @@ -287,22 +287,22 @@ function drawConnection(firstObjectID, secondObjectID, style, type, localDirecti if (isCondition == true) { if (document.getLayerWithID(conditionID)) { - connection.conditionID = Object(_utilities_conditions_js__WEBPACK_IMPORTED_MODULE_2__["updateCondition"])(conditionID, connectionPos.middlePosX, connectionPos.middlePosY); + connection.conditionID = Object(_utilities_conditions_js__WEBPACK_IMPORTED_MODULE_2__["updateCondition"])(conditionID, connectionPos.middlePosX, connectionPos.middlePosY, document, docData); } else { - connection.conditionID = Object(_utilities_conditions_js__WEBPACK_IMPORTED_MODULE_2__["addCondition"])("#con", connectionPos.middlePosX, connectionPos.middlePosY); + connection.conditionID = Object(_utilities_conditions_js__WEBPACK_IMPORTED_MODULE_2__["addCondition"])("#con", connectionPos.middlePosX, connectionPos.middlePosY, document, docData); } } else { connection.conditionID = null; } // Style - connection.style = Object(_utilities_styling_js__WEBPACK_IMPORTED_MODULE_1__["styleLine"])(connection.line, style); // Add to group + connection.style = Object(_utilities_styling_js__WEBPACK_IMPORTED_MODULE_1__["styleLine"])(connection.line, style, docData); // Add to group - Object(_utilities_groups_js__WEBPACK_IMPORTED_MODULE_3__["addToArrowsGroup"])(connection.line); + Object(_utilities_groups_js__WEBPACK_IMPORTED_MODULE_3__["addToArrowsGroup"])(connection.line, currentParentGroup); return connection; } // Positions -function getConnectionPos(firstObject, secondObject, direction) { +function getConnectionPos(firstObject, secondObject, direction, currentParentGroup) { // Refactored var firstObjectAbsPos = firstObject.frame.changeBasis({ from: firstObject.parent, @@ -312,7 +312,7 @@ function getConnectionPos(firstObject, secondObject, direction) { from: secondObject.parent, to: currentParentGroup }); - var currentGroup = Object(_utilities_groups_js__WEBPACK_IMPORTED_MODULE_3__["checkForGroup"])("Arrows"); + var currentGroup = Object(_utilities_groups_js__WEBPACK_IMPORTED_MODULE_3__["checkForGroup"])("Arrows", currentParentGroup); var diffX, diffY; if (currentGroup) { @@ -722,10 +722,10 @@ var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); var pluginKey = "flowArrows"; var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); -var docData = context.document.documentData(); // let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); -// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); - -var connectionsData = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_4__["getConnectionsData"])(); // +var docData = context.document.documentData(); +var pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); +var currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); +var connectionsData = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_4__["getConnectionsData"])(docData); // // Plugin Incoming Commands - Create // @@ -785,7 +785,7 @@ function create(context, direction, isCondition) { if (_create) { // Create - var connection = Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_1__["createArrow"])(firstObjectID, secondObjectID, null, null, direction, null, isCondition); + var connection = Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_1__["createArrow"])(firstObjectID, secondObjectID, null, null, direction, null, isCondition, document, docData); connectionsData.push(connection); sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("New connection is created 🚀"); } else { @@ -796,7 +796,7 @@ function create(context, direction, isCondition) { Object(_utilities_conditions_js__WEBPACK_IMPORTED_MODULE_6__["deleteCondition"])(connectionsData[index].condition, document); } - var _connection = Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_1__["createArrow"])(firstObjectID, secondObjectID, null, null, direction, connectionsData[index].condition, isCondition); + var _connection = Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_1__["createArrow"])(firstObjectID, secondObjectID, null, null, direction, connectionsData[index].condition, isCondition, document, docData); connectionsData.push(_connection); sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Current connection is updated 🤘"); @@ -880,7 +880,7 @@ function update(context, level, isUpdate) { sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows are updated 🚀"); } - var connection = Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_1__["createArrow"])(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition); + var connection = Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_1__["createArrow"])(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition, document, docData); connectionsData.push(connection); context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, "arrowConnections", docData, pluginKey); } else { @@ -923,7 +923,7 @@ var docData = context.document.documentData(); var pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); var currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards -var connectionsData = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_1__["getConnectionsData"])(); +var connectionsData = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_1__["getConnectionsData"])(docData); function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored // Need to check if we have the layers with such IDs @@ -965,13 +965,14 @@ __webpack_require__.r(__webpack_exports__); var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); -var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); +var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); // let docData = context.document.documentData(); +// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); -var docData = context.document.documentData(); -var currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); -function addCondition(keyword, x, y) { + +function addCondition(keyword, x, y, document, docData) { var libraries = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.getLibraries(); var libraryObject, symbolReferences, symbol; + var currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); for (var g = 0; g < libraries.length; g++) { symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(document); @@ -989,15 +990,16 @@ function addCondition(keyword, x, y) { } else { var symbolMaster = libraryObject.import(); symbol = symbolMaster.createNewInstance(); - symbol = Object(_groups_js__WEBPACK_IMPORTED_MODULE_1__["addToConditionGroup"])(symbol, x, y); + symbol = Object(_groups_js__WEBPACK_IMPORTED_MODULE_1__["addToConditionGroup"])(symbol, x, y, currentParentGroup); } return symbol; } -function updateCondition(conditionID, x, y) { +function updateCondition(conditionID, x, y, document, docData) { + var currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); var condition = document.getLayerWithID(conditionID); - var conGroup = Object(_groups_js__WEBPACK_IMPORTED_MODULE_1__["checkForGroup"])("Conditions"); - var arGroup = Object(_groups_js__WEBPACK_IMPORTED_MODULE_1__["checkForGroup"])("Arrows"); + var conGroup = Object(_groups_js__WEBPACK_IMPORTED_MODULE_1__["checkForGroup"])("Conditions", currentParentGroup); + var arGroup = Object(_groups_js__WEBPACK_IMPORTED_MODULE_1__["checkForGroup"])("Arrows", currentParentGroup); var arGroupX = arGroup != null ? arGroup.frame().x() : 0; var arGroupY = arGroup != null ? arGroup.frame().y() : 0; @@ -1048,14 +1050,8 @@ var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); var pluginKey = "flowArrows"; -var document; -var docData, pluginData, currentParentGroup, connectionsData; -document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); -docData = context.document.documentData(); -pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); -currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards - -function getConnectionsData() { +function getConnectionsData(docData) { + var pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); var dataArray = []; if (pluginData) { @@ -1175,12 +1171,12 @@ __webpack_require__.r(__webpack_exports__); var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); -var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); +var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); // let document = sketch.fromNative(context.document); +// let docData = context.document.documentData(); +// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); -var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); -var docData = context.document.documentData(); -var currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); -function checkForGroup(groupName) { + +function checkForGroup(groupName, currentParentGroup) { // refactored var currentGroup = null; // Checking all the groups that we have @@ -1192,8 +1188,8 @@ function checkForGroup(groupName) { return currentGroup; } -function addToArrowsGroup(line) { - var currentGroup = checkForGroup("Arrows"); +function addToArrowsGroup(line, currentParentGroup) { + var currentGroup = checkForGroup("Arrows", currentParentGroup); if (currentGroup) { currentGroup.addLayers([line]); @@ -1211,9 +1207,9 @@ function addToArrowsGroup(line) { group.adjustToFit(); } } -function addToConditionGroup(condition, x, y) { - var conGroup = checkForGroup("Conditions"); - var arGroup = checkForGroup("Arrows"); +function addToConditionGroup(condition, x, y, currentParentGroup) { + var conGroup = checkForGroup("Conditions", currentParentGroup); + var arGroup = checkForGroup("Arrows", currentParentGroup); var arGroupX = arGroup != null ? arGroup.frame().x() : 0; var arGroupY = arGroup != null ? arGroup.frame().y() : 0; @@ -1259,7 +1255,6 @@ __webpack_require__.r(__webpack_exports__); var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); function deleteLine(lineID, document) { - log(lineID); var lineObject = document.getLayerWithID(lineID); var selectedGroup; @@ -1289,19 +1284,19 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); -var pluginKey = "flowArrows"; -var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); -var docData = context.document.documentData(); -function styleLine(line, style) { +var pluginKey = "flowArrows"; // let document = sketch.fromNative(context.document); +// let docData = context.document.documentData(); + +function styleLine(line, style, docData) { // Refactored var localStyle; if (style != null) { // For updates - if (getLayerStyles(style) != null && style != "Default Style") { + if (getLayerStyles(style, docData) != null && style != "Default Style") { // If style is specified localStyle = style; - var ownStyle = getLayerStyles(style); + var ownStyle = getLayerStyles(style, docData); line.sharedStyle = ownStyle[0]; } else { // if there is no specific style @@ -1320,7 +1315,7 @@ function styleLine(line, style) { // For creating new if (context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) != "Default Style") { // we have settins almost all the time and it's not default - localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)); + localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey), docData); line.sharedStyle = localStyle[0]; localStyle = localStyle[0].name(); } else { @@ -1341,7 +1336,7 @@ function styleLine(line, style) { return localStyle; } -function getLayerStyles(name) { +function getLayerStyles(name, docData) { // Refactored var allStyles = docData.allLayerStyles(); var keyword = "$arrow"; diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index 880ee8f..5c178ac 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/createArrow.js","webpack://exports/./src/draw.js","webpack://exports/./src/script.js","webpack://exports/./src/updateArrow.js","webpack://exports/./src/utilities/conditions.js","webpack://exports/./src/utilities/data.js","webpack://exports/./src/utilities/getSourceObject.js","webpack://exports/./src/utilities/groups.js","webpack://exports/./src/utilities/lines.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["Settings","require","document","sketch","fromNative","context","createArrow","firstObjectID","secondObjectID","style","type","direction","conditionID","isCondition","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","firstObject","secondObject","condition","line","objectID","getLayerWithID","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","sourceObjectID","childObjectID","sourceObject","childObject","settingForKey","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","UI","docData","documentData","currentParentGroup","currentPage","currentArtboard","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","currentGroup","checkForGroup","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","layers","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","pluginKey","connectionsData","getConnectionsData","createAutoArrow","create","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","selection","count","class","getSourceObjectFromSelection","connectionIndex","g","String","index","length","push","message","deleteLine","deleteCondition","deleteConnectionFromData","command","setValue_forKey_onLayer_forPluginIdentifier","updateSelectedArrows","update","updateArtboardArrows","updateAllArrows","deleteSelectedArrows","deleteArtboardArrows","deleteAllArrows","level","isUpdate","newConnectionsData","firstObjectArtboard","secondObjectArtboard","i","updateArrow","sketchObject","parentArtboard","pluginData","valueForKey_onLayer_forPluginIdentifier","lineID","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","getImportableSymbolReferencesForDocument","name","includes","alert","symbolMaster","import","createNewInstance","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","fixGeometryWithOptions","id","conditionObject","selectedGroup","remove","dataArray","connectionIndexArray","data","splice","defineSourceObject","groupName","addLayers","Group","group","locked","moveToBack","adjustToFit","log","lineObject","localStyle","getLayerStyles","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","allStyles","allLayerStyles","styles"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch';\nimport { drawConnection } from \"./draw.js\";\n\nvar Settings = require('sketch/settings');\nlet document = sketch.fromNative(context.document);\n\n// Main Function\n\nexport function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n return connection;\n}\n\nfunction getDirection(firstObjectID, secondObjectID){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}","import sketch from 'sketch';\nimport { styleLine } from \"./utilities/styling.js\";\nimport { addCondition, updateCondition } from \"./utilities/conditions.js\";\nimport { checkForGroup, addToArrowsGroup } from \"./utilities/groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\n// Main Function\n\nexport function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition){ // Refactored\n // Process of creating new connection \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n\n // Condition\n if(isCondition == true){\n if(document.getLayerWithID(conditionID)){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY);\n }\n } else {\n connection.conditionID = null;\n }\n \n // Style\n connection.style = styleLine(connection.line, style);\n\n // Add to group\n addToArrowsGroup(connection.line);\n \n return connection\n}\n\n// Positions\n\nfunction getConnectionPos(firstObject, secondObject, direction){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\");\n let diffX, diffY;\n \n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n \n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n \n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n\n return connectionPos\n}\n\n// Drawing Types\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n \n return line;\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n \n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n \n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n \n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n \n if(firstLayerPosX 1 && selection[0].class() != \"MSArtboardGroup\"){\n let sourceObjectID = getSourceObjectFromSelection(selection, direction);\n let connectionIndex = []\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n\n let firstObjectID = String(sourceObjectID);\n let secondObjectID = String(selection[g].objectID());\n let create = true\n let index\n\n if(connectionsData.length > 0){\n for (let y = 0; y < connectionsData.length; y++) {\n if ((firstObjectID == connectionsData[y].firstObject || firstObjectID == connectionsData[y].secondObject) && (secondObjectID == connectionsData[y].firstObject || secondObjectID == connectionsData[y].secondObject)) {\n // We have this connection and need to update\n create = false;\n index = y;\n connectionIndex.push(y);\n }\n }\n } \n \n if(create){\n // Create\n let connection = createArrow(firstObjectID, secondObjectID, null, null, direction, null, isCondition);\n connectionsData.push(connection);\n sketch.UI.message(\"New connection is created 🚀\");\n } else {\n // Update\n deleteLine(connectionsData[index].line, document);\n if (!isCondition) { \n deleteCondition(connectionsData[index].condition, document) \n }\n\n let connection = createArrow(firstObjectID, secondObjectID, null, null, direction, connectionsData[index].condition, isCondition);\n connectionsData.push(connection);\n sketch.UI.message(\"Current connection is updated 🤘\");\n }\n }\n }\n if(connectionIndex.length > 0){\n // Update data if there was changes\n connectionsData = deleteConnectionFromData(connectionIndex, connectionsData);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\n \n//\n// Plugin Incoming Commands - Update and Delete\n//\n\nexport function updateSelectedArrows(context) {update(context, 1, true);}\nexport function updateArtboardArrows(context) {update(context, 2, true);}\nexport function updateAllArrows(context) {update(context, 3, true);}\nexport function deleteSelectedArrows(context) {update(context, 1, false);}\nexport function deleteArtboardArrows(context) {update(context, 2, false);}\nexport function deleteAllArrows(context) {update(context, 3, false);}\n\nexport function update(context, level, isUpdate) {\n // 1 - selection level\n // 2 - artboard level\n // 3 - document level\n let newConnectionsData = [];\n let selection = context.selection;\n let firstObjectArtboard;\n let secondObjectArtboard;\n\n\n if (connectionsData.length > 0) {\n for (let i = 0; i < connectionsData.length; i++) {\n \n if (level == 3) {\n if(isUpdate){\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n sketch.UI.message(\"All arrows are updated\");\n } else {\n newConnectionsData = null\n sketch.UI.message(\"All arrows are deleted\");\n }\n }\n if (level == 2) {\n firstObjectArtboard = document.getLayerWithID(connectionsData[i].firstObject);\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID();\n secondObjectArtboard = document.getLayerWithID(connectionsData[i].secondObject);\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID();\n\n if (selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\") {\n\n if (firstObjectArtboard == selection[0].objectID()) {\n if (secondObjectArtboard == selection[0].objectID()) {\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n }\n }\n sketch.UI.message(\"All arrows are updated 🚀\");\n \n \n }\n let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition);\n connectionsData.push(connection);\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n sketch.UI.message(\"There is no arrows\");\n }\n}\n\n// const track = require(\"sketch-module-google-analytics\")\n// track(\"UA-138226597-1\", \"event\", {\n// ec: \"command\", \n// ea: \"create\", \n// ev: \"my-command\"\n// });\n\n\n\n\n\n","import sketch from 'sketch';\nimport { getConnectionsData, deleteConnectionFromData} from \"./utilities/data.js\"\nimport { deleteLine } from \"./utilities/lines.js\"\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\nlet connectionsData = getConnectionsData();\n\n\n\nexport function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n // let firstObject = document.getLayerWithID(firstObjectID);\n // let secondObject = document.getLayerWithID(secondObjectID);\n // let conditionObject = document.getLayerWithID(conditionID);\n // let result = false;\n \n // Need to delete data first, because we will have a new line\n // deleteLine(lineID);\n // if(conditionID && !isCondition){\n // if(conditionObject){conditionObject.remove();}\n // }\n \n connectionsData = deleteConnectionFromData(connectionIndex);\n\n // if(firstObject && secondObject){\n // // If we have all the objects, we can recreate the line\n // result = true;\n // }\n\n // return result;\n}","import sketch from 'sketch';\nimport { addToConditionGroup, checkForGroup } from \"./groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\nexport function addCondition(keyword, x, y) {\n let libraries = sketch.getLibraries();\n let libraryObject, symbolReferences, symbol;\n\n for (let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(\n document\n );\n for (let i = 0; i < symbolReferences.length; i++) {\n if (symbolReferences[i].name.includes(keyword)) {\n libraryObject = symbolReferences[i];\n }\n }\n }\n\n if (libraryObject == null) {\n symbol = null;\n UI.alert(\n \"Condition symbol is not found\",\n 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here'\n );\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y);\n }\n return symbol;\n}\n\nexport function updateCondition(conditionID, x, y) {\n let condition = document.getLayerWithID(conditionID);\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n }\n return condition.id;\n}\n\nexport function deleteCondition(conditionID, document) {\n let conditionObject = document.getLayerWithID(conditionID);\n let selectedGroup;\n if(conditionObject){\n selectedGroup = conditionObject.parent;\n conditionObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n }\n \n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\nlet document;\n\nlet docData, pluginData, currentParentGroup, connectionsData;\n\ndocument = sketch.fromNative(context.document);\ndocData = context.document.documentData();\npluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\ncurrentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\n\nexport function getConnectionsData() {\n let dataArray = [];\n\n if (pluginData) {\n for (let i = 0; i < pluginData.length; i++) {\n dataArray.push(pluginData[i]);\n }\n }\n return dataArray;\n}\n\nexport function deleteConnectionFromData(connectionIndexArray, data){\n if(data){\n for (let i = connectionIndexArray.length -1; i >= 0; i--) {\n data.splice(connectionIndexArray[i],1);\n }\n }\n return data;\n}\n","import sketch from 'sketch';\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function getSourceObjectFromSelection(selection, direction){\n let sourceObjectID = selection.firstObject().objectID();\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction);\n }\n }\n return sourceObjectID;\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){\n \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let sourceObjectID;\n\n if(direction == \"Right\"){\n if(firstObjectAbsPos.x <= secondObjectAbsPos.x){ // We need to get the doc position\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.y <= secondObjectAbsPos.y){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Left\"){\n if(firstObjectAbsPos.x <= secondObjectAbsPos.x){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n if(direction == \"Up\"){\n if(firstObjectAbsPos.y <= secondObjectAbsPos.y){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n return sourceObjectID;\n}","import sketch from 'sketch';\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function checkForGroup(groupName) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n\n return currentGroup;\n}\n\nexport function addToArrowsGroup(line){\n let currentGroup = checkForGroup(\"Arrows\");\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nexport function addToConditionGroup(condition, x, y) {\n let conGroup = checkForGroup(\"Conditions\");\n let arGroup = checkForGroup(\"Arrows\");\n \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2 + arGroupX;\n condition.frame.y = y - condition.frame.height / 2 + arGroupY;\n let Group = require(\"sketch/dom\").Group;\n let group = new Group({\n parent: currentParentGroup,\n name: \"Conditions\",\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n }","import sketch from 'sketch';\nlet UI = require('sketch/ui');\n\nexport function deleteLine(lineID, document){\n log(lineID)\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\n\nexport function styleLine(line, style){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey));\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/createArrow.js","webpack://exports/./src/draw.js","webpack://exports/./src/script.js","webpack://exports/./src/updateArrow.js","webpack://exports/./src/utilities/conditions.js","webpack://exports/./src/utilities/data.js","webpack://exports/./src/utilities/getSourceObject.js","webpack://exports/./src/utilities/groups.js","webpack://exports/./src/utilities/lines.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["Settings","require","createArrow","firstObjectID","secondObjectID","style","type","direction","conditionID","isCondition","document","docData","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","firstObject","secondObject","condition","line","objectID","getLayerWithID","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","sourceObjectID","childObjectID","sourceObject","childObject","settingForKey","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","UI","currentParentGroup","currentPage","currentArtboard","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","currentGroup","checkForGroup","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","layers","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","pluginKey","sketch","fromNative","context","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","connectionsData","getConnectionsData","createAutoArrow","create","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","selection","count","class","getSourceObjectFromSelection","connectionIndex","g","String","index","length","push","message","deleteLine","deleteCondition","deleteConnectionFromData","setValue_forKey_onLayer_forPluginIdentifier","updateSelectedArrows","update","updateArtboardArrows","updateAllArrows","deleteSelectedArrows","deleteArtboardArrows","deleteAllArrows","level","isUpdate","newConnectionsData","firstObjectArtboard","secondObjectArtboard","i","updateArrow","sketchObject","parentArtboard","lineID","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","getImportableSymbolReferencesForDocument","name","includes","alert","symbolMaster","import","createNewInstance","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","fixGeometryWithOptions","id","conditionObject","selectedGroup","remove","dataArray","connectionIndexArray","data","splice","defineSourceObject","groupName","addLayers","Group","group","locked","moveToBack","adjustToFit","lineObject","localStyle","getLayerStyles","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","allStyles","allLayerStyles","styles"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch';\nimport { drawConnection } from \"./draw.js\";\n\nvar Settings = require('sketch/settings');\n\n\n// Main Function\n\nexport function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition, document, docData) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID, document) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection, document);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection, document);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition, document, docData);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n return connection;\n}\n\nfunction getDirection(firstObjectID, secondObjectID, document){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction, document){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction, document){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}","import sketch from 'sketch';\nimport { styleLine } from \"./utilities/styling.js\";\nimport { addCondition, updateCondition } from \"./utilities/conditions.js\";\nimport { checkForGroup, addToArrowsGroup } from \"./utilities/groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\n// Main Function\n\nexport function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition, document, docData){ // Refactored\n // Process of creating new connection \n let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection, currentParentGroup);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n\n // Condition\n if(isCondition == true){\n if(document.getLayerWithID(conditionID)){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY, document, docData);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY, document, docData);\n }\n } else {\n connection.conditionID = null;\n }\n \n // Style\n connection.style = styleLine(connection.line, style, docData);\n\n // Add to group\n addToArrowsGroup(connection.line, currentParentGroup);\n \n return connection\n}\n\n// Positions\n\nfunction getConnectionPos(firstObject, secondObject, direction, currentParentGroup){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\", currentParentGroup);\n let diffX, diffY;\n \n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n \n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n \n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n\n return connectionPos\n}\n\n// Drawing Types\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n \n return line;\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n \n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n \n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n \n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n \n if(firstLayerPosX 1 && selection[0].class() != \"MSArtboardGroup\"){\n let sourceObjectID = getSourceObjectFromSelection(selection, direction);\n let connectionIndex = []\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n\n let firstObjectID = String(sourceObjectID);\n let secondObjectID = String(selection[g].objectID());\n let create = true\n let index\n\n if(connectionsData.length > 0){\n for (let y = 0; y < connectionsData.length; y++) {\n if ((firstObjectID == connectionsData[y].firstObject || firstObjectID == connectionsData[y].secondObject) && (secondObjectID == connectionsData[y].firstObject || secondObjectID == connectionsData[y].secondObject)) {\n // We have this connection and need to update\n create = false;\n index = y;\n connectionIndex.push(y);\n }\n }\n } \n \n if(create){\n // Create\n let connection = createArrow(firstObjectID, secondObjectID, null, null, direction, null, isCondition, document, docData);\n connectionsData.push(connection);\n sketch.UI.message(\"New connection is created 🚀\");\n } else {\n // Update\n deleteLine(connectionsData[index].line, document);\n if (!isCondition) { \n deleteCondition(connectionsData[index].condition, document) \n }\n\n let connection = createArrow(firstObjectID, secondObjectID, null, null, direction, connectionsData[index].condition, isCondition, document, docData);\n connectionsData.push(connection);\n sketch.UI.message(\"Current connection is updated 🤘\");\n }\n }\n }\n if(connectionIndex.length > 0){\n // Update data if there was changes\n connectionsData = deleteConnectionFromData(connectionIndex, connectionsData);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\n \n//\n// Plugin Incoming Commands - Update and Delete\n//\n\nexport function updateSelectedArrows(context) {update(context, 1, true);}\nexport function updateArtboardArrows(context) {update(context, 2, true);}\nexport function updateAllArrows(context) {update(context, 3, true);}\nexport function deleteSelectedArrows(context) {update(context, 1, false);}\nexport function deleteArtboardArrows(context) {update(context, 2, false);}\nexport function deleteAllArrows(context) {update(context, 3, false);}\n\nexport function update(context, level, isUpdate) {\n // 1 - selection level\n // 2 - artboard level\n // 3 - document level\n let newConnectionsData = [];\n let selection = context.selection;\n let firstObjectArtboard;\n let secondObjectArtboard;\n\n\n if (connectionsData.length > 0) {\n for (let i = 0; i < connectionsData.length; i++) {\n \n if (level == 3) {\n if(isUpdate){\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n sketch.UI.message(\"All arrows are updated\");\n } else {\n newConnectionsData = null\n sketch.UI.message(\"All arrows are deleted\");\n }\n }\n if (level == 2) {\n firstObjectArtboard = document.getLayerWithID(connectionsData[i].firstObject);\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID();\n secondObjectArtboard = document.getLayerWithID(connectionsData[i].secondObject);\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID();\n\n if (selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\") {\n\n if (firstObjectArtboard == selection[0].objectID()) {\n if (secondObjectArtboard == selection[0].objectID()) {\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n }\n }\n sketch.UI.message(\"All arrows are updated 🚀\");\n \n \n }\n let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition, document, docData);\n connectionsData.push(connection);\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n sketch.UI.message(\"There is no arrows\");\n }\n}\n\n// const track = require(\"sketch-module-google-analytics\")\n// track(\"UA-138226597-1\", \"event\", {\n// ec: \"command\", \n// ea: \"create\", \n// ev: \"my-command\"\n// });\n\n\n\n\n\n","import sketch from 'sketch';\nimport { getConnectionsData, deleteConnectionFromData} from \"./utilities/data.js\"\nimport { deleteLine } from \"./utilities/lines.js\"\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\nlet connectionsData = getConnectionsData(docData);\n\n\n\nexport function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n // let firstObject = document.getLayerWithID(firstObjectID);\n // let secondObject = document.getLayerWithID(secondObjectID);\n // let conditionObject = document.getLayerWithID(conditionID);\n // let result = false;\n \n // Need to delete data first, because we will have a new line\n // deleteLine(lineID);\n // if(conditionID && !isCondition){\n // if(conditionObject){conditionObject.remove();}\n // }\n \n connectionsData = deleteConnectionFromData(connectionIndex);\n\n // if(firstObject && secondObject){\n // // If we have all the objects, we can recreate the line\n // result = true;\n // }\n\n // return result;\n}","import sketch from 'sketch';\nimport { addToConditionGroup, checkForGroup } from \"./groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\n// let docData = context.document.documentData();\n// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\nexport function addCondition(keyword, x, y, document, docData) {\n let libraries = sketch.getLibraries();\n let libraryObject, symbolReferences, symbol;\n let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n for (let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(\n document\n );\n for (let i = 0; i < symbolReferences.length; i++) {\n if (symbolReferences[i].name.includes(keyword)) {\n libraryObject = symbolReferences[i];\n }\n }\n }\n\n if (libraryObject == null) {\n symbol = null;\n UI.alert(\n \"Condition symbol is not found\",\n 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here'\n );\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y, currentParentGroup);\n }\n return symbol;\n}\n\nexport function updateCondition(conditionID, x, y, document, docData) {\n let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n let condition = document.getLayerWithID(conditionID);\n let conGroup = checkForGroup(\"Conditions\", currentParentGroup);\n let arGroup = checkForGroup(\"Arrows\", currentParentGroup);\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n }\n return condition.id;\n}\n\nexport function deleteCondition(conditionID, document) {\n let conditionObject = document.getLayerWithID(conditionID);\n let selectedGroup;\n if(conditionObject){\n selectedGroup = conditionObject.parent;\n conditionObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n }\n \n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\n\n\nexport function getConnectionsData(docData) {\n let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n let dataArray = [];\n\n if (pluginData) {\n for (let i = 0; i < pluginData.length; i++) {\n dataArray.push(pluginData[i]);\n }\n }\n return dataArray;\n}\n\nexport function deleteConnectionFromData(connectionIndexArray, data){\n if(data){\n for (let i = connectionIndexArray.length -1; i >= 0; i--) {\n data.splice(connectionIndexArray[i],1);\n }\n }\n return data;\n}\n","import sketch from 'sketch';\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function getSourceObjectFromSelection(selection, direction){\n let sourceObjectID = selection.firstObject().objectID();\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction);\n }\n }\n return sourceObjectID;\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){\n \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let sourceObjectID;\n\n if(direction == \"Right\"){\n if(firstObjectAbsPos.x <= secondObjectAbsPos.x){ // We need to get the doc position\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.y <= secondObjectAbsPos.y){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Left\"){\n if(firstObjectAbsPos.x <= secondObjectAbsPos.x){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n if(direction == \"Up\"){\n if(firstObjectAbsPos.y <= secondObjectAbsPos.y){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n return sourceObjectID;\n}","import sketch from 'sketch';\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function checkForGroup(groupName, currentParentGroup) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n\n return currentGroup;\n}\n\nexport function addToArrowsGroup(line, currentParentGroup){\n let currentGroup = checkForGroup(\"Arrows\", currentParentGroup);\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nexport function addToConditionGroup(condition, x, y, currentParentGroup) {\n let conGroup = checkForGroup(\"Conditions\", currentParentGroup);\n let arGroup = checkForGroup(\"Arrows\", currentParentGroup);\n \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2 + arGroupX;\n condition.frame.y = y - condition.frame.height / 2 + arGroupY;\n let Group = require(\"sketch/dom\").Group;\n let group = new Group({\n parent: currentParentGroup,\n name: \"Conditions\",\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n }","import sketch from 'sketch';\nlet UI = require('sketch/ui');\n\nexport function deleteLine(lineID, document){\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n\nexport function styleLine(line, style, docData){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style, docData) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style, docData);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey), docData);\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name, docData) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/arrows.sketchplugin/Contents/Sketch/settings.js b/arrows.sketchplugin/Contents/Sketch/settings.js index 55a7333..d7b3cb8 100644 --- a/arrows.sketchplugin/Contents/Sketch/settings.js +++ b/arrows.sketchplugin/Contents/Sketch/settings.js @@ -323,19 +323,19 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); /* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); -var pluginKey = "flowArrows"; -var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); -var docData = context.document.documentData(); -function styleLine(line, style) { +var pluginKey = "flowArrows"; // let document = sketch.fromNative(context.document); +// let docData = context.document.documentData(); + +function styleLine(line, style, docData) { // Refactored var localStyle; if (style != null) { // For updates - if (getLayerStyles(style) != null && style != "Default Style") { + if (getLayerStyles(style, docData) != null && style != "Default Style") { // If style is specified localStyle = style; - var ownStyle = getLayerStyles(style); + var ownStyle = getLayerStyles(style, docData); line.sharedStyle = ownStyle[0]; } else { // if there is no specific style @@ -354,7 +354,7 @@ function styleLine(line, style) { // For creating new if (context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) != "Default Style") { // we have settins almost all the time and it's not default - localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)); + localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey), docData); line.sharedStyle = localStyle[0]; localStyle = localStyle[0].name(); } else { @@ -375,7 +375,7 @@ function styleLine(line, style) { return localStyle; } -function getLayerStyles(name) { +function getLayerStyles(name, docData) { // Refactored var allStyles = docData.allLayerStyles(); var keyword = "$arrow"; diff --git a/arrows.sketchplugin/Contents/Sketch/settings.js.map b/arrows.sketchplugin/Contents/Sketch/settings.js.map index 0abbbed..9d7b001 100644 --- a/arrows.sketchplugin/Contents/Sketch/settings.js.map +++ b/arrows.sketchplugin/Contents/Sketch/settings.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/settings.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","Settings","pluginKey","document","sketch","fromNative","context","docData","documentData","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","settingForKey","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","command","setValue_forKey_onLayer_forPluginIdentifier","views","subviews","title","setSettingForKey","intValue","state","message","docSettings","valueForKey_onLayer_forPluginIdentifier","styles","getLayerStyles","addItemWithTitle","i","length","name","docTypeSettings","lastItem","setState","setMessageText","addButtonWithTitle","x","y","width","height","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","styleLine","line","style","localStyle","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","g","b","a","thickness","endMarkerType","allStyles","allLayerStyles","keyword","count","includes","push"],"mappings":"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","file":"settings.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/settings.js\");\n","import sketch from \"sketch\";\nimport { getLayerStyles } from \"./utilities/styling.js\";\n\n\nlet UI = require('sketch/ui') ;\nlet Settings = require(\"sketch/settings\");\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\n\nexport function settings(context) {\n let alert = COSAlertWindow.new();\n const viewWidth = 300;\n const viewHeight = 450;\n\n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight);\n let view = NSView.alloc().initWithFrame(\n NSMakeRect(0, 0, viewWidth, viewHeight)\n );\n alert.addAccessoryView(view);\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\n \"Arrow Style\",\n true,\n -1,\n viewHeight - 40,\n 280,\n 40\n );\n view.addSubview(arrowStyleLabel);\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(\n NSMakeRect(-2, viewHeight - 40, 300, 20)\n );\n setActiveStyleSetting(arrowStylingField);\n view.addSubview(arrowStylingField);\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\n \"Add layer style to your document that will contain $arrow name and you will be able to specify it here \",\n false,\n -1,\n viewHeight - 80,\n 300,\n 40\n );\n view.addSubview(arrowStyleInfoLabel);\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\n \"Arrow Type\",\n true,\n -1,\n viewHeight - 130,\n 280,\n 40\n );\n view.addSubview(arrowTypeLabel);\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(\n NSMakeRect(-2, viewHeight - 130, 300, 20)\n );\n setActiveTypeSetting(arrowTypeField);\n view.addSubview(arrowTypeField);\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\n \"Select one of the arrow types. Angled is used by default\",\n false,\n -1,\n viewHeight - 170,\n 300,\n 40\n );\n view.addSubview(arrowTypeInfoLabel);\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\n \"Arrow Spacing\",\n true,\n -1,\n viewHeight - 200,\n 330,\n 20\n );\n view.addSubview(arrowSpacingLabel);\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\n \"px\",\n true,\n 90,\n viewHeight - 220,\n 330,\n 20\n );\n view.addSubview(arrowSpacingPxLabel);\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(\n NSMakeRect(-2, viewHeight - 220, 80, 20)\n );\n var formatter = NSNumberFormatter.alloc()\n .init()\n .autorelease();\n arrowSpacingField.setStringValue(\n String(Settings.settingForKey(\"arrowSpacing\"))\n );\n arrowSpacingField.setFormatter(formatter);\n view.addSubview(arrowSpacingField);\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(\n NSMakeRect(70, viewHeight - 220, 20, 20)\n );\n arrowSpacingStepper.setMaxValue(1000);\n arrowSpacingStepper.setMinValue(0);\n arrowSpacingStepper.setValueWraps(false);\n arrowSpacingStepper.setAutorepeat(true);\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender) {\n var value = 0 + sender.integerValue();\n arrowSpacingField.setStringValue(String(value));\n });\n\n view.addSubview(arrowSpacingStepper);\n // view.addSubview(formatter)\n\n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\n \"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \",\n false,\n -1,\n viewHeight - 285,\n 300,\n 60\n );\n view.addSubview(arrowSpacingInfoLabel);\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\n \"Other Settings\",\n true,\n -1,\n viewHeight - 330,\n 280,\n 40\n );\n view.addSubview(otherSettingsLabel);\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\n \"Second layer auto-align\",\n false,\n -1,\n viewHeight - 340,\n 260,\n 40\n );\n view.addSubview(checkbox);\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\n \"Align the second layer for 5px misalignment with the first one\",\n false,\n -1,\n viewHeight - 370,\n 280,\n 40\n );\n view.addSubview(autoAlignInfoLabel);\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\n \"Made by @faridSabitov with the support of EPAM.com ❤️\",\n true,\n -1,\n viewHeight - 420,\n 280,\n 40\n );\n view.addSubview(pluginInfoLabel);\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal();\n\n if (modalResponse == NSAlertFirstButtonReturn) {\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(\n alert\n .views()[0]\n .subviews()[1]\n .title(),\n \"arrowStyle\",\n docData,\n pluginKey\n );\n Settings.setSettingForKey(\n \"arrowType\",\n alert\n .views()[0]\n .subviews()[4]\n .title()\n );\n Settings.setSettingForKey(\n \"arrowSpacing\",\n alert\n .views()[0]\n .subviews()[8]\n .intValue()\n );\n Settings.setSettingForKey(\n \"autoAlign\",\n alert\n .views()[0]\n .subviews()[12]\n .state()\n );\n UI.message(\"Settings are updated 🚀\");\n }\n}\n\n// Functions\n\nfunction setActiveStyleSetting(arrowStylingField) {\n let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier(\n \"arrowStyle\",\n docData,\n pluginKey\n );\n let styles = getLayerStyles(null);\n\n if (docSettings) {\n // We have info about the settings in the current document\n\n if (docSettings != \"Default Style\") {\n // if user specified own option\n arrowStylingField.addItemWithTitle(docSettings);\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for (let i = 0; i < styles.length; i++) {\n if (styles[i].name() != docSettings) {\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n } else {\n // Need to show the default first\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for (let i = 0; i < styles.length; i++) {\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n } else {\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for (let i = 0; i < styles.length; i++) {\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n}\n\nfunction setActiveTypeSetting(arrowTypeField) {\n let docTypeSettings = Settings.settingForKey(\"arrowType\");\n\n if (docTypeSettings) {\n // We have info about the settings in the current document\n\n if (docTypeSettings == \"Angled\") {\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(0);\n }\n\n if (docTypeSettings == \"Curved\") {\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(0);\n }\n\n if (docTypeSettings == \"Straight\") {\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(0);\n }\n } else {\n // Show default\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.addItemWithTitle(\"Straight\");\n }\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight) {\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\");\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\");\n alert.addButtonWithTitle(\"Cancel\");\n\n return alert;\n}\n\nfunction alertLabel(message, state, x, y, width, height) {\n let infoLabel = NSTextField.alloc().initWithFrame(\n NSMakeRect(x, y, width, height)\n );\n\n infoLabel.setStringValue(message);\n infoLabel.setSelectable(false);\n infoLabel.setDrawsBackground(false);\n infoLabel.setBezeled(false);\n\n if (state == false) {\n infoLabel.textColor = NSColor.disabledControlTextColor();\n }\n\n return infoLabel;\n}\n\nfunction alertCheckbox(message, state, x, y, width, height) {\n let checkbox = NSButton.alloc().initWithFrame(\n NSMakeRect(x, y, width, height)\n );\n\n checkbox.setButtonType(NSSwitchButton);\n checkbox.setBezelStyle(0);\n checkbox.setTitle(message);\n if (Settings.settingForKey(\"autoAlign\")) {\n let currentState = Settings.settingForKey(\"autoAlign\");\n checkbox.setState(currentState);\n } else {\n checkbox.setState(state);\n }\n\n return checkbox;\n}\n\n\n","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\n\nexport function styleLine(line, style){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey));\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/settings.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","Settings","pluginKey","document","sketch","fromNative","context","docData","documentData","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","settingForKey","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","command","setValue_forKey_onLayer_forPluginIdentifier","views","subviews","title","setSettingForKey","intValue","state","message","docSettings","valueForKey_onLayer_forPluginIdentifier","styles","getLayerStyles","addItemWithTitle","i","length","name","docTypeSettings","lastItem","setState","setMessageText","addButtonWithTitle","x","y","width","height","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","styleLine","line","style","localStyle","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","g","b","a","thickness","endMarkerType","allStyles","allLayerStyles","keyword","count","includes","push"],"mappings":"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","file":"settings.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/settings.js\");\n","import sketch from \"sketch\";\nimport { getLayerStyles } from \"./utilities/styling.js\";\n\n\nlet UI = require('sketch/ui') ;\nlet Settings = require(\"sketch/settings\");\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\n\nexport function settings(context) {\n let alert = COSAlertWindow.new();\n const viewWidth = 300;\n const viewHeight = 450;\n\n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight);\n let view = NSView.alloc().initWithFrame(\n NSMakeRect(0, 0, viewWidth, viewHeight)\n );\n alert.addAccessoryView(view);\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\n \"Arrow Style\",\n true,\n -1,\n viewHeight - 40,\n 280,\n 40\n );\n view.addSubview(arrowStyleLabel);\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(\n NSMakeRect(-2, viewHeight - 40, 300, 20)\n );\n setActiveStyleSetting(arrowStylingField);\n view.addSubview(arrowStylingField);\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\n \"Add layer style to your document that will contain $arrow name and you will be able to specify it here \",\n false,\n -1,\n viewHeight - 80,\n 300,\n 40\n );\n view.addSubview(arrowStyleInfoLabel);\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\n \"Arrow Type\",\n true,\n -1,\n viewHeight - 130,\n 280,\n 40\n );\n view.addSubview(arrowTypeLabel);\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(\n NSMakeRect(-2, viewHeight - 130, 300, 20)\n );\n setActiveTypeSetting(arrowTypeField);\n view.addSubview(arrowTypeField);\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\n \"Select one of the arrow types. Angled is used by default\",\n false,\n -1,\n viewHeight - 170,\n 300,\n 40\n );\n view.addSubview(arrowTypeInfoLabel);\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\n \"Arrow Spacing\",\n true,\n -1,\n viewHeight - 200,\n 330,\n 20\n );\n view.addSubview(arrowSpacingLabel);\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\n \"px\",\n true,\n 90,\n viewHeight - 220,\n 330,\n 20\n );\n view.addSubview(arrowSpacingPxLabel);\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(\n NSMakeRect(-2, viewHeight - 220, 80, 20)\n );\n var formatter = NSNumberFormatter.alloc()\n .init()\n .autorelease();\n arrowSpacingField.setStringValue(\n String(Settings.settingForKey(\"arrowSpacing\"))\n );\n arrowSpacingField.setFormatter(formatter);\n view.addSubview(arrowSpacingField);\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(\n NSMakeRect(70, viewHeight - 220, 20, 20)\n );\n arrowSpacingStepper.setMaxValue(1000);\n arrowSpacingStepper.setMinValue(0);\n arrowSpacingStepper.setValueWraps(false);\n arrowSpacingStepper.setAutorepeat(true);\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender) {\n var value = 0 + sender.integerValue();\n arrowSpacingField.setStringValue(String(value));\n });\n\n view.addSubview(arrowSpacingStepper);\n // view.addSubview(formatter)\n\n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\n \"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \",\n false,\n -1,\n viewHeight - 285,\n 300,\n 60\n );\n view.addSubview(arrowSpacingInfoLabel);\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\n \"Other Settings\",\n true,\n -1,\n viewHeight - 330,\n 280,\n 40\n );\n view.addSubview(otherSettingsLabel);\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\n \"Second layer auto-align\",\n false,\n -1,\n viewHeight - 340,\n 260,\n 40\n );\n view.addSubview(checkbox);\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\n \"Align the second layer for 5px misalignment with the first one\",\n false,\n -1,\n viewHeight - 370,\n 280,\n 40\n );\n view.addSubview(autoAlignInfoLabel);\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\n \"Made by @faridSabitov with the support of EPAM.com ❤️\",\n true,\n -1,\n viewHeight - 420,\n 280,\n 40\n );\n view.addSubview(pluginInfoLabel);\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal();\n\n if (modalResponse == NSAlertFirstButtonReturn) {\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(\n alert\n .views()[0]\n .subviews()[1]\n .title(),\n \"arrowStyle\",\n docData,\n pluginKey\n );\n Settings.setSettingForKey(\n \"arrowType\",\n alert\n .views()[0]\n .subviews()[4]\n .title()\n );\n Settings.setSettingForKey(\n \"arrowSpacing\",\n alert\n .views()[0]\n .subviews()[8]\n .intValue()\n );\n Settings.setSettingForKey(\n \"autoAlign\",\n alert\n .views()[0]\n .subviews()[12]\n .state()\n );\n UI.message(\"Settings are updated 🚀\");\n }\n}\n\n// Functions\n\nfunction setActiveStyleSetting(arrowStylingField) {\n let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier(\n \"arrowStyle\",\n docData,\n pluginKey\n );\n let styles = getLayerStyles(null);\n\n if (docSettings) {\n // We have info about the settings in the current document\n\n if (docSettings != \"Default Style\") {\n // if user specified own option\n arrowStylingField.addItemWithTitle(docSettings);\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for (let i = 0; i < styles.length; i++) {\n if (styles[i].name() != docSettings) {\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n } else {\n // Need to show the default first\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for (let i = 0; i < styles.length; i++) {\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n } else {\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for (let i = 0; i < styles.length; i++) {\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n}\n\nfunction setActiveTypeSetting(arrowTypeField) {\n let docTypeSettings = Settings.settingForKey(\"arrowType\");\n\n if (docTypeSettings) {\n // We have info about the settings in the current document\n\n if (docTypeSettings == \"Angled\") {\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(0);\n }\n\n if (docTypeSettings == \"Curved\") {\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(0);\n }\n\n if (docTypeSettings == \"Straight\") {\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(0);\n }\n } else {\n // Show default\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.addItemWithTitle(\"Straight\");\n }\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight) {\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\");\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\");\n alert.addButtonWithTitle(\"Cancel\");\n\n return alert;\n}\n\nfunction alertLabel(message, state, x, y, width, height) {\n let infoLabel = NSTextField.alloc().initWithFrame(\n NSMakeRect(x, y, width, height)\n );\n\n infoLabel.setStringValue(message);\n infoLabel.setSelectable(false);\n infoLabel.setDrawsBackground(false);\n infoLabel.setBezeled(false);\n\n if (state == false) {\n infoLabel.textColor = NSColor.disabledControlTextColor();\n }\n\n return infoLabel;\n}\n\nfunction alertCheckbox(message, state, x, y, width, height) {\n let checkbox = NSButton.alloc().initWithFrame(\n NSMakeRect(x, y, width, height)\n );\n\n checkbox.setButtonType(NSSwitchButton);\n checkbox.setBezelStyle(0);\n checkbox.setTitle(message);\n if (Settings.settingForKey(\"autoAlign\")) {\n let currentState = Settings.settingForKey(\"autoAlign\");\n checkbox.setState(currentState);\n } else {\n checkbox.setState(state);\n }\n\n return checkbox;\n}\n\n\n","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n\nexport function styleLine(line, style, docData){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style, docData) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style, docData);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey), docData);\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name, docData) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/src/autoUpdate.js b/src/autoUpdate.js index 9d53d92..8360d4f 100644 --- a/src/autoUpdate.js +++ b/src/autoUpdate.js @@ -2,25 +2,18 @@ import sketch from 'sketch'; let UI = require('sketch/ui'); const pluginKey = "flowArrows"; import { deleteLine } from "./utilities/lines.js" -import { deleteCondition } from "./utilities/conditions.js"; +import { createArrow } from "./createArrow.js"; +import { getConnectionsData, deleteConnectionFromData } from "./utilities/data.js" export function autoUpdateSelectedArrows(context) { let document = sketch.fromNative(context.actionContext.document) - const action = context.actionContext + let action = context.actionContext let docData = action.document.documentData(); - let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey) - let connectionsData = []; + let connectionsData = getConnectionsData(docData); - if (pluginData) { - for (let i = 0; i < pluginData.length; i++) { - connectionsData.push(pluginData[i]); - } - } - - console.log(connectionsData) const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer)) let firstObjectID = String(movedLayers[0].id); @@ -37,9 +30,6 @@ export function autoUpdateSelectedArrows(context) { if(connectionIndex.length > 0){ for (let x = 0; x < connectionIndex.length; x++) { deleteLine(connectionsData[connectionIndex[x]].line, document); - if (!isCondition) { - deleteCondition(connectionsData[connectionIndex[x]].condition, document); - } let connection = createArrow( connectionsData[connectionIndex[x]].firstObject, connectionsData[connectionIndex[x]].secondObject, @@ -47,14 +37,15 @@ export function autoUpdateSelectedArrows(context) { connectionsData[connectionIndex[x]].type, connectionsData[connectionIndex[x]].direction, connectionsData[connectionIndex[x]].conditionID, - connectionsData[connectionIndex[x]].isCondition + connectionsData[connectionIndex[x]].isCondition, + document, + docData ); connectionsData.push(connection); } } if(connectionIndex.length > 0){ - // Update data if there was changes connectionsData = deleteConnectionFromData(connectionIndex, connectionsData); } context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, "arrowConnections", docData, pluginKey); diff --git a/src/createArrow.js b/src/createArrow.js index 3aa83c8..9dff698 100644 --- a/src/createArrow.js +++ b/src/createArrow.js @@ -2,19 +2,19 @@ import sketch from 'sketch'; import { drawConnection } from "./draw.js"; var Settings = require('sketch/settings'); -let document = sketch.fromNative(context.document); + // Main Function -export function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition) { // Refactored - let localDirection = direction == "Auto" ? getDirection(firstObjectID, secondObjectID) : direction; +export function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition, document, docData) { // Refactored + let localDirection = direction == "Auto" ? getDirection(firstObjectID, secondObjectID, document) : direction; // Main Operations based on the settings - updateSpacing(firstObjectID, secondObjectID, localDirection); - autoAlignLayer(firstObjectID, secondObjectID, localDirection); + updateSpacing(firstObjectID, secondObjectID, localDirection, document); + autoAlignLayer(firstObjectID, secondObjectID, localDirection, document); // Making an Arrow - let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition); + let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition, document, docData); // Storage for current connection let connection = { @@ -30,7 +30,7 @@ export function createArrow(firstObjectID, secondObjectID, style, type, directio return connection; } -function getDirection(firstObjectID, secondObjectID){ // Refactored +function getDirection(firstObjectID, secondObjectID, document){ // Refactored // Get direction from the source object const firstObject = document.getLayerWithID(firstObjectID); const secondObject = document.getLayerWithID(secondObjectID); @@ -68,7 +68,7 @@ function getDirection(firstObjectID, secondObjectID){ // Refactored return direction; } -function updateSpacing(sourceObjectID, childObjectID, direction){ +function updateSpacing(sourceObjectID, childObjectID, direction, document){ let sourceObject = document.getLayerWithID(sourceObjectID); let childObject = document.getLayerWithID(childObjectID); @@ -93,7 +93,7 @@ function updateSpacing(sourceObjectID, childObjectID, direction){ } } -function autoAlignLayer(sourceObjectID, childObjectID, direction){ +function autoAlignLayer(sourceObjectID, childObjectID, direction, document){ let sourceObject = document.getLayerWithID(sourceObjectID); let childObject = document.getLayerWithID(childObjectID); let sourceMidY, childMidY, sourceMidX, childMidX, diff; diff --git a/src/draw.js b/src/draw.js index 25f2693..acd3a45 100644 --- a/src/draw.js +++ b/src/draw.js @@ -5,18 +5,19 @@ import { checkForGroup, addToArrowsGroup } from "./utilities/groups.js"; let Settings = require('sketch/settings'); let UI = require('sketch/ui') ; -let document = sketch.fromNative(context.document); -let docData = context.document.documentData(); -let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); +// let document = sketch.fromNative(context.document); +// let docData = context.document.documentData(); +// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // Main Function -export function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition){ // Refactored +export function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition, document, docData){ // Refactored // Process of creating new connection + let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); let firstObject = document.getLayerWithID(firstObjectID); let secondObject = document.getLayerWithID(secondObjectID); - let connectionPos = getConnectionPos(firstObject, secondObject, localDirection); + let connectionPos = getConnectionPos(firstObject, secondObject, localDirection, currentParentGroup); let connection = { line: [], conditionID: [], @@ -34,30 +35,30 @@ export function drawConnection(firstObjectID, secondObjectID, style, type, local // Condition if(isCondition == true){ if(document.getLayerWithID(conditionID)){ - connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY); + connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY, document, docData); } else { - connection.conditionID = addCondition("#con", connectionPos.middlePosX, connectionPos.middlePosY); + connection.conditionID = addCondition("#con", connectionPos.middlePosX, connectionPos.middlePosY, document, docData); } } else { connection.conditionID = null; } // Style - connection.style = styleLine(connection.line, style); + connection.style = styleLine(connection.line, style, docData); // Add to group - addToArrowsGroup(connection.line); + addToArrowsGroup(connection.line, currentParentGroup); return connection } // Positions -function getConnectionPos(firstObject, secondObject, direction){ // Refactored +function getConnectionPos(firstObject, secondObject, direction, currentParentGroup){ // Refactored let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup}); let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup}); - let currentGroup = checkForGroup("Arrows"); + let currentGroup = checkForGroup("Arrows", currentParentGroup); let diffX, diffY; if(currentGroup){ diff --git a/src/script.js b/src/script.js index d404f91..d841a0f 100644 --- a/src/script.js +++ b/src/script.js @@ -17,9 +17,9 @@ const pluginKey = "flowArrows"; let document = sketch.fromNative(context.document); let docData = context.document.documentData(); -// let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); -// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); -let connectionsData = getConnectionsData(); +let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); +let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); +let connectionsData = getConnectionsData(docData); @@ -65,7 +65,7 @@ function create(context, direction, isCondition){ if(create){ // Create - let connection = createArrow(firstObjectID, secondObjectID, null, null, direction, null, isCondition); + let connection = createArrow(firstObjectID, secondObjectID, null, null, direction, null, isCondition, document, docData); connectionsData.push(connection); sketch.UI.message("New connection is created 🚀"); } else { @@ -75,7 +75,7 @@ function create(context, direction, isCondition){ deleteCondition(connectionsData[index].condition, document) } - let connection = createArrow(firstObjectID, secondObjectID, null, null, direction, connectionsData[index].condition, isCondition); + let connection = createArrow(firstObjectID, secondObjectID, null, null, direction, connectionsData[index].condition, isCondition, document, docData); connectionsData.push(connection); sketch.UI.message("Current connection is updated 🤘"); } @@ -149,7 +149,7 @@ export function update(context, level, isUpdate) { } - let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition); + let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition, document, docData); connectionsData.push(connection); context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, "arrowConnections", docData, pluginKey); } else { diff --git a/src/updateArrow.js b/src/updateArrow.js index a83a05b..1a9f5d2 100644 --- a/src/updateArrow.js +++ b/src/updateArrow.js @@ -9,7 +9,7 @@ let document = sketch.fromNative(context.document); let docData = context.document.documentData(); let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards -let connectionsData = getConnectionsData(); +let connectionsData = getConnectionsData(docData); diff --git a/src/utilities/conditions.js b/src/utilities/conditions.js index 2db2b20..b708489 100644 --- a/src/utilities/conditions.js +++ b/src/utilities/conditions.js @@ -3,12 +3,13 @@ import { addToConditionGroup, checkForGroup } from "./groups.js"; let Settings = require('sketch/settings'); let UI = require('sketch/ui') ; -let docData = context.document.documentData(); -let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); +// let docData = context.document.documentData(); +// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); -export function addCondition(keyword, x, y) { +export function addCondition(keyword, x, y, document, docData) { let libraries = sketch.getLibraries(); let libraryObject, symbolReferences, symbol; + let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); for (let g = 0; g < libraries.length; g++) { symbolReferences = libraries[g].getImportableSymbolReferencesForDocument( @@ -30,15 +31,16 @@ export function addCondition(keyword, x, y) { } else { let symbolMaster = libraryObject.import(); symbol = symbolMaster.createNewInstance(); - symbol = addToConditionGroup(symbol, x, y); + symbol = addToConditionGroup(symbol, x, y, currentParentGroup); } return symbol; } -export function updateCondition(conditionID, x, y) { +export function updateCondition(conditionID, x, y, document, docData) { + let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); let condition = document.getLayerWithID(conditionID); - let conGroup = checkForGroup("Conditions"); - let arGroup = checkForGroup("Arrows"); + let conGroup = checkForGroup("Conditions", currentParentGroup); + let arGroup = checkForGroup("Arrows", currentParentGroup); let arGroupX = arGroup != null ? arGroup.frame().x() : 0; let arGroupY = arGroup != null ? arGroup.frame().y() : 0; diff --git a/src/utilities/data.js b/src/utilities/data.js index de42f43..adc5754 100644 --- a/src/utilities/data.js +++ b/src/utilities/data.js @@ -4,16 +4,10 @@ let UI = require('sketch/ui') ; var Settings = require('sketch/settings'); const pluginKey = "flowArrows"; -let document; -let docData, pluginData, currentParentGroup, connectionsData; -document = sketch.fromNative(context.document); -docData = context.document.documentData(); -pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); -currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards - -export function getConnectionsData() { +export function getConnectionsData(docData) { + let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); let dataArray = []; if (pluginData) { diff --git a/src/utilities/groups.js b/src/utilities/groups.js index 98c3bc1..04048fa 100644 --- a/src/utilities/groups.js +++ b/src/utilities/groups.js @@ -2,12 +2,12 @@ import sketch from 'sketch'; let Settings = require('sketch/settings'); let UI = require('sketch/ui') ; -let document = sketch.fromNative(context.document); -let docData = context.document.documentData(); -let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); +// let document = sketch.fromNative(context.document); +// let docData = context.document.documentData(); +// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); -export function checkForGroup(groupName) { // refactored +export function checkForGroup(groupName, currentParentGroup) { // refactored let currentGroup = null; // Checking all the groups that we have @@ -20,8 +20,8 @@ export function checkForGroup(groupName) { // refactored return currentGroup; } -export function addToArrowsGroup(line){ - let currentGroup = checkForGroup("Arrows"); +export function addToArrowsGroup(line, currentParentGroup){ + let currentGroup = checkForGroup("Arrows", currentParentGroup); if(currentGroup){ currentGroup.addLayers([line]); currentGroup.fixGeometryWithOptions(1); @@ -38,9 +38,9 @@ export function addToArrowsGroup(line){ } } -export function addToConditionGroup(condition, x, y) { - let conGroup = checkForGroup("Conditions"); - let arGroup = checkForGroup("Arrows"); +export function addToConditionGroup(condition, x, y, currentParentGroup) { + let conGroup = checkForGroup("Conditions", currentParentGroup); + let arGroup = checkForGroup("Arrows", currentParentGroup); let arGroupX = arGroup != null ? arGroup.frame().x() : 0; let arGroupY = arGroup != null ? arGroup.frame().y() : 0; diff --git a/src/utilities/lines.js b/src/utilities/lines.js index 9a8aae7..99c8efb 100644 --- a/src/utilities/lines.js +++ b/src/utilities/lines.js @@ -2,7 +2,6 @@ import sketch from 'sketch'; let UI = require('sketch/ui'); export function deleteLine(lineID, document){ - log(lineID) let lineObject = document.getLayerWithID(lineID); let selectedGroup; if(lineObject){ diff --git a/src/utilities/styling.js b/src/utilities/styling.js index a14cf72..3c78376 100644 --- a/src/utilities/styling.js +++ b/src/utilities/styling.js @@ -1,17 +1,17 @@ import sketch from 'sketch'; const pluginKey = "flowArrows"; -let document = sketch.fromNative(context.document); -let docData = context.document.documentData(); +// let document = sketch.fromNative(context.document); +// let docData = context.document.documentData(); -export function styleLine(line, style){ // Refactored +export function styleLine(line, style, docData){ // Refactored let localStyle; if(style != null){ // For updates - if(getLayerStyles(style) != null && style != "Default Style"){ + if(getLayerStyles(style, docData) != null && style != "Default Style"){ // If style is specified localStyle = style; - let ownStyle = getLayerStyles(style); + let ownStyle = getLayerStyles(style, docData); line.sharedStyle = ownStyle[0]; } else { // if there is no specific style @@ -25,7 +25,7 @@ export function styleLine(line, style){ // Refactored // For creating new if(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey) != "Default Style"){ // we have settins almost all the time and it's not default - localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey)); + localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey), docData); line.sharedStyle = localStyle[0]; localStyle = localStyle[0].name(); } else { @@ -40,7 +40,7 @@ export function styleLine(line, style){ // Refactored return localStyle; } -export function getLayerStyles(name) { // Refactored +export function getLayerStyles(name, docData) { // Refactored let allStyles = docData.allLayerStyles(); let keyword = "$arrow"; let styles = []; From 69f87f5e774181056c8f5d0951b6c9055c80cc28 Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Thu, 11 Jul 2019 23:07:44 +0300 Subject: [PATCH 38/44] fixed conditions redraw --- .../Contents/Sketch/autoUpdate.js | 25 ++++++++++++------- .../Contents/Sketch/autoUpdate.js.map | 2 +- src/autoUpdate.js | 23 +++++++++++------ 3 files changed, 32 insertions(+), 18 deletions(-) diff --git a/arrows.sketchplugin/Contents/Sketch/autoUpdate.js b/arrows.sketchplugin/Contents/Sketch/autoUpdate.js index d91ac61..65d8108 100644 --- a/arrows.sketchplugin/Contents/Sketch/autoUpdate.js +++ b/arrows.sketchplugin/Contents/Sketch/autoUpdate.js @@ -124,19 +124,12 @@ function autoUpdateSelectedArrows(context) { }); var firstObjectID = String(movedLayers[0].id); var connectionIndex = []; - - if (connectionsData.length > 0) { - for (var y = 0; y < connectionsData.length; y++) { - if (firstObjectID == connectionsData[y].firstObject || firstObjectID == connectionsData[y].secondObject) { - connectionIndex.push(y); - } - } - } + connectionIndex = getIndex(connectionsData, firstObjectID); if (connectionIndex.length > 0) { for (var x = 0; x < connectionIndex.length; x++) { Object(_utilities_lines_js__WEBPACK_IMPORTED_MODULE_1__["deleteLine"])(connectionsData[connectionIndex[x]].line, document); - var connection = Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_2__["createArrow"])(connectionsData[connectionIndex[x]].firstObject, connectionsData[connectionIndex[x]].secondObject, connectionsData[connectionIndex[x]].style, connectionsData[connectionIndex[x]].type, connectionsData[connectionIndex[x]].direction, connectionsData[connectionIndex[x]].conditionID, connectionsData[connectionIndex[x]].isCondition, document, docData); + var connection = Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_2__["createArrow"])(connectionsData[connectionIndex[x]].firstObject, connectionsData[connectionIndex[x]].secondObject, connectionsData[connectionIndex[x]].style, connectionsData[connectionIndex[x]].type, connectionsData[connectionIndex[x]].direction, connectionsData[connectionIndex[x]].condition, connectionsData[connectionIndex[x]].isCondition, document, docData); connectionsData.push(connection); } } @@ -148,6 +141,20 @@ function autoUpdateSelectedArrows(context) { context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, "arrowConnections", docData, pluginKey); } +function getIndex(connectionsData, firstObjectID) { + var connectionIndex = []; + + if (connectionsData.length > 0) { + for (var y = 0; y < connectionsData.length; y++) { + if (firstObjectID == connectionsData[y].firstObject || firstObjectID == connectionsData[y].secondObject) { + connectionIndex.push(y); + } + } + } + + return connectionIndex; +} + /***/ }), /***/ "./src/createArrow.js": diff --git a/arrows.sketchplugin/Contents/Sketch/autoUpdate.js.map b/arrows.sketchplugin/Contents/Sketch/autoUpdate.js.map index 86da2fd..94a1acc 100644 --- a/arrows.sketchplugin/Contents/Sketch/autoUpdate.js.map +++ b/arrows.sketchplugin/Contents/Sketch/autoUpdate.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/autoUpdate.js","webpack://exports/./src/createArrow.js","webpack://exports/./src/draw.js","webpack://exports/./src/utilities/conditions.js","webpack://exports/./src/utilities/data.js","webpack://exports/./src/utilities/groups.js","webpack://exports/./src/utilities/lines.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","pluginKey","autoUpdateSelectedArrows","context","document","sketch","fromNative","actionContext","action","docData","documentData","connectionsData","getConnectionsData","movedLayers","Array","from","layers","map","layer","firstObjectID","String","id","connectionIndex","length","y","firstObject","secondObject","push","x","deleteLine","line","connection","createArrow","style","type","direction","conditionID","isCondition","deleteConnectionFromData","command","setValue_forKey_onLayer_forPluginIdentifier","Settings","secondObjectID","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","condition","objectID","getLayerWithID","firstObjectMidX","frame","width","firstObjectMidY","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","sourceObjectID","childObjectID","sourceObject","childObject","settingForKey","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","currentParentGroup","currentPage","currentArtboard","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","firstObjectAbsPos","changeBasis","parent","to","secondObjectAbsPos","currentGroup","checkForGroup","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","g","getImportableSymbolReferencesForDocument","i","name","includes","alert","symbolMaster","import","createNewInstance","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","fixGeometryWithOptions","deleteCondition","conditionObject","selectedGroup","remove","pluginData","valueForKey_onLayer_forPluginIdentifier","dataArray","connectionIndexArray","data","splice","groupName","count","addLayers","Group","group","locked","moveToBack","adjustToFit","lineID","lineObject","localStyle","getLayerStyles","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","allStyles","allLayerStyles","styles"],"mappings":"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","file":"autoUpdate.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/autoUpdate.js\");\n","import sketch from 'sketch';\nlet UI = require('sketch/ui');\nconst pluginKey = \"flowArrows\";\nimport { deleteLine } from \"./utilities/lines.js\"\nimport { createArrow } from \"./createArrow.js\";\nimport { getConnectionsData, deleteConnectionFromData } from \"./utilities/data.js\"\n\n\n\nexport function autoUpdateSelectedArrows(context) {\n let document = sketch.fromNative(context.actionContext.document)\n let action = context.actionContext\n let docData = action.document.documentData();\n\n let connectionsData = getConnectionsData(docData);\n\n \n const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer))\n let firstObjectID = String(movedLayers[0].id);\n let connectionIndex = []\n\n if(connectionsData.length > 0){\n for (let y = 0; y < connectionsData.length; y++) {\n if (firstObjectID == connectionsData[y].firstObject || firstObjectID == connectionsData[y].secondObject) {\n connectionIndex.push(y);\n }\n }\n } \n\n if(connectionIndex.length > 0){\n for (let x = 0; x < connectionIndex.length; x++) {\n deleteLine(connectionsData[connectionIndex[x]].line, document);\n let connection = createArrow(\n connectionsData[connectionIndex[x]].firstObject, \n connectionsData[connectionIndex[x]].secondObject, \n connectionsData[connectionIndex[x]].style,\n connectionsData[connectionIndex[x]].type, \n connectionsData[connectionIndex[x]].direction, \n connectionsData[connectionIndex[x]].conditionID, \n connectionsData[connectionIndex[x]].isCondition,\n document, \n docData\n );\n connectionsData.push(connection);\n }\n }\n\n if(connectionIndex.length > 0){\n connectionsData = deleteConnectionFromData(connectionIndex, connectionsData);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n\n}","import sketch from 'sketch';\nimport { drawConnection } from \"./draw.js\";\n\nvar Settings = require('sketch/settings');\n\n\n// Main Function\n\nexport function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition, document, docData) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID, document) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection, document);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection, document);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition, document, docData);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n return connection;\n}\n\nfunction getDirection(firstObjectID, secondObjectID, document){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction, document){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction, document){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}","import sketch from 'sketch';\nimport { styleLine } from \"./utilities/styling.js\";\nimport { addCondition, updateCondition } from \"./utilities/conditions.js\";\nimport { checkForGroup, addToArrowsGroup } from \"./utilities/groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\n// Main Function\n\nexport function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition, document, docData){ // Refactored\n // Process of creating new connection \n let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection, currentParentGroup);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n\n // Condition\n if(isCondition == true){\n if(document.getLayerWithID(conditionID)){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY, document, docData);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY, document, docData);\n }\n } else {\n connection.conditionID = null;\n }\n \n // Style\n connection.style = styleLine(connection.line, style, docData);\n\n // Add to group\n addToArrowsGroup(connection.line, currentParentGroup);\n \n return connection\n}\n\n// Positions\n\nfunction getConnectionPos(firstObject, secondObject, direction, currentParentGroup){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\", currentParentGroup);\n let diffX, diffY;\n \n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n \n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n \n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n\n return connectionPos\n}\n\n// Drawing Types\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n \n return line;\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n \n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n \n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n \n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n \n if(firstLayerPosX Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here'\n );\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y, currentParentGroup);\n }\n return symbol;\n}\n\nexport function updateCondition(conditionID, x, y, document, docData) {\n let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n let condition = document.getLayerWithID(conditionID);\n let conGroup = checkForGroup(\"Conditions\", currentParentGroup);\n let arGroup = checkForGroup(\"Arrows\", currentParentGroup);\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n }\n return condition.id;\n}\n\nexport function deleteCondition(conditionID, document) {\n let conditionObject = document.getLayerWithID(conditionID);\n let selectedGroup;\n if(conditionObject){\n selectedGroup = conditionObject.parent;\n conditionObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n }\n \n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\n\n\nexport function getConnectionsData(docData) {\n let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n let dataArray = [];\n\n if (pluginData) {\n for (let i = 0; i < pluginData.length; i++) {\n dataArray.push(pluginData[i]);\n }\n }\n return dataArray;\n}\n\nexport function deleteConnectionFromData(connectionIndexArray, data){\n if(data){\n for (let i = connectionIndexArray.length -1; i >= 0; i--) {\n data.splice(connectionIndexArray[i],1);\n }\n }\n return data;\n}\n","import sketch from 'sketch';\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function checkForGroup(groupName, currentParentGroup) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n\n return currentGroup;\n}\n\nexport function addToArrowsGroup(line, currentParentGroup){\n let currentGroup = checkForGroup(\"Arrows\", currentParentGroup);\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nexport function addToConditionGroup(condition, x, y, currentParentGroup) {\n let conGroup = checkForGroup(\"Conditions\", currentParentGroup);\n let arGroup = checkForGroup(\"Arrows\", currentParentGroup);\n \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2 + arGroupX;\n condition.frame.y = y - condition.frame.height / 2 + arGroupY;\n let Group = require(\"sketch/dom\").Group;\n let group = new Group({\n parent: currentParentGroup,\n name: \"Conditions\",\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n }","import sketch from 'sketch';\nlet UI = require('sketch/ui');\n\nexport function deleteLine(lineID, document){\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n\nexport function styleLine(line, style, docData){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style, docData) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style, docData);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey), docData);\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name, docData) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/autoUpdate.js","webpack://exports/./src/createArrow.js","webpack://exports/./src/draw.js","webpack://exports/./src/utilities/conditions.js","webpack://exports/./src/utilities/data.js","webpack://exports/./src/utilities/groups.js","webpack://exports/./src/utilities/lines.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","pluginKey","autoUpdateSelectedArrows","context","document","sketch","fromNative","actionContext","action","docData","documentData","connectionsData","getConnectionsData","movedLayers","Array","from","layers","map","layer","firstObjectID","String","id","connectionIndex","getIndex","length","x","deleteLine","line","connection","createArrow","firstObject","secondObject","style","type","direction","condition","isCondition","push","deleteConnectionFromData","command","setValue_forKey_onLayer_forPluginIdentifier","y","Settings","secondObjectID","conditionID","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","objectID","getLayerWithID","firstObjectMidX","frame","width","firstObjectMidY","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","sourceObjectID","childObjectID","sourceObject","childObject","settingForKey","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","currentParentGroup","currentPage","currentArtboard","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","firstObjectAbsPos","changeBasis","parent","to","secondObjectAbsPos","currentGroup","checkForGroup","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","g","getImportableSymbolReferencesForDocument","i","name","includes","alert","symbolMaster","import","createNewInstance","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","fixGeometryWithOptions","deleteCondition","conditionObject","selectedGroup","remove","pluginData","valueForKey_onLayer_forPluginIdentifier","dataArray","connectionIndexArray","data","splice","groupName","count","addLayers","Group","group","locked","moveToBack","adjustToFit","lineID","lineObject","localStyle","getLayerStyles","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","allStyles","allLayerStyles","styles"],"mappings":"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","file":"autoUpdate.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/autoUpdate.js\");\n","import sketch from 'sketch';\nlet UI = require('sketch/ui');\nconst pluginKey = \"flowArrows\";\nimport { deleteLine } from \"./utilities/lines.js\"\nimport { createArrow } from \"./createArrow.js\";\nimport { getConnectionsData, deleteConnectionFromData } from \"./utilities/data.js\"\n\n\n\nexport function autoUpdateSelectedArrows(context) {\n let document = sketch.fromNative(context.actionContext.document)\n let action = context.actionContext\n let docData = action.document.documentData();\n\n let connectionsData = getConnectionsData(docData);\n\n \n const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer))\n let firstObjectID = String(movedLayers[0].id);\n let connectionIndex = []\n\n connectionIndex = getIndex(connectionsData, firstObjectID);\n\n if(connectionIndex.length > 0){\n for (let x = 0; x < connectionIndex.length; x++) {\n deleteLine(connectionsData[connectionIndex[x]].line, document);\n let connection = createArrow(\n connectionsData[connectionIndex[x]].firstObject, \n connectionsData[connectionIndex[x]].secondObject, \n connectionsData[connectionIndex[x]].style,\n connectionsData[connectionIndex[x]].type, \n connectionsData[connectionIndex[x]].direction, \n connectionsData[connectionIndex[x]].condition, \n connectionsData[connectionIndex[x]].isCondition,\n document, \n docData\n );\n connectionsData.push(connection);\n }\n }\n\n if(connectionIndex.length > 0){\n connectionsData = deleteConnectionFromData(connectionIndex, connectionsData);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n\n}\n\nfunction getIndex(connectionsData, firstObjectID){\n let connectionIndex = [];\n if(connectionsData.length > 0){\n for (let y = 0; y < connectionsData.length; y++) {\n if (firstObjectID == connectionsData[y].firstObject || firstObjectID == connectionsData[y].secondObject) {\n connectionIndex.push(y);\n }\n }\n } \n\n return connectionIndex;\n}","import sketch from 'sketch';\nimport { drawConnection } from \"./draw.js\";\n\nvar Settings = require('sketch/settings');\n\n\n// Main Function\n\nexport function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition, document, docData) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID, document) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection, document);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection, document);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition, document, docData);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n return connection;\n}\n\nfunction getDirection(firstObjectID, secondObjectID, document){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction, document){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction, document){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}","import sketch from 'sketch';\nimport { styleLine } from \"./utilities/styling.js\";\nimport { addCondition, updateCondition } from \"./utilities/conditions.js\";\nimport { checkForGroup, addToArrowsGroup } from \"./utilities/groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\n// Main Function\n\nexport function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition, document, docData){ // Refactored\n // Process of creating new connection \n let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection, currentParentGroup);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n\n // Condition\n if(isCondition == true){\n if(document.getLayerWithID(conditionID)){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY, document, docData);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY, document, docData);\n }\n } else {\n connection.conditionID = null;\n }\n \n // Style\n connection.style = styleLine(connection.line, style, docData);\n\n // Add to group\n addToArrowsGroup(connection.line, currentParentGroup);\n \n return connection\n}\n\n// Positions\n\nfunction getConnectionPos(firstObject, secondObject, direction, currentParentGroup){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\", currentParentGroup);\n let diffX, diffY;\n \n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n \n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n \n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n\n return connectionPos\n}\n\n// Drawing Types\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n \n return line;\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n \n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n \n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n \n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n \n if(firstLayerPosX Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here'\n );\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y, currentParentGroup);\n }\n return symbol;\n}\n\nexport function updateCondition(conditionID, x, y, document, docData) {\n let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n let condition = document.getLayerWithID(conditionID);\n let conGroup = checkForGroup(\"Conditions\", currentParentGroup);\n let arGroup = checkForGroup(\"Arrows\", currentParentGroup);\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n }\n return condition.id;\n}\n\nexport function deleteCondition(conditionID, document) {\n let conditionObject = document.getLayerWithID(conditionID);\n let selectedGroup;\n if(conditionObject){\n selectedGroup = conditionObject.parent;\n conditionObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n }\n \n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\n\n\nexport function getConnectionsData(docData) {\n let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n let dataArray = [];\n\n if (pluginData) {\n for (let i = 0; i < pluginData.length; i++) {\n dataArray.push(pluginData[i]);\n }\n }\n return dataArray;\n}\n\nexport function deleteConnectionFromData(connectionIndexArray, data){\n if(data){\n for (let i = connectionIndexArray.length -1; i >= 0; i--) {\n data.splice(connectionIndexArray[i],1);\n }\n }\n return data;\n}\n","import sketch from 'sketch';\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function checkForGroup(groupName, currentParentGroup) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n\n return currentGroup;\n}\n\nexport function addToArrowsGroup(line, currentParentGroup){\n let currentGroup = checkForGroup(\"Arrows\", currentParentGroup);\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nexport function addToConditionGroup(condition, x, y, currentParentGroup) {\n let conGroup = checkForGroup(\"Conditions\", currentParentGroup);\n let arGroup = checkForGroup(\"Arrows\", currentParentGroup);\n \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2 + arGroupX;\n condition.frame.y = y - condition.frame.height / 2 + arGroupY;\n let Group = require(\"sketch/dom\").Group;\n let group = new Group({\n parent: currentParentGroup,\n name: \"Conditions\",\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n }","import sketch from 'sketch';\nlet UI = require('sketch/ui');\n\nexport function deleteLine(lineID, document){\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n\nexport function styleLine(line, style, docData){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style, docData) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style, docData);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey), docData);\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name, docData) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/src/autoUpdate.js b/src/autoUpdate.js index 8360d4f..7886e6d 100644 --- a/src/autoUpdate.js +++ b/src/autoUpdate.js @@ -19,13 +19,7 @@ export function autoUpdateSelectedArrows(context) { let firstObjectID = String(movedLayers[0].id); let connectionIndex = [] - if(connectionsData.length > 0){ - for (let y = 0; y < connectionsData.length; y++) { - if (firstObjectID == connectionsData[y].firstObject || firstObjectID == connectionsData[y].secondObject) { - connectionIndex.push(y); - } - } - } + connectionIndex = getIndex(connectionsData, firstObjectID); if(connectionIndex.length > 0){ for (let x = 0; x < connectionIndex.length; x++) { @@ -36,7 +30,7 @@ export function autoUpdateSelectedArrows(context) { connectionsData[connectionIndex[x]].style, connectionsData[connectionIndex[x]].type, connectionsData[connectionIndex[x]].direction, - connectionsData[connectionIndex[x]].conditionID, + connectionsData[connectionIndex[x]].condition, connectionsData[connectionIndex[x]].isCondition, document, docData @@ -50,4 +44,17 @@ export function autoUpdateSelectedArrows(context) { } context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, "arrowConnections", docData, pluginKey); +} + +function getIndex(connectionsData, firstObjectID){ + let connectionIndex = []; + if(connectionsData.length > 0){ + for (let y = 0; y < connectionsData.length; y++) { + if (firstObjectID == connectionsData[y].firstObject || firstObjectID == connectionsData[y].secondObject) { + connectionIndex.push(y); + } + } + } + + return connectionIndex; } \ No newline at end of file From acf726720da7e8fcf3ae796a2dba40260c0d9a74 Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Thu, 11 Jul 2019 23:19:11 +0300 Subject: [PATCH 39/44] fixed settings --- arrows.sketchplugin/Contents/Sketch/settings.js | 2 +- arrows.sketchplugin/Contents/Sketch/settings.js.map | 2 +- src/settings.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/arrows.sketchplugin/Contents/Sketch/settings.js b/arrows.sketchplugin/Contents/Sketch/settings.js index d7b3cb8..1e1905a 100644 --- a/arrows.sketchplugin/Contents/Sketch/settings.js +++ b/arrows.sketchplugin/Contents/Sketch/settings.js @@ -198,7 +198,7 @@ function settings(context) { function setActiveStyleSetting(arrowStylingField) { var docSettings = context.command.valueForKey_onLayer_forPluginIdentifier("arrowStyle", docData, pluginKey); - var styles = Object(_utilities_styling_js__WEBPACK_IMPORTED_MODULE_1__["getLayerStyles"])(null); + var styles = Object(_utilities_styling_js__WEBPACK_IMPORTED_MODULE_1__["getLayerStyles"])(null, docData); if (docSettings) { // We have info about the settings in the current document diff --git a/arrows.sketchplugin/Contents/Sketch/settings.js.map b/arrows.sketchplugin/Contents/Sketch/settings.js.map index 9d7b001..aa577ba 100644 --- a/arrows.sketchplugin/Contents/Sketch/settings.js.map +++ b/arrows.sketchplugin/Contents/Sketch/settings.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/settings.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","Settings","pluginKey","document","sketch","fromNative","context","docData","documentData","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","settingForKey","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","command","setValue_forKey_onLayer_forPluginIdentifier","views","subviews","title","setSettingForKey","intValue","state","message","docSettings","valueForKey_onLayer_forPluginIdentifier","styles","getLayerStyles","addItemWithTitle","i","length","name","docTypeSettings","lastItem","setState","setMessageText","addButtonWithTitle","x","y","width","height","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","styleLine","line","style","localStyle","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","g","b","a","thickness","endMarkerType","allStyles","allLayerStyles","keyword","count","includes","push"],"mappings":"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","file":"settings.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/settings.js\");\n","import sketch from \"sketch\";\nimport { getLayerStyles } from \"./utilities/styling.js\";\n\n\nlet UI = require('sketch/ui') ;\nlet Settings = require(\"sketch/settings\");\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\n\nexport function settings(context) {\n let alert = COSAlertWindow.new();\n const viewWidth = 300;\n const viewHeight = 450;\n\n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight);\n let view = NSView.alloc().initWithFrame(\n NSMakeRect(0, 0, viewWidth, viewHeight)\n );\n alert.addAccessoryView(view);\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\n \"Arrow Style\",\n true,\n -1,\n viewHeight - 40,\n 280,\n 40\n );\n view.addSubview(arrowStyleLabel);\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(\n NSMakeRect(-2, viewHeight - 40, 300, 20)\n );\n setActiveStyleSetting(arrowStylingField);\n view.addSubview(arrowStylingField);\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\n \"Add layer style to your document that will contain $arrow name and you will be able to specify it here \",\n false,\n -1,\n viewHeight - 80,\n 300,\n 40\n );\n view.addSubview(arrowStyleInfoLabel);\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\n \"Arrow Type\",\n true,\n -1,\n viewHeight - 130,\n 280,\n 40\n );\n view.addSubview(arrowTypeLabel);\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(\n NSMakeRect(-2, viewHeight - 130, 300, 20)\n );\n setActiveTypeSetting(arrowTypeField);\n view.addSubview(arrowTypeField);\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\n \"Select one of the arrow types. Angled is used by default\",\n false,\n -1,\n viewHeight - 170,\n 300,\n 40\n );\n view.addSubview(arrowTypeInfoLabel);\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\n \"Arrow Spacing\",\n true,\n -1,\n viewHeight - 200,\n 330,\n 20\n );\n view.addSubview(arrowSpacingLabel);\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\n \"px\",\n true,\n 90,\n viewHeight - 220,\n 330,\n 20\n );\n view.addSubview(arrowSpacingPxLabel);\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(\n NSMakeRect(-2, viewHeight - 220, 80, 20)\n );\n var formatter = NSNumberFormatter.alloc()\n .init()\n .autorelease();\n arrowSpacingField.setStringValue(\n String(Settings.settingForKey(\"arrowSpacing\"))\n );\n arrowSpacingField.setFormatter(formatter);\n view.addSubview(arrowSpacingField);\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(\n NSMakeRect(70, viewHeight - 220, 20, 20)\n );\n arrowSpacingStepper.setMaxValue(1000);\n arrowSpacingStepper.setMinValue(0);\n arrowSpacingStepper.setValueWraps(false);\n arrowSpacingStepper.setAutorepeat(true);\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender) {\n var value = 0 + sender.integerValue();\n arrowSpacingField.setStringValue(String(value));\n });\n\n view.addSubview(arrowSpacingStepper);\n // view.addSubview(formatter)\n\n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\n \"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \",\n false,\n -1,\n viewHeight - 285,\n 300,\n 60\n );\n view.addSubview(arrowSpacingInfoLabel);\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\n \"Other Settings\",\n true,\n -1,\n viewHeight - 330,\n 280,\n 40\n );\n view.addSubview(otherSettingsLabel);\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\n \"Second layer auto-align\",\n false,\n -1,\n viewHeight - 340,\n 260,\n 40\n );\n view.addSubview(checkbox);\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\n \"Align the second layer for 5px misalignment with the first one\",\n false,\n -1,\n viewHeight - 370,\n 280,\n 40\n );\n view.addSubview(autoAlignInfoLabel);\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\n \"Made by @faridSabitov with the support of EPAM.com ❤️\",\n true,\n -1,\n viewHeight - 420,\n 280,\n 40\n );\n view.addSubview(pluginInfoLabel);\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal();\n\n if (modalResponse == NSAlertFirstButtonReturn) {\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(\n alert\n .views()[0]\n .subviews()[1]\n .title(),\n \"arrowStyle\",\n docData,\n pluginKey\n );\n Settings.setSettingForKey(\n \"arrowType\",\n alert\n .views()[0]\n .subviews()[4]\n .title()\n );\n Settings.setSettingForKey(\n \"arrowSpacing\",\n alert\n .views()[0]\n .subviews()[8]\n .intValue()\n );\n Settings.setSettingForKey(\n \"autoAlign\",\n alert\n .views()[0]\n .subviews()[12]\n .state()\n );\n UI.message(\"Settings are updated 🚀\");\n }\n}\n\n// Functions\n\nfunction setActiveStyleSetting(arrowStylingField) {\n let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier(\n \"arrowStyle\",\n docData,\n pluginKey\n );\n let styles = getLayerStyles(null);\n\n if (docSettings) {\n // We have info about the settings in the current document\n\n if (docSettings != \"Default Style\") {\n // if user specified own option\n arrowStylingField.addItemWithTitle(docSettings);\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for (let i = 0; i < styles.length; i++) {\n if (styles[i].name() != docSettings) {\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n } else {\n // Need to show the default first\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for (let i = 0; i < styles.length; i++) {\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n } else {\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for (let i = 0; i < styles.length; i++) {\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n}\n\nfunction setActiveTypeSetting(arrowTypeField) {\n let docTypeSettings = Settings.settingForKey(\"arrowType\");\n\n if (docTypeSettings) {\n // We have info about the settings in the current document\n\n if (docTypeSettings == \"Angled\") {\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(0);\n }\n\n if (docTypeSettings == \"Curved\") {\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(0);\n }\n\n if (docTypeSettings == \"Straight\") {\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(0);\n }\n } else {\n // Show default\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.addItemWithTitle(\"Straight\");\n }\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight) {\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\");\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\");\n alert.addButtonWithTitle(\"Cancel\");\n\n return alert;\n}\n\nfunction alertLabel(message, state, x, y, width, height) {\n let infoLabel = NSTextField.alloc().initWithFrame(\n NSMakeRect(x, y, width, height)\n );\n\n infoLabel.setStringValue(message);\n infoLabel.setSelectable(false);\n infoLabel.setDrawsBackground(false);\n infoLabel.setBezeled(false);\n\n if (state == false) {\n infoLabel.textColor = NSColor.disabledControlTextColor();\n }\n\n return infoLabel;\n}\n\nfunction alertCheckbox(message, state, x, y, width, height) {\n let checkbox = NSButton.alloc().initWithFrame(\n NSMakeRect(x, y, width, height)\n );\n\n checkbox.setButtonType(NSSwitchButton);\n checkbox.setBezelStyle(0);\n checkbox.setTitle(message);\n if (Settings.settingForKey(\"autoAlign\")) {\n let currentState = Settings.settingForKey(\"autoAlign\");\n checkbox.setState(currentState);\n } else {\n checkbox.setState(state);\n }\n\n return checkbox;\n}\n\n\n","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n\nexport function styleLine(line, style, docData){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style, docData) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style, docData);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey), docData);\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name, docData) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/settings.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","Settings","pluginKey","document","sketch","fromNative","context","docData","documentData","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","settingForKey","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","command","setValue_forKey_onLayer_forPluginIdentifier","views","subviews","title","setSettingForKey","intValue","state","message","docSettings","valueForKey_onLayer_forPluginIdentifier","styles","getLayerStyles","addItemWithTitle","i","length","name","docTypeSettings","lastItem","setState","setMessageText","addButtonWithTitle","x","y","width","height","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","styleLine","line","style","localStyle","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","g","b","a","thickness","endMarkerType","allStyles","allLayerStyles","keyword","count","includes","push"],"mappings":"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","file":"settings.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/settings.js\");\n","import sketch from \"sketch\";\nimport { getLayerStyles } from \"./utilities/styling.js\";\n\n\nlet UI = require('sketch/ui') ;\nlet Settings = require(\"sketch/settings\");\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\n\nexport function settings(context) {\n let alert = COSAlertWindow.new();\n const viewWidth = 300;\n const viewHeight = 450;\n\n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight);\n let view = NSView.alloc().initWithFrame(\n NSMakeRect(0, 0, viewWidth, viewHeight)\n );\n alert.addAccessoryView(view);\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\n \"Arrow Style\",\n true,\n -1,\n viewHeight - 40,\n 280,\n 40\n );\n view.addSubview(arrowStyleLabel);\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(\n NSMakeRect(-2, viewHeight - 40, 300, 20)\n );\n setActiveStyleSetting(arrowStylingField);\n view.addSubview(arrowStylingField);\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\n \"Add layer style to your document that will contain $arrow name and you will be able to specify it here \",\n false,\n -1,\n viewHeight - 80,\n 300,\n 40\n );\n view.addSubview(arrowStyleInfoLabel);\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\n \"Arrow Type\",\n true,\n -1,\n viewHeight - 130,\n 280,\n 40\n );\n view.addSubview(arrowTypeLabel);\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(\n NSMakeRect(-2, viewHeight - 130, 300, 20)\n );\n setActiveTypeSetting(arrowTypeField);\n view.addSubview(arrowTypeField);\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\n \"Select one of the arrow types. Angled is used by default\",\n false,\n -1,\n viewHeight - 170,\n 300,\n 40\n );\n view.addSubview(arrowTypeInfoLabel);\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\n \"Arrow Spacing\",\n true,\n -1,\n viewHeight - 200,\n 330,\n 20\n );\n view.addSubview(arrowSpacingLabel);\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\n \"px\",\n true,\n 90,\n viewHeight - 220,\n 330,\n 20\n );\n view.addSubview(arrowSpacingPxLabel);\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(\n NSMakeRect(-2, viewHeight - 220, 80, 20)\n );\n var formatter = NSNumberFormatter.alloc()\n .init()\n .autorelease();\n arrowSpacingField.setStringValue(\n String(Settings.settingForKey(\"arrowSpacing\"))\n );\n arrowSpacingField.setFormatter(formatter);\n view.addSubview(arrowSpacingField);\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(\n NSMakeRect(70, viewHeight - 220, 20, 20)\n );\n arrowSpacingStepper.setMaxValue(1000);\n arrowSpacingStepper.setMinValue(0);\n arrowSpacingStepper.setValueWraps(false);\n arrowSpacingStepper.setAutorepeat(true);\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender) {\n var value = 0 + sender.integerValue();\n arrowSpacingField.setStringValue(String(value));\n });\n\n view.addSubview(arrowSpacingStepper);\n // view.addSubview(formatter)\n\n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\n \"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \",\n false,\n -1,\n viewHeight - 285,\n 300,\n 60\n );\n view.addSubview(arrowSpacingInfoLabel);\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\n \"Other Settings\",\n true,\n -1,\n viewHeight - 330,\n 280,\n 40\n );\n view.addSubview(otherSettingsLabel);\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\n \"Second layer auto-align\",\n false,\n -1,\n viewHeight - 340,\n 260,\n 40\n );\n view.addSubview(checkbox);\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\n \"Align the second layer for 5px misalignment with the first one\",\n false,\n -1,\n viewHeight - 370,\n 280,\n 40\n );\n view.addSubview(autoAlignInfoLabel);\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\n \"Made by @faridSabitov with the support of EPAM.com ❤️\",\n true,\n -1,\n viewHeight - 420,\n 280,\n 40\n );\n view.addSubview(pluginInfoLabel);\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal();\n\n if (modalResponse == NSAlertFirstButtonReturn) {\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(\n alert\n .views()[0]\n .subviews()[1]\n .title(),\n \"arrowStyle\",\n docData,\n pluginKey\n );\n Settings.setSettingForKey(\n \"arrowType\",\n alert\n .views()[0]\n .subviews()[4]\n .title()\n );\n Settings.setSettingForKey(\n \"arrowSpacing\",\n alert\n .views()[0]\n .subviews()[8]\n .intValue()\n );\n Settings.setSettingForKey(\n \"autoAlign\",\n alert\n .views()[0]\n .subviews()[12]\n .state()\n );\n UI.message(\"Settings are updated 🚀\");\n }\n}\n\n// Functions\n\nfunction setActiveStyleSetting(arrowStylingField) {\n let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier(\n \"arrowStyle\",\n docData,\n pluginKey\n );\n let styles = getLayerStyles(null, docData);\n\n if (docSettings) {\n // We have info about the settings in the current document\n\n if (docSettings != \"Default Style\") {\n // if user specified own option\n arrowStylingField.addItemWithTitle(docSettings);\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for (let i = 0; i < styles.length; i++) {\n if (styles[i].name() != docSettings) {\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n } else {\n // Need to show the default first\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for (let i = 0; i < styles.length; i++) {\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n } else {\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for (let i = 0; i < styles.length; i++) {\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n}\n\nfunction setActiveTypeSetting(arrowTypeField) {\n let docTypeSettings = Settings.settingForKey(\"arrowType\");\n\n if (docTypeSettings) {\n // We have info about the settings in the current document\n\n if (docTypeSettings == \"Angled\") {\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(0);\n }\n\n if (docTypeSettings == \"Curved\") {\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(0);\n }\n\n if (docTypeSettings == \"Straight\") {\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(0);\n }\n } else {\n // Show default\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.addItemWithTitle(\"Straight\");\n }\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight) {\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\");\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\");\n alert.addButtonWithTitle(\"Cancel\");\n\n return alert;\n}\n\nfunction alertLabel(message, state, x, y, width, height) {\n let infoLabel = NSTextField.alloc().initWithFrame(\n NSMakeRect(x, y, width, height)\n );\n\n infoLabel.setStringValue(message);\n infoLabel.setSelectable(false);\n infoLabel.setDrawsBackground(false);\n infoLabel.setBezeled(false);\n\n if (state == false) {\n infoLabel.textColor = NSColor.disabledControlTextColor();\n }\n\n return infoLabel;\n}\n\nfunction alertCheckbox(message, state, x, y, width, height) {\n let checkbox = NSButton.alloc().initWithFrame(\n NSMakeRect(x, y, width, height)\n );\n\n checkbox.setButtonType(NSSwitchButton);\n checkbox.setBezelStyle(0);\n checkbox.setTitle(message);\n if (Settings.settingForKey(\"autoAlign\")) {\n let currentState = Settings.settingForKey(\"autoAlign\");\n checkbox.setState(currentState);\n } else {\n checkbox.setState(state);\n }\n\n return checkbox;\n}\n\n\n","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n\nexport function styleLine(line, style, docData){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style, docData) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style, docData);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey), docData);\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name, docData) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/src/settings.js b/src/settings.js index 23b484a..b087735 100644 --- a/src/settings.js +++ b/src/settings.js @@ -234,7 +234,7 @@ function setActiveStyleSetting(arrowStylingField) { docData, pluginKey ); - let styles = getLayerStyles(null); + let styles = getLayerStyles(null, docData); if (docSettings) { // We have info about the settings in the current document From 3f3e81db712ec9c6943cd3705bf707f851a86639 Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Mon, 22 Jul 2019 20:40:48 +0300 Subject: [PATCH 40/44] added ability to turn off the redraw feature in settings --- .../Contents/Sketch/autoUpdate.js | 45 ++++++------ .../Contents/Sketch/autoUpdate.js.map | 2 +- .../Contents/Sketch/script.js.map | 2 +- .../Contents/Sketch/settings.js | 27 ++++---- .../Contents/Sketch/settings.js.map | 2 +- src/autoUpdate.js | 68 ++++++++++--------- src/script.js | 1 - src/settings.js | 48 ++++++++++--- 8 files changed, 114 insertions(+), 81 deletions(-) diff --git a/arrows.sketchplugin/Contents/Sketch/autoUpdate.js b/arrows.sketchplugin/Contents/Sketch/autoUpdate.js index 65d8108..29ffd8f 100644 --- a/arrows.sketchplugin/Contents/Sketch/autoUpdate.js +++ b/arrows.sketchplugin/Contents/Sketch/autoUpdate.js @@ -114,31 +114,36 @@ var pluginKey = "flowArrows"; + +var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); + function autoUpdateSelectedArrows(context) { - var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.actionContext.document); - var action = context.actionContext; - var docData = action.document.documentData(); - var connectionsData = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_3__["getConnectionsData"])(docData); - var movedLayers = Array.from(context.actionContext.layers).map(function (layer) { - return sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(layer); - }); - var firstObjectID = String(movedLayers[0].id); - var connectionIndex = []; - connectionIndex = getIndex(connectionsData, firstObjectID); + if (Settings.settingForKey("autoDraw") != false) { + var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.actionContext.document); + var action = context.actionContext; + var docData = action.document.documentData(); + var connectionsData = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_3__["getConnectionsData"])(docData); + var movedLayers = Array.from(context.actionContext.layers).map(function (layer) { + return sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(layer); + }); + var firstObjectID = String(movedLayers[0].id); + var connectionIndex = []; + connectionIndex = getIndex(connectionsData, firstObjectID); + + if (connectionIndex.length > 0) { + for (var x = 0; x < connectionIndex.length; x++) { + Object(_utilities_lines_js__WEBPACK_IMPORTED_MODULE_1__["deleteLine"])(connectionsData[connectionIndex[x]].line, document); + var connection = Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_2__["createArrow"])(connectionsData[connectionIndex[x]].firstObject, connectionsData[connectionIndex[x]].secondObject, connectionsData[connectionIndex[x]].style, connectionsData[connectionIndex[x]].type, connectionsData[connectionIndex[x]].direction, connectionsData[connectionIndex[x]].condition, connectionsData[connectionIndex[x]].isCondition, document, docData); + connectionsData.push(connection); + } + } - if (connectionIndex.length > 0) { - for (var x = 0; x < connectionIndex.length; x++) { - Object(_utilities_lines_js__WEBPACK_IMPORTED_MODULE_1__["deleteLine"])(connectionsData[connectionIndex[x]].line, document); - var connection = Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_2__["createArrow"])(connectionsData[connectionIndex[x]].firstObject, connectionsData[connectionIndex[x]].secondObject, connectionsData[connectionIndex[x]].style, connectionsData[connectionIndex[x]].type, connectionsData[connectionIndex[x]].direction, connectionsData[connectionIndex[x]].condition, connectionsData[connectionIndex[x]].isCondition, document, docData); - connectionsData.push(connection); + if (connectionIndex.length > 0) { + connectionsData = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_3__["deleteConnectionFromData"])(connectionIndex, connectionsData); } - } - if (connectionIndex.length > 0) { - connectionsData = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_3__["deleteConnectionFromData"])(connectionIndex, connectionsData); + context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, "arrowConnections", docData, pluginKey); } - - context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, "arrowConnections", docData, pluginKey); } function getIndex(connectionsData, firstObjectID) { diff --git a/arrows.sketchplugin/Contents/Sketch/autoUpdate.js.map b/arrows.sketchplugin/Contents/Sketch/autoUpdate.js.map index 94a1acc..6caa19a 100644 --- a/arrows.sketchplugin/Contents/Sketch/autoUpdate.js.map +++ b/arrows.sketchplugin/Contents/Sketch/autoUpdate.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/autoUpdate.js","webpack://exports/./src/createArrow.js","webpack://exports/./src/draw.js","webpack://exports/./src/utilities/conditions.js","webpack://exports/./src/utilities/data.js","webpack://exports/./src/utilities/groups.js","webpack://exports/./src/utilities/lines.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","pluginKey","autoUpdateSelectedArrows","context","document","sketch","fromNative","actionContext","action","docData","documentData","connectionsData","getConnectionsData","movedLayers","Array","from","layers","map","layer","firstObjectID","String","id","connectionIndex","getIndex","length","x","deleteLine","line","connection","createArrow","firstObject","secondObject","style","type","direction","condition","isCondition","push","deleteConnectionFromData","command","setValue_forKey_onLayer_forPluginIdentifier","y","Settings","secondObjectID","conditionID","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","objectID","getLayerWithID","firstObjectMidX","frame","width","firstObjectMidY","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","sourceObjectID","childObjectID","sourceObject","childObject","settingForKey","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","currentParentGroup","currentPage","currentArtboard","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","firstObjectAbsPos","changeBasis","parent","to","secondObjectAbsPos","currentGroup","checkForGroup","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","g","getImportableSymbolReferencesForDocument","i","name","includes","alert","symbolMaster","import","createNewInstance","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","fixGeometryWithOptions","deleteCondition","conditionObject","selectedGroup","remove","pluginData","valueForKey_onLayer_forPluginIdentifier","dataArray","connectionIndexArray","data","splice","groupName","count","addLayers","Group","group","locked","moveToBack","adjustToFit","lineID","lineObject","localStyle","getLayerStyles","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","allStyles","allLayerStyles","styles"],"mappings":"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","file":"autoUpdate.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/autoUpdate.js\");\n","import sketch from 'sketch';\nlet UI = require('sketch/ui');\nconst pluginKey = \"flowArrows\";\nimport { deleteLine } from \"./utilities/lines.js\"\nimport { createArrow } from \"./createArrow.js\";\nimport { getConnectionsData, deleteConnectionFromData } from \"./utilities/data.js\"\n\n\n\nexport function autoUpdateSelectedArrows(context) {\n let document = sketch.fromNative(context.actionContext.document)\n let action = context.actionContext\n let docData = action.document.documentData();\n\n let connectionsData = getConnectionsData(docData);\n\n \n const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer))\n let firstObjectID = String(movedLayers[0].id);\n let connectionIndex = []\n\n connectionIndex = getIndex(connectionsData, firstObjectID);\n\n if(connectionIndex.length > 0){\n for (let x = 0; x < connectionIndex.length; x++) {\n deleteLine(connectionsData[connectionIndex[x]].line, document);\n let connection = createArrow(\n connectionsData[connectionIndex[x]].firstObject, \n connectionsData[connectionIndex[x]].secondObject, \n connectionsData[connectionIndex[x]].style,\n connectionsData[connectionIndex[x]].type, \n connectionsData[connectionIndex[x]].direction, \n connectionsData[connectionIndex[x]].condition, \n connectionsData[connectionIndex[x]].isCondition,\n document, \n docData\n );\n connectionsData.push(connection);\n }\n }\n\n if(connectionIndex.length > 0){\n connectionsData = deleteConnectionFromData(connectionIndex, connectionsData);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n\n}\n\nfunction getIndex(connectionsData, firstObjectID){\n let connectionIndex = [];\n if(connectionsData.length > 0){\n for (let y = 0; y < connectionsData.length; y++) {\n if (firstObjectID == connectionsData[y].firstObject || firstObjectID == connectionsData[y].secondObject) {\n connectionIndex.push(y);\n }\n }\n } \n\n return connectionIndex;\n}","import sketch from 'sketch';\nimport { drawConnection } from \"./draw.js\";\n\nvar Settings = require('sketch/settings');\n\n\n// Main Function\n\nexport function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition, document, docData) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID, document) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection, document);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection, document);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition, document, docData);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n return connection;\n}\n\nfunction getDirection(firstObjectID, secondObjectID, document){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction, document){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction, document){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}","import sketch from 'sketch';\nimport { styleLine } from \"./utilities/styling.js\";\nimport { addCondition, updateCondition } from \"./utilities/conditions.js\";\nimport { checkForGroup, addToArrowsGroup } from \"./utilities/groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\n// Main Function\n\nexport function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition, document, docData){ // Refactored\n // Process of creating new connection \n let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection, currentParentGroup);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n\n // Condition\n if(isCondition == true){\n if(document.getLayerWithID(conditionID)){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY, document, docData);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY, document, docData);\n }\n } else {\n connection.conditionID = null;\n }\n \n // Style\n connection.style = styleLine(connection.line, style, docData);\n\n // Add to group\n addToArrowsGroup(connection.line, currentParentGroup);\n \n return connection\n}\n\n// Positions\n\nfunction getConnectionPos(firstObject, secondObject, direction, currentParentGroup){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\", currentParentGroup);\n let diffX, diffY;\n \n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n \n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n \n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n\n return connectionPos\n}\n\n// Drawing Types\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n \n return line;\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n \n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n \n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n \n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n \n if(firstLayerPosX Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here'\n );\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y, currentParentGroup);\n }\n return symbol;\n}\n\nexport function updateCondition(conditionID, x, y, document, docData) {\n let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n let condition = document.getLayerWithID(conditionID);\n let conGroup = checkForGroup(\"Conditions\", currentParentGroup);\n let arGroup = checkForGroup(\"Arrows\", currentParentGroup);\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n }\n return condition.id;\n}\n\nexport function deleteCondition(conditionID, document) {\n let conditionObject = document.getLayerWithID(conditionID);\n let selectedGroup;\n if(conditionObject){\n selectedGroup = conditionObject.parent;\n conditionObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n }\n \n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\n\n\nexport function getConnectionsData(docData) {\n let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n let dataArray = [];\n\n if (pluginData) {\n for (let i = 0; i < pluginData.length; i++) {\n dataArray.push(pluginData[i]);\n }\n }\n return dataArray;\n}\n\nexport function deleteConnectionFromData(connectionIndexArray, data){\n if(data){\n for (let i = connectionIndexArray.length -1; i >= 0; i--) {\n data.splice(connectionIndexArray[i],1);\n }\n }\n return data;\n}\n","import sketch from 'sketch';\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function checkForGroup(groupName, currentParentGroup) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n\n return currentGroup;\n}\n\nexport function addToArrowsGroup(line, currentParentGroup){\n let currentGroup = checkForGroup(\"Arrows\", currentParentGroup);\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nexport function addToConditionGroup(condition, x, y, currentParentGroup) {\n let conGroup = checkForGroup(\"Conditions\", currentParentGroup);\n let arGroup = checkForGroup(\"Arrows\", currentParentGroup);\n \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2 + arGroupX;\n condition.frame.y = y - condition.frame.height / 2 + arGroupY;\n let Group = require(\"sketch/dom\").Group;\n let group = new Group({\n parent: currentParentGroup,\n name: \"Conditions\",\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n }","import sketch from 'sketch';\nlet UI = require('sketch/ui');\n\nexport function deleteLine(lineID, document){\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n\nexport function styleLine(line, style, docData){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style, docData) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style, docData);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey), docData);\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name, docData) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/autoUpdate.js","webpack://exports/./src/createArrow.js","webpack://exports/./src/draw.js","webpack://exports/./src/utilities/conditions.js","webpack://exports/./src/utilities/data.js","webpack://exports/./src/utilities/groups.js","webpack://exports/./src/utilities/lines.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","pluginKey","Settings","autoUpdateSelectedArrows","context","settingForKey","document","sketch","fromNative","actionContext","action","docData","documentData","connectionsData","getConnectionsData","movedLayers","Array","from","layers","map","layer","firstObjectID","String","id","connectionIndex","getIndex","length","x","deleteLine","line","connection","createArrow","firstObject","secondObject","style","type","direction","condition","isCondition","push","deleteConnectionFromData","command","setValue_forKey_onLayer_forPluginIdentifier","y","secondObjectID","conditionID","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","objectID","getLayerWithID","firstObjectMidX","frame","width","firstObjectMidY","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","currentParentGroup","currentPage","currentArtboard","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","firstObjectAbsPos","changeBasis","parent","to","secondObjectAbsPos","currentGroup","checkForGroup","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","g","getImportableSymbolReferencesForDocument","i","name","includes","alert","symbolMaster","import","createNewInstance","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","fixGeometryWithOptions","deleteCondition","conditionObject","selectedGroup","remove","pluginData","valueForKey_onLayer_forPluginIdentifier","dataArray","connectionIndexArray","data","splice","groupName","count","addLayers","Group","group","locked","moveToBack","adjustToFit","lineID","lineObject","localStyle","getLayerStyles","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","allStyles","allLayerStyles","styles"],"mappings":"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","file":"autoUpdate.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/autoUpdate.js\");\n","import sketch from 'sketch';\nlet UI = require('sketch/ui');\nconst pluginKey = \"flowArrows\";\nimport { deleteLine } from \"./utilities/lines.js\"\nimport { createArrow } from \"./createArrow.js\";\nimport { getConnectionsData, deleteConnectionFromData } from \"./utilities/data.js\"\nvar Settings = require('sketch/settings');\n\n\n\nexport function autoUpdateSelectedArrows(context) {\n if(Settings.settingForKey(\"autoDraw\") != false) {\n let document = sketch.fromNative(context.actionContext.document)\n let action = context.actionContext\n let docData = action.document.documentData();\n\n let connectionsData = getConnectionsData(docData);\n\n \n const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer))\n let firstObjectID = String(movedLayers[0].id);\n let connectionIndex = []\n\n connectionIndex = getIndex(connectionsData, firstObjectID);\n\n if(connectionIndex.length > 0){\n for (let x = 0; x < connectionIndex.length; x++) {\n deleteLine(connectionsData[connectionIndex[x]].line, document);\n let connection = createArrow(\n connectionsData[connectionIndex[x]].firstObject, \n connectionsData[connectionIndex[x]].secondObject, \n connectionsData[connectionIndex[x]].style,\n connectionsData[connectionIndex[x]].type, \n connectionsData[connectionIndex[x]].direction, \n connectionsData[connectionIndex[x]].condition, \n connectionsData[connectionIndex[x]].isCondition,\n document, \n docData\n );\n connectionsData.push(connection);\n }\n }\n\n if(connectionIndex.length > 0){\n connectionsData = deleteConnectionFromData(connectionIndex, connectionsData);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n }\n}\n\nfunction getIndex(connectionsData, firstObjectID){\n let connectionIndex = [];\n if(connectionsData.length > 0){\n for (let y = 0; y < connectionsData.length; y++) {\n if (firstObjectID == connectionsData[y].firstObject || firstObjectID == connectionsData[y].secondObject) {\n connectionIndex.push(y);\n }\n }\n } \n\n return connectionIndex;\n}","import sketch from 'sketch';\nimport { drawConnection } from \"./draw.js\";\n\nvar Settings = require('sketch/settings');\n\n\n// Main Function\n\nexport function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition, document, docData) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID, document) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection, document);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection, document);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition, document, docData);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n return connection;\n}\n\nfunction getDirection(firstObjectID, secondObjectID, document){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction, document){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction, document){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}","import sketch from 'sketch';\nimport { styleLine } from \"./utilities/styling.js\";\nimport { addCondition, updateCondition } from \"./utilities/conditions.js\";\nimport { checkForGroup, addToArrowsGroup } from \"./utilities/groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\n// Main Function\n\nexport function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition, document, docData){ // Refactored\n // Process of creating new connection \n let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection, currentParentGroup);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n\n // Condition\n if(isCondition == true){\n if(document.getLayerWithID(conditionID)){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY, document, docData);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY, document, docData);\n }\n } else {\n connection.conditionID = null;\n }\n \n // Style\n connection.style = styleLine(connection.line, style, docData);\n\n // Add to group\n addToArrowsGroup(connection.line, currentParentGroup);\n \n return connection\n}\n\n// Positions\n\nfunction getConnectionPos(firstObject, secondObject, direction, currentParentGroup){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\", currentParentGroup);\n let diffX, diffY;\n \n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n \n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n \n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n\n return connectionPos\n}\n\n// Drawing Types\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n \n return line;\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n \n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n \n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n \n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n \n if(firstLayerPosX Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here'\n );\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y, currentParentGroup);\n }\n return symbol;\n}\n\nexport function updateCondition(conditionID, x, y, document, docData) {\n let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n let condition = document.getLayerWithID(conditionID);\n let conGroup = checkForGroup(\"Conditions\", currentParentGroup);\n let arGroup = checkForGroup(\"Arrows\", currentParentGroup);\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n }\n return condition.id;\n}\n\nexport function deleteCondition(conditionID, document) {\n let conditionObject = document.getLayerWithID(conditionID);\n let selectedGroup;\n if(conditionObject){\n selectedGroup = conditionObject.parent;\n conditionObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n }\n \n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\n\n\nexport function getConnectionsData(docData) {\n let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n let dataArray = [];\n\n if (pluginData) {\n for (let i = 0; i < pluginData.length; i++) {\n dataArray.push(pluginData[i]);\n }\n }\n return dataArray;\n}\n\nexport function deleteConnectionFromData(connectionIndexArray, data){\n if(data){\n for (let i = connectionIndexArray.length -1; i >= 0; i--) {\n data.splice(connectionIndexArray[i],1);\n }\n }\n return data;\n}\n","import sketch from 'sketch';\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function checkForGroup(groupName, currentParentGroup) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n\n return currentGroup;\n}\n\nexport function addToArrowsGroup(line, currentParentGroup){\n let currentGroup = checkForGroup(\"Arrows\", currentParentGroup);\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nexport function addToConditionGroup(condition, x, y, currentParentGroup) {\n let conGroup = checkForGroup(\"Conditions\", currentParentGroup);\n let arGroup = checkForGroup(\"Arrows\", currentParentGroup);\n \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2 + arGroupX;\n condition.frame.y = y - condition.frame.height / 2 + arGroupY;\n let Group = require(\"sketch/dom\").Group;\n let group = new Group({\n parent: currentParentGroup,\n name: \"Conditions\",\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n }","import sketch from 'sketch';\nlet UI = require('sketch/ui');\n\nexport function deleteLine(lineID, document){\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n\nexport function styleLine(line, style, docData){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style, docData) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style, docData);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey), docData);\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name, docData) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index 5c178ac..59f2b39 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/createArrow.js","webpack://exports/./src/draw.js","webpack://exports/./src/script.js","webpack://exports/./src/updateArrow.js","webpack://exports/./src/utilities/conditions.js","webpack://exports/./src/utilities/data.js","webpack://exports/./src/utilities/getSourceObject.js","webpack://exports/./src/utilities/groups.js","webpack://exports/./src/utilities/lines.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["Settings","require","createArrow","firstObjectID","secondObjectID","style","type","direction","conditionID","isCondition","document","docData","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","firstObject","secondObject","condition","line","objectID","getLayerWithID","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","sourceObjectID","childObjectID","sourceObject","childObject","settingForKey","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","UI","currentParentGroup","currentPage","currentArtboard","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","currentGroup","checkForGroup","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","layers","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","pluginKey","sketch","fromNative","context","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","connectionsData","getConnectionsData","createAutoArrow","create","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","selection","count","class","getSourceObjectFromSelection","connectionIndex","g","String","index","length","push","message","deleteLine","deleteCondition","deleteConnectionFromData","setValue_forKey_onLayer_forPluginIdentifier","updateSelectedArrows","update","updateArtboardArrows","updateAllArrows","deleteSelectedArrows","deleteArtboardArrows","deleteAllArrows","level","isUpdate","newConnectionsData","firstObjectArtboard","secondObjectArtboard","i","updateArrow","sketchObject","parentArtboard","lineID","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","getImportableSymbolReferencesForDocument","name","includes","alert","symbolMaster","import","createNewInstance","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","fixGeometryWithOptions","id","conditionObject","selectedGroup","remove","dataArray","connectionIndexArray","data","splice","defineSourceObject","groupName","addLayers","Group","group","locked","moveToBack","adjustToFit","lineObject","localStyle","getLayerStyles","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","allStyles","allLayerStyles","styles"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch';\nimport { drawConnection } from \"./draw.js\";\n\nvar Settings = require('sketch/settings');\n\n\n// Main Function\n\nexport function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition, document, docData) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID, document) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection, document);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection, document);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition, document, docData);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n return connection;\n}\n\nfunction getDirection(firstObjectID, secondObjectID, document){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction, document){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction, document){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}","import sketch from 'sketch';\nimport { styleLine } from \"./utilities/styling.js\";\nimport { addCondition, updateCondition } from \"./utilities/conditions.js\";\nimport { checkForGroup, addToArrowsGroup } from \"./utilities/groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\n// Main Function\n\nexport function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition, document, docData){ // Refactored\n // Process of creating new connection \n let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection, currentParentGroup);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n\n // Condition\n if(isCondition == true){\n if(document.getLayerWithID(conditionID)){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY, document, docData);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY, document, docData);\n }\n } else {\n connection.conditionID = null;\n }\n \n // Style\n connection.style = styleLine(connection.line, style, docData);\n\n // Add to group\n addToArrowsGroup(connection.line, currentParentGroup);\n \n return connection\n}\n\n// Positions\n\nfunction getConnectionPos(firstObject, secondObject, direction, currentParentGroup){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\", currentParentGroup);\n let diffX, diffY;\n \n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n \n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n \n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n\n return connectionPos\n}\n\n// Drawing Types\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n \n return line;\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n \n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n \n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n \n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n \n if(firstLayerPosX 1 && selection[0].class() != \"MSArtboardGroup\"){\n let sourceObjectID = getSourceObjectFromSelection(selection, direction);\n let connectionIndex = []\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n\n let firstObjectID = String(sourceObjectID);\n let secondObjectID = String(selection[g].objectID());\n let create = true\n let index\n\n if(connectionsData.length > 0){\n for (let y = 0; y < connectionsData.length; y++) {\n if ((firstObjectID == connectionsData[y].firstObject || firstObjectID == connectionsData[y].secondObject) && (secondObjectID == connectionsData[y].firstObject || secondObjectID == connectionsData[y].secondObject)) {\n // We have this connection and need to update\n create = false;\n index = y;\n connectionIndex.push(y);\n }\n }\n } \n \n if(create){\n // Create\n let connection = createArrow(firstObjectID, secondObjectID, null, null, direction, null, isCondition, document, docData);\n connectionsData.push(connection);\n sketch.UI.message(\"New connection is created 🚀\");\n } else {\n // Update\n deleteLine(connectionsData[index].line, document);\n if (!isCondition) { \n deleteCondition(connectionsData[index].condition, document) \n }\n\n let connection = createArrow(firstObjectID, secondObjectID, null, null, direction, connectionsData[index].condition, isCondition, document, docData);\n connectionsData.push(connection);\n sketch.UI.message(\"Current connection is updated 🤘\");\n }\n }\n }\n if(connectionIndex.length > 0){\n // Update data if there was changes\n connectionsData = deleteConnectionFromData(connectionIndex, connectionsData);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\n \n//\n// Plugin Incoming Commands - Update and Delete\n//\n\nexport function updateSelectedArrows(context) {update(context, 1, true);}\nexport function updateArtboardArrows(context) {update(context, 2, true);}\nexport function updateAllArrows(context) {update(context, 3, true);}\nexport function deleteSelectedArrows(context) {update(context, 1, false);}\nexport function deleteArtboardArrows(context) {update(context, 2, false);}\nexport function deleteAllArrows(context) {update(context, 3, false);}\n\nexport function update(context, level, isUpdate) {\n // 1 - selection level\n // 2 - artboard level\n // 3 - document level\n let newConnectionsData = [];\n let selection = context.selection;\n let firstObjectArtboard;\n let secondObjectArtboard;\n\n\n if (connectionsData.length > 0) {\n for (let i = 0; i < connectionsData.length; i++) {\n \n if (level == 3) {\n if(isUpdate){\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n sketch.UI.message(\"All arrows are updated\");\n } else {\n newConnectionsData = null\n sketch.UI.message(\"All arrows are deleted\");\n }\n }\n if (level == 2) {\n firstObjectArtboard = document.getLayerWithID(connectionsData[i].firstObject);\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID();\n secondObjectArtboard = document.getLayerWithID(connectionsData[i].secondObject);\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID();\n\n if (selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\") {\n\n if (firstObjectArtboard == selection[0].objectID()) {\n if (secondObjectArtboard == selection[0].objectID()) {\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n }\n }\n sketch.UI.message(\"All arrows are updated 🚀\");\n \n \n }\n let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition, document, docData);\n connectionsData.push(connection);\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n sketch.UI.message(\"There is no arrows\");\n }\n}\n\n// const track = require(\"sketch-module-google-analytics\")\n// track(\"UA-138226597-1\", \"event\", {\n// ec: \"command\", \n// ea: \"create\", \n// ev: \"my-command\"\n// });\n\n\n\n\n\n","import sketch from 'sketch';\nimport { getConnectionsData, deleteConnectionFromData} from \"./utilities/data.js\"\nimport { deleteLine } from \"./utilities/lines.js\"\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\nlet connectionsData = getConnectionsData(docData);\n\n\n\nexport function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n // let firstObject = document.getLayerWithID(firstObjectID);\n // let secondObject = document.getLayerWithID(secondObjectID);\n // let conditionObject = document.getLayerWithID(conditionID);\n // let result = false;\n \n // Need to delete data first, because we will have a new line\n // deleteLine(lineID);\n // if(conditionID && !isCondition){\n // if(conditionObject){conditionObject.remove();}\n // }\n \n connectionsData = deleteConnectionFromData(connectionIndex);\n\n // if(firstObject && secondObject){\n // // If we have all the objects, we can recreate the line\n // result = true;\n // }\n\n // return result;\n}","import sketch from 'sketch';\nimport { addToConditionGroup, checkForGroup } from \"./groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\n// let docData = context.document.documentData();\n// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\nexport function addCondition(keyword, x, y, document, docData) {\n let libraries = sketch.getLibraries();\n let libraryObject, symbolReferences, symbol;\n let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n for (let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(\n document\n );\n for (let i = 0; i < symbolReferences.length; i++) {\n if (symbolReferences[i].name.includes(keyword)) {\n libraryObject = symbolReferences[i];\n }\n }\n }\n\n if (libraryObject == null) {\n symbol = null;\n UI.alert(\n \"Condition symbol is not found\",\n 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here'\n );\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y, currentParentGroup);\n }\n return symbol;\n}\n\nexport function updateCondition(conditionID, x, y, document, docData) {\n let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n let condition = document.getLayerWithID(conditionID);\n let conGroup = checkForGroup(\"Conditions\", currentParentGroup);\n let arGroup = checkForGroup(\"Arrows\", currentParentGroup);\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n }\n return condition.id;\n}\n\nexport function deleteCondition(conditionID, document) {\n let conditionObject = document.getLayerWithID(conditionID);\n let selectedGroup;\n if(conditionObject){\n selectedGroup = conditionObject.parent;\n conditionObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n }\n \n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\n\n\nexport function getConnectionsData(docData) {\n let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n let dataArray = [];\n\n if (pluginData) {\n for (let i = 0; i < pluginData.length; i++) {\n dataArray.push(pluginData[i]);\n }\n }\n return dataArray;\n}\n\nexport function deleteConnectionFromData(connectionIndexArray, data){\n if(data){\n for (let i = connectionIndexArray.length -1; i >= 0; i--) {\n data.splice(connectionIndexArray[i],1);\n }\n }\n return data;\n}\n","import sketch from 'sketch';\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function getSourceObjectFromSelection(selection, direction){\n let sourceObjectID = selection.firstObject().objectID();\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction);\n }\n }\n return sourceObjectID;\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){\n \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let sourceObjectID;\n\n if(direction == \"Right\"){\n if(firstObjectAbsPos.x <= secondObjectAbsPos.x){ // We need to get the doc position\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.y <= secondObjectAbsPos.y){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Left\"){\n if(firstObjectAbsPos.x <= secondObjectAbsPos.x){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n if(direction == \"Up\"){\n if(firstObjectAbsPos.y <= secondObjectAbsPos.y){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n return sourceObjectID;\n}","import sketch from 'sketch';\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function checkForGroup(groupName, currentParentGroup) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n\n return currentGroup;\n}\n\nexport function addToArrowsGroup(line, currentParentGroup){\n let currentGroup = checkForGroup(\"Arrows\", currentParentGroup);\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nexport function addToConditionGroup(condition, x, y, currentParentGroup) {\n let conGroup = checkForGroup(\"Conditions\", currentParentGroup);\n let arGroup = checkForGroup(\"Arrows\", currentParentGroup);\n \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2 + arGroupX;\n condition.frame.y = y - condition.frame.height / 2 + arGroupY;\n let Group = require(\"sketch/dom\").Group;\n let group = new Group({\n parent: currentParentGroup,\n name: \"Conditions\",\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n }","import sketch from 'sketch';\nlet UI = require('sketch/ui');\n\nexport function deleteLine(lineID, document){\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n\nexport function styleLine(line, style, docData){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style, docData) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style, docData);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey), docData);\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name, docData) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/createArrow.js","webpack://exports/./src/draw.js","webpack://exports/./src/script.js","webpack://exports/./src/updateArrow.js","webpack://exports/./src/utilities/conditions.js","webpack://exports/./src/utilities/data.js","webpack://exports/./src/utilities/getSourceObject.js","webpack://exports/./src/utilities/groups.js","webpack://exports/./src/utilities/lines.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["Settings","require","createArrow","firstObjectID","secondObjectID","style","type","direction","conditionID","isCondition","document","docData","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","firstObject","secondObject","condition","line","objectID","getLayerWithID","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","sourceObjectID","childObjectID","sourceObject","childObject","settingForKey","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","UI","currentParentGroup","currentPage","currentArtboard","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","currentGroup","checkForGroup","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","layers","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","pluginKey","sketch","fromNative","context","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","connectionsData","getConnectionsData","createAutoArrow","create","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","selection","count","class","getSourceObjectFromSelection","connectionIndex","g","String","index","length","push","message","deleteLine","deleteCondition","deleteConnectionFromData","setValue_forKey_onLayer_forPluginIdentifier","updateSelectedArrows","update","updateArtboardArrows","updateAllArrows","deleteSelectedArrows","deleteArtboardArrows","deleteAllArrows","level","isUpdate","newConnectionsData","firstObjectArtboard","secondObjectArtboard","i","updateArrow","sketchObject","parentArtboard","lineID","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","getImportableSymbolReferencesForDocument","name","includes","alert","symbolMaster","import","createNewInstance","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","fixGeometryWithOptions","id","conditionObject","selectedGroup","remove","dataArray","connectionIndexArray","data","splice","defineSourceObject","groupName","addLayers","Group","group","locked","moveToBack","adjustToFit","lineObject","localStyle","getLayerStyles","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","allStyles","allLayerStyles","styles"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch';\nimport { drawConnection } from \"./draw.js\";\n\nvar Settings = require('sketch/settings');\n\n\n// Main Function\n\nexport function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition, document, docData) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID, document) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection, document);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection, document);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition, document, docData);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n return connection;\n}\n\nfunction getDirection(firstObjectID, secondObjectID, document){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction, document){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction, document){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}","import sketch from 'sketch';\nimport { styleLine } from \"./utilities/styling.js\";\nimport { addCondition, updateCondition } from \"./utilities/conditions.js\";\nimport { checkForGroup, addToArrowsGroup } from \"./utilities/groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\n// Main Function\n\nexport function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition, document, docData){ // Refactored\n // Process of creating new connection \n let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection, currentParentGroup);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n\n // Condition\n if(isCondition == true){\n if(document.getLayerWithID(conditionID)){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY, document, docData);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY, document, docData);\n }\n } else {\n connection.conditionID = null;\n }\n \n // Style\n connection.style = styleLine(connection.line, style, docData);\n\n // Add to group\n addToArrowsGroup(connection.line, currentParentGroup);\n \n return connection\n}\n\n// Positions\n\nfunction getConnectionPos(firstObject, secondObject, direction, currentParentGroup){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\", currentParentGroup);\n let diffX, diffY;\n \n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n \n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n \n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n\n return connectionPos\n}\n\n// Drawing Types\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n \n return line;\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n \n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n \n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n \n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n \n if(firstLayerPosX 1 && selection[0].class() != \"MSArtboardGroup\"){\n let sourceObjectID = getSourceObjectFromSelection(selection, direction);\n let connectionIndex = []\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n\n let firstObjectID = String(sourceObjectID);\n let secondObjectID = String(selection[g].objectID());\n let create = true\n let index\n\n if(connectionsData.length > 0){\n for (let y = 0; y < connectionsData.length; y++) {\n if ((firstObjectID == connectionsData[y].firstObject || firstObjectID == connectionsData[y].secondObject) && (secondObjectID == connectionsData[y].firstObject || secondObjectID == connectionsData[y].secondObject)) {\n // We have this connection and need to update\n create = false;\n index = y;\n connectionIndex.push(y);\n }\n }\n } \n \n if(create){\n // Create\n let connection = createArrow(firstObjectID, secondObjectID, null, null, direction, null, isCondition, document, docData);\n connectionsData.push(connection);\n sketch.UI.message(\"New connection is created 🚀\");\n } else {\n // Update\n deleteLine(connectionsData[index].line, document);\n if (!isCondition) { \n deleteCondition(connectionsData[index].condition, document) \n }\n\n let connection = createArrow(firstObjectID, secondObjectID, null, null, direction, connectionsData[index].condition, isCondition, document, docData);\n connectionsData.push(connection);\n sketch.UI.message(\"Current connection is updated 🤘\");\n }\n }\n }\n if(connectionIndex.length > 0){\n // Update data if there was changes\n connectionsData = deleteConnectionFromData(connectionIndex, connectionsData);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\n \n//\n// Plugin Incoming Commands - Update and Delete\n//\n\nexport function updateSelectedArrows(context) {update(context, 1, true);}\nexport function updateArtboardArrows(context) {update(context, 2, true);}\nexport function updateAllArrows(context) {update(context, 3, true);}\nexport function deleteSelectedArrows(context) {update(context, 1, false);}\nexport function deleteArtboardArrows(context) {update(context, 2, false);}\nexport function deleteAllArrows(context) {update(context, 3, false);}\n\nexport function update(context, level, isUpdate) {\n // 1 - selection level\n // 2 - artboard level\n // 3 - document level\n let newConnectionsData = [];\n let selection = context.selection;\n let firstObjectArtboard;\n let secondObjectArtboard;\n\n\n if (connectionsData.length > 0) {\n for (let i = 0; i < connectionsData.length; i++) {\n \n if (level == 3) {\n if(isUpdate){\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n sketch.UI.message(\"All arrows are updated\");\n } else {\n newConnectionsData = null\n sketch.UI.message(\"All arrows are deleted\");\n }\n }\n if (level == 2) {\n firstObjectArtboard = document.getLayerWithID(connectionsData[i].firstObject);\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID();\n secondObjectArtboard = document.getLayerWithID(connectionsData[i].secondObject);\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID();\n\n if (selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\") {\n\n if (firstObjectArtboard == selection[0].objectID()) {\n if (secondObjectArtboard == selection[0].objectID()) {\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n }\n }\n sketch.UI.message(\"All arrows are updated 🚀\");\n \n }\n let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition, document, docData);\n connectionsData.push(connection);\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n sketch.UI.message(\"There is no arrows\");\n }\n}\n\n// const track = require(\"sketch-module-google-analytics\")\n// track(\"UA-138226597-1\", \"event\", {\n// ec: \"command\", \n// ea: \"create\", \n// ev: \"my-command\"\n// });\n\n\n\n\n\n","import sketch from 'sketch';\nimport { getConnectionsData, deleteConnectionFromData} from \"./utilities/data.js\"\nimport { deleteLine } from \"./utilities/lines.js\"\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\nlet connectionsData = getConnectionsData(docData);\n\n\n\nexport function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n // let firstObject = document.getLayerWithID(firstObjectID);\n // let secondObject = document.getLayerWithID(secondObjectID);\n // let conditionObject = document.getLayerWithID(conditionID);\n // let result = false;\n \n // Need to delete data first, because we will have a new line\n // deleteLine(lineID);\n // if(conditionID && !isCondition){\n // if(conditionObject){conditionObject.remove();}\n // }\n \n connectionsData = deleteConnectionFromData(connectionIndex);\n\n // if(firstObject && secondObject){\n // // If we have all the objects, we can recreate the line\n // result = true;\n // }\n\n // return result;\n}","import sketch from 'sketch';\nimport { addToConditionGroup, checkForGroup } from \"./groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\n// let docData = context.document.documentData();\n// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\nexport function addCondition(keyword, x, y, document, docData) {\n let libraries = sketch.getLibraries();\n let libraryObject, symbolReferences, symbol;\n let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n for (let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(\n document\n );\n for (let i = 0; i < symbolReferences.length; i++) {\n if (symbolReferences[i].name.includes(keyword)) {\n libraryObject = symbolReferences[i];\n }\n }\n }\n\n if (libraryObject == null) {\n symbol = null;\n UI.alert(\n \"Condition symbol is not found\",\n 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here'\n );\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y, currentParentGroup);\n }\n return symbol;\n}\n\nexport function updateCondition(conditionID, x, y, document, docData) {\n let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n let condition = document.getLayerWithID(conditionID);\n let conGroup = checkForGroup(\"Conditions\", currentParentGroup);\n let arGroup = checkForGroup(\"Arrows\", currentParentGroup);\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n }\n return condition.id;\n}\n\nexport function deleteCondition(conditionID, document) {\n let conditionObject = document.getLayerWithID(conditionID);\n let selectedGroup;\n if(conditionObject){\n selectedGroup = conditionObject.parent;\n conditionObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n }\n \n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\n\n\nexport function getConnectionsData(docData) {\n let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n let dataArray = [];\n\n if (pluginData) {\n for (let i = 0; i < pluginData.length; i++) {\n dataArray.push(pluginData[i]);\n }\n }\n return dataArray;\n}\n\nexport function deleteConnectionFromData(connectionIndexArray, data){\n if(data){\n for (let i = connectionIndexArray.length -1; i >= 0; i--) {\n data.splice(connectionIndexArray[i],1);\n }\n }\n return data;\n}\n","import sketch from 'sketch';\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function getSourceObjectFromSelection(selection, direction){\n let sourceObjectID = selection.firstObject().objectID();\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction);\n }\n }\n return sourceObjectID;\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){\n \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let sourceObjectID;\n\n if(direction == \"Right\"){\n if(firstObjectAbsPos.x <= secondObjectAbsPos.x){ // We need to get the doc position\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.y <= secondObjectAbsPos.y){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Left\"){\n if(firstObjectAbsPos.x <= secondObjectAbsPos.x){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n if(direction == \"Up\"){\n if(firstObjectAbsPos.y <= secondObjectAbsPos.y){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n return sourceObjectID;\n}","import sketch from 'sketch';\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function checkForGroup(groupName, currentParentGroup) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n\n return currentGroup;\n}\n\nexport function addToArrowsGroup(line, currentParentGroup){\n let currentGroup = checkForGroup(\"Arrows\", currentParentGroup);\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nexport function addToConditionGroup(condition, x, y, currentParentGroup) {\n let conGroup = checkForGroup(\"Conditions\", currentParentGroup);\n let arGroup = checkForGroup(\"Arrows\", currentParentGroup);\n \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2 + arGroupX;\n condition.frame.y = y - condition.frame.height / 2 + arGroupY;\n let Group = require(\"sketch/dom\").Group;\n let group = new Group({\n parent: currentParentGroup,\n name: \"Conditions\",\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n }","import sketch from 'sketch';\nlet UI = require('sketch/ui');\n\nexport function deleteLine(lineID, document){\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n\nexport function styleLine(line, style, docData){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style, docData) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style, docData);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey), docData);\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name, docData) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/arrows.sketchplugin/Contents/Sketch/settings.js b/arrows.sketchplugin/Contents/Sketch/settings.js index 1e1905a..441fd86 100644 --- a/arrows.sketchplugin/Contents/Sketch/settings.js +++ b/arrows.sketchplugin/Contents/Sketch/settings.js @@ -117,7 +117,7 @@ var docData = context.document.documentData(); function settings(context) { var alert = COSAlertWindow.new(); var viewWidth = 300; - var viewHeight = 450; // Alert window settings + var viewHeight = 500; // Alert window settings alert = alertSetup(alert, viewWidth, viewHeight); var view = NSView.alloc().initWithFrame(NSMakeRect(0, 0, viewWidth, viewHeight)); @@ -173,13 +173,19 @@ function settings(context) { var otherSettingsLabel = alertLabel("Other Settings", true, -1, viewHeight - 330, 280, 40); view.addSubview(otherSettingsLabel); // Checkbox: Auto-Align - var checkbox = alertCheckbox("Second layer auto-align", false, -1, viewHeight - 340, 260, 40); - view.addSubview(checkbox); // Label: Auto-Align Info + var checkAutoAlign = alertCheckbox("Second layer auto-align", "autoAlign", -1, viewHeight - 340, 260, 40); + view.addSubview(checkAutoAlign); // Label: Auto-Align Info var autoAlignInfoLabel = alertLabel("Align the second layer for 5px misalignment with the first one", false, -1, viewHeight - 370, 280, 40); - view.addSubview(autoAlignInfoLabel); // Label: Plugin Info + view.addSubview(autoAlignInfoLabel); // Checkbox: Auto-Draw - var pluginInfoLabel = alertLabel("Made by @faridSabitov with the support of EPAM.com ❤️", true, -1, viewHeight - 420, 280, 40); + var checkAutoDraw = alertCheckbox("Redraw arrows after moving/resizing layers", "autoDraw", -1, viewHeight - 410, 300, 40); + view.addSubview(checkAutoDraw); // Label: Auto-Draw Info + + var autoDrawInfoLabel = alertLabel("If you have performance issues, try to turn this option off", false, -1, viewHeight - 440, 280, 40); + view.addSubview(autoDrawInfoLabel); // Label: Plugin Info + + var pluginInfoLabel = alertLabel("Made by @faridSabitov with the support of EPAM.com ❤️", true, -1, viewHeight - 490, 280, 40); view.addSubview(pluginInfoLabel); // Need to check if style is still available // Show modal and get the results @@ -192,6 +198,7 @@ function settings(context) { Settings.setSettingForKey("arrowType", alert.views()[0].subviews()[4].title()); Settings.setSettingForKey("arrowSpacing", alert.views()[0].subviews()[8].intValue()); Settings.setSettingForKey("autoAlign", alert.views()[0].subviews()[12].state()); + Settings.setSettingForKey("autoDraw", alert.views()[0].subviews()[14].state()); UI.message("Settings are updated 🚀"); } } // Functions @@ -296,14 +303,8 @@ function alertCheckbox(message, state, x, y, width, height) { checkbox.setButtonType(NSSwitchButton); checkbox.setBezelStyle(0); checkbox.setTitle(message); - - if (Settings.settingForKey("autoAlign")) { - var currentState = Settings.settingForKey("autoAlign"); - checkbox.setState(currentState); - } else { - checkbox.setState(state); - } - + var currentState = Settings.settingForKey(state); + checkbox.setState(currentState); return checkbox; } diff --git a/arrows.sketchplugin/Contents/Sketch/settings.js.map b/arrows.sketchplugin/Contents/Sketch/settings.js.map index aa577ba..0adf831 100644 --- a/arrows.sketchplugin/Contents/Sketch/settings.js.map +++ b/arrows.sketchplugin/Contents/Sketch/settings.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/settings.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","Settings","pluginKey","document","sketch","fromNative","context","docData","documentData","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","settingForKey","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkbox","alertCheckbox","autoAlignInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","command","setValue_forKey_onLayer_forPluginIdentifier","views","subviews","title","setSettingForKey","intValue","state","message","docSettings","valueForKey_onLayer_forPluginIdentifier","styles","getLayerStyles","addItemWithTitle","i","length","name","docTypeSettings","lastItem","setState","setMessageText","addButtonWithTitle","x","y","width","height","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","styleLine","line","style","localStyle","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","g","b","a","thickness","endMarkerType","allStyles","allLayerStyles","keyword","count","includes","push"],"mappings":"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","file":"settings.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/settings.js\");\n","import sketch from \"sketch\";\nimport { getLayerStyles } from \"./utilities/styling.js\";\n\n\nlet UI = require('sketch/ui') ;\nlet Settings = require(\"sketch/settings\");\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\n\nexport function settings(context) {\n let alert = COSAlertWindow.new();\n const viewWidth = 300;\n const viewHeight = 450;\n\n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight);\n let view = NSView.alloc().initWithFrame(\n NSMakeRect(0, 0, viewWidth, viewHeight)\n );\n alert.addAccessoryView(view);\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\n \"Arrow Style\",\n true,\n -1,\n viewHeight - 40,\n 280,\n 40\n );\n view.addSubview(arrowStyleLabel);\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(\n NSMakeRect(-2, viewHeight - 40, 300, 20)\n );\n setActiveStyleSetting(arrowStylingField);\n view.addSubview(arrowStylingField);\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\n \"Add layer style to your document that will contain $arrow name and you will be able to specify it here \",\n false,\n -1,\n viewHeight - 80,\n 300,\n 40\n );\n view.addSubview(arrowStyleInfoLabel);\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\n \"Arrow Type\",\n true,\n -1,\n viewHeight - 130,\n 280,\n 40\n );\n view.addSubview(arrowTypeLabel);\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(\n NSMakeRect(-2, viewHeight - 130, 300, 20)\n );\n setActiveTypeSetting(arrowTypeField);\n view.addSubview(arrowTypeField);\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\n \"Select one of the arrow types. Angled is used by default\",\n false,\n -1,\n viewHeight - 170,\n 300,\n 40\n );\n view.addSubview(arrowTypeInfoLabel);\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\n \"Arrow Spacing\",\n true,\n -1,\n viewHeight - 200,\n 330,\n 20\n );\n view.addSubview(arrowSpacingLabel);\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\n \"px\",\n true,\n 90,\n viewHeight - 220,\n 330,\n 20\n );\n view.addSubview(arrowSpacingPxLabel);\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(\n NSMakeRect(-2, viewHeight - 220, 80, 20)\n );\n var formatter = NSNumberFormatter.alloc()\n .init()\n .autorelease();\n arrowSpacingField.setStringValue(\n String(Settings.settingForKey(\"arrowSpacing\"))\n );\n arrowSpacingField.setFormatter(formatter);\n view.addSubview(arrowSpacingField);\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(\n NSMakeRect(70, viewHeight - 220, 20, 20)\n );\n arrowSpacingStepper.setMaxValue(1000);\n arrowSpacingStepper.setMinValue(0);\n arrowSpacingStepper.setValueWraps(false);\n arrowSpacingStepper.setAutorepeat(true);\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender) {\n var value = 0 + sender.integerValue();\n arrowSpacingField.setStringValue(String(value));\n });\n\n view.addSubview(arrowSpacingStepper);\n // view.addSubview(formatter)\n\n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\n \"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \",\n false,\n -1,\n viewHeight - 285,\n 300,\n 60\n );\n view.addSubview(arrowSpacingInfoLabel);\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\n \"Other Settings\",\n true,\n -1,\n viewHeight - 330,\n 280,\n 40\n );\n view.addSubview(otherSettingsLabel);\n\n // Checkbox: Auto-Align\n let checkbox = alertCheckbox(\n \"Second layer auto-align\",\n false,\n -1,\n viewHeight - 340,\n 260,\n 40\n );\n view.addSubview(checkbox);\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\n \"Align the second layer for 5px misalignment with the first one\",\n false,\n -1,\n viewHeight - 370,\n 280,\n 40\n );\n view.addSubview(autoAlignInfoLabel);\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\n \"Made by @faridSabitov with the support of EPAM.com ❤️\",\n true,\n -1,\n viewHeight - 420,\n 280,\n 40\n );\n view.addSubview(pluginInfoLabel);\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal();\n\n if (modalResponse == NSAlertFirstButtonReturn) {\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(\n alert\n .views()[0]\n .subviews()[1]\n .title(),\n \"arrowStyle\",\n docData,\n pluginKey\n );\n Settings.setSettingForKey(\n \"arrowType\",\n alert\n .views()[0]\n .subviews()[4]\n .title()\n );\n Settings.setSettingForKey(\n \"arrowSpacing\",\n alert\n .views()[0]\n .subviews()[8]\n .intValue()\n );\n Settings.setSettingForKey(\n \"autoAlign\",\n alert\n .views()[0]\n .subviews()[12]\n .state()\n );\n UI.message(\"Settings are updated 🚀\");\n }\n}\n\n// Functions\n\nfunction setActiveStyleSetting(arrowStylingField) {\n let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier(\n \"arrowStyle\",\n docData,\n pluginKey\n );\n let styles = getLayerStyles(null, docData);\n\n if (docSettings) {\n // We have info about the settings in the current document\n\n if (docSettings != \"Default Style\") {\n // if user specified own option\n arrowStylingField.addItemWithTitle(docSettings);\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for (let i = 0; i < styles.length; i++) {\n if (styles[i].name() != docSettings) {\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n } else {\n // Need to show the default first\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for (let i = 0; i < styles.length; i++) {\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n } else {\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for (let i = 0; i < styles.length; i++) {\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n}\n\nfunction setActiveTypeSetting(arrowTypeField) {\n let docTypeSettings = Settings.settingForKey(\"arrowType\");\n\n if (docTypeSettings) {\n // We have info about the settings in the current document\n\n if (docTypeSettings == \"Angled\") {\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(0);\n }\n\n if (docTypeSettings == \"Curved\") {\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(0);\n }\n\n if (docTypeSettings == \"Straight\") {\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(0);\n }\n } else {\n // Show default\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.addItemWithTitle(\"Straight\");\n }\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight) {\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\");\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\");\n alert.addButtonWithTitle(\"Cancel\");\n\n return alert;\n}\n\nfunction alertLabel(message, state, x, y, width, height) {\n let infoLabel = NSTextField.alloc().initWithFrame(\n NSMakeRect(x, y, width, height)\n );\n\n infoLabel.setStringValue(message);\n infoLabel.setSelectable(false);\n infoLabel.setDrawsBackground(false);\n infoLabel.setBezeled(false);\n\n if (state == false) {\n infoLabel.textColor = NSColor.disabledControlTextColor();\n }\n\n return infoLabel;\n}\n\nfunction alertCheckbox(message, state, x, y, width, height) {\n let checkbox = NSButton.alloc().initWithFrame(\n NSMakeRect(x, y, width, height)\n );\n\n checkbox.setButtonType(NSSwitchButton);\n checkbox.setBezelStyle(0);\n checkbox.setTitle(message);\n if (Settings.settingForKey(\"autoAlign\")) {\n let currentState = Settings.settingForKey(\"autoAlign\");\n checkbox.setState(currentState);\n } else {\n checkbox.setState(state);\n }\n\n return checkbox;\n}\n\n\n","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n\nexport function styleLine(line, style, docData){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style, docData) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style, docData);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey), docData);\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name, docData) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/settings.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","Settings","pluginKey","document","sketch","fromNative","context","docData","documentData","settings","alert","COSAlertWindow","new","viewWidth","viewHeight","alertSetup","view","NSView","alloc","initWithFrame","NSMakeRect","addAccessoryView","arrowStyleLabel","alertLabel","addSubview","arrowStylingField","NSPopUpButton","setActiveStyleSetting","arrowStyleInfoLabel","arrowTypeLabel","arrowTypeField","setActiveTypeSetting","arrowTypeInfoLabel","arrowSpacingLabel","arrowSpacingPxLabel","arrowSpacingField","NSTextField","formatter","NSNumberFormatter","init","autorelease","setStringValue","String","settingForKey","setFormatter","arrowSpacingStepper","NSStepper","setMaxValue","setMinValue","setValueWraps","setAutorepeat","setCOSJSTargetFunction","sender","value","integerValue","arrowSpacingInfoLabel","otherSettingsLabel","checkAutoAlign","alertCheckbox","autoAlignInfoLabel","checkAutoDraw","autoDrawInfoLabel","pluginInfoLabel","modalResponse","runModal","NSAlertFirstButtonReturn","command","setValue_forKey_onLayer_forPluginIdentifier","views","subviews","title","setSettingForKey","intValue","state","message","docSettings","valueForKey_onLayer_forPluginIdentifier","styles","getLayerStyles","addItemWithTitle","i","length","name","docTypeSettings","lastItem","setState","setMessageText","addButtonWithTitle","x","y","width","height","infoLabel","setSelectable","setDrawsBackground","setBezeled","textColor","NSColor","disabledControlTextColor","checkbox","NSButton","setButtonType","NSSwitchButton","setBezelStyle","setTitle","currentState","styleLine","line","style","localStyle","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","g","b","a","thickness","endMarkerType","allStyles","allLayerStyles","keyword","count","includes","push"],"mappings":"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","file":"settings.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/settings.js\");\n","import sketch from \"sketch\";\nimport { getLayerStyles } from \"./utilities/styling.js\";\n\n\nlet UI = require('sketch/ui') ;\nlet Settings = require(\"sketch/settings\");\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\n\nexport function settings(context) {\n let alert = COSAlertWindow.new();\n const viewWidth = 300;\n const viewHeight = 500;\n\n // Alert window settings\n alert = alertSetup(alert, viewWidth, viewHeight);\n let view = NSView.alloc().initWithFrame(\n NSMakeRect(0, 0, viewWidth, viewHeight)\n );\n alert.addAccessoryView(view);\n\n // Label: Arrow Style\n let arrowStyleLabel = alertLabel(\n \"Arrow Style\",\n true,\n -1,\n viewHeight - 40,\n 280,\n 40\n );\n view.addSubview(arrowStyleLabel);\n\n // Select: Arrow Style\n let arrowStylingField = NSPopUpButton.alloc().initWithFrame(\n NSMakeRect(-2, viewHeight - 40, 300, 20)\n );\n setActiveStyleSetting(arrowStylingField);\n view.addSubview(arrowStylingField);\n\n // Label: Arrow Style Info\n let arrowStyleInfoLabel = alertLabel(\n \"Add layer style to your document that will contain $arrow name and you will be able to specify it here \",\n false,\n -1,\n viewHeight - 80,\n 300,\n 40\n );\n view.addSubview(arrowStyleInfoLabel);\n\n // Label: Arrow Type\n let arrowTypeLabel = alertLabel(\n \"Arrow Type\",\n true,\n -1,\n viewHeight - 130,\n 280,\n 40\n );\n view.addSubview(arrowTypeLabel);\n\n // Select: Arrow Type\n let arrowTypeField = NSPopUpButton.alloc().initWithFrame(\n NSMakeRect(-2, viewHeight - 130, 300, 20)\n );\n setActiveTypeSetting(arrowTypeField);\n view.addSubview(arrowTypeField);\n\n // Label: Arrow Type Info\n let arrowTypeInfoLabel = alertLabel(\n \"Select one of the arrow types. Angled is used by default\",\n false,\n -1,\n viewHeight - 170,\n 300,\n 40\n );\n view.addSubview(arrowTypeInfoLabel);\n\n // Label: Arrow Spacing\n let arrowSpacingLabel = alertLabel(\n \"Arrow Spacing\",\n true,\n -1,\n viewHeight - 200,\n 330,\n 20\n );\n view.addSubview(arrowSpacingLabel);\n\n // Label: Arrow Spacing PX\n let arrowSpacingPxLabel = alertLabel(\n \"px\",\n true,\n 90,\n viewHeight - 220,\n 330,\n 20\n );\n view.addSubview(arrowSpacingPxLabel);\n\n // Input: Arrow Spacing\n let arrowSpacingField = NSTextField.alloc().initWithFrame(\n NSMakeRect(-2, viewHeight - 220, 80, 20)\n );\n var formatter = NSNumberFormatter.alloc()\n .init()\n .autorelease();\n arrowSpacingField.setStringValue(\n String(Settings.settingForKey(\"arrowSpacing\"))\n );\n arrowSpacingField.setFormatter(formatter);\n view.addSubview(arrowSpacingField);\n\n // Stepper: Arrow Spacing\n let arrowSpacingStepper = NSStepper.alloc().initWithFrame(\n NSMakeRect(70, viewHeight - 220, 20, 20)\n );\n arrowSpacingStepper.setMaxValue(1000);\n arrowSpacingStepper.setMinValue(0);\n arrowSpacingStepper.setValueWraps(false);\n arrowSpacingStepper.setAutorepeat(true);\n arrowSpacingStepper.setCOSJSTargetFunction(function(sender) {\n var value = 0 + sender.integerValue();\n arrowSpacingField.setStringValue(String(value));\n });\n\n view.addSubview(arrowSpacingStepper);\n // view.addSubview(formatter)\n\n // Label: Auto Spacing Info\n let arrowSpacingInfoLabel = alertLabel(\n \"The second layer will be moved closer based on the value provided here. Keep it 0 if you don't want to have auto spacing feature \",\n false,\n -1,\n viewHeight - 285,\n 300,\n 60\n );\n view.addSubview(arrowSpacingInfoLabel);\n\n // Label: Other Settings\n let otherSettingsLabel = alertLabel(\n \"Other Settings\",\n true,\n -1,\n viewHeight - 330,\n 280,\n 40\n );\n view.addSubview(otherSettingsLabel);\n\n // Checkbox: Auto-Align\n let checkAutoAlign = alertCheckbox(\n \"Second layer auto-align\",\n \"autoAlign\",\n -1,\n viewHeight - 340,\n 260,\n 40\n );\n view.addSubview(checkAutoAlign);\n\n // Label: Auto-Align Info\n let autoAlignInfoLabel = alertLabel(\n \"Align the second layer for 5px misalignment with the first one\",\n false,\n -1,\n viewHeight - 370,\n 280,\n 40\n );\n view.addSubview(autoAlignInfoLabel);\n\n // Checkbox: Auto-Draw\n let checkAutoDraw = alertCheckbox(\n \"Redraw arrows after moving/resizing layers\",\n \"autoDraw\",\n -1,\n viewHeight - 410,\n 300,\n 40\n );\n view.addSubview(checkAutoDraw);\n\n // Label: Auto-Draw Info\n let autoDrawInfoLabel = alertLabel(\n \"If you have performance issues, try to turn this option off\",\n false,\n -1,\n viewHeight - 440,\n 280,\n 40\n );\n view.addSubview(autoDrawInfoLabel);\n\n // Label: Plugin Info\n let pluginInfoLabel = alertLabel(\n \"Made by @faridSabitov with the support of EPAM.com ❤️\",\n true,\n -1,\n viewHeight - 490,\n 280,\n 40\n );\n view.addSubview(pluginInfoLabel);\n\n // Need to check if style is still available\n\n // Show modal and get the results\n let modalResponse = alert.runModal();\n\n if (modalResponse == NSAlertFirstButtonReturn) {\n // When user clicks on \"Update Settings\"\n // Need to save all this results into the Plugin Settings\n context.command.setValue_forKey_onLayer_forPluginIdentifier(\n alert\n .views()[0]\n .subviews()[1]\n .title(),\n \"arrowStyle\",\n docData,\n pluginKey\n );\n Settings.setSettingForKey(\n \"arrowType\",\n alert\n .views()[0]\n .subviews()[4]\n .title()\n );\n Settings.setSettingForKey(\n \"arrowSpacing\",\n alert\n .views()[0]\n .subviews()[8]\n .intValue()\n );\n Settings.setSettingForKey(\n \"autoAlign\",\n alert\n .views()[0]\n .subviews()[12]\n .state()\n );\n Settings.setSettingForKey(\n \"autoDraw\",\n alert\n .views()[0]\n .subviews()[14]\n .state()\n );\n UI.message(\"Settings are updated 🚀\");\n }\n}\n\n// Functions\n\nfunction setActiveStyleSetting(arrowStylingField) {\n let docSettings = context.command.valueForKey_onLayer_forPluginIdentifier(\n \"arrowStyle\",\n docData,\n pluginKey\n );\n let styles = getLayerStyles(null, docData);\n\n if (docSettings) {\n // We have info about the settings in the current document\n\n if (docSettings != \"Default Style\") {\n // if user specified own option\n arrowStylingField.addItemWithTitle(docSettings);\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for (let i = 0; i < styles.length; i++) {\n if (styles[i].name() != docSettings) {\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n } else {\n // Need to show the default first\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for (let i = 0; i < styles.length; i++) {\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n } else {\n arrowStylingField.addItemWithTitle(\"Default Style\");\n for (let i = 0; i < styles.length; i++) {\n arrowStylingField.addItemWithTitle(styles[i].name());\n }\n }\n}\n\nfunction setActiveTypeSetting(arrowTypeField) {\n let docTypeSettings = Settings.settingForKey(\"arrowType\");\n\n if (docTypeSettings) {\n // We have info about the settings in the current document\n\n if (docTypeSettings == \"Angled\") {\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(0);\n }\n\n if (docTypeSettings == \"Curved\") {\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(0);\n }\n\n if (docTypeSettings == \"Straight\") {\n arrowTypeField.addItemWithTitle(\"Straight\");\n arrowTypeField.lastItem().setState(1);\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.lastItem().setState(0);\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.lastItem().setState(0);\n }\n } else {\n // Show default\n arrowTypeField.addItemWithTitle(\"Angled\");\n arrowTypeField.addItemWithTitle(\"Curved\");\n arrowTypeField.addItemWithTitle(\"Straight\");\n }\n}\n\nfunction alertSetup(alert, viewWidth, viewHeight) {\n // Title\n alert.setMessageText(\"Arrow Plugin Settings\");\n\n // Creating dialog buttons\n alert.addButtonWithTitle(\"Update Settings\");\n alert.addButtonWithTitle(\"Cancel\");\n\n return alert;\n}\n\nfunction alertLabel(message, state, x, y, width, height) {\n let infoLabel = NSTextField.alloc().initWithFrame(\n NSMakeRect(x, y, width, height)\n );\n\n infoLabel.setStringValue(message);\n infoLabel.setSelectable(false);\n infoLabel.setDrawsBackground(false);\n infoLabel.setBezeled(false);\n\n if (state == false) {\n infoLabel.textColor = NSColor.disabledControlTextColor();\n }\n\n return infoLabel;\n}\n\nfunction alertCheckbox(message, state, x, y, width, height) {\n let checkbox = NSButton.alloc().initWithFrame(\n NSMakeRect(x, y, width, height)\n );\n\n checkbox.setButtonType(NSSwitchButton);\n checkbox.setBezelStyle(0);\n checkbox.setTitle(message);\n\n let currentState = Settings.settingForKey(state);\n checkbox.setState(currentState);\n\n return checkbox;\n}\n\n\n","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n\nexport function styleLine(line, style, docData){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style, docData) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style, docData);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey), docData);\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name, docData) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/src/autoUpdate.js b/src/autoUpdate.js index 7886e6d..0d5b5c3 100644 --- a/src/autoUpdate.js +++ b/src/autoUpdate.js @@ -4,46 +4,48 @@ const pluginKey = "flowArrows"; import { deleteLine } from "./utilities/lines.js" import { createArrow } from "./createArrow.js"; import { getConnectionsData, deleteConnectionFromData } from "./utilities/data.js" +var Settings = require('sketch/settings'); export function autoUpdateSelectedArrows(context) { - let document = sketch.fromNative(context.actionContext.document) - let action = context.actionContext - let docData = action.document.documentData(); - - let connectionsData = getConnectionsData(docData); - - - const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer)) - let firstObjectID = String(movedLayers[0].id); - let connectionIndex = [] - - connectionIndex = getIndex(connectionsData, firstObjectID); - - if(connectionIndex.length > 0){ - for (let x = 0; x < connectionIndex.length; x++) { - deleteLine(connectionsData[connectionIndex[x]].line, document); - let connection = createArrow( - connectionsData[connectionIndex[x]].firstObject, - connectionsData[connectionIndex[x]].secondObject, - connectionsData[connectionIndex[x]].style, - connectionsData[connectionIndex[x]].type, - connectionsData[connectionIndex[x]].direction, - connectionsData[connectionIndex[x]].condition, - connectionsData[connectionIndex[x]].isCondition, - document, - docData - ); - connectionsData.push(connection); + if(Settings.settingForKey("autoDraw") != false) { + let document = sketch.fromNative(context.actionContext.document) + let action = context.actionContext + let docData = action.document.documentData(); + + let connectionsData = getConnectionsData(docData); + + + const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer)) + let firstObjectID = String(movedLayers[0].id); + let connectionIndex = [] + + connectionIndex = getIndex(connectionsData, firstObjectID); + + if(connectionIndex.length > 0){ + for (let x = 0; x < connectionIndex.length; x++) { + deleteLine(connectionsData[connectionIndex[x]].line, document); + let connection = createArrow( + connectionsData[connectionIndex[x]].firstObject, + connectionsData[connectionIndex[x]].secondObject, + connectionsData[connectionIndex[x]].style, + connectionsData[connectionIndex[x]].type, + connectionsData[connectionIndex[x]].direction, + connectionsData[connectionIndex[x]].condition, + connectionsData[connectionIndex[x]].isCondition, + document, + docData + ); + connectionsData.push(connection); + } } - } - if(connectionIndex.length > 0){ - connectionsData = deleteConnectionFromData(connectionIndex, connectionsData); + if(connectionIndex.length > 0){ + connectionsData = deleteConnectionFromData(connectionIndex, connectionsData); + } + context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, "arrowConnections", docData, pluginKey); } - context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, "arrowConnections", docData, pluginKey); - } function getIndex(connectionsData, firstObjectID){ diff --git a/src/script.js b/src/script.js index d841a0f..e288a2d 100644 --- a/src/script.js +++ b/src/script.js @@ -147,7 +147,6 @@ export function update(context, level, isUpdate) { } sketch.UI.message("All arrows are updated 🚀"); - } let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition, document, docData); connectionsData.push(connection); diff --git a/src/settings.js b/src/settings.js index b087735..73f0632 100644 --- a/src/settings.js +++ b/src/settings.js @@ -11,7 +11,7 @@ let docData = context.document.documentData(); export function settings(context) { let alert = COSAlertWindow.new(); const viewWidth = 300; - const viewHeight = 450; + const viewHeight = 500; // Alert window settings alert = alertSetup(alert, viewWidth, viewHeight); @@ -152,15 +152,15 @@ export function settings(context) { view.addSubview(otherSettingsLabel); // Checkbox: Auto-Align - let checkbox = alertCheckbox( + let checkAutoAlign = alertCheckbox( "Second layer auto-align", - false, + "autoAlign", -1, viewHeight - 340, 260, 40 ); - view.addSubview(checkbox); + view.addSubview(checkAutoAlign); // Label: Auto-Align Info let autoAlignInfoLabel = alertLabel( @@ -173,12 +173,34 @@ export function settings(context) { ); view.addSubview(autoAlignInfoLabel); + // Checkbox: Auto-Draw + let checkAutoDraw = alertCheckbox( + "Redraw arrows after moving/resizing layers", + "autoDraw", + -1, + viewHeight - 410, + 300, + 40 + ); + view.addSubview(checkAutoDraw); + + // Label: Auto-Draw Info + let autoDrawInfoLabel = alertLabel( + "If you have performance issues, try to turn this option off", + false, + -1, + viewHeight - 440, + 280, + 40 + ); + view.addSubview(autoDrawInfoLabel); + // Label: Plugin Info let pluginInfoLabel = alertLabel( "Made by @faridSabitov with the support of EPAM.com ❤️", true, -1, - viewHeight - 420, + viewHeight - 490, 280, 40 ); @@ -222,6 +244,13 @@ export function settings(context) { .subviews()[12] .state() ); + Settings.setSettingForKey( + "autoDraw", + alert + .views()[0] + .subviews()[14] + .state() + ); UI.message("Settings are updated 🚀"); } } @@ -339,12 +368,9 @@ function alertCheckbox(message, state, x, y, width, height) { checkbox.setButtonType(NSSwitchButton); checkbox.setBezelStyle(0); checkbox.setTitle(message); - if (Settings.settingForKey("autoAlign")) { - let currentState = Settings.settingForKey("autoAlign"); - checkbox.setState(currentState); - } else { - checkbox.setState(state); - } + + let currentState = Settings.settingForKey(state); + checkbox.setState(currentState); return checkbox; } From 05f4fe1b7c6d812b0b46b88f67833cf044ca2072 Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Wed, 31 Jul 2019 23:01:36 +0300 Subject: [PATCH 41/44] removed update and delete for now --- .../Contents/Sketch/autoUpdate.js | 2 - .../Contents/Sketch/autoUpdate.js.map | 2 +- .../Contents/Sketch/manifest.json | 18 +-- arrows.sketchplugin/Contents/Sketch/script.js | 119 +++++++++++------- .../Contents/Sketch/script.js.map | 2 +- src/autoUpdate.js | 4 +- src/manifest.json | 17 --- src/script.js | 95 ++++++++------ src/updateArrow.js | 42 ++++--- 9 files changed, 159 insertions(+), 142 deletions(-) diff --git a/arrows.sketchplugin/Contents/Sketch/autoUpdate.js b/arrows.sketchplugin/Contents/Sketch/autoUpdate.js index 29ffd8f..fb4e336 100644 --- a/arrows.sketchplugin/Contents/Sketch/autoUpdate.js +++ b/arrows.sketchplugin/Contents/Sketch/autoUpdate.js @@ -136,9 +136,7 @@ function autoUpdateSelectedArrows(context) { var connection = Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_2__["createArrow"])(connectionsData[connectionIndex[x]].firstObject, connectionsData[connectionIndex[x]].secondObject, connectionsData[connectionIndex[x]].style, connectionsData[connectionIndex[x]].type, connectionsData[connectionIndex[x]].direction, connectionsData[connectionIndex[x]].condition, connectionsData[connectionIndex[x]].isCondition, document, docData); connectionsData.push(connection); } - } - if (connectionIndex.length > 0) { connectionsData = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_3__["deleteConnectionFromData"])(connectionIndex, connectionsData); } diff --git a/arrows.sketchplugin/Contents/Sketch/autoUpdate.js.map b/arrows.sketchplugin/Contents/Sketch/autoUpdate.js.map index 6caa19a..83644d4 100644 --- a/arrows.sketchplugin/Contents/Sketch/autoUpdate.js.map +++ b/arrows.sketchplugin/Contents/Sketch/autoUpdate.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/autoUpdate.js","webpack://exports/./src/createArrow.js","webpack://exports/./src/draw.js","webpack://exports/./src/utilities/conditions.js","webpack://exports/./src/utilities/data.js","webpack://exports/./src/utilities/groups.js","webpack://exports/./src/utilities/lines.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","pluginKey","Settings","autoUpdateSelectedArrows","context","settingForKey","document","sketch","fromNative","actionContext","action","docData","documentData","connectionsData","getConnectionsData","movedLayers","Array","from","layers","map","layer","firstObjectID","String","id","connectionIndex","getIndex","length","x","deleteLine","line","connection","createArrow","firstObject","secondObject","style","type","direction","condition","isCondition","push","deleteConnectionFromData","command","setValue_forKey_onLayer_forPluginIdentifier","y","secondObjectID","conditionID","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","objectID","getLayerWithID","firstObjectMidX","frame","width","firstObjectMidY","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","currentParentGroup","currentPage","currentArtboard","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","firstObjectAbsPos","changeBasis","parent","to","secondObjectAbsPos","currentGroup","checkForGroup","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","g","getImportableSymbolReferencesForDocument","i","name","includes","alert","symbolMaster","import","createNewInstance","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","fixGeometryWithOptions","deleteCondition","conditionObject","selectedGroup","remove","pluginData","valueForKey_onLayer_forPluginIdentifier","dataArray","connectionIndexArray","data","splice","groupName","count","addLayers","Group","group","locked","moveToBack","adjustToFit","lineID","lineObject","localStyle","getLayerStyles","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","allStyles","allLayerStyles","styles"],"mappings":"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","file":"autoUpdate.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/autoUpdate.js\");\n","import sketch from 'sketch';\nlet UI = require('sketch/ui');\nconst pluginKey = \"flowArrows\";\nimport { deleteLine } from \"./utilities/lines.js\"\nimport { createArrow } from \"./createArrow.js\";\nimport { getConnectionsData, deleteConnectionFromData } from \"./utilities/data.js\"\nvar Settings = require('sketch/settings');\n\n\n\nexport function autoUpdateSelectedArrows(context) {\n if(Settings.settingForKey(\"autoDraw\") != false) {\n let document = sketch.fromNative(context.actionContext.document)\n let action = context.actionContext\n let docData = action.document.documentData();\n\n let connectionsData = getConnectionsData(docData);\n\n \n const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer))\n let firstObjectID = String(movedLayers[0].id);\n let connectionIndex = []\n\n connectionIndex = getIndex(connectionsData, firstObjectID);\n\n if(connectionIndex.length > 0){\n for (let x = 0; x < connectionIndex.length; x++) {\n deleteLine(connectionsData[connectionIndex[x]].line, document);\n let connection = createArrow(\n connectionsData[connectionIndex[x]].firstObject, \n connectionsData[connectionIndex[x]].secondObject, \n connectionsData[connectionIndex[x]].style,\n connectionsData[connectionIndex[x]].type, \n connectionsData[connectionIndex[x]].direction, \n connectionsData[connectionIndex[x]].condition, \n connectionsData[connectionIndex[x]].isCondition,\n document, \n docData\n );\n connectionsData.push(connection);\n }\n }\n\n if(connectionIndex.length > 0){\n connectionsData = deleteConnectionFromData(connectionIndex, connectionsData);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n }\n}\n\nfunction getIndex(connectionsData, firstObjectID){\n let connectionIndex = [];\n if(connectionsData.length > 0){\n for (let y = 0; y < connectionsData.length; y++) {\n if (firstObjectID == connectionsData[y].firstObject || firstObjectID == connectionsData[y].secondObject) {\n connectionIndex.push(y);\n }\n }\n } \n\n return connectionIndex;\n}","import sketch from 'sketch';\nimport { drawConnection } from \"./draw.js\";\n\nvar Settings = require('sketch/settings');\n\n\n// Main Function\n\nexport function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition, document, docData) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID, document) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection, document);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection, document);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition, document, docData);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n return connection;\n}\n\nfunction getDirection(firstObjectID, secondObjectID, document){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction, document){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction, document){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}","import sketch from 'sketch';\nimport { styleLine } from \"./utilities/styling.js\";\nimport { addCondition, updateCondition } from \"./utilities/conditions.js\";\nimport { checkForGroup, addToArrowsGroup } from \"./utilities/groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\n// Main Function\n\nexport function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition, document, docData){ // Refactored\n // Process of creating new connection \n let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection, currentParentGroup);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n\n // Condition\n if(isCondition == true){\n if(document.getLayerWithID(conditionID)){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY, document, docData);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY, document, docData);\n }\n } else {\n connection.conditionID = null;\n }\n \n // Style\n connection.style = styleLine(connection.line, style, docData);\n\n // Add to group\n addToArrowsGroup(connection.line, currentParentGroup);\n \n return connection\n}\n\n// Positions\n\nfunction getConnectionPos(firstObject, secondObject, direction, currentParentGroup){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\", currentParentGroup);\n let diffX, diffY;\n \n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n \n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n \n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n\n return connectionPos\n}\n\n// Drawing Types\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n \n return line;\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n \n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n \n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n \n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n \n if(firstLayerPosX Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here'\n );\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y, currentParentGroup);\n }\n return symbol;\n}\n\nexport function updateCondition(conditionID, x, y, document, docData) {\n let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n let condition = document.getLayerWithID(conditionID);\n let conGroup = checkForGroup(\"Conditions\", currentParentGroup);\n let arGroup = checkForGroup(\"Arrows\", currentParentGroup);\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n }\n return condition.id;\n}\n\nexport function deleteCondition(conditionID, document) {\n let conditionObject = document.getLayerWithID(conditionID);\n let selectedGroup;\n if(conditionObject){\n selectedGroup = conditionObject.parent;\n conditionObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n }\n \n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\n\n\nexport function getConnectionsData(docData) {\n let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n let dataArray = [];\n\n if (pluginData) {\n for (let i = 0; i < pluginData.length; i++) {\n dataArray.push(pluginData[i]);\n }\n }\n return dataArray;\n}\n\nexport function deleteConnectionFromData(connectionIndexArray, data){\n if(data){\n for (let i = connectionIndexArray.length -1; i >= 0; i--) {\n data.splice(connectionIndexArray[i],1);\n }\n }\n return data;\n}\n","import sketch from 'sketch';\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function checkForGroup(groupName, currentParentGroup) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n\n return currentGroup;\n}\n\nexport function addToArrowsGroup(line, currentParentGroup){\n let currentGroup = checkForGroup(\"Arrows\", currentParentGroup);\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nexport function addToConditionGroup(condition, x, y, currentParentGroup) {\n let conGroup = checkForGroup(\"Conditions\", currentParentGroup);\n let arGroup = checkForGroup(\"Arrows\", currentParentGroup);\n \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2 + arGroupX;\n condition.frame.y = y - condition.frame.height / 2 + arGroupY;\n let Group = require(\"sketch/dom\").Group;\n let group = new Group({\n parent: currentParentGroup,\n name: \"Conditions\",\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n }","import sketch from 'sketch';\nlet UI = require('sketch/ui');\n\nexport function deleteLine(lineID, document){\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n\nexport function styleLine(line, style, docData){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style, docData) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style, docData);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey), docData);\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name, docData) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/autoUpdate.js","webpack://exports/./src/createArrow.js","webpack://exports/./src/draw.js","webpack://exports/./src/utilities/conditions.js","webpack://exports/./src/utilities/data.js","webpack://exports/./src/utilities/groups.js","webpack://exports/./src/utilities/lines.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["UI","require","pluginKey","Settings","autoUpdateSelectedArrows","context","settingForKey","document","sketch","fromNative","actionContext","action","docData","documentData","connectionsData","getConnectionsData","movedLayers","Array","from","layers","map","layer","firstObjectID","String","id","connectionIndex","getIndex","length","x","deleteLine","line","connection","createArrow","firstObject","secondObject","style","type","direction","condition","isCondition","push","deleteConnectionFromData","command","setValue_forKey_onLayer_forPluginIdentifier","y","secondObjectID","conditionID","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","objectID","getLayerWithID","firstObjectMidX","frame","width","firstObjectMidY","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","sourceObjectID","childObjectID","sourceObject","childObject","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","currentParentGroup","currentPage","currentArtboard","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","firstObjectAbsPos","changeBasis","parent","to","secondObjectAbsPos","currentGroup","checkForGroup","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","g","getImportableSymbolReferencesForDocument","i","name","includes","alert","symbolMaster","import","createNewInstance","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","fixGeometryWithOptions","deleteCondition","conditionObject","selectedGroup","remove","pluginData","valueForKey_onLayer_forPluginIdentifier","dataArray","connectionIndexArray","data","splice","groupName","count","addLayers","Group","group","locked","moveToBack","adjustToFit","lineID","lineObject","localStyle","getLayerStyles","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","allStyles","allLayerStyles","styles"],"mappings":"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","file":"autoUpdate.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/autoUpdate.js\");\n","import sketch from 'sketch';\nlet UI = require('sketch/ui');\nconst pluginKey = \"flowArrows\";\nimport { deleteLine } from \"./utilities/lines.js\"\nimport { createArrow } from \"./createArrow.js\";\nimport { getConnectionsData, deleteConnectionFromData } from \"./utilities/data.js\"\nvar Settings = require('sketch/settings');\n\n\n\nexport function autoUpdateSelectedArrows(context) {\n if(Settings.settingForKey(\"autoDraw\") != false) {\n let document = sketch.fromNative(context.actionContext.document)\n let action = context.actionContext\n let docData = action.document.documentData();\n\n let connectionsData = getConnectionsData(docData);\n\n \n const movedLayers = Array.from(context.actionContext.layers).map(layer => sketch.fromNative(layer))\n let firstObjectID = String(movedLayers[0].id);\n let connectionIndex = []\n\n connectionIndex = getIndex(connectionsData, firstObjectID);\n\n if(connectionIndex.length > 0){\n for (let x = 0; x < connectionIndex.length; x++) {\n deleteLine(connectionsData[connectionIndex[x]].line, document);\n let connection = createArrow(\n connectionsData[connectionIndex[x]].firstObject, \n connectionsData[connectionIndex[x]].secondObject, \n connectionsData[connectionIndex[x]].style,\n connectionsData[connectionIndex[x]].type, \n connectionsData[connectionIndex[x]].direction, \n connectionsData[connectionIndex[x]].condition, \n connectionsData[connectionIndex[x]].isCondition,\n document, \n docData\n );\n connectionsData.push(connection);\n }\n connectionsData = deleteConnectionFromData(connectionIndex, connectionsData);\n }\n\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n }\n}\n\nfunction getIndex(connectionsData, firstObjectID){\n let connectionIndex = [];\n if(connectionsData.length > 0){\n for (let y = 0; y < connectionsData.length; y++) {\n if (firstObjectID == connectionsData[y].firstObject || firstObjectID == connectionsData[y].secondObject) {\n connectionIndex.push(y);\n }\n }\n } \n\n return connectionIndex;\n}","import sketch from 'sketch';\nimport { drawConnection } from \"./draw.js\";\n\nvar Settings = require('sketch/settings');\n\n\n// Main Function\n\nexport function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition, document, docData) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID, document) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection, document);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection, document);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition, document, docData);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n return connection;\n}\n\nfunction getDirection(firstObjectID, secondObjectID, document){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction, document){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction, document){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}","import sketch from 'sketch';\nimport { styleLine } from \"./utilities/styling.js\";\nimport { addCondition, updateCondition } from \"./utilities/conditions.js\";\nimport { checkForGroup, addToArrowsGroup } from \"./utilities/groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\n// Main Function\n\nexport function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition, document, docData){ // Refactored\n // Process of creating new connection \n let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection, currentParentGroup);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n\n // Condition\n if(isCondition == true){\n if(document.getLayerWithID(conditionID)){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY, document, docData);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY, document, docData);\n }\n } else {\n connection.conditionID = null;\n }\n \n // Style\n connection.style = styleLine(connection.line, style, docData);\n\n // Add to group\n addToArrowsGroup(connection.line, currentParentGroup);\n \n return connection\n}\n\n// Positions\n\nfunction getConnectionPos(firstObject, secondObject, direction, currentParentGroup){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\", currentParentGroup);\n let diffX, diffY;\n \n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n \n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n \n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n\n return connectionPos\n}\n\n// Drawing Types\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n \n return line;\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n \n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n \n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n \n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n \n if(firstLayerPosX Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here'\n );\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y, currentParentGroup);\n }\n return symbol;\n}\n\nexport function updateCondition(conditionID, x, y, document, docData) {\n let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n let condition = document.getLayerWithID(conditionID);\n let conGroup = checkForGroup(\"Conditions\", currentParentGroup);\n let arGroup = checkForGroup(\"Arrows\", currentParentGroup);\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n }\n return condition.id;\n}\n\nexport function deleteCondition(conditionID, document) {\n let conditionObject = document.getLayerWithID(conditionID);\n let selectedGroup;\n if(conditionObject){\n selectedGroup = conditionObject.parent;\n conditionObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n }\n \n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\n\n\nexport function getConnectionsData(docData) {\n let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n let dataArray = [];\n\n if (pluginData) {\n for (let i = 0; i < pluginData.length; i++) {\n dataArray.push(pluginData[i]);\n }\n }\n return dataArray;\n}\n\nexport function deleteConnectionFromData(connectionIndexArray, data){\n if(data){\n for (let i = connectionIndexArray.length -1; i >= 0; i--) {\n data.splice(connectionIndexArray[i],1);\n }\n }\n return data;\n}\n","import sketch from 'sketch';\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function checkForGroup(groupName, currentParentGroup) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n\n return currentGroup;\n}\n\nexport function addToArrowsGroup(line, currentParentGroup){\n let currentGroup = checkForGroup(\"Arrows\", currentParentGroup);\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nexport function addToConditionGroup(condition, x, y, currentParentGroup) {\n let conGroup = checkForGroup(\"Conditions\", currentParentGroup);\n let arGroup = checkForGroup(\"Arrows\", currentParentGroup);\n \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2 + arGroupX;\n condition.frame.y = y - condition.frame.height / 2 + arGroupY;\n let Group = require(\"sketch/dom\").Group;\n let group = new Group({\n parent: currentParentGroup,\n name: \"Conditions\",\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n }","import sketch from 'sketch';\nlet UI = require('sketch/ui');\n\nexport function deleteLine(lineID, document){\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n\nexport function styleLine(line, style, docData){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style, docData) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style, docData);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey), docData);\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name, docData) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/arrows.sketchplugin/Contents/Sketch/manifest.json b/arrows.sketchplugin/Contents/Sketch/manifest.json index 2e59739..cde99a3 100644 --- a/arrows.sketchplugin/Contents/Sketch/manifest.json +++ b/arrows.sketchplugin/Contents/Sketch/manifest.json @@ -2,7 +2,6 @@ "compatibleVersion": 3, "bundleVersion": 1, "identifier": "me.sabitov.sketch.connectionFlowArrows", - "version": "2.7.1", "icon": "icon.png", "authorEmail": "farid.sabitov.design@gmail.com", "appcast": "https://raw.githubusercontent.com/faridsabitov/Sketch-Connection-Flow-Arrows/master/.appcast.xml", @@ -208,28 +207,13 @@ "createUpArrowWithCondition" ] }, - { - "title": "Update Connection Positions", - "items": [ - "updateSelectedArrows", - "updateArtboardArrows", - "updateAllArrows" - ] - }, - { - "title": "Delete Connection", - "items": [ - "deleteSelectedArrows", - "deleteArtboardArrows", - "deleteAllArrows" - ] - }, "settings", "-", "getLibrary", "joinCommunity" ] }, + "version": "2.7.1", "name": "arrows", "disableCocoaScriptPreprocessor": true } \ No newline at end of file diff --git a/arrows.sketchplugin/Contents/Sketch/script.js b/arrows.sketchplugin/Contents/Sketch/script.js index eac8b65..8277425 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js +++ b/arrows.sketchplugin/Contents/Sketch/script.js @@ -722,9 +722,9 @@ var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); var pluginKey = "flowArrows"; var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); -var docData = context.document.documentData(); -var pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); -var currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); +var docData = context.document.documentData(); // let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); +// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); + var connectionsData = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_4__["getConnectionsData"])(docData); // // Plugin Incoming Commands - Create // @@ -761,14 +761,13 @@ function create(context, direction, isCondition) { var selection = context.selection; if (selection.count() > 1 && selection[0].class() != "MSArtboardGroup") { - var _sourceObjectID = Object(_utilities_getSourceObject_js__WEBPACK_IMPORTED_MODULE_3__["getSourceObjectFromSelection"])(selection, direction); - + var sourceObjectID = Object(_utilities_getSourceObject_js__WEBPACK_IMPORTED_MODULE_3__["getSourceObjectFromSelection"])(selection, direction); var connectionIndex = []; - for (var _g = 0; _g < selection.count(); _g++) { - if (selection[_g].objectID() != _sourceObjectID) { - var firstObjectID = String(_sourceObjectID); - var secondObjectID = String(selection[_g].objectID()); + for (var g = 0; g < selection.count(); g++) { + if (selection[g].objectID() != sourceObjectID) { + var firstObjectID = String(sourceObjectID); + var secondObjectID = String(selection[g].objectID()); var _create = true; var index = void 0; @@ -847,42 +846,63 @@ function update(context, level, isUpdate) { var secondObjectArtboard; if (connectionsData.length > 0) { - for (var i = 0; i < connectionsData.length; i++) { - if (level == 3) { - if (isUpdate) { - Object(_updateArrow_js__WEBPACK_IMPORTED_MODULE_2__["updateArrow"])(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i); - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows are updated"); - } else { + if (level == 3) { + if (isUpdate) { + newConnectionsData = Object(_updateArrow_js__WEBPACK_IMPORTED_MODULE_2__["updateArrow"])(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i); + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows are updated"); + } else { + for (var _i = 0; _i < connectionsData.length; _i++) { + Object(_utilities_lines_js__WEBPACK_IMPORTED_MODULE_5__["deleteLine"])(connectionsData[_i].line, document); + Object(_utilities_conditions_js__WEBPACK_IMPORTED_MODULE_6__["deleteCondition"])(connectionsData[_i].condition, document); newConnectionsData = null; - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows are deleted"); } } + } - if (level == 2) { - firstObjectArtboard = document.getLayerWithID(connectionsData[i].firstObject); - firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID(); - secondObjectArtboard = document.getLayerWithID(connectionsData[i].secondObject); - secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID(); - - if (selection.count() == 1 && selection[0].class() == "MSArtboardGroup") { - if (firstObjectArtboard == selection[0].objectID()) { - if (secondObjectArtboard == selection[0].objectID()) { - Object(_updateArrow_js__WEBPACK_IMPORTED_MODULE_2__["updateArrow"])(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i); + if (level == 2) { + if (isUpdate) {// Need to update + } else { + for (var _i2 = 0; _i2 < connectionsData.length; _i2++) { + if (selection[0].class() == "MSArtboardGroup") { + firstObjectArtboard = document.getLayerWithID(connectionsData[_i2].firstObject); + firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID(); + + if (firstObjectArtboard == selection[0].objectID()) { + Object(_utilities_lines_js__WEBPACK_IMPORTED_MODULE_5__["deleteLine"])(connectionsData[_i2].line, document); + Object(_utilities_conditions_js__WEBPACK_IMPORTED_MODULE_6__["deleteCondition"])(connectionsData[_i2].condition, document); } else { - newConnectionsData.push(connectionsData[i]); + newConnectionsData.push(connectionsData[_i2]); } } else { - newConnectionsData.push(connectionsData[i]); + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Please select an artboard"); } } } + } + + if (level == 1) { + if (isUpdate) {// updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i); + // sketch.UI.message("All arrows are updated"); + } else { + for (var _i3 = 0; _i3 < connectionsData.length; _i3++) { + if (selection[0].objectID() == connectionsData[_i3].firstObject) { + log("here"); + Object(_utilities_lines_js__WEBPACK_IMPORTED_MODULE_5__["deleteLine"])(connectionsData[_i3].line, document); + Object(_utilities_conditions_js__WEBPACK_IMPORTED_MODULE_6__["deleteCondition"])(connectionsData[_i3].condition, document); + } else { + newConnectionsData.push(connectionsData[_i3]); + } + } - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows are updated 🚀"); + newConnectionsData = null; + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows are deleted"); + } } - var connection = Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_1__["createArrow"])(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition, document, docData); - connectionsData.push(connection); - context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, "arrowConnections", docData, pluginKey); + sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows are updated 🚀"); // let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition, document, docData); + // connectionsData.push(connection); + + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); } else { sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is no arrows"); } @@ -925,22 +945,25 @@ var currentParentGroup = docData.currentPage().currentArtboard() || docData.curr var connectionsData = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_1__["getConnectionsData"])(docData); function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { - // Refactored - // Need to check if we have the layers with such IDs - // let firstObject = document.getLayerWithID(firstObjectID); - // let secondObject = document.getLayerWithID(secondObjectID); - // let conditionObject = document.getLayerWithID(conditionID); - // let result = false; - // Need to delete data first, because we will have a new line - // deleteLine(lineID); - // if(conditionID && !isCondition){ - // if(conditionObject){conditionObject.remove();} - // } - connectionsData = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_1__["deleteConnectionFromData"])(connectionIndex); // if(firstObject && secondObject){ - // // If we have all the objects, we can recreate the line - // result = true; - // } - // return result; + var firstObject = document.getLayerWithID(firstObjectID); + var secondObject = document.getLayerWithID(secondObjectID); + var conditionObject = document.getLayerWithID(conditionID); + var connection = []; + Object(_utilities_lines_js__WEBPACK_IMPORTED_MODULE_2__["deleteLine"])(lineID); + + if (conditionID && !isCondition) { + if (conditionObject) { + conditionObject.remove(); + } + } + + connectionsData = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_1__["deleteConnectionFromData"])(connectionIndex); + + if (firstObject && secondObject) { + connection = createArrow(connectionsData[connectionIndex[x]].firstObject, connectionsData[connectionIndex[x]].secondObject, connectionsData[connectionIndex[x]].style, connectionsData[connectionIndex[x]].type, connectionsData[connectionIndex[x]].direction, connectionsData[connectionIndex[x]].condition, connectionsData[connectionIndex[x]].isCondition, document, docData); + } + + return connection; } /***/ }), diff --git a/arrows.sketchplugin/Contents/Sketch/script.js.map b/arrows.sketchplugin/Contents/Sketch/script.js.map index 59f2b39..f69d2cb 100644 --- a/arrows.sketchplugin/Contents/Sketch/script.js.map +++ b/arrows.sketchplugin/Contents/Sketch/script.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/createArrow.js","webpack://exports/./src/draw.js","webpack://exports/./src/script.js","webpack://exports/./src/updateArrow.js","webpack://exports/./src/utilities/conditions.js","webpack://exports/./src/utilities/data.js","webpack://exports/./src/utilities/getSourceObject.js","webpack://exports/./src/utilities/groups.js","webpack://exports/./src/utilities/lines.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["Settings","require","createArrow","firstObjectID","secondObjectID","style","type","direction","conditionID","isCondition","document","docData","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","firstObject","secondObject","condition","line","objectID","getLayerWithID","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","sourceObjectID","childObjectID","sourceObject","childObject","settingForKey","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","UI","currentParentGroup","currentPage","currentArtboard","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","currentGroup","checkForGroup","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","layers","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","pluginKey","sketch","fromNative","context","documentData","pluginData","command","valueForKey_onLayer_forPluginIdentifier","connectionsData","getConnectionsData","createAutoArrow","create","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","selection","count","class","getSourceObjectFromSelection","connectionIndex","g","String","index","length","push","message","deleteLine","deleteCondition","deleteConnectionFromData","setValue_forKey_onLayer_forPluginIdentifier","updateSelectedArrows","update","updateArtboardArrows","updateAllArrows","deleteSelectedArrows","deleteArtboardArrows","deleteAllArrows","level","isUpdate","newConnectionsData","firstObjectArtboard","secondObjectArtboard","i","updateArrow","sketchObject","parentArtboard","lineID","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","getImportableSymbolReferencesForDocument","name","includes","alert","symbolMaster","import","createNewInstance","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","fixGeometryWithOptions","id","conditionObject","selectedGroup","remove","dataArray","connectionIndexArray","data","splice","defineSourceObject","groupName","addLayers","Group","group","locked","moveToBack","adjustToFit","lineObject","localStyle","getLayerStyles","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","allStyles","allLayerStyles","styles"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch';\nimport { drawConnection } from \"./draw.js\";\n\nvar Settings = require('sketch/settings');\n\n\n// Main Function\n\nexport function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition, document, docData) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID, document) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection, document);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection, document);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition, document, docData);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n return connection;\n}\n\nfunction getDirection(firstObjectID, secondObjectID, document){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction, document){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction, document){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}","import sketch from 'sketch';\nimport { styleLine } from \"./utilities/styling.js\";\nimport { addCondition, updateCondition } from \"./utilities/conditions.js\";\nimport { checkForGroup, addToArrowsGroup } from \"./utilities/groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\n// Main Function\n\nexport function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition, document, docData){ // Refactored\n // Process of creating new connection \n let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection, currentParentGroup);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n\n // Condition\n if(isCondition == true){\n if(document.getLayerWithID(conditionID)){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY, document, docData);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY, document, docData);\n }\n } else {\n connection.conditionID = null;\n }\n \n // Style\n connection.style = styleLine(connection.line, style, docData);\n\n // Add to group\n addToArrowsGroup(connection.line, currentParentGroup);\n \n return connection\n}\n\n// Positions\n\nfunction getConnectionPos(firstObject, secondObject, direction, currentParentGroup){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\", currentParentGroup);\n let diffX, diffY;\n \n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n \n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n \n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n\n return connectionPos\n}\n\n// Drawing Types\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n \n return line;\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n \n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n \n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n \n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n \n if(firstLayerPosX 1 && selection[0].class() != \"MSArtboardGroup\"){\n let sourceObjectID = getSourceObjectFromSelection(selection, direction);\n let connectionIndex = []\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n\n let firstObjectID = String(sourceObjectID);\n let secondObjectID = String(selection[g].objectID());\n let create = true\n let index\n\n if(connectionsData.length > 0){\n for (let y = 0; y < connectionsData.length; y++) {\n if ((firstObjectID == connectionsData[y].firstObject || firstObjectID == connectionsData[y].secondObject) && (secondObjectID == connectionsData[y].firstObject || secondObjectID == connectionsData[y].secondObject)) {\n // We have this connection and need to update\n create = false;\n index = y;\n connectionIndex.push(y);\n }\n }\n } \n \n if(create){\n // Create\n let connection = createArrow(firstObjectID, secondObjectID, null, null, direction, null, isCondition, document, docData);\n connectionsData.push(connection);\n sketch.UI.message(\"New connection is created 🚀\");\n } else {\n // Update\n deleteLine(connectionsData[index].line, document);\n if (!isCondition) { \n deleteCondition(connectionsData[index].condition, document) \n }\n\n let connection = createArrow(firstObjectID, secondObjectID, null, null, direction, connectionsData[index].condition, isCondition, document, docData);\n connectionsData.push(connection);\n sketch.UI.message(\"Current connection is updated 🤘\");\n }\n }\n }\n if(connectionIndex.length > 0){\n // Update data if there was changes\n connectionsData = deleteConnectionFromData(connectionIndex, connectionsData);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\n \n//\n// Plugin Incoming Commands - Update and Delete\n//\n\nexport function updateSelectedArrows(context) {update(context, 1, true);}\nexport function updateArtboardArrows(context) {update(context, 2, true);}\nexport function updateAllArrows(context) {update(context, 3, true);}\nexport function deleteSelectedArrows(context) {update(context, 1, false);}\nexport function deleteArtboardArrows(context) {update(context, 2, false);}\nexport function deleteAllArrows(context) {update(context, 3, false);}\n\nexport function update(context, level, isUpdate) {\n // 1 - selection level\n // 2 - artboard level\n // 3 - document level\n let newConnectionsData = [];\n let selection = context.selection;\n let firstObjectArtboard;\n let secondObjectArtboard;\n\n\n if (connectionsData.length > 0) {\n for (let i = 0; i < connectionsData.length; i++) {\n \n if (level == 3) {\n if(isUpdate){\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n sketch.UI.message(\"All arrows are updated\");\n } else {\n newConnectionsData = null\n sketch.UI.message(\"All arrows are deleted\");\n }\n }\n if (level == 2) {\n firstObjectArtboard = document.getLayerWithID(connectionsData[i].firstObject);\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID();\n secondObjectArtboard = document.getLayerWithID(connectionsData[i].secondObject);\n secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID();\n\n if (selection.count() == 1 && selection[0].class() == \"MSArtboardGroup\") {\n\n if (firstObjectArtboard == selection[0].objectID()) {\n if (secondObjectArtboard == selection[0].objectID()) {\n updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n }\n }\n sketch.UI.message(\"All arrows are updated 🚀\");\n \n }\n let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition, document, docData);\n connectionsData.push(connection);\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n sketch.UI.message(\"There is no arrows\");\n }\n}\n\n// const track = require(\"sketch-module-google-analytics\")\n// track(\"UA-138226597-1\", \"event\", {\n// ec: \"command\", \n// ea: \"create\", \n// ev: \"my-command\"\n// });\n\n\n\n\n\n","import sketch from 'sketch';\nimport { getConnectionsData, deleteConnectionFromData} from \"./utilities/data.js\"\nimport { deleteLine } from \"./utilities/lines.js\"\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\nlet connectionsData = getConnectionsData(docData);\n\n\n\nexport function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored\n // Need to check if we have the layers with such IDs\n // let firstObject = document.getLayerWithID(firstObjectID);\n // let secondObject = document.getLayerWithID(secondObjectID);\n // let conditionObject = document.getLayerWithID(conditionID);\n // let result = false;\n \n // Need to delete data first, because we will have a new line\n // deleteLine(lineID);\n // if(conditionID && !isCondition){\n // if(conditionObject){conditionObject.remove();}\n // }\n \n connectionsData = deleteConnectionFromData(connectionIndex);\n\n // if(firstObject && secondObject){\n // // If we have all the objects, we can recreate the line\n // result = true;\n // }\n\n // return result;\n}","import sketch from 'sketch';\nimport { addToConditionGroup, checkForGroup } from \"./groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\n// let docData = context.document.documentData();\n// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\nexport function addCondition(keyword, x, y, document, docData) {\n let libraries = sketch.getLibraries();\n let libraryObject, symbolReferences, symbol;\n let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n for (let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(\n document\n );\n for (let i = 0; i < symbolReferences.length; i++) {\n if (symbolReferences[i].name.includes(keyword)) {\n libraryObject = symbolReferences[i];\n }\n }\n }\n\n if (libraryObject == null) {\n symbol = null;\n UI.alert(\n \"Condition symbol is not found\",\n 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here'\n );\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y, currentParentGroup);\n }\n return symbol;\n}\n\nexport function updateCondition(conditionID, x, y, document, docData) {\n let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n let condition = document.getLayerWithID(conditionID);\n let conGroup = checkForGroup(\"Conditions\", currentParentGroup);\n let arGroup = checkForGroup(\"Arrows\", currentParentGroup);\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n }\n return condition.id;\n}\n\nexport function deleteCondition(conditionID, document) {\n let conditionObject = document.getLayerWithID(conditionID);\n let selectedGroup;\n if(conditionObject){\n selectedGroup = conditionObject.parent;\n conditionObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n }\n \n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\n\n\nexport function getConnectionsData(docData) {\n let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n let dataArray = [];\n\n if (pluginData) {\n for (let i = 0; i < pluginData.length; i++) {\n dataArray.push(pluginData[i]);\n }\n }\n return dataArray;\n}\n\nexport function deleteConnectionFromData(connectionIndexArray, data){\n if(data){\n for (let i = connectionIndexArray.length -1; i >= 0; i--) {\n data.splice(connectionIndexArray[i],1);\n }\n }\n return data;\n}\n","import sketch from 'sketch';\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function getSourceObjectFromSelection(selection, direction){\n let sourceObjectID = selection.firstObject().objectID();\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction);\n }\n }\n return sourceObjectID;\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){\n \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let sourceObjectID;\n\n if(direction == \"Right\"){\n if(firstObjectAbsPos.x <= secondObjectAbsPos.x){ // We need to get the doc position\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.y <= secondObjectAbsPos.y){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Left\"){\n if(firstObjectAbsPos.x <= secondObjectAbsPos.x){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n if(direction == \"Up\"){\n if(firstObjectAbsPos.y <= secondObjectAbsPos.y){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n return sourceObjectID;\n}","import sketch from 'sketch';\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function checkForGroup(groupName, currentParentGroup) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n\n return currentGroup;\n}\n\nexport function addToArrowsGroup(line, currentParentGroup){\n let currentGroup = checkForGroup(\"Arrows\", currentParentGroup);\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nexport function addToConditionGroup(condition, x, y, currentParentGroup) {\n let conGroup = checkForGroup(\"Conditions\", currentParentGroup);\n let arGroup = checkForGroup(\"Arrows\", currentParentGroup);\n \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2 + arGroupX;\n condition.frame.y = y - condition.frame.height / 2 + arGroupY;\n let Group = require(\"sketch/dom\").Group;\n let group = new Group({\n parent: currentParentGroup,\n name: \"Conditions\",\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n }","import sketch from 'sketch';\nlet UI = require('sketch/ui');\n\nexport function deleteLine(lineID, document){\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n\nexport function styleLine(line, style, docData){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style, docData) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style, docData);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey), docData);\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name, docData) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://exports/webpack/bootstrap","webpack://exports/./src/createArrow.js","webpack://exports/./src/draw.js","webpack://exports/./src/script.js","webpack://exports/./src/updateArrow.js","webpack://exports/./src/utilities/conditions.js","webpack://exports/./src/utilities/data.js","webpack://exports/./src/utilities/getSourceObject.js","webpack://exports/./src/utilities/groups.js","webpack://exports/./src/utilities/lines.js","webpack://exports/./src/utilities/styling.js","webpack://exports/external \"sketch\"","webpack://exports/external \"sketch/dom\"","webpack://exports/external \"sketch/settings\"","webpack://exports/external \"sketch/ui\""],"names":["Settings","require","createArrow","firstObjectID","secondObjectID","style","type","direction","conditionID","isCondition","document","docData","localDirection","getDirection","updateSpacing","autoAlignLayer","arrow","drawConnection","connection","firstObject","secondObject","condition","line","objectID","getLayerWithID","firstObjectMidX","frame","x","width","firstObjectMidY","y","height","secondObjectMidX","secondObjectMidY","diffX","diffY","absDiffX","Math","abs","absDiffY","sourceObjectID","childObjectID","sourceObject","childObject","settingForKey","currentSpacing","sourceMidY","childMidY","sourceMidX","childMidX","diff","UI","currentParentGroup","currentPage","currentArtboard","connectionPos","getConnectionPos","drawAngledLine","firstLayerPosX","firstLayerPosY","middlePosX","middlePosY","secondLayerPosX","secondLayerPosY","drawStraightLine","drawCurvedLine","updateCondition","addCondition","styleLine","addToArrowsGroup","firstObjectAbsPos","changeBasis","from","parent","to","secondObjectAbsPos","currentGroup","checkForGroup","path","NSBezierPath","bezierPath","moveToPoint","NSMakePoint","lineToPoint","MSShapeGroup","layerWithPath","MSPath","pathWithBezierPath","points","layers","cornerRadius","setName","curveMode","hasCurveFrom","hasCurveTo","curveFrom","curveTo","pluginKey","sketch","fromNative","context","documentData","connectionsData","getConnectionsData","createAutoArrow","create","createRightArrow","createDownArrow","createLeftArrow","createUpArrow","createRightArrowWithCondition","createDownArrowWithCondition","createLeftArrowWithCondition","createUpArrowWithCondition","selection","count","class","getSourceObjectFromSelection","connectionIndex","g","String","index","length","push","message","deleteLine","deleteCondition","deleteConnectionFromData","command","setValue_forKey_onLayer_forPluginIdentifier","updateSelectedArrows","update","updateArtboardArrows","updateAllArrows","deleteSelectedArrows","deleteArtboardArrows","deleteAllArrows","level","isUpdate","newConnectionsData","firstObjectArtboard","secondObjectArtboard","updateArrow","i","sketchObject","parentArtboard","log","pluginData","valueForKey_onLayer_forPluginIdentifier","lineID","conditionObject","remove","keyword","libraries","getLibraries","libraryObject","symbolReferences","symbol","getImportableSymbolReferencesForDocument","name","includes","alert","symbolMaster","import","createNewInstance","addToConditionGroup","conGroup","arGroup","arGroupX","arGroupY","fixGeometryWithOptions","id","selectedGroup","dataArray","connectionIndexArray","data","splice","defineSourceObject","groupName","addLayers","Group","group","locked","moveToBack","adjustToFit","lineObject","localStyle","getLayerStyles","ownStyle","sharedStyle","border","addStylePartOfType","color","MSColor","colorWithRGBADictionary","r","b","a","thickness","endMarkerType","allStyles","allLayerStyles","styles"],"mappings":"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","file":"script.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/script.js\");\n","import sketch from 'sketch';\nimport { drawConnection } from \"./draw.js\";\n\nvar Settings = require('sketch/settings');\n\n\n// Main Function\n\nexport function createArrow(firstObjectID, secondObjectID, style, type, direction, conditionID, isCondition, document, docData) { // Refactored\n let localDirection = direction == \"Auto\" ? getDirection(firstObjectID, secondObjectID, document) : direction;\n\n // Main Operations based on the settings\n updateSpacing(firstObjectID, secondObjectID, localDirection, document);\n autoAlignLayer(firstObjectID, secondObjectID, localDirection, document);\n\n // Making an Arrow \n let arrow = drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition, document, docData);\n \n // Storage for current connection\n let connection = {\n firstObject : firstObjectID,\n secondObject : secondObjectID,\n style : arrow.style,\n condition : arrow.conditionID,\n isCondition : isCondition,\n type : arrow.type,\n direction: localDirection,\n line : arrow.line.objectID()\n }\n return connection;\n}\n\nfunction getDirection(firstObjectID, secondObjectID, document){ // Refactored\n // Get direction from the source object\n const firstObject = document.getLayerWithID(firstObjectID);\n const secondObject = document.getLayerWithID(secondObjectID);\n const firstObjectMidX = firstObject.frame.x+firstObject.frame.width/2;\n const firstObjectMidY = firstObject.frame.y+firstObject.frame.height/2;\n const secondObjectMidX = secondObject.frame.x+secondObject.frame.width/2;\n const secondObjectMidY = secondObject.frame.y+secondObject.frame.height/2;\n\n const diffX = firstObjectMidX - secondObjectMidX;\n const diffY = firstObjectMidY - secondObjectMidY;\n const absDiffX = Math.abs(diffX);\n const absDiffY = Math.abs(diffY);\n let direction;\n\n if(secondObjectMidX > firstObjectMidX){\n // Right Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = diffX > diffY ? \"Down\" : \"Right\";\n } else {\n // Top quarter\n direction = absDiffX > absDiffY ? \"Right\" : \"Up\";\n }\n } else {\n // Left Half\n if(secondObjectMidY > firstObjectMidY){\n // Bottom quarter\n direction = absDiffX > absDiffY ? \"Left\" : \"Down\";\n } else {\n // Top quarter\n direction = diffX > diffY ? \"Left\" : \"Up\";\n }\n }\n\n return direction;\n}\n\nfunction updateSpacing(sourceObjectID, childObjectID, direction, document){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n\n if(Settings.settingForKey(\"arrowSpacing\") && Settings.settingForKey(\"arrowSpacing\") != 0){\n let currentSpacing = Settings.settingForKey(\"arrowSpacing\");\n \n if(direction == \"Right\"){\n childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing;\n }\n \n if(direction == \"Down\"){\n childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing;\n }\n \n if(direction == \"Left\"){\n childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing;\n }\n \n if(direction == \"Up\"){\n childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing;\n }\n }\n}\n\nfunction autoAlignLayer(sourceObjectID, childObjectID, direction, document){\n let sourceObject = document.getLayerWithID(sourceObjectID);\n let childObject = document.getLayerWithID(childObjectID);\n let sourceMidY, childMidY, sourceMidX, childMidX, diff;\n\n if(Settings.settingForKey(\"autoAlign\")){\n if(Settings.settingForKey(\"autoAlign\") == true){\n // If user turned on Auto-Align settings\n \n if(direction == \"Right\" || direction == \"Left\"){\n sourceMidY = sourceObject.frame.y + sourceObject.frame.height/2;\n childMidY = childObject.frame.y + childObject.frame.height/2;\n diff = sourceMidY - childMidY;\n if(diff > -6 && diff < 6){childObject.frame.y = childObject.frame.y + diff;}\n }\n \n if(direction == \"Down\" || direction == \"Up\"){\n sourceMidX = sourceObject.frame.x + sourceObject.frame.width/2;\n childMidX = childObject.frame.x + childObject.frame.width/2;\n diff = sourceMidX - childMidX;\n if(diff > -6 && diff < 6){childObject.frame.x = childObject.frame.x + diff;}\n }\n }\n }\n}","import sketch from 'sketch';\nimport { styleLine } from \"./utilities/styling.js\";\nimport { addCondition, updateCondition } from \"./utilities/conditions.js\";\nimport { checkForGroup, addToArrowsGroup } from \"./utilities/groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\n// Main Function\n\nexport function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition, document, docData){ // Refactored\n // Process of creating new connection \n let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let connectionPos = getConnectionPos(firstObject, secondObject, localDirection, currentParentGroup);\n let connection = {\n line: [], \n conditionID: [],\n type: [],\n style: []\n }\n\n // Type \n connection.type = type == null ? Settings.settingForKey(\"arrowType\") : type;\n if(connection.type == \"Angled\" || connection.type == null){ connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Straight\"){ connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n if(connection.type == \"Curved\"){ connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection);}\n\n\n // Condition\n if(isCondition == true){\n if(document.getLayerWithID(conditionID)){\n connection.conditionID = updateCondition(conditionID, connectionPos.middlePosX, connectionPos.middlePosY, document, docData);\n } else {\n connection.conditionID = addCondition(\"#con\", connectionPos.middlePosX, connectionPos.middlePosY, document, docData);\n }\n } else {\n connection.conditionID = null;\n }\n \n // Style\n connection.style = styleLine(connection.line, style, docData);\n\n // Add to group\n addToArrowsGroup(connection.line, currentParentGroup);\n \n return connection\n}\n\n// Positions\n\nfunction getConnectionPos(firstObject, secondObject, direction, currentParentGroup){ // Refactored\n\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let currentGroup = checkForGroup(\"Arrows\", currentParentGroup);\n let diffX, diffY;\n \n if(currentGroup){\n diffX = currentGroup.frame().x();\n diffY = currentGroup.frame().y();\n } else {\n diffX = 0;\n diffY = 0;\n }\n \n let connectionPos = {\n firstLayerPosX: null,\n firstLayerPosY: null, \n secondLayerPosX: null, \n secondLayerPosY: null, \n middlePosX: null, \n middlePosY: null\n }\n \n // Getting all the positions\n if(direction == \"Up\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Right\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Down\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x+firstObjectAbsPos.width/2-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width/2-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n \n if(direction == \"Left\"){\n // First Layer Position Start Point Position\n connectionPos.firstLayerPosX = firstObjectAbsPos.x-diffX;\n connectionPos.firstLayerPosY = firstObjectAbsPos.y+firstObjectAbsPos.height/2-diffY;\n \n // Second Layer Position End Point Position\n connectionPos.secondLayerPosX = secondObjectAbsPos.x+secondObjectAbsPos.width-diffX;\n connectionPos.secondLayerPosY = secondObjectAbsPos.y+secondObjectAbsPos.height/2-diffY;\n \n // Middle Points\n connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX)/2;\n connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY)/2;\n }\n\n return connectionPos\n}\n\n// Drawing Types\n\nfunction drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY));\n path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n points[1].cornerRadius = 20;\n points[2].cornerRadius = 20;\n line.setName(\"Angled Arrow\");\n \n return line;\n}\n\nfunction drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n \n if(direction == \"Up\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Right\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Down\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n if(direction == \"Left\"){\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n }\n \n let line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n line.setName(\"Straight Arrow\");\n \n return line;\n}\n\nfunction drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction){ // Refactored\n let path = NSBezierPath.bezierPath();\n let line;\n \n if(direction == \"Up\"){\n // Connecting points\n path.moveToPoint(NSMakePoint(firstLayerPosX,firstLayerPosY));\n path.lineToPoint(NSMakePoint(secondLayerPosX,secondLayerPosY));\n \n // Painting the line\n line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path));\n let points = line.layers().firstObject().points();\n \n points[0].curveMode = 4;\n points[1].curveMode = 4;\n points[0].hasCurveFrom = true;\n points[1].hasCurveTo = true;\n \n if(firstLayerPosX 1 && selection[0].class() != \"MSArtboardGroup\"){\n let sourceObjectID = getSourceObjectFromSelection(selection, direction);\n let connectionIndex = []\n for(let g = 0; g < selection.count(); g++) {\n if(selection[g].objectID() != sourceObjectID){\n\n let firstObjectID = String(sourceObjectID);\n let secondObjectID = String(selection[g].objectID());\n let create = true\n let index\n\n if(connectionsData.length > 0){\n for (let y = 0; y < connectionsData.length; y++) {\n if ((firstObjectID == connectionsData[y].firstObject || firstObjectID == connectionsData[y].secondObject) && (secondObjectID == connectionsData[y].firstObject || secondObjectID == connectionsData[y].secondObject)) {\n // We have this connection and need to update\n create = false;\n index = y;\n connectionIndex.push(y);\n }\n }\n } \n \n if(create){\n // Create\n let connection = createArrow(firstObjectID, secondObjectID, null, null, direction, null, isCondition, document, docData);\n connectionsData.push(connection);\n sketch.UI.message(\"New connection is created 🚀\");\n } else {\n // Update\n deleteLine(connectionsData[index].line, document);\n if (!isCondition) { \n deleteCondition(connectionsData[index].condition, document) \n }\n\n let connection = createArrow(firstObjectID, secondObjectID, null, null, direction, connectionsData[index].condition, isCondition, document, docData);\n connectionsData.push(connection);\n sketch.UI.message(\"Current connection is updated 🤘\");\n }\n }\n }\n if(connectionIndex.length > 0){\n // Update data if there was changes\n connectionsData = deleteConnectionFromData(connectionIndex, connectionsData);\n }\n context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n // When user didn't select anything\n sketch.UI.message(\"Please select more than two layers. Artboards are coming soon 🥳\");\n }\n}\n\n \n//\n// Plugin Incoming Commands - Update and Delete\n//\n\nexport function updateSelectedArrows(context) {update(context, 1, true);}\nexport function updateArtboardArrows(context) {update(context, 2, true);}\nexport function updateAllArrows(context) {update(context, 3, true);}\nexport function deleteSelectedArrows(context) {update(context, 1, false);}\nexport function deleteArtboardArrows(context) {update(context, 2, false);}\nexport function deleteAllArrows(context) {update(context, 3, false);}\n\nexport function update(context, level, isUpdate) {\n // 1 - selection level\n // 2 - artboard level\n // 3 - document level\n let newConnectionsData = [];\n let selection = context.selection;\n let firstObjectArtboard;\n let secondObjectArtboard;\n\n\n if (connectionsData.length > 0) {\n \n if (level == 3) {\n if(isUpdate){\n newConnectionsData = updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n sketch.UI.message(\"All arrows are updated\");\n } else {\n for (let i = 0; i < connectionsData.length; i++) {\n deleteLine(connectionsData[i].line, document);\n deleteCondition(connectionsData[i].condition, document) \n newConnectionsData = null;\n }\n }\n }\n if (level == 2) {\n\n\n if(isUpdate){\n // Need to update\n } else {\n for (let i = 0; i < connectionsData.length; i++) {\n if(selection[0].class() == \"MSArtboardGroup\") {\n firstObjectArtboard = document.getLayerWithID(connectionsData[i].firstObject);\n firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID();\n if(firstObjectArtboard == selection[0].objectID()){\n deleteLine(connectionsData[i].line, document);\n deleteCondition(connectionsData[i].condition, document);\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n } else {\n sketch.UI.message(\"Please select an artboard\");\n }\n }\n }\n }\n if (level == 1) {\n if(isUpdate){\n // updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i);\n // sketch.UI.message(\"All arrows are updated\");\n } else {\n for (let i = 0; i < connectionsData.length; i++) {\n if(selection[0].objectID() == connectionsData[i].firstObject) {\n log(\"here\")\n deleteLine(connectionsData[i].line, document);\n deleteCondition(connectionsData[i].condition, document);\n } else {\n newConnectionsData.push(connectionsData[i]);\n }\n }\n newConnectionsData = null\n sketch.UI.message(\"All arrows are deleted\");\n }\n }\n sketch.UI.message(\"All arrows are updated 🚀\");\n \n \n // let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition, document, docData);\n // connectionsData.push(connection);\n context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, \"arrowConnections\", docData, pluginKey);\n } else {\n sketch.UI.message(\"There is no arrows\");\n }\n}\n\n// const track = require(\"sketch-module-google-analytics\")\n// track(\"UA-138226597-1\", \"event\", {\n// ec: \"command\", \n// ea: \"create\", \n// ev: \"my-command\"\n// });\n\n\n\n\n\n","import sketch from 'sketch';\nimport { getConnectionsData, deleteConnectionFromData} from \"./utilities/data.js\"\nimport { deleteLine } from \"./utilities/lines.js\"\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\nconst pluginKey = \"flowArrows\";\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); // TODO: Might be a problem for multiple artboards\nlet connectionsData = getConnectionsData(docData);\n\n\n\nexport function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) {\n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let conditionObject = document.getLayerWithID(conditionID);\n let connection = [];\n\n deleteLine(lineID);\n\n if(conditionID && !isCondition){\n if(conditionObject){conditionObject.remove();}\n }\n \n connectionsData = deleteConnectionFromData(connectionIndex);\n\n if(firstObject && secondObject){\n connection = createArrow(\n connectionsData[connectionIndex[x]].firstObject, \n connectionsData[connectionIndex[x]].secondObject, \n connectionsData[connectionIndex[x]].style,\n connectionsData[connectionIndex[x]].type, \n connectionsData[connectionIndex[x]].direction, \n connectionsData[connectionIndex[x]].condition, \n connectionsData[connectionIndex[x]].isCondition,\n document, \n docData\n );\n }\n\n return connection;\n}","import sketch from 'sketch';\nimport { addToConditionGroup, checkForGroup } from \"./groups.js\";\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\n// let docData = context.document.documentData();\n// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\nexport function addCondition(keyword, x, y, document, docData) {\n let libraries = sketch.getLibraries();\n let libraryObject, symbolReferences, symbol;\n let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n for (let g = 0; g < libraries.length; g++) {\n symbolReferences = libraries[g].getImportableSymbolReferencesForDocument(\n document\n );\n for (let i = 0; i < symbolReferences.length; i++) {\n if (symbolReferences[i].name.includes(keyword)) {\n libraryObject = symbolReferences[i];\n }\n }\n }\n\n if (libraryObject == null) {\n symbol = null;\n UI.alert(\n \"Condition symbol is not found\",\n 'If you would like to add arrows with specific conditions, you need to specify them in your libraries. You can download the library that works well with the plugin by going into Plugins -> Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as \"#condition\" so it will be added here'\n );\n } else {\n let symbolMaster = libraryObject.import();\n symbol = symbolMaster.createNewInstance();\n symbol = addToConditionGroup(symbol, x, y, currentParentGroup);\n }\n return symbol;\n}\n\nexport function updateCondition(conditionID, x, y, document, docData) {\n let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n let condition = document.getLayerWithID(conditionID);\n let conGroup = checkForGroup(\"Conditions\", currentParentGroup);\n let arGroup = checkForGroup(\"Arrows\", currentParentGroup);\n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2;\n condition.frame.y = y - condition.frame.height / 2;\n }\n return condition.id;\n}\n\nexport function deleteCondition(conditionID, document) {\n let conditionObject = document.getLayerWithID(conditionID);\n let selectedGroup;\n if(conditionObject){\n selectedGroup = conditionObject.parent;\n conditionObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n }\n \n","import sketch from 'sketch';\n\nlet UI = require('sketch/ui') ;\nvar Settings = require('sketch/settings');\n\nconst pluginKey = \"flowArrows\";\n\n\nexport function getConnectionsData(docData) {\n let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowConnections\", docData, pluginKey);\n let dataArray = [];\n\n if (pluginData) {\n for (let i = 0; i < pluginData.length; i++) {\n dataArray.push(pluginData[i]);\n }\n }\n return dataArray;\n}\n\nexport function deleteConnectionFromData(connectionIndexArray, data){\n if(data){\n for (let i = connectionIndexArray.length -1; i >= 0; i--) {\n data.splice(connectionIndexArray[i],1);\n }\n }\n return data;\n}\n","import sketch from 'sketch';\nlet document = sketch.fromNative(context.document);\nlet docData = context.document.documentData();\nlet currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function getSourceObjectFromSelection(selection, direction){\n let sourceObjectID = selection.firstObject().objectID();\n \n if(direction != \"Auto\"){\n for(let g = 0; g < selection.count(); g++) {\n sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction);\n }\n }\n return sourceObjectID;\n}\n\nfunction defineSourceObject(firstObjectID, secondObjectID, direction){\n \n let firstObject = document.getLayerWithID(firstObjectID);\n let secondObject = document.getLayerWithID(secondObjectID);\n let firstObjectAbsPos = firstObject.frame.changeBasis({from: firstObject.parent, to: currentParentGroup});\n let secondObjectAbsPos = secondObject.frame.changeBasis({from: secondObject.parent, to: currentParentGroup});\n let sourceObjectID;\n\n if(direction == \"Right\"){\n if(firstObjectAbsPos.x <= secondObjectAbsPos.x){ // We need to get the doc position\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Down\"){\n if(firstObject.y <= secondObjectAbsPos.y){\n sourceObjectID = firstObject.id;\n } else {\n sourceObjectID = secondObject.id;\n }\n }\n\n if(direction == \"Left\"){\n if(firstObjectAbsPos.x <= secondObjectAbsPos.x){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n if(direction == \"Up\"){\n if(firstObjectAbsPos.y <= secondObjectAbsPos.y){\n sourceObjectID = secondObject.id;\n } else {\n sourceObjectID = firstObject.id;\n }\n }\n\n return sourceObjectID;\n}","import sketch from 'sketch';\nlet Settings = require('sketch/settings');\nlet UI = require('sketch/ui') ;\n\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage();\n\n\nexport function checkForGroup(groupName, currentParentGroup) { // refactored\n let currentGroup = null;\n \n // Checking all the groups that we have\n for(let i = 0; i < currentParentGroup.layers().count(); i++){\n if(currentParentGroup.layers()[i].name() == groupName) {\n currentGroup = currentParentGroup.layers()[i];\n } \n }\n\n return currentGroup;\n}\n\nexport function addToArrowsGroup(line, currentParentGroup){\n let currentGroup = checkForGroup(\"Arrows\", currentParentGroup);\n if(currentGroup){\n currentGroup.addLayers([line]);\n currentGroup.fixGeometryWithOptions(1);\n } else {\n let Group = require('sketch/dom').Group;\n let group = new Group({\n parent: currentParentGroup,\n name: 'Arrows',\n locked: true,\n layers: [line]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n}\n\nexport function addToConditionGroup(condition, x, y, currentParentGroup) {\n let conGroup = checkForGroup(\"Conditions\", currentParentGroup);\n let arGroup = checkForGroup(\"Arrows\", currentParentGroup);\n \n let arGroupX = arGroup != null ? arGroup.frame().x() : 0;\n let arGroupY = arGroup != null ? arGroup.frame().y() : 0;\n\n if (conGroup) {\n condition.frame.x =\n x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX);\n condition.frame.y =\n y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY);\n condition.parent = conGroup;\n conGroup.fixGeometryWithOptions(1);\n } else {\n condition.frame.x = x - condition.frame.width / 2 + arGroupX;\n condition.frame.y = y - condition.frame.height / 2 + arGroupY;\n let Group = require(\"sketch/dom\").Group;\n let group = new Group({\n parent: currentParentGroup,\n name: \"Conditions\",\n layers: [condition]\n });\n group.moveToBack();\n group.adjustToFit();\n }\n return condition.id;\n }","import sketch from 'sketch';\nlet UI = require('sketch/ui');\n\nexport function deleteLine(lineID, document){\n let lineObject = document.getLayerWithID(lineID);\n let selectedGroup;\n if(lineObject){\n selectedGroup = lineObject.parent;\n lineObject.remove();\n if(selectedGroup.layers.length == 0){\n selectedGroup.remove();\n }\n }\n}\n","import sketch from 'sketch';\nconst pluginKey = \"flowArrows\";\n// let document = sketch.fromNative(context.document);\n// let docData = context.document.documentData();\n\nexport function styleLine(line, style, docData){ // Refactored\n let localStyle;\n \n if(style != null){ \n // For updates\n if(getLayerStyles(style, docData) != null && style != \"Default Style\"){\n // If style is specified\n localStyle = style;\n let ownStyle = getLayerStyles(style, docData);\n line.sharedStyle = ownStyle[0];\n } else {\n // if there is no specific style\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n }\n } else {\n // For creating new\n if(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != null && context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey) != \"Default Style\"){\n // we have settins almost all the time and it's not default\n localStyle = getLayerStyles(context.command.valueForKey_onLayer_forPluginIdentifier(\"arrowStyle\", docData, pluginKey), docData);\n line.sharedStyle = localStyle[0];\n localStyle = localStyle[0].name();\n } else {\n localStyle = \"Default Style\";\n let border = line.style().addStylePartOfType(1);\n border.color = MSColor.colorWithRGBADictionary({r: 0.89, g: 0.89, b: 0.89, a: 1});\n border.thickness = 2;\n line.style().endMarkerType = 2;\n } \n }\n \n return localStyle;\n}\n\nexport function getLayerStyles(name, docData) { // Refactored\n let allStyles = docData.allLayerStyles();\n let keyword = \"$arrow\";\n let styles = [];\n \n for(let i = 0; i < allStyles.count(); i++){\n if(name == null) {\n if(allStyles[i].name().includes(keyword)){styles.push(allStyles[i]);}\n } else {\n if(allStyles[i].name() == name){styles.push(allStyles[i]);}\n }\n }\n return styles;\n}","module.exports = require(\"sketch\");","module.exports = require(\"sketch/dom\");","module.exports = require(\"sketch/settings\");","module.exports = require(\"sketch/ui\");"],"sourceRoot":""} \ No newline at end of file diff --git a/src/autoUpdate.js b/src/autoUpdate.js index 0d5b5c3..e91ce46 100644 --- a/src/autoUpdate.js +++ b/src/autoUpdate.js @@ -39,11 +39,9 @@ export function autoUpdateSelectedArrows(context) { ); connectionsData.push(connection); } - } - - if(connectionIndex.length > 0){ connectionsData = deleteConnectionFromData(connectionIndex, connectionsData); } + context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, "arrowConnections", docData, pluginKey); } } diff --git a/src/manifest.json b/src/manifest.json index 383e735..36ce4ac 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -2,7 +2,6 @@ "compatibleVersion": 3, "bundleVersion": 1, "identifier": "me.sabitov.sketch.connectionFlowArrows", - "version": "2.7.1", "icon": "icon.png", "authorEmail": "farid.sabitov.design@gmail.com", "appcast": "https://raw.githubusercontent.com/faridsabitov/Sketch-Connection-Flow-Arrows/master/.appcast.xml", @@ -208,22 +207,6 @@ "createUpArrowWithCondition" ] }, - { - "title": "Update Connection Positions", - "items": [ - "updateSelectedArrows", - "updateArtboardArrows", - "updateAllArrows" - ] - }, - { - "title": "Delete Connection", - "items": [ - "deleteSelectedArrows", - "deleteArtboardArrows", - "deleteAllArrows" - ] - }, "settings", "-", "getLibrary", diff --git a/src/script.js b/src/script.js index e288a2d..e6ce127 100644 --- a/src/script.js +++ b/src/script.js @@ -17,8 +17,8 @@ const pluginKey = "flowArrows"; let document = sketch.fromNative(context.document); let docData = context.document.documentData(); -let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); -let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); +// let pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); +// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); let connectionsData = getConnectionsData(docData); @@ -115,44 +115,67 @@ export function update(context, level, isUpdate) { if (connectionsData.length > 0) { - for (let i = 0; i < connectionsData.length; i++) { - - if (level == 3) { - if(isUpdate){ - updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i); - sketch.UI.message("All arrows are updated"); - } else { - newConnectionsData = null - sketch.UI.message("All arrows are deleted"); - } + + if (level == 3) { + if(isUpdate){ + newConnectionsData = updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i); + sketch.UI.message("All arrows are updated"); + } else { + for (let i = 0; i < connectionsData.length; i++) { + deleteLine(connectionsData[i].line, document); + deleteCondition(connectionsData[i].condition, document) + newConnectionsData = null; + } + } + } + if (level == 2) { + + + if(isUpdate){ + // Need to update + } else { + for (let i = 0; i < connectionsData.length; i++) { + if(selection[0].class() == "MSArtboardGroup") { + firstObjectArtboard = document.getLayerWithID(connectionsData[i].firstObject); + firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID(); + if(firstObjectArtboard == selection[0].objectID()){ + deleteLine(connectionsData[i].line, document); + deleteCondition(connectionsData[i].condition, document); + } else { + newConnectionsData.push(connectionsData[i]); + } + } else { + sketch.UI.message("Please select an artboard"); } - if (level == 2) { - firstObjectArtboard = document.getLayerWithID(connectionsData[i].firstObject); - firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID(); - secondObjectArtboard = document.getLayerWithID(connectionsData[i].secondObject); - secondObjectArtboard = secondObjectArtboard.sketchObject.parentArtboard().objectID(); - - if (selection.count() == 1 && selection[0].class() == "MSArtboardGroup") { - - if (firstObjectArtboard == selection[0].objectID()) { - if (secondObjectArtboard == selection[0].objectID()) { - updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i); - } else { - newConnectionsData.push(connectionsData[i]); - } - } else { - newConnectionsData.push(connectionsData[i]); - } - } + } + } + } + if (level == 1) { + if(isUpdate){ + // updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i); + // sketch.UI.message("All arrows are updated"); + } else { + for (let i = 0; i < connectionsData.length; i++) { + if(selection[0].objectID() == connectionsData[i].firstObject) { + log("here") + deleteLine(connectionsData[i].line, document); + deleteCondition(connectionsData[i].condition, document); + } else { + newConnectionsData.push(connectionsData[i]); } - sketch.UI.message("All arrows are updated 🚀"); - + } + newConnectionsData = null + sketch.UI.message("All arrows are deleted"); } - let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition, document, docData); - connectionsData.push(connection); - context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, "arrowConnections", docData, pluginKey); + } + sketch.UI.message("All arrows are updated 🚀"); + + + // let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition, document, docData); + // connectionsData.push(connection); + context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); } else { - sketch.UI.message("There is no arrows"); + sketch.UI.message("There is no arrows"); } } diff --git a/src/updateArrow.js b/src/updateArrow.js index 1a9f5d2..6c2a41a 100644 --- a/src/updateArrow.js +++ b/src/updateArrow.js @@ -13,25 +13,33 @@ let connectionsData = getConnectionsData(docData); -export function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { // Refactored - // Need to check if we have the layers with such IDs - // let firstObject = document.getLayerWithID(firstObjectID); - // let secondObject = document.getLayerWithID(secondObjectID); - // let conditionObject = document.getLayerWithID(conditionID); - // let result = false; - - // Need to delete data first, because we will have a new line - // deleteLine(lineID); - // if(conditionID && !isCondition){ - // if(conditionObject){conditionObject.remove();} - // } +export function updateArrow(firstObjectID, secondObjectID, style, type, direction, lineID, conditionID, isCondition, connectionIndex) { + let firstObject = document.getLayerWithID(firstObjectID); + let secondObject = document.getLayerWithID(secondObjectID); + let conditionObject = document.getLayerWithID(conditionID); + let connection = []; + + deleteLine(lineID); + + if(conditionID && !isCondition){ + if(conditionObject){conditionObject.remove();} + } connectionsData = deleteConnectionFromData(connectionIndex); - // if(firstObject && secondObject){ - // // If we have all the objects, we can recreate the line - // result = true; - // } + if(firstObject && secondObject){ + connection = createArrow( + connectionsData[connectionIndex[x]].firstObject, + connectionsData[connectionIndex[x]].secondObject, + connectionsData[connectionIndex[x]].style, + connectionsData[connectionIndex[x]].type, + connectionsData[connectionIndex[x]].direction, + connectionsData[connectionIndex[x]].condition, + connectionsData[connectionIndex[x]].isCondition, + document, + docData + ); + } - // return result; + return connection; } \ No newline at end of file From bbb30eca6e32b5b914aa4ae1060584a196021676 Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Wed, 31 Jul 2019 23:02:24 +0300 Subject: [PATCH 42/44] Publish 3.0.0 release :rocket: --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index b4c575b..e40db7f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "arrows", - "version": "2.7.1", + "version": "3.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 601e9ba..e3628c4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "arrows", - "version": "2.7.1", + "version": "3.0.0", "engines": { "sketch": ">=3.0" }, From bb960de8bad20fe7662d097a290bc2d8dacaa977 Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Wed, 31 Jul 2019 23:02:24 +0300 Subject: [PATCH 43/44] Update .appcast with new tag :sparkles: --- .appcast.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.appcast.xml b/.appcast.xml index 1dbf0b5..2650281 100644 --- a/.appcast.xml +++ b/.appcast.xml @@ -1,6 +1,9 @@ + + + From 5418783d03d20276bc7723633649da0bc4068c02 Mon Sep 17 00:00:00 2001 From: Farid Sabitov Date: Wed, 31 Jul 2019 23:02:50 +0300 Subject: [PATCH 44/44] skpm --- .../Contents/Sketch/autoUpdate.js | 1111 +------------ arrows.sketchplugin/Contents/Sketch/links.js | 124 +- .../Contents/Sketch/manifest.json | 2 +- arrows.sketchplugin/Contents/Sketch/script.js | 1427 +---------------- .../Contents/Sketch/settings.js | 436 +---- 5 files changed, 37 insertions(+), 3063 deletions(-) diff --git a/arrows.sketchplugin/Contents/Sketch/autoUpdate.js b/arrows.sketchplugin/Contents/Sketch/autoUpdate.js index fb4e336..86c9c96 100644 --- a/arrows.sketchplugin/Contents/Sketch/autoUpdate.js +++ b/arrows.sketchplugin/Contents/Sketch/autoUpdate.js @@ -1,1134 +1,49 @@ -var that = this; -function __skpm_run (key, context) { - that.context = context; - -var exports = -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // create a fake namespace object -/******/ // mode & 1: value is a module id, require it -/******/ // mode & 2: merge all properties of value into the ns -/******/ // mode & 4: return value when already ns object -/******/ // mode & 8|1: behave like require -/******/ __webpack_require__.t = function(value, mode) { -/******/ if(mode & 1) value = __webpack_require__(value); -/******/ if(mode & 8) return value; -/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; -/******/ var ns = Object.create(null); -/******/ __webpack_require__.r(ns); -/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); -/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); -/******/ return ns; -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = "./src/autoUpdate.js"); -/******/ }) -/************************************************************************/ -/******/ ({ - -/***/ "./src/autoUpdate.js": +var that=this;function __skpm_run(e,t){that.context=t;var r=function(e){var t={};function r(o){if(t[o])return t[o].exports;var n=t[o]={i:o,l:!1,exports:{}};return e[o].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return r.m=e,r.c=t,r.d=function(e,t,o){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(r.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)r.d(o,n,function(t){return e[t]}.bind(null,n));return o},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s="./src/autoUpdate.js")}({"./src/autoUpdate.js": /*!***************************!*\ !*** ./src/autoUpdate.js ***! \***************************/ -/*! exports provided: autoUpdateSelectedArrows */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "autoUpdateSelectedArrows", function() { return autoUpdateSelectedArrows; }); -/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); -/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _utilities_lines_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utilities/lines.js */ "./src/utilities/lines.js"); -/* harmony import */ var _createArrow_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./createArrow.js */ "./src/createArrow.js"); -/* harmony import */ var _utilities_data_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utilities/data.js */ "./src/utilities/data.js"); - - -var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); - -var pluginKey = "flowArrows"; - - - - -var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); - -function autoUpdateSelectedArrows(context) { - if (Settings.settingForKey("autoDraw") != false) { - var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.actionContext.document); - var action = context.actionContext; - var docData = action.document.documentData(); - var connectionsData = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_3__["getConnectionsData"])(docData); - var movedLayers = Array.from(context.actionContext.layers).map(function (layer) { - return sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(layer); - }); - var firstObjectID = String(movedLayers[0].id); - var connectionIndex = []; - connectionIndex = getIndex(connectionsData, firstObjectID); - - if (connectionIndex.length > 0) { - for (var x = 0; x < connectionIndex.length; x++) { - Object(_utilities_lines_js__WEBPACK_IMPORTED_MODULE_1__["deleteLine"])(connectionsData[connectionIndex[x]].line, document); - var connection = Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_2__["createArrow"])(connectionsData[connectionIndex[x]].firstObject, connectionsData[connectionIndex[x]].secondObject, connectionsData[connectionIndex[x]].style, connectionsData[connectionIndex[x]].type, connectionsData[connectionIndex[x]].direction, connectionsData[connectionIndex[x]].condition, connectionsData[connectionIndex[x]].isCondition, document, docData); - connectionsData.push(connection); - } - - connectionsData = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_3__["deleteConnectionFromData"])(connectionIndex, connectionsData); - } - - context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, "arrowConnections", docData, pluginKey); - } -} - -function getIndex(connectionsData, firstObjectID) { - var connectionIndex = []; - - if (connectionsData.length > 0) { - for (var y = 0; y < connectionsData.length; y++) { - if (firstObjectID == connectionsData[y].firstObject || firstObjectID == connectionsData[y].secondObject) { - connectionIndex.push(y); - } - } - } - - return connectionIndex; -} - -/***/ }), - -/***/ "./src/createArrow.js": +/*! exports provided: autoUpdateSelectedArrows */function(e,t,r){"use strict";r.r(t),r.d(t,"autoUpdateSelectedArrows",function(){return l});var o=r(/*! sketch */"sketch"),n=r.n(o),i=r(/*! ./utilities/lines.js */"./src/utilities/lines.js"),a=r(/*! ./createArrow.js */"./src/createArrow.js"),s=r(/*! ./utilities/data.js */"./src/utilities/data.js"),c=(r(/*! sketch/ui */"sketch/ui"),"flowArrows"),u=r(/*! sketch/settings */"sketch/settings");function l(e){if(0!=u.settingForKey("autoDraw")){var t,r=n.a.fromNative(e.actionContext.document),o=e.actionContext.document.documentData(),l=Object(s.getConnectionsData)(o),d=Array.from(e.actionContext.layers).map(function(e){return n.a.fromNative(e)});if((t=function(e,t){var r=[];if(e.length>0)for(var o=0;o0){for(var f=0;f firstObjectMidX) { - // Right Half - if (secondObjectMidY > firstObjectMidY) { - // Bottom quarter - direction = diffX > diffY ? "Down" : "Right"; - } else { - // Top quarter - direction = absDiffX > absDiffY ? "Right" : "Up"; - } - } else { - // Left Half - if (secondObjectMidY > firstObjectMidY) { - // Bottom quarter - direction = absDiffX > absDiffY ? "Left" : "Down"; - } else { - // Top quarter - direction = diffX > diffY ? "Left" : "Up"; - } - } - - return direction; -} - -function updateSpacing(sourceObjectID, childObjectID, direction, document) { - var sourceObject = document.getLayerWithID(sourceObjectID); - var childObject = document.getLayerWithID(childObjectID); - - if (Settings.settingForKey("arrowSpacing") && Settings.settingForKey("arrowSpacing") != 0) { - var currentSpacing = Settings.settingForKey("arrowSpacing"); - - if (direction == "Right") { - childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing; - } - - if (direction == "Down") { - childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing; - } - - if (direction == "Left") { - childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing; - } - - if (direction == "Up") { - childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing; - } - } -} - -function autoAlignLayer(sourceObjectID, childObjectID, direction, document) { - var sourceObject = document.getLayerWithID(sourceObjectID); - var childObject = document.getLayerWithID(childObjectID); - var sourceMidY, childMidY, sourceMidX, childMidX, diff; - - if (Settings.settingForKey("autoAlign")) { - if (Settings.settingForKey("autoAlign") == true) { - // If user turned on Auto-Align settings - if (direction == "Right" || direction == "Left") { - sourceMidY = sourceObject.frame.y + sourceObject.frame.height / 2; - childMidY = childObject.frame.y + childObject.frame.height / 2; - diff = sourceMidY - childMidY; - - if (diff > -6 && diff < 6) { - childObject.frame.y = childObject.frame.y + diff; - } - } - - if (direction == "Down" || direction == "Up") { - sourceMidX = sourceObject.frame.x + sourceObject.frame.width / 2; - childMidX = childObject.frame.x + childObject.frame.width / 2; - diff = sourceMidX - childMidX; - - if (diff > -6 && diff < 6) { - childObject.frame.x = childObject.frame.x + diff; - } - } - } - } -} - -/***/ }), - -/***/ "./src/draw.js": +/*! exports provided: createArrow */function(e,t,r){"use strict";r.r(t),r.d(t,"createArrow",function(){return i});r(/*! sketch */"sketch");var o=r(/*! ./draw.js */"./src/draw.js"),n=r(/*! sketch/settings */"sketch/settings");function i(e,t,r,i,a,s,c,u,l){var d="Auto"==a?function(e,t,r){var o,n=r.getLayerWithID(e),i=r.getLayerWithID(t),a=n.frame.x+n.frame.width/2,s=n.frame.y+n.frame.height/2,c=i.frame.x+i.frame.width/2,u=i.frame.y+i.frame.height/2,l=a-c,d=s-u,f=Math.abs(l),y=Math.abs(d);o=c>a?u>s?l>d?"Down":"Right":f>y?"Right":"Up":u>s?f>y?"Left":"Down":l>d?"Left":"Up";return o}(e,t,u):a;!function(e,t,r,o){var i=o.getLayerWithID(e),a=o.getLayerWithID(t);if(n.settingForKey("arrowSpacing")&&0!=n.settingForKey("arrowSpacing")){var s=n.settingForKey("arrowSpacing");"Right"==r&&(a.frame.x=i.frame.x+i.frame.width+s),"Down"==r&&(a.frame.y=i.frame.y+i.frame.height+s),"Left"==r&&(a.frame.x=i.frame.x-a.frame.width-s),"Up"==r&&(a.frame.y=i.frame.y-a.frame.height-s)}}(e,t,d,u),function(e,t,r,o){var i,a,s,c,u,l=o.getLayerWithID(e),d=o.getLayerWithID(t);n.settingForKey("autoAlign")&&1==n.settingForKey("autoAlign")&&("Right"!=r&&"Left"!=r||(i=l.frame.y+l.frame.height/2,a=d.frame.y+d.frame.height/2,(u=i-a)>-6&&u<6&&(d.frame.y=d.frame.y+u)),"Down"!=r&&"Up"!=r||(s=l.frame.x+l.frame.width/2,c=d.frame.x+d.frame.width/2,(u=s-c)>-6&&u<6&&(d.frame.x=d.frame.x+u)))}(e,t,d,u);var f=Object(o.drawConnection)(e,t,r,i,d,s,c,u,l);return{firstObject:e,secondObject:t,style:f.style,condition:f.conditionID,isCondition:c,type:f.type,direction:d,line:f.line.objectID()}}},"./src/draw.js": /*!*********************!*\ !*** ./src/draw.js ***! \*********************/ -/*! exports provided: drawConnection */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "drawConnection", function() { return drawConnection; }); -/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); -/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _utilities_styling_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utilities/styling.js */ "./src/utilities/styling.js"); -/* harmony import */ var _utilities_conditions_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utilities/conditions.js */ "./src/utilities/conditions.js"); -/* harmony import */ var _utilities_groups_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utilities/groups.js */ "./src/utilities/groups.js"); - - - - - -var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); - -var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); // let document = sketch.fromNative(context.document); -// let docData = context.document.documentData(); -// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); -// Main Function - - -function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition, document, docData) { - // Refactored - // Process of creating new connection - var currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); - var firstObject = document.getLayerWithID(firstObjectID); - var secondObject = document.getLayerWithID(secondObjectID); - var connectionPos = getConnectionPos(firstObject, secondObject, localDirection, currentParentGroup); - var connection = { - line: [], - conditionID: [], - type: [], - style: [] // Type - - }; - connection.type = type == null ? Settings.settingForKey("arrowType") : type; - - if (connection.type == "Angled" || connection.type == null) { - connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection); - } - - if (connection.type == "Straight") { - connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection); - } - - if (connection.type == "Curved") { - connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection); - } // Condition - - - if (isCondition == true) { - if (document.getLayerWithID(conditionID)) { - connection.conditionID = Object(_utilities_conditions_js__WEBPACK_IMPORTED_MODULE_2__["updateCondition"])(conditionID, connectionPos.middlePosX, connectionPos.middlePosY, document, docData); - } else { - connection.conditionID = Object(_utilities_conditions_js__WEBPACK_IMPORTED_MODULE_2__["addCondition"])("#con", connectionPos.middlePosX, connectionPos.middlePosY, document, docData); - } - } else { - connection.conditionID = null; - } // Style - - - connection.style = Object(_utilities_styling_js__WEBPACK_IMPORTED_MODULE_1__["styleLine"])(connection.line, style, docData); // Add to group - - Object(_utilities_groups_js__WEBPACK_IMPORTED_MODULE_3__["addToArrowsGroup"])(connection.line, currentParentGroup); - return connection; -} // Positions - -function getConnectionPos(firstObject, secondObject, direction, currentParentGroup) { - // Refactored - var firstObjectAbsPos = firstObject.frame.changeBasis({ - from: firstObject.parent, - to: currentParentGroup - }); - var secondObjectAbsPos = secondObject.frame.changeBasis({ - from: secondObject.parent, - to: currentParentGroup - }); - var currentGroup = Object(_utilities_groups_js__WEBPACK_IMPORTED_MODULE_3__["checkForGroup"])("Arrows", currentParentGroup); - var diffX, diffY; - - if (currentGroup) { - diffX = currentGroup.frame().x(); - diffY = currentGroup.frame().y(); - } else { - diffX = 0; - diffY = 0; - } - - var connectionPos = { - firstLayerPosX: null, - firstLayerPosY: null, - secondLayerPosX: null, - secondLayerPosY: null, - middlePosX: null, - middlePosY: null // Getting all the positions - - }; - - if (direction == "Up") { - // First Layer Position Start Point Position - connectionPos.firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; - connectionPos.firstLayerPosY = firstObjectAbsPos.y - diffY; // Second Layer Position End Point Position - - connectionPos.secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; - connectionPos.secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height - diffY; // Middle Points - - connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; - connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; - } - - if (direction == "Right") { - // First Layer Position Start Point Position - connectionPos.firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width - diffX; - connectionPos.firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position - - connectionPos.secondLayerPosX = secondObjectAbsPos.x - diffX; - connectionPos.secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points - - connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; - connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; - } - - if (direction == "Down") { - // First Layer Position Start Point Position - connectionPos.firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; - connectionPos.firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height - diffY; // Second Layer Position End Point Position - - connectionPos.secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; - connectionPos.secondLayerPosY = secondObjectAbsPos.y - diffY; // Middle Points - - connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; - connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; - } - - if (direction == "Left") { - // First Layer Position Start Point Position - connectionPos.firstLayerPosX = firstObjectAbsPos.x - diffX; - connectionPos.firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position - - connectionPos.secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width - diffX; - connectionPos.secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points - - connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; - connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; - } - - return connectionPos; -} // Drawing Types - - -function drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction) { - // Refactored - var path = NSBezierPath.bezierPath(); - - if (direction == "Up") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - if (direction == "Right") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - if (direction == "Down") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - if (direction == "Left") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - var line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - var points = line.layers().firstObject().points(); - points[1].cornerRadius = 20; - points[2].cornerRadius = 20; - line.setName("Angled Arrow"); - return line; -} - -function drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction) { - // Refactored - var path = NSBezierPath.bezierPath(); - - if (direction == "Up") { - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - if (direction == "Right") { - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - if (direction == "Down") { - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - if (direction == "Left") { - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - var line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - line.setName("Straight Arrow"); - return line; -} - -function drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction) { - // Refactored - var path = NSBezierPath.bezierPath(); - var line; - - if (direction == "Up") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line - - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - var points = line.layers().firstObject().points(); - points[0].curveMode = 4; - points[1].curveMode = 4; - points[0].hasCurveFrom = true; - points[1].hasCurveTo = true; - - if (firstLayerPosX < secondLayerPosX) { - points[0].curveFrom = { - x: 0, - y: 0.5 - }; - points[0].curveTo = { - x: -0.5, - y: 1 - }; - points[1].curveFrom = { - x: 1, - y: 1 - }; - points[1].curveTo = { - x: 1, - y: 0.5 - }; - } else { - points[0].curveFrom = { - x: 1, - y: 0.5 - }; - points[0].curveTo = { - x: -0.5, - y: 1 - }; - points[1].curveFrom = { - x: 1, - y: 1 - }; - points[1].curveTo = { - x: 0, - y: 0.5 - }; - } - } - - if (direction == "Right") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line - - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - - var _points = line.layers().firstObject().points(); - - _points[0].curveMode = 4; - _points[1].curveMode = 4; - _points[0].hasCurveFrom = true; - _points[1].hasCurveTo = true; - - if (firstLayerPosY < secondLayerPosY) { - _points[0].curveFrom = { - x: 0.5, - y: 0 - }; - _points[0].curveTo = { - x: -0.5, - y: 1 - }; - _points[1].curveFrom = { - x: 1, - y: 1 - }; - _points[1].curveTo = { - x: 0.5, - y: 1 - }; - } else { - _points[0].curveFrom = { - x: 0.5, - y: 1 - }; - _points[0].curveTo = { - x: -0.5, - y: 1 - }; - _points[1].curveFrom = { - x: 1, - y: 1 - }; - _points[1].curveTo = { - x: 0.5, - y: 0 - }; - } - } - - if (direction == "Down") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line - - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - - var _points2 = line.layers().firstObject().points(); - - _points2[0].curveMode = 4; - _points2[1].curveMode = 4; - _points2[0].hasCurveFrom = true; - _points2[1].hasCurveTo = true; - - if (firstLayerPosX < secondLayerPosX) { - _points2[0].curveFrom = { - x: 0, - y: 0.5 - }; - _points2[0].curveTo = { - x: -0.5, - y: 1 - }; - _points2[1].curveFrom = { - x: 1, - y: 1 - }; - _points2[1].curveTo = { - x: 1, - y: 0.5 - }; - } else { - _points2[0].curveFrom = { - x: 1, - y: 0.5 - }; - _points2[0].curveTo = { - x: -0.5, - y: 1 - }; - _points2[1].curveFrom = { - x: 1, - y: 1 - }; - _points2[1].curveTo = { - x: 0, - y: 0.5 - }; - } - } - - if (direction == "Left") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line - - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - - var _points3 = line.layers().firstObject().points(); - - _points3[0].curveMode = 4; - _points3[1].curveMode = 4; - _points3[0].hasCurveFrom = true; - _points3[1].hasCurveTo = true; - - if (firstLayerPosY < secondLayerPosY) { - _points3[0].curveFrom = { - x: 0.5, - y: 0 - }; - _points3[0].curveTo = { - x: -0.5, - y: 1 - }; - _points3[1].curveFrom = { - x: 1, - y: 1 - }; - _points3[1].curveTo = { - x: 0.5, - y: 1 - }; - } else { - _points3[0].curveFrom = { - x: 0.5, - y: 1 - }; - _points3[0].curveTo = { - x: -0.5, - y: 1 - }; - _points3[1].curveFrom = { - x: 1, - y: 1 - }; - _points3[1].curveTo = { - x: 0.5, - y: 0 - }; - } - } // Providing Settings for the arrow - - - line.setName("Curved Arrow"); - return line; -} - -/***/ }), - -/***/ "./src/utilities/conditions.js": +/*! exports provided: drawConnection */function(e,t,r){"use strict";r.r(t),r.d(t,"drawConnection",function(){return s});r(/*! sketch */"sketch");var o=r(/*! ./utilities/styling.js */"./src/utilities/styling.js"),n=r(/*! ./utilities/conditions.js */"./src/utilities/conditions.js"),i=r(/*! ./utilities/groups.js */"./src/utilities/groups.js"),a=r(/*! sketch/settings */"sketch/settings");r(/*! sketch/ui */"sketch/ui");function s(e,t,r,s,c,u,l,d,f){var y=f.currentPage().currentArtboard()||f.currentPage(),h=function(e,t,r,o){var n,a,s=e.frame.changeBasis({from:e.parent,to:o}),c=t.frame.changeBasis({from:t.parent,to:o}),u=Object(i.checkForGroup)("Arrows",o);u?(n=u.frame().x(),a=u.frame().y()):(n=0,a=0);var l={firstLayerPosX:null,firstLayerPosY:null,secondLayerPosX:null,secondLayerPosY:null,middlePosX:null,middlePosY:null};"Up"==r&&(l.firstLayerPosX=s.x+s.width/2-n,l.firstLayerPosY=s.y-a,l.secondLayerPosX=c.x+c.width/2-n,l.secondLayerPosY=c.y+c.height-a,l.middlePosX=(l.firstLayerPosX+l.secondLayerPosX)/2,l.middlePosY=(l.firstLayerPosY+l.secondLayerPosY)/2);"Right"==r&&(l.firstLayerPosX=s.x+s.width-n,l.firstLayerPosY=s.y+s.height/2-a,l.secondLayerPosX=c.x-n,l.secondLayerPosY=c.y+c.height/2-a,l.middlePosX=(l.firstLayerPosX+l.secondLayerPosX)/2,l.middlePosY=(l.firstLayerPosY+l.secondLayerPosY)/2);"Down"==r&&(l.firstLayerPosX=s.x+s.width/2-n,l.firstLayerPosY=s.y+s.height-a,l.secondLayerPosX=c.x+c.width/2-n,l.secondLayerPosY=c.y-a,l.middlePosX=(l.firstLayerPosX+l.secondLayerPosX)/2,l.middlePosY=(l.firstLayerPosY+l.secondLayerPosY)/2);"Left"==r&&(l.firstLayerPosX=s.x-n,l.firstLayerPosY=s.y+s.height/2-a,l.secondLayerPosX=c.x+c.width-n,l.secondLayerPosY=c.y+c.height/2-a,l.middlePosX=(l.firstLayerPosX+l.secondLayerPosX)/2,l.middlePosY=(l.firstLayerPosY+l.secondLayerPosY)/2);return l}(d.getLayerWithID(e),d.getLayerWithID(t),c,y),m={line:[],conditionID:[],type:[],style:[]};return m.type=null==s?a.settingForKey("arrowType"):s,"Angled"!=m.type&&null!=m.type||(m.line=function(e,t,r,o,n,i,a){var s=NSBezierPath.bezierPath();"Up"==a&&(s.moveToPoint(NSMakePoint(e,t)),s.lineToPoint(NSMakePoint(e,o)),s.lineToPoint(NSMakePoint(n,o)),s.lineToPoint(NSMakePoint(n,i)));"Right"==a&&(s.moveToPoint(NSMakePoint(e,t)),s.lineToPoint(NSMakePoint(r,t)),s.lineToPoint(NSMakePoint(r,i)),s.lineToPoint(NSMakePoint(n,i)));"Down"==a&&(s.moveToPoint(NSMakePoint(e,t)),s.lineToPoint(NSMakePoint(e,o)),s.lineToPoint(NSMakePoint(n,o)),s.lineToPoint(NSMakePoint(n,i)));"Left"==a&&(s.moveToPoint(NSMakePoint(e,t)),s.lineToPoint(NSMakePoint(r,t)),s.lineToPoint(NSMakePoint(r,i)),s.lineToPoint(NSMakePoint(n,i)));var c=MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(s)),u=c.layers().firstObject().points();return u[1].cornerRadius=20,u[2].cornerRadius=20,c.setName("Angled Arrow"),c}(h.firstLayerPosX,h.firstLayerPosY,h.middlePosX,h.middlePosY,h.secondLayerPosX,h.secondLayerPosY,c)),"Straight"==m.type&&(m.line=function(e,t,r,o,n){var i=NSBezierPath.bezierPath();"Up"==n&&(i.moveToPoint(NSMakePoint(e,t)),i.lineToPoint(NSMakePoint(r,o)));"Right"==n&&(i.moveToPoint(NSMakePoint(e,t)),i.lineToPoint(NSMakePoint(r,o)));"Down"==n&&(i.moveToPoint(NSMakePoint(e,t)),i.lineToPoint(NSMakePoint(r,o)));"Left"==n&&(i.moveToPoint(NSMakePoint(e,t)),i.lineToPoint(NSMakePoint(r,o)));var a=MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(i));return a.setName("Straight Arrow"),a}(h.firstLayerPosX,h.firstLayerPosY,h.secondLayerPosX,h.secondLayerPosY,c)),"Curved"==m.type&&(m.line=function(e,t,r,o,n){var i,a=NSBezierPath.bezierPath();if("Up"==n){a.moveToPoint(NSMakePoint(e,t)),a.lineToPoint(NSMakePoint(r,o));var s=(i=MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(a))).layers().firstObject().points();s[0].curveMode=4,s[1].curveMode=4,s[0].hasCurveFrom=!0,s[1].hasCurveTo=!0,e Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as "#condition" so it will be added here'); - } else { - var symbolMaster = libraryObject.import(); - symbol = symbolMaster.createNewInstance(); - symbol = Object(_groups_js__WEBPACK_IMPORTED_MODULE_1__["addToConditionGroup"])(symbol, x, y, currentParentGroup); - } - - return symbol; -} -function updateCondition(conditionID, x, y, document, docData) { - var currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); - var condition = document.getLayerWithID(conditionID); - var conGroup = Object(_groups_js__WEBPACK_IMPORTED_MODULE_1__["checkForGroup"])("Conditions", currentParentGroup); - var arGroup = Object(_groups_js__WEBPACK_IMPORTED_MODULE_1__["checkForGroup"])("Arrows", currentParentGroup); - var arGroupX = arGroup != null ? arGroup.frame().x() : 0; - var arGroupY = arGroup != null ? arGroup.frame().y() : 0; - - if (conGroup) { - condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX); - condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY); - conGroup.fixGeometryWithOptions(1); - } else { - condition.frame.x = x - condition.frame.width / 2; - condition.frame.y = y - condition.frame.height / 2; - } - - return condition.id; -} -function deleteCondition(conditionID, document) { - var conditionObject = document.getLayerWithID(conditionID); - var selectedGroup; - - if (conditionObject) { - selectedGroup = conditionObject.parent; - conditionObject.remove(); - - if (selectedGroup.layers.length == 0) { - selectedGroup.remove(); - } - } -} - -/***/ }), - -/***/ "./src/utilities/data.js": +/*! exports provided: addCondition, updateCondition, deleteCondition */function(e,t,r){"use strict";r.r(t),r.d(t,"addCondition",function(){return s}),r.d(t,"updateCondition",function(){return c}),r.d(t,"deleteCondition",function(){return u});var o=r(/*! sketch */"sketch"),n=r.n(o),i=r(/*! ./groups.js */"./src/utilities/groups.js"),a=(r(/*! sketch/settings */"sketch/settings"),r(/*! sketch/ui */"sketch/ui"));function s(e,t,r,o,s){for(var c,u,l,d=n.a.getLibraries(),f=s.currentPage().currentArtboard()||s.currentPage(),y=0;y Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as "#condition" so it will be added here')):(l=c.import().createNewInstance(),l=Object(i.addToConditionGroup)(l,t,r,f));return l}function c(e,t,r,o,n){var a=n.currentPage().currentArtboard()||n.currentPage(),s=o.getLayerWithID(e),c=Object(i.checkForGroup)("Conditions",a),u=Object(i.checkForGroup)("Arrows",a),l=null!=u?u.frame().x():0,d=null!=u?u.frame().y():0;return c?(s.frame.x=t-s.frame.width/2-(c.frame().x()-l),s.frame.y=r-s.frame.height/2-(c.frame().y()-d),c.fixGeometryWithOptions(1)):(s.frame.x=t-s.frame.width/2,s.frame.y=r-s.frame.height/2),s.id}function u(e,t){var r,o=t.getLayerWithID(e);o&&(r=o.parent,o.remove(),0==r.layers.length&&r.remove())}},"./src/utilities/data.js": /*!*******************************!*\ !*** ./src/utilities/data.js ***! \*******************************/ -/*! exports provided: getConnectionsData, deleteConnectionFromData */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getConnectionsData", function() { return getConnectionsData; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteConnectionFromData", function() { return deleteConnectionFromData; }); -/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); -/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); - - -var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); - -var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); - -var pluginKey = "flowArrows"; -function getConnectionsData(docData) { - var pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); - var dataArray = []; - - if (pluginData) { - for (var i = 0; i < pluginData.length; i++) { - dataArray.push(pluginData[i]); - } - } - - return dataArray; -} -function deleteConnectionFromData(connectionIndexArray, data) { - if (data) { - for (var i = connectionIndexArray.length - 1; i >= 0; i--) { - data.splice(connectionIndexArray[i], 1); - } - } - - return data; -} - -/***/ }), - -/***/ "./src/utilities/groups.js": +/*! exports provided: getConnectionsData, deleteConnectionFromData */function(e,r,o){"use strict";o.r(r),o.d(r,"getConnectionsData",function(){return i}),o.d(r,"deleteConnectionFromData",function(){return a});o(/*! sketch */"sketch"),o(/*! sketch/ui */"sketch/ui"),o(/*! sketch/settings */"sketch/settings");var n="flowArrows";function i(e){var r=t.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections",e,n),o=[];if(r)for(var i=0;i=0;r--)t.splice(e[r],1);return t}},"./src/utilities/groups.js": /*!*********************************!*\ !*** ./src/utilities/groups.js ***! \*********************************/ -/*! exports provided: checkForGroup, addToArrowsGroup, addToConditionGroup */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "checkForGroup", function() { return checkForGroup; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addToArrowsGroup", function() { return addToArrowsGroup; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addToConditionGroup", function() { return addToConditionGroup; }); -/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); -/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); - - -var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); - -var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); // let document = sketch.fromNative(context.document); -// let docData = context.document.documentData(); -// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); - - -function checkForGroup(groupName, currentParentGroup) { - // refactored - var currentGroup = null; // Checking all the groups that we have - - for (var i = 0; i < currentParentGroup.layers().count(); i++) { - if (currentParentGroup.layers()[i].name() == groupName) { - currentGroup = currentParentGroup.layers()[i]; - } - } - - return currentGroup; -} -function addToArrowsGroup(line, currentParentGroup) { - var currentGroup = checkForGroup("Arrows", currentParentGroup); - - if (currentGroup) { - currentGroup.addLayers([line]); - currentGroup.fixGeometryWithOptions(1); - } else { - var Group = __webpack_require__(/*! sketch/dom */ "sketch/dom").Group; - - var group = new Group({ - parent: currentParentGroup, - name: 'Arrows', - locked: true, - layers: [line] - }); - group.moveToBack(); - group.adjustToFit(); - } -} -function addToConditionGroup(condition, x, y, currentParentGroup) { - var conGroup = checkForGroup("Conditions", currentParentGroup); - var arGroup = checkForGroup("Arrows", currentParentGroup); - var arGroupX = arGroup != null ? arGroup.frame().x() : 0; - var arGroupY = arGroup != null ? arGroup.frame().y() : 0; - - if (conGroup) { - condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX); - condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY); - condition.parent = conGroup; - conGroup.fixGeometryWithOptions(1); - } else { - condition.frame.x = x - condition.frame.width / 2 + arGroupX; - condition.frame.y = y - condition.frame.height / 2 + arGroupY; - - var Group = __webpack_require__(/*! sketch/dom */ "sketch/dom").Group; - - var group = new Group({ - parent: currentParentGroup, - name: "Conditions", - layers: [condition] - }); - group.moveToBack(); - group.adjustToFit(); - } - - return condition.id; -} - -/***/ }), - -/***/ "./src/utilities/lines.js": +/*! exports provided: checkForGroup, addToArrowsGroup, addToConditionGroup */function(e,t,r){"use strict";r.r(t),r.d(t,"checkForGroup",function(){return o}),r.d(t,"addToArrowsGroup",function(){return n}),r.d(t,"addToConditionGroup",function(){return i});r(/*! sketch */"sketch"),r(/*! sketch/settings */"sketch/settings"),r(/*! sketch/ui */"sketch/ui");function o(e,t){for(var r=null,o=0;o firstObjectMidX) { - // Right Half - if (secondObjectMidY > firstObjectMidY) { - // Bottom quarter - direction = diffX > diffY ? "Down" : "Right"; - } else { - // Top quarter - direction = absDiffX > absDiffY ? "Right" : "Up"; - } - } else { - // Left Half - if (secondObjectMidY > firstObjectMidY) { - // Bottom quarter - direction = absDiffX > absDiffY ? "Left" : "Down"; - } else { - // Top quarter - direction = diffX > diffY ? "Left" : "Up"; - } - } - - return direction; -} - -function updateSpacing(sourceObjectID, childObjectID, direction, document) { - var sourceObject = document.getLayerWithID(sourceObjectID); - var childObject = document.getLayerWithID(childObjectID); - - if (Settings.settingForKey("arrowSpacing") && Settings.settingForKey("arrowSpacing") != 0) { - var currentSpacing = Settings.settingForKey("arrowSpacing"); - - if (direction == "Right") { - childObject.frame.x = sourceObject.frame.x + sourceObject.frame.width + currentSpacing; - } - - if (direction == "Down") { - childObject.frame.y = sourceObject.frame.y + sourceObject.frame.height + currentSpacing; - } - - if (direction == "Left") { - childObject.frame.x = sourceObject.frame.x - childObject.frame.width - currentSpacing; - } - - if (direction == "Up") { - childObject.frame.y = sourceObject.frame.y - childObject.frame.height - currentSpacing; - } - } -} - -function autoAlignLayer(sourceObjectID, childObjectID, direction, document) { - var sourceObject = document.getLayerWithID(sourceObjectID); - var childObject = document.getLayerWithID(childObjectID); - var sourceMidY, childMidY, sourceMidX, childMidX, diff; - - if (Settings.settingForKey("autoAlign")) { - if (Settings.settingForKey("autoAlign") == true) { - // If user turned on Auto-Align settings - if (direction == "Right" || direction == "Left") { - sourceMidY = sourceObject.frame.y + sourceObject.frame.height / 2; - childMidY = childObject.frame.y + childObject.frame.height / 2; - diff = sourceMidY - childMidY; - - if (diff > -6 && diff < 6) { - childObject.frame.y = childObject.frame.y + diff; - } - } - - if (direction == "Down" || direction == "Up") { - sourceMidX = sourceObject.frame.x + sourceObject.frame.width / 2; - childMidX = childObject.frame.x + childObject.frame.width / 2; - diff = sourceMidX - childMidX; - - if (diff > -6 && diff < 6) { - childObject.frame.x = childObject.frame.x + diff; - } - } - } - } -} - -/***/ }), - -/***/ "./src/draw.js": +/*! exports provided: createArrow */function(e,t,r){"use strict";r.r(t),r.d(t,"createArrow",function(){return i});r(/*! sketch */"sketch");var o=r(/*! ./draw.js */"./src/draw.js"),n=r(/*! sketch/settings */"sketch/settings");function i(e,t,r,i,a,s,c,u,d){var l="Auto"==a?function(e,t,r){var o,n=r.getLayerWithID(e),i=r.getLayerWithID(t),a=n.frame.x+n.frame.width/2,s=n.frame.y+n.frame.height/2,c=i.frame.x+i.frame.width/2,u=i.frame.y+i.frame.height/2,d=a-c,l=s-u,f=Math.abs(d),h=Math.abs(l);o=c>a?u>s?d>l?"Down":"Right":f>h?"Right":"Up":u>s?f>h?"Left":"Down":d>l?"Left":"Up";return o}(e,t,u):a;!function(e,t,r,o){var i=o.getLayerWithID(e),a=o.getLayerWithID(t);if(n.settingForKey("arrowSpacing")&&0!=n.settingForKey("arrowSpacing")){var s=n.settingForKey("arrowSpacing");"Right"==r&&(a.frame.x=i.frame.x+i.frame.width+s),"Down"==r&&(a.frame.y=i.frame.y+i.frame.height+s),"Left"==r&&(a.frame.x=i.frame.x-a.frame.width-s),"Up"==r&&(a.frame.y=i.frame.y-a.frame.height-s)}}(e,t,l,u),function(e,t,r,o){var i,a,s,c,u,d=o.getLayerWithID(e),l=o.getLayerWithID(t);n.settingForKey("autoAlign")&&1==n.settingForKey("autoAlign")&&("Right"!=r&&"Left"!=r||(i=d.frame.y+d.frame.height/2,a=l.frame.y+l.frame.height/2,(u=i-a)>-6&&u<6&&(l.frame.y=l.frame.y+u)),"Down"!=r&&"Up"!=r||(s=d.frame.x+d.frame.width/2,c=l.frame.x+l.frame.width/2,(u=s-c)>-6&&u<6&&(l.frame.x=l.frame.x+u)))}(e,t,l,u);var f=Object(o.drawConnection)(e,t,r,i,l,s,c,u,d);return{firstObject:e,secondObject:t,style:f.style,condition:f.conditionID,isCondition:c,type:f.type,direction:l,line:f.line.objectID()}}},"./src/draw.js": /*!*********************!*\ !*** ./src/draw.js ***! \*********************/ -/*! exports provided: drawConnection */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "drawConnection", function() { return drawConnection; }); -/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); -/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _utilities_styling_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utilities/styling.js */ "./src/utilities/styling.js"); -/* harmony import */ var _utilities_conditions_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utilities/conditions.js */ "./src/utilities/conditions.js"); -/* harmony import */ var _utilities_groups_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utilities/groups.js */ "./src/utilities/groups.js"); - - - - - -var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); - -var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); // let document = sketch.fromNative(context.document); -// let docData = context.document.documentData(); -// let currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); -// Main Function - - -function drawConnection(firstObjectID, secondObjectID, style, type, localDirection, conditionID, isCondition, document, docData) { - // Refactored - // Process of creating new connection - var currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); - var firstObject = document.getLayerWithID(firstObjectID); - var secondObject = document.getLayerWithID(secondObjectID); - var connectionPos = getConnectionPos(firstObject, secondObject, localDirection, currentParentGroup); - var connection = { - line: [], - conditionID: [], - type: [], - style: [] // Type - - }; - connection.type = type == null ? Settings.settingForKey("arrowType") : type; - - if (connection.type == "Angled" || connection.type == null) { - connection.line = drawAngledLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.middlePosX, connectionPos.middlePosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection); - } - - if (connection.type == "Straight") { - connection.line = drawStraightLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection); - } - - if (connection.type == "Curved") { - connection.line = drawCurvedLine(connectionPos.firstLayerPosX, connectionPos.firstLayerPosY, connectionPos.secondLayerPosX, connectionPos.secondLayerPosY, localDirection); - } // Condition - - - if (isCondition == true) { - if (document.getLayerWithID(conditionID)) { - connection.conditionID = Object(_utilities_conditions_js__WEBPACK_IMPORTED_MODULE_2__["updateCondition"])(conditionID, connectionPos.middlePosX, connectionPos.middlePosY, document, docData); - } else { - connection.conditionID = Object(_utilities_conditions_js__WEBPACK_IMPORTED_MODULE_2__["addCondition"])("#con", connectionPos.middlePosX, connectionPos.middlePosY, document, docData); - } - } else { - connection.conditionID = null; - } // Style - - - connection.style = Object(_utilities_styling_js__WEBPACK_IMPORTED_MODULE_1__["styleLine"])(connection.line, style, docData); // Add to group - - Object(_utilities_groups_js__WEBPACK_IMPORTED_MODULE_3__["addToArrowsGroup"])(connection.line, currentParentGroup); - return connection; -} // Positions - -function getConnectionPos(firstObject, secondObject, direction, currentParentGroup) { - // Refactored - var firstObjectAbsPos = firstObject.frame.changeBasis({ - from: firstObject.parent, - to: currentParentGroup - }); - var secondObjectAbsPos = secondObject.frame.changeBasis({ - from: secondObject.parent, - to: currentParentGroup - }); - var currentGroup = Object(_utilities_groups_js__WEBPACK_IMPORTED_MODULE_3__["checkForGroup"])("Arrows", currentParentGroup); - var diffX, diffY; - - if (currentGroup) { - diffX = currentGroup.frame().x(); - diffY = currentGroup.frame().y(); - } else { - diffX = 0; - diffY = 0; - } - - var connectionPos = { - firstLayerPosX: null, - firstLayerPosY: null, - secondLayerPosX: null, - secondLayerPosY: null, - middlePosX: null, - middlePosY: null // Getting all the positions - - }; - - if (direction == "Up") { - // First Layer Position Start Point Position - connectionPos.firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; - connectionPos.firstLayerPosY = firstObjectAbsPos.y - diffY; // Second Layer Position End Point Position - - connectionPos.secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; - connectionPos.secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height - diffY; // Middle Points - - connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; - connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; - } - - if (direction == "Right") { - // First Layer Position Start Point Position - connectionPos.firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width - diffX; - connectionPos.firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position - - connectionPos.secondLayerPosX = secondObjectAbsPos.x - diffX; - connectionPos.secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points - - connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; - connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; - } - - if (direction == "Down") { - // First Layer Position Start Point Position - connectionPos.firstLayerPosX = firstObjectAbsPos.x + firstObjectAbsPos.width / 2 - diffX; - connectionPos.firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height - diffY; // Second Layer Position End Point Position - - connectionPos.secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width / 2 - diffX; - connectionPos.secondLayerPosY = secondObjectAbsPos.y - diffY; // Middle Points - - connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; - connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; - } - - if (direction == "Left") { - // First Layer Position Start Point Position - connectionPos.firstLayerPosX = firstObjectAbsPos.x - diffX; - connectionPos.firstLayerPosY = firstObjectAbsPos.y + firstObjectAbsPos.height / 2 - diffY; // Second Layer Position End Point Position - - connectionPos.secondLayerPosX = secondObjectAbsPos.x + secondObjectAbsPos.width - diffX; - connectionPos.secondLayerPosY = secondObjectAbsPos.y + secondObjectAbsPos.height / 2 - diffY; // Middle Points - - connectionPos.middlePosX = (connectionPos.firstLayerPosX + connectionPos.secondLayerPosX) / 2; - connectionPos.middlePosY = (connectionPos.firstLayerPosY + connectionPos.secondLayerPosY) / 2; - } - - return connectionPos; -} // Drawing Types - - -function drawAngledLine(firstLayerPosX, firstLayerPosY, middlePosX, middlePosY, secondLayerPosX, secondLayerPosY, direction) { - // Refactored - var path = NSBezierPath.bezierPath(); - - if (direction == "Up") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - if (direction == "Right") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - if (direction == "Down") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(firstLayerPosX, middlePosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, middlePosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - if (direction == "Left") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(middlePosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(middlePosX, secondLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - var line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - var points = line.layers().firstObject().points(); - points[1].cornerRadius = 20; - points[2].cornerRadius = 20; - line.setName("Angled Arrow"); - return line; -} - -function drawStraightLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction) { - // Refactored - var path = NSBezierPath.bezierPath(); - - if (direction == "Up") { - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - if (direction == "Right") { - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - if (direction == "Down") { - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - if (direction == "Left") { - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); - } - - var line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - line.setName("Straight Arrow"); - return line; -} - -function drawCurvedLine(firstLayerPosX, firstLayerPosY, secondLayerPosX, secondLayerPosY, direction) { - // Refactored - var path = NSBezierPath.bezierPath(); - var line; - - if (direction == "Up") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line - - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - var points = line.layers().firstObject().points(); - points[0].curveMode = 4; - points[1].curveMode = 4; - points[0].hasCurveFrom = true; - points[1].hasCurveTo = true; - - if (firstLayerPosX < secondLayerPosX) { - points[0].curveFrom = { - x: 0, - y: 0.5 - }; - points[0].curveTo = { - x: -0.5, - y: 1 - }; - points[1].curveFrom = { - x: 1, - y: 1 - }; - points[1].curveTo = { - x: 1, - y: 0.5 - }; - } else { - points[0].curveFrom = { - x: 1, - y: 0.5 - }; - points[0].curveTo = { - x: -0.5, - y: 1 - }; - points[1].curveFrom = { - x: 1, - y: 1 - }; - points[1].curveTo = { - x: 0, - y: 0.5 - }; - } - } - - if (direction == "Right") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line - - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - - var _points = line.layers().firstObject().points(); - - _points[0].curveMode = 4; - _points[1].curveMode = 4; - _points[0].hasCurveFrom = true; - _points[1].hasCurveTo = true; - - if (firstLayerPosY < secondLayerPosY) { - _points[0].curveFrom = { - x: 0.5, - y: 0 - }; - _points[0].curveTo = { - x: -0.5, - y: 1 - }; - _points[1].curveFrom = { - x: 1, - y: 1 - }; - _points[1].curveTo = { - x: 0.5, - y: 1 - }; - } else { - _points[0].curveFrom = { - x: 0.5, - y: 1 - }; - _points[0].curveTo = { - x: -0.5, - y: 1 - }; - _points[1].curveFrom = { - x: 1, - y: 1 - }; - _points[1].curveTo = { - x: 0.5, - y: 0 - }; - } - } - - if (direction == "Down") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line - - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - - var _points2 = line.layers().firstObject().points(); - - _points2[0].curveMode = 4; - _points2[1].curveMode = 4; - _points2[0].hasCurveFrom = true; - _points2[1].hasCurveTo = true; - - if (firstLayerPosX < secondLayerPosX) { - _points2[0].curveFrom = { - x: 0, - y: 0.5 - }; - _points2[0].curveTo = { - x: -0.5, - y: 1 - }; - _points2[1].curveFrom = { - x: 1, - y: 1 - }; - _points2[1].curveTo = { - x: 1, - y: 0.5 - }; - } else { - _points2[0].curveFrom = { - x: 1, - y: 0.5 - }; - _points2[0].curveTo = { - x: -0.5, - y: 1 - }; - _points2[1].curveFrom = { - x: 1, - y: 1 - }; - _points2[1].curveTo = { - x: 0, - y: 0.5 - }; - } - } - - if (direction == "Left") { - // Connecting points - path.moveToPoint(NSMakePoint(firstLayerPosX, firstLayerPosY)); - path.lineToPoint(NSMakePoint(secondLayerPosX, secondLayerPosY)); // Painting the line - - line = MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(path)); - - var _points3 = line.layers().firstObject().points(); - - _points3[0].curveMode = 4; - _points3[1].curveMode = 4; - _points3[0].hasCurveFrom = true; - _points3[1].hasCurveTo = true; - - if (firstLayerPosY < secondLayerPosY) { - _points3[0].curveFrom = { - x: 0.5, - y: 0 - }; - _points3[0].curveTo = { - x: -0.5, - y: 1 - }; - _points3[1].curveFrom = { - x: 1, - y: 1 - }; - _points3[1].curveTo = { - x: 0.5, - y: 1 - }; - } else { - _points3[0].curveFrom = { - x: 0.5, - y: 1 - }; - _points3[0].curveTo = { - x: -0.5, - y: 1 - }; - _points3[1].curveFrom = { - x: 1, - y: 1 - }; - _points3[1].curveTo = { - x: 0.5, - y: 0 - }; - } - } // Providing Settings for the arrow - - - line.setName("Curved Arrow"); - return line; -} - -/***/ }), - -/***/ "./src/script.js": +/*! exports provided: drawConnection */function(e,t,r){"use strict";r.r(t),r.d(t,"drawConnection",function(){return s});r(/*! sketch */"sketch");var o=r(/*! ./utilities/styling.js */"./src/utilities/styling.js"),n=r(/*! ./utilities/conditions.js */"./src/utilities/conditions.js"),i=r(/*! ./utilities/groups.js */"./src/utilities/groups.js"),a=r(/*! sketch/settings */"sketch/settings");r(/*! sketch/ui */"sketch/ui");function s(e,t,r,s,c,u,d,l,f){var h=f.currentPage().currentArtboard()||f.currentPage(),y=function(e,t,r,o){var n,a,s=e.frame.changeBasis({from:e.parent,to:o}),c=t.frame.changeBasis({from:t.parent,to:o}),u=Object(i.checkForGroup)("Arrows",o);u?(n=u.frame().x(),a=u.frame().y()):(n=0,a=0);var d={firstLayerPosX:null,firstLayerPosY:null,secondLayerPosX:null,secondLayerPosY:null,middlePosX:null,middlePosY:null};"Up"==r&&(d.firstLayerPosX=s.x+s.width/2-n,d.firstLayerPosY=s.y-a,d.secondLayerPosX=c.x+c.width/2-n,d.secondLayerPosY=c.y+c.height-a,d.middlePosX=(d.firstLayerPosX+d.secondLayerPosX)/2,d.middlePosY=(d.firstLayerPosY+d.secondLayerPosY)/2);"Right"==r&&(d.firstLayerPosX=s.x+s.width-n,d.firstLayerPosY=s.y+s.height/2-a,d.secondLayerPosX=c.x-n,d.secondLayerPosY=c.y+c.height/2-a,d.middlePosX=(d.firstLayerPosX+d.secondLayerPosX)/2,d.middlePosY=(d.firstLayerPosY+d.secondLayerPosY)/2);"Down"==r&&(d.firstLayerPosX=s.x+s.width/2-n,d.firstLayerPosY=s.y+s.height-a,d.secondLayerPosX=c.x+c.width/2-n,d.secondLayerPosY=c.y-a,d.middlePosX=(d.firstLayerPosX+d.secondLayerPosX)/2,d.middlePosY=(d.firstLayerPosY+d.secondLayerPosY)/2);"Left"==r&&(d.firstLayerPosX=s.x-n,d.firstLayerPosY=s.y+s.height/2-a,d.secondLayerPosX=c.x+c.width-n,d.secondLayerPosY=c.y+c.height/2-a,d.middlePosX=(d.firstLayerPosX+d.secondLayerPosX)/2,d.middlePosY=(d.firstLayerPosY+d.secondLayerPosY)/2);return d}(l.getLayerWithID(e),l.getLayerWithID(t),c,h),m={line:[],conditionID:[],type:[],style:[]};return m.type=null==s?a.settingForKey("arrowType"):s,"Angled"!=m.type&&null!=m.type||(m.line=function(e,t,r,o,n,i,a){var s=NSBezierPath.bezierPath();"Up"==a&&(s.moveToPoint(NSMakePoint(e,t)),s.lineToPoint(NSMakePoint(e,o)),s.lineToPoint(NSMakePoint(n,o)),s.lineToPoint(NSMakePoint(n,i)));"Right"==a&&(s.moveToPoint(NSMakePoint(e,t)),s.lineToPoint(NSMakePoint(r,t)),s.lineToPoint(NSMakePoint(r,i)),s.lineToPoint(NSMakePoint(n,i)));"Down"==a&&(s.moveToPoint(NSMakePoint(e,t)),s.lineToPoint(NSMakePoint(e,o)),s.lineToPoint(NSMakePoint(n,o)),s.lineToPoint(NSMakePoint(n,i)));"Left"==a&&(s.moveToPoint(NSMakePoint(e,t)),s.lineToPoint(NSMakePoint(r,t)),s.lineToPoint(NSMakePoint(r,i)),s.lineToPoint(NSMakePoint(n,i)));var c=MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(s)),u=c.layers().firstObject().points();return u[1].cornerRadius=20,u[2].cornerRadius=20,c.setName("Angled Arrow"),c}(y.firstLayerPosX,y.firstLayerPosY,y.middlePosX,y.middlePosY,y.secondLayerPosX,y.secondLayerPosY,c)),"Straight"==m.type&&(m.line=function(e,t,r,o,n){var i=NSBezierPath.bezierPath();"Up"==n&&(i.moveToPoint(NSMakePoint(e,t)),i.lineToPoint(NSMakePoint(r,o)));"Right"==n&&(i.moveToPoint(NSMakePoint(e,t)),i.lineToPoint(NSMakePoint(r,o)));"Down"==n&&(i.moveToPoint(NSMakePoint(e,t)),i.lineToPoint(NSMakePoint(r,o)));"Left"==n&&(i.moveToPoint(NSMakePoint(e,t)),i.lineToPoint(NSMakePoint(r,o)));var a=MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(i));return a.setName("Straight Arrow"),a}(y.firstLayerPosX,y.firstLayerPosY,y.secondLayerPosX,y.secondLayerPosY,c)),"Curved"==m.type&&(m.line=function(e,t,r,o,n){var i,a=NSBezierPath.bezierPath();if("Up"==n){a.moveToPoint(NSMakePoint(e,t)),a.lineToPoint(NSMakePoint(r,o));var s=(i=MSShapeGroup.layerWithPath(MSPath.pathWithBezierPath(a))).layers().firstObject().points();s[0].curveMode=4,s[1].curveMode=4,s[0].hasCurveFrom=!0,s[1].hasCurveTo=!0,e 1 && selection[0].class() != "MSArtboardGroup") { - var sourceObjectID = Object(_utilities_getSourceObject_js__WEBPACK_IMPORTED_MODULE_3__["getSourceObjectFromSelection"])(selection, direction); - var connectionIndex = []; - - for (var g = 0; g < selection.count(); g++) { - if (selection[g].objectID() != sourceObjectID) { - var firstObjectID = String(sourceObjectID); - var secondObjectID = String(selection[g].objectID()); - var _create = true; - var index = void 0; - - if (connectionsData.length > 0) { - for (var y = 0; y < connectionsData.length; y++) { - if ((firstObjectID == connectionsData[y].firstObject || firstObjectID == connectionsData[y].secondObject) && (secondObjectID == connectionsData[y].firstObject || secondObjectID == connectionsData[y].secondObject)) { - // We have this connection and need to update - _create = false; - index = y; - connectionIndex.push(y); - } - } - } - - if (_create) { - // Create - var connection = Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_1__["createArrow"])(firstObjectID, secondObjectID, null, null, direction, null, isCondition, document, docData); - connectionsData.push(connection); - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("New connection is created 🚀"); - } else { - // Update - Object(_utilities_lines_js__WEBPACK_IMPORTED_MODULE_5__["deleteLine"])(connectionsData[index].line, document); - - if (!isCondition) { - Object(_utilities_conditions_js__WEBPACK_IMPORTED_MODULE_6__["deleteCondition"])(connectionsData[index].condition, document); - } - - var _connection = Object(_createArrow_js__WEBPACK_IMPORTED_MODULE_1__["createArrow"])(firstObjectID, secondObjectID, null, null, direction, connectionsData[index].condition, isCondition, document, docData); - - connectionsData.push(_connection); - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Current connection is updated 🤘"); - } - } - } - - if (connectionIndex.length > 0) { - // Update data if there was changes - connectionsData = Object(_utilities_data_js__WEBPACK_IMPORTED_MODULE_4__["deleteConnectionFromData"])(connectionIndex, connectionsData); - } - - context.command.setValue_forKey_onLayer_forPluginIdentifier(connectionsData, "arrowConnections", docData, pluginKey); - } else { - // When user didn't select anything - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Please select more than two layers. Artboards are coming soon 🥳"); - } -} // -// Plugin Incoming Commands - Update and Delete -// - - -function updateSelectedArrows(context) { - update(context, 1, true); -} -function updateArtboardArrows(context) { - update(context, 2, true); -} -function updateAllArrows(context) { - update(context, 3, true); -} -function deleteSelectedArrows(context) { - update(context, 1, false); -} -function deleteArtboardArrows(context) { - update(context, 2, false); -} -function deleteAllArrows(context) { - update(context, 3, false); -} -function update(context, level, isUpdate) { - // 1 - selection level - // 2 - artboard level - // 3 - document level - var newConnectionsData = []; - var selection = context.selection; - var firstObjectArtboard; - var secondObjectArtboard; - - if (connectionsData.length > 0) { - if (level == 3) { - if (isUpdate) { - newConnectionsData = Object(_updateArrow_js__WEBPACK_IMPORTED_MODULE_2__["updateArrow"])(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i); - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows are updated"); - } else { - for (var _i = 0; _i < connectionsData.length; _i++) { - Object(_utilities_lines_js__WEBPACK_IMPORTED_MODULE_5__["deleteLine"])(connectionsData[_i].line, document); - Object(_utilities_conditions_js__WEBPACK_IMPORTED_MODULE_6__["deleteCondition"])(connectionsData[_i].condition, document); - newConnectionsData = null; - } - } - } - - if (level == 2) { - if (isUpdate) {// Need to update - } else { - for (var _i2 = 0; _i2 < connectionsData.length; _i2++) { - if (selection[0].class() == "MSArtboardGroup") { - firstObjectArtboard = document.getLayerWithID(connectionsData[_i2].firstObject); - firstObjectArtboard = firstObjectArtboard.sketchObject.parentArtboard().objectID(); - - if (firstObjectArtboard == selection[0].objectID()) { - Object(_utilities_lines_js__WEBPACK_IMPORTED_MODULE_5__["deleteLine"])(connectionsData[_i2].line, document); - Object(_utilities_conditions_js__WEBPACK_IMPORTED_MODULE_6__["deleteCondition"])(connectionsData[_i2].condition, document); - } else { - newConnectionsData.push(connectionsData[_i2]); - } - } else { - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("Please select an artboard"); - } - } - } - } - - if (level == 1) { - if (isUpdate) {// updateArrow(connectionsData[i].firstObject, connectionsData[i].secondObject, connectionsData[i].style, connectionsData[i].type, connectionsData[i].direction, connectionsData[i].line, connectionsData[i].condition, i); - // sketch.UI.message("All arrows are updated"); - } else { - for (var _i3 = 0; _i3 < connectionsData.length; _i3++) { - if (selection[0].objectID() == connectionsData[_i3].firstObject) { - log("here"); - Object(_utilities_lines_js__WEBPACK_IMPORTED_MODULE_5__["deleteLine"])(connectionsData[_i3].line, document); - Object(_utilities_conditions_js__WEBPACK_IMPORTED_MODULE_6__["deleteCondition"])(connectionsData[_i3].condition, document); - } else { - newConnectionsData.push(connectionsData[_i3]); - } - } - - newConnectionsData = null; - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows are deleted"); - } - } - - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("All arrows are updated 🚀"); // let connection = createArrow(sourceObjectID, selection[g].objectID(), null, null, direction, null, isCondition, document, docData); - // connectionsData.push(connection); - - context.command.setValue_forKey_onLayer_forPluginIdentifier(newConnectionsData, "arrowConnections", docData, pluginKey); - } else { - sketch__WEBPACK_IMPORTED_MODULE_0___default.a.UI.message("There is no arrows"); - } -} // const track = require("sketch-module-google-analytics") -// track("UA-138226597-1", "event", { -// ec: "command", -// ea: "create", -// ev: "my-command" -// }); - -/***/ }), - -/***/ "./src/updateArrow.js": +/*! exports provided: createAutoArrow, createRightArrow, createDownArrow, createLeftArrow, createUpArrow, createRightArrowWithCondition, createDownArrowWithCondition, createLeftArrowWithCondition, createUpArrowWithCondition, updateSelectedArrows, updateArtboardArrows, updateAllArrows, deleteSelectedArrows, deleteArtboardArrows, deleteAllArrows, update */function(e,r,o){"use strict";o.r(r),o.d(r,"createAutoArrow",function(){return p}),o.d(r,"createRightArrow",function(){return g}),o.d(r,"createDownArrow",function(){return v}),o.d(r,"createLeftArrow",function(){return w}),o.d(r,"createUpArrow",function(){return b}),o.d(r,"createRightArrowWithCondition",function(){return A}),o.d(r,"createDownArrowWithCondition",function(){return L}),o.d(r,"createLeftArrowWithCondition",function(){return k}),o.d(r,"createUpArrowWithCondition",function(){return S}),o.d(r,"updateSelectedArrows",function(){return x}),o.d(r,"updateArtboardArrows",function(){return _}),o.d(r,"updateAllArrows",function(){return T}),o.d(r,"deleteSelectedArrows",function(){return M}),o.d(r,"deleteArtboardArrows",function(){return D}),o.d(r,"deleteAllArrows",function(){return O}),o.d(r,"update",function(){return C});var n=o(/*! sketch */"sketch"),a=o.n(n),s=o(/*! ./createArrow.js */"./src/createArrow.js"),c=o(/*! ./updateArrow.js */"./src/updateArrow.js"),u=o(/*! ./utilities/getSourceObject.js */"./src/utilities/getSourceObject.js"),d=o(/*! ./utilities/data.js */"./src/utilities/data.js"),l=o(/*! ./utilities/lines.js */"./src/utilities/lines.js"),f=o(/*! ./utilities/conditions.js */"./src/utilities/conditions.js"),h=(o(/*! sketch/ui */"sketch/ui"),o(/*! sketch/settings */"sketch/settings"),"flowArrows"),y=a.a.fromNative(t.document),m=t.document.documentData(),P=Object(d.getConnectionsData)(m);function p(e){j(e,"Auto",!1)}function g(e){j(e,"Right",!1)}function v(e){j(e,"Down",!1)}function w(e){j(e,"Left",!1)}function b(e){j(e,"Up",!1)}function A(e){j(e,"Right",!0)}function L(e){j(e,"Down",!0)}function k(e){j(e,"Left",!0)}function S(e){j(e,"Up",!0)}function j(e,t,r){var o=e.selection;if(o.count()>1&&"MSArtboardGroup"!=o[0].class()){for(var n=Object(u.getSourceObjectFromSelection)(o,t),i=[],c=0;c0)for(var b=0;b0&&(P=Object(d.deleteConnectionFromData)(i,P)),e.command.setValue_forKey_onLayer_forPluginIdentifier(P,"arrowConnections",m,h)}else a.a.UI.message("Please select more than two layers. Artboards are coming soon 🥳")}function x(e){C(e,1,!0)}function _(e){C(e,2,!0)}function T(e){C(e,3,!0)}function M(e){C(e,1,!1)}function D(e){C(e,2,!1)}function O(e){C(e,3,!1)}function C(e,t,r){var o=[],n=e.selection;if(P.length>0){if(3==t)if(r)o=Object(c.updateArrow)(P[i].firstObject,P[i].secondObject,P[i].style,P[i].type,P[i].direction,P[i].line,P[i].condition,i),a.a.UI.message("All arrows are updated");else for(var s=0;s Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as "#condition" so it will be added here'); - } else { - var symbolMaster = libraryObject.import(); - symbol = symbolMaster.createNewInstance(); - symbol = Object(_groups_js__WEBPACK_IMPORTED_MODULE_1__["addToConditionGroup"])(symbol, x, y, currentParentGroup); - } - - return symbol; -} -function updateCondition(conditionID, x, y, document, docData) { - var currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); - var condition = document.getLayerWithID(conditionID); - var conGroup = Object(_groups_js__WEBPACK_IMPORTED_MODULE_1__["checkForGroup"])("Conditions", currentParentGroup); - var arGroup = Object(_groups_js__WEBPACK_IMPORTED_MODULE_1__["checkForGroup"])("Arrows", currentParentGroup); - var arGroupX = arGroup != null ? arGroup.frame().x() : 0; - var arGroupY = arGroup != null ? arGroup.frame().y() : 0; - - if (conGroup) { - condition.frame.x = x - condition.frame.width / 2 - (conGroup.frame().x() - arGroupX); - condition.frame.y = y - condition.frame.height / 2 - (conGroup.frame().y() - arGroupY); - conGroup.fixGeometryWithOptions(1); - } else { - condition.frame.x = x - condition.frame.width / 2; - condition.frame.y = y - condition.frame.height / 2; - } - - return condition.id; -} -function deleteCondition(conditionID, document) { - var conditionObject = document.getLayerWithID(conditionID); - var selectedGroup; - - if (conditionObject) { - selectedGroup = conditionObject.parent; - conditionObject.remove(); - - if (selectedGroup.layers.length == 0) { - selectedGroup.remove(); - } - } -} - -/***/ }), - -/***/ "./src/utilities/data.js": +/*! exports provided: addCondition, updateCondition, deleteCondition */function(e,t,r){"use strict";r.r(t),r.d(t,"addCondition",function(){return s}),r.d(t,"updateCondition",function(){return c}),r.d(t,"deleteCondition",function(){return u});var o=r(/*! sketch */"sketch"),n=r.n(o),i=r(/*! ./groups.js */"./src/utilities/groups.js"),a=(r(/*! sketch/settings */"sketch/settings"),r(/*! sketch/ui */"sketch/ui"));function s(e,t,r,o,s){for(var c,u,d,l=n.a.getLibraries(),f=s.currentPage().currentArtboard()||s.currentPage(),h=0;h Connection Arrows -> Get Free Library. Conditions are taken from the library based on their names. Make sure to name symbol as "#condition" so it will be added here')):(d=c.import().createNewInstance(),d=Object(i.addToConditionGroup)(d,t,r,f));return d}function c(e,t,r,o,n){var a=n.currentPage().currentArtboard()||n.currentPage(),s=o.getLayerWithID(e),c=Object(i.checkForGroup)("Conditions",a),u=Object(i.checkForGroup)("Arrows",a),d=null!=u?u.frame().x():0,l=null!=u?u.frame().y():0;return c?(s.frame.x=t-s.frame.width/2-(c.frame().x()-d),s.frame.y=r-s.frame.height/2-(c.frame().y()-l),c.fixGeometryWithOptions(1)):(s.frame.x=t-s.frame.width/2,s.frame.y=r-s.frame.height/2),s.id}function u(e,t){var r,o=t.getLayerWithID(e);o&&(r=o.parent,o.remove(),0==r.layers.length&&r.remove())}},"./src/utilities/data.js": /*!*******************************!*\ !*** ./src/utilities/data.js ***! \*******************************/ -/*! exports provided: getConnectionsData, deleteConnectionFromData */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getConnectionsData", function() { return getConnectionsData; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteConnectionFromData", function() { return deleteConnectionFromData; }); -/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); -/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); - - -var UI = __webpack_require__(/*! sketch/ui */ "sketch/ui"); - -var Settings = __webpack_require__(/*! sketch/settings */ "sketch/settings"); - -var pluginKey = "flowArrows"; -function getConnectionsData(docData) { - var pluginData = context.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections", docData, pluginKey); - var dataArray = []; - - if (pluginData) { - for (var i = 0; i < pluginData.length; i++) { - dataArray.push(pluginData[i]); - } - } - - return dataArray; -} -function deleteConnectionFromData(connectionIndexArray, data) { - if (data) { - for (var i = connectionIndexArray.length - 1; i >= 0; i--) { - data.splice(connectionIndexArray[i], 1); - } - } - - return data; -} - -/***/ }), - -/***/ "./src/utilities/getSourceObject.js": +/*! exports provided: getConnectionsData, deleteConnectionFromData */function(e,r,o){"use strict";o.r(r),o.d(r,"getConnectionsData",function(){return i}),o.d(r,"deleteConnectionFromData",function(){return a});o(/*! sketch */"sketch"),o(/*! sketch/ui */"sketch/ui"),o(/*! sketch/settings */"sketch/settings");var n="flowArrows";function i(e){var r=t.command.valueForKey_onLayer_forPluginIdentifier("arrowConnections",e,n),o=[];if(r)for(var i=0;i=0;r--)t.splice(e[r],1);return t}},"./src/utilities/getSourceObject.js": /*!******************************************!*\ !*** ./src/utilities/getSourceObject.js ***! \******************************************/ -/*! exports provided: getSourceObjectFromSelection */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getSourceObjectFromSelection", function() { return getSourceObjectFromSelection; }); -/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sketch */ "sketch"); -/* harmony import */ var sketch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sketch__WEBPACK_IMPORTED_MODULE_0__); - -var document = sketch__WEBPACK_IMPORTED_MODULE_0___default.a.fromNative(context.document); -var docData = context.document.documentData(); -var currentParentGroup = docData.currentPage().currentArtboard() || docData.currentPage(); -function getSourceObjectFromSelection(selection, direction) { - var sourceObjectID = selection.firstObject().objectID(); - - if (direction != "Auto") { - for (var g = 0; g < selection.count(); g++) { - sourceObjectID = defineSourceObject(sourceObjectID, selection[g].objectID(), direction); - } - } - - return sourceObjectID; -} - -function defineSourceObject(firstObjectID, secondObjectID, direction) { - var firstObject = document.getLayerWithID(firstObjectID); - var secondObject = document.getLayerWithID(secondObjectID); - var firstObjectAbsPos = firstObject.frame.changeBasis({ - from: firstObject.parent, - to: currentParentGroup - }); - var secondObjectAbsPos = secondObject.frame.changeBasis({ - from: secondObject.parent, - to: currentParentGroup - }); - var sourceObjectID; - - if (direction == "Right") { - if (firstObjectAbsPos.x <= secondObjectAbsPos.x) { - // We need to get the doc position - sourceObjectID = firstObject.id; - } else { - sourceObjectID = secondObject.id; - } - } - - if (direction == "Down") { - if (firstObject.y <= secondObjectAbsPos.y) { - sourceObjectID = firstObject.id; - } else { - sourceObjectID = secondObject.id; - } - } - - if (direction == "Left") { - if (firstObjectAbsPos.x <= secondObjectAbsPos.x) { - sourceObjectID = secondObject.id; - } else { - sourceObjectID = firstObject.id; - } - } - - if (direction == "Up") { - if (firstObjectAbsPos.y <= secondObjectAbsPos.y) { - sourceObjectID = secondObject.id; - } else { - sourceObjectID = firstObject.id; - } - } - - return sourceObjectID; -} - -/***/ }), - -/***/ "./src/utilities/groups.js": +/*! exports provided: getSourceObjectFromSelection */function(e,r,o){"use strict";o.r(r),o.d(r,"getSourceObjectFromSelection",function(){return c});var n=o(/*! sketch */"sketch"),i=o.n(n).a.fromNative(t.document),a=t.document.documentData(),s=a.currentPage().currentArtboard()||a.currentPage();function c(e,t){var r=e.firstObject().objectID();if("Auto"!=t)for(var o=0;o

V(dt1w#*ik-R$=e`NF|7dM0k0f6`;l%0bBo1JcoDQ~2ZaUisRPKC5?vCXhRxn0NoiT|4 z*FsmPZ8t2Q!$pU!Nzp#Xv1P}lmQtdNc@>ghvFo#Uex&yNrB8R!3^)X3smPyhb zx|k!M*xSAF)CVo>WG>^OCzlD_#S`peXm@{XazLf*ohLQlTuedtAD|f+MpFI9-%az< zcKKxx7z*Lr>%L7&m2ZhIs#l=SDB;V)xed)*rK$qhiJjC3ZLC6}+Uyy4S(VkE)%=g< zBlOx$!!Qq_NM-J`q=Cif#=i!Oq3h*OZI-H1{4$*X$6PZNd{IK`f795jp_-84wUD~m za(nKt%KVy3STbp6=x+fXz;5rn9WgvKJ2l>Bvb zeMD%+t8?mBQJ$gL=krufGy->)zHZ1eWxypUKLgw;`(i!BeId<^@PKg$c5{N3ltSxR)v%k4WHFdO!oOw za+Gz(&O;bAnfvXGA7?E_R>m>~?@pw!9sYjui#Pn^qA=SRm&HwL2YE&W`U7oqU>lhV zFH#p7@gZMh1GNc~(O)l8=sRQNd>EDMFHomSvWPV+nBzmoKG=C`$qDw27MK3$hc5-o^dCO*6RC&Jh2D@PJJ_HA1SZ z*hufi=lfR_K~VFj_;zRDV5He<3G*t`8iEykJ!2#6+#Kh%RJCDlS8g(}!b~_r=B*84 z*z&W1Jr{@d`8Q=ZyIW0|n|oaQVaFT-cH$9m`uEi^b??XzBNLx~u81Awe4typr$yeAJTB>JDD^+zX}?qi^if%Jp+-&h~}e5&=jf1En39s8o5wUAVH;8bQg z8$QXNmY4pGiqi8JKVdv#LnNQ3FdobTGA4H>dAl|gNl?0S|I7^AAk~|^FvKom&tati z%vYOz+S(ybco_&sO)BJJd!AfZ`BODz=Q;dugv{SvU01rj+{}{l=hMi4GO^9SPw(ta#YFS%1mJePt9)*J zfu(CDZ~x&j{6JA1w*vz69#pkf3NiHWLV03+FFv&mb_A`(Us*{tUs4R*%wvf59<6{m z1n@SBf`)8VjBFU64@&;74L!TAb$Ye50iw8R*RC~F z2Pf}KOK)Z+sK3AExmkc-P*6a(?FKE0CPQsNv+{eG%a{hC{|2?;Qu28*v$ZB!7|rXE zq=!>7UsoA-b=B^x`5O^BcWb#xYpJ%*IrLr^>B6l3w7g-_$Rf!rZoiVMD2FU#kTrk2 zF7ix3AYKd@!C!e?QhKrAvKK+45}q|Mao{2xW^%8hK1YpxA4#M=fJxO-`eT^Ju+&L$}UO1sVs?My=y2 zCg*#CAJ`foV!;sCf=HNEtn~q;e?$;cSNKoyE0HV>w4Mh3K_yJVqBPU+^!Gn$ zvfDvnRvf9bb7B9W+i*)p9>npJjm&j5hwk-GC(#}m5JjJ$3G-bwnnSXE7f)XoTdjq= zZ^<3Jhif(q)27*$hb8E^FvLDIX6xd-gaXmO`pA||J{3RAeXcP9xt2^H$J^I5Wo%t* znq?6}RQiTe;PZihtPWc|sUP)&S$MA1Ne{(^#T+g?ur|W?r!G}yhu_7F4i~1DeQ#GC zuRlLa^cdlMDpZe_po|2AK~+k%%Q@fMVA7i_Ib+*3Y;!FBOdVXAh%B-DQbkjLcV2ql z)Ry+H$ZPF2_3u_-+Ir9|Y*n6tGbRGnAJ@rzn|%|?{*?ShxB9*CHSaBGc(-m2+i|1+ z!6@VBqdWUa*!cL3+GJ6tn?~d~D2GS;R%yuD;SJ%PH-!yQL6pL0C7Tb4sQO|G+eP7m zmjdIM=gHOqGXe2YmkZb0CM~Dh+n@j1bmWuf8MRtPmXHHmgZPMMeMI@HWH$Q`L93qw z&KNIlh8=I;ALhW?ayVwL?6vN#0V_W+$hhd8$7Jdc)nR1uJb1$6asG}1bF+f}+5Qf{ zD;CcsBN~>OA>a9FPkdozi_9S%RZ*!A&FmklSBpw3Lq!p)U$6?O={CdaIvM|+_djX% zGa#VesC_-WAouyPPRQ-@)Vii}E$pEJgnK+8`E=VGK*z$&C&NJX+xvwEKM1^$|HW-Q zh1bC2N(!&{tq^?ObiE1+iTX#7s||$`WmxF))ZQ1mLrvnPytW&;V%!~FCW?kn8>p`h zDy<|E0WYNRv+IjEA4Ww7wPcQU=)q3tJ~nO3>?*~hLQ!=MX#e}6-g?joUAue(sAQ-N zo_TI=dne_D!SpO^sdVaUe;t8ubT-ZQSsQyzkW=Eyx$gE}k$2dWdbAb(hZcA=xGn(4 zjjrENAFD_E{BJA?)sTOthb2Rv{k$`uS@y(ExTf)alGKE zC5!=;*}l@MrC*QwL1Nr_AnQ{T0zxxa>DPGLXQV9(e5K0NCj4UlsAaok=f9!{rg#2U zNyNr*1n_-ef-9dDa%7fs6M@Da| zP@p#UpE2^8F&niUdO=&)IiTS)6sw>?PA&kb=PYteAg2nzYUyNDS2ltydVQA${pmq& z*)`90QJ!fwCR+Wqj}?_FP;Lwi(%}J$VNfk{rm&o{oop3>nqUec77K$!hi8|P{2$%@ zqMSciXU{MwLZIg)gz*DB3UbDDcp+X8Hj+EL4sD?=KAogS(0mFK7Ho>_RE2z`5*|H(k6ja7i$Xmd&tK^tkt zmnoxeXe5#tV3rxa$W4X#crHXf-0Lm(cE?|3~|CyEx(YCA?d z6e!PZEO&j&4=U7jD)IZn&$Ma#yZ?}fURUPeNjZ^AAA7bY`#7Fwh3R>!~S2j)>fvaeXGkH&$FscR54EqE5NO+K)=f^)RID zew3C~aSqwq1iA!9E;hucbEtvlaw*R{ZFYCUKcD|@YYCi}K<7Nxqs@v%Gt*Ebw^;$S zTZ6Zc!S&J+bqzY*W#Lc~9(X4TC3PYwU{ohzu?C4$e0(2(hJCqJq0>lIsHF08 zv2*$#Wjc@1&#CD?MnCyNsW&hA1P)6)FnlpKykZk7m;N_ky}6_Rc4YqR;0=>ITvo5= zT#?L^5^71?GD$kH)eYV75L-&!@FCNw zKpxi{0`uzuTw+mx7eRTVc|dLZ65zH#}{u$>Vy?5B{}(H9$M65?Ob&iH~O zw5wIc;aj+>NV^p$j;HnAS;yDtW4rvoZftmGPc-y+9UxpiAINFa$|3SHmq2#v!bLKj zNZ-n}psfXnSxv1G0iVn4emp~w3J>;=$VM=!(?x8^bj0z|l{Ck6wFEviD;@k+4`Wb< zp=s|rT^2&G2UP55{@ltmSqnFh-Ep^FxyBR_W`bsZwFKX8- zU2eK+@McE6)0tM3ES>*{tn-R$D(u!Zy+~7$UV?(4(xtZq1p!4sMFr^s(n9YgBs4*! zi6}J?6$MdxuK}d@PUsy1gc@1`DTjT=zxOy}pSyLjF4y?JHRt=xXX^fHJ_bR+O`9+z z_aax9payIoyAFHU+>`O8^T!8Q>rHF2ve;SUW^@u4F=&}(R(fiHu-z3z-Ew#fU}{A( zPFR+14#kHrj*yjFo?S;yIeI5&bg1?tR|3fEJYVXnRB8nNp84@tTom{P)j?TX(i44< zY!d#1puwIM5@5PXF!`#^O%y9+KiCrpGp^^zFRh|Kuz7z-x-8gN)7_p;uVu_(R~aqR zBRy28Uf%che|FL95$+Vc@0cm}Q+IIQv-kA2&vp-)eV=9XC;EH<_9mGyPV<>EDeacA z2;k9P(&ca3VkT@yiCj_UI^(+)h>+MzbP~)0QlyaA>e*K0V@8&A@?AZ(0^Gsy^bLWC zRB6)MViV-lnv8A|Tbrpm$a-k?(~|z3wit?zxmdh2NdBg2M$)l$M3i*@0m{{-HhJqr z_{SN1?x4q6cYkpsnQ6=Gdv@_9+8N;o>ofkQ;4z=>B#qR2-S>vY1C_0r!>DY}bO8VWGQN0vTJ+ zNU%{PIv5rHypK;GHF+~57GeR;4X2Zse%Fq>eHkc_@d^{CqmE5{HVnl`OwlQr8g>rZdZ9*qF(WYo>))P6K}z16S4I4dfU%K+% zm-~$W^BP-&5J9uq8mCFHVFI4Nm6@{S3XTXd{Lle7My8H%e?eQ(zYIPvV#T}sG;9!+ z3~7kSUca*hP13n={J`2j$mYK8%%RLmNpW3|{5~UZ7=D_s@|=OQ%h?)6JT_9xso5DXYNn_Sv9tRetoYk`;7c-(ASFAv!5)EOLwsU^L_; zV5Qma7Vh-yNYfH@lWok$BUu@*lg2+NZRgqfGVVR`j@vAP&c>$l1(~qXWP_K4@O1NX zK^H#pww{}iM7;-XM!8*3GiSQQ99=dK@8SIC3hq;`?u4)hCEb7GW-K>(c|Cdz!$6ZW?8d>t7~@dhB5;fWtFE--0IM(9{oZwb_VVx+VQ}(NyM#kuARB`YXMMg zi9vofzj3zDvZ~c}U+s?RN|dtdV&l1Vl%IdpkgCvKVe}uLhF;Jy(4Ib!|FA%YVD2d9yd>80L&MR{x3{v0WJ_X zKAqYg8P%N3H%BSFLIT^lq;ZWaE9L%QA|>|82RHYTE{XxRILpE7E#I#>5ACT1g4@KJ zGdBFQ12sM4NBEJ!vQ*2dLxnL%MpUDbeu-+3hS>)~Bdx}vE?w@0&>?-)W6>BA zY^=w?h#X|<3qp~3^9RwZM_K2f+U8TA^Qt$~dWV@{kV}?w2>`FlB*zznKslgkRbivB5@Tu)+=Uj)~hT;XiB z81N%SKP9WC`r!(f&BSKd$9Q)Bp=ah%M)#&rY^ax~Jv;UNMn%Q%<#EGo8r7lc-Vtv( zDOmMg1Al>5YN9l{Rc^Z|4q(R~7~1GY=`& zveuSP8gX`T+(uj>w+7e-w?>Yr{0)twj;bRJ@^L_kP7{g_-f*BRnqH>5tUTM3u)b7H z-0Qf++4NzO9#o$eiEqp}lYIy8ez|?K4fO?b40@O824WpuDsjVd>XrVu=J_v_7{wP$ zAcl)Z`mBR}T&uT^#3)FhLvffdJ{ESNpXRs-@jX#5h4NV|TYWk6p^+Q98*DsUL+YoO zUc}`C1A}yjZku?hzL@fpNwKS~TEurZ^_ic`hhLgKf$xM=_L?u@0eajn3`yWKB^=0t zpifc$9%wb4D?L5QB};?C9A&R%#gT7J^;^Ym={4>lRH|~@M?xR*np+FXb^L|EYt9FK zu7p`6_!amWRVjRv1~5%T?<_5&*+o6u@$kVOeGpmwcwZHHAYSrO^ar{7#r@O%w2-@M zD7GNu_@h~oo5GDVQdjp0qB%<6s__4U1uez-6~U()H(}eG_memE7SS%H`?8Xf9bjWn z?gXOxY{%(fZU6VY$`#bT-B%UQ!SWrdu4wf^5I2`LxhDg(_3CWvUp|b26T#c2bVEw& zOLxIljGH5U@mFrwfgX=c)qMuUx#P z`jXG&XVqupnfg2Kl~qikW>pPl={Xo^)|N_$1c!0`3AHAthc%WnAgMKdb~NSIIM! z^3(tbf-(r*T(jU_)54aE+44NBhfSxr{Q#4xVp3I2x0g#r;P0uqCxZ_*nz6e8s2jqV zon6LJ-k3=>cAe0*F+dwMcFX3EW11HHN4#selZ~3}hOe<)koTmmn9*rV)9=-P<3<`6 zER=)SE%&t?NPft(fxLt51d7I~L9VKwyulj09XuMdFPN3CbcV1|ANUeqguY}S3X0() z+849v2*8b0ofOabVIuBb|DnnL=bj<%wq!|Tlq?ojs^7U+`<9fuJJm9-7=F0m+KcWy z)nEs@$BXXVL(?%`uy&~CWkr~7Dr)9ZGtSCY!^2&8XNSEO>SQr24!F6st-g+1>}sP2 zRr*J|OhW=q+QIf4;qIN=DQR=qs)Gz#k^QI=R|u0eFX3I>toFZ!s_;V@d*z&ZdU_Lo zCJ7Y;15NbQPqPxiZvXum(7@lc4f60j%Vy{uAL5Npyj96-A?Rbea{G78dOtjyW-}-o0vtW+ zOp_dZ#<_6UtG9HwZ5*hg;l@XEGQ%E-O>z^UZM%v~+zl*~x->eg*z}&H2%T>KVm_Z&((TPxE`(REFT_gHVl_<=Yd1=X_f>+HI-#v6$ z+Pkb$nbf-#4dI5vgYBEHVdlioMJ|GCoY3HLIOOnUw=-9E``g<3Y-n)Wd|uMjc1C5` zFKcW@1({^3dSw@mI%Saea!{~2(azknd@*wxOjrt>603e|mNLsO+KPYBnMBsLu2UyZ z)DUcWq`%;m>}U@?)?79&y&ES#ro~}c9!xPTzOVTN7f$u>Fk2Bw9{uG2y&#Y8$C3Nb zj#p-r2m-{7B02!RzuSZQCoCBqLxaz8DtY859cw2yd6KzacXYT@z^`6~Leh1fkBbD9 zRSjh1Nt0BaIY028@NvCws4f}D>U7r`0q|m6==&24@kV3yB=|M!5k;)3GWmFW-I4Sj7Kr~oL{82DN39!Z9d+K!;Ud^JnW_WcUerB2ZA)6X z^n^$QVfe|Rb*1wQ{>b_Y#YKe1mil53f@~5ANJ{ z`#?NSpg<;eJeW}%`Cfe??jaiyXz%9Bf9!6$rFFwLmq~GvKIc%L=UQtDcy>c5_ZpI= z9k#-_P?~C5&4`9*_;%!o)5@46JbzCXWssMxSPk zFQ5VYcIU92kCIVJS!L02Pn(=4r#5pRTvJVN!0iNs-?9fl2beDkvrQY9Wq$`VHgm@>ZyDUjXAluvq1^>>|^&n~}ev0`+M+YMI+jksT6Q8D%3WpuNziK8-+( zvRi~k(%PJV31F-#X~SsjYp8V~-8x}tk3&DFRIq}Bt+^p%&TT=yrBU2G?ruB5Kv$?^ zaAX!C*#4TLURkIFhb!KC%~QWqml~h(lL-_pib#2LKEv%)4AB2!&yN?|Q6X-=c@zZ~ zvMouV*Pum*-0WS?iMRKJ9%{;?oyFpmuHH?gV?8eoFe)E8O?c%t*1=PK7Vg%`AhE-p zvwdSY1Q6ck+A$`5|6QpSaN4uK!LD!XVZwY?os`vQLyf~Vwjtk+wo8?NP=JZ*2FHt) zLX)D3yr9?I8EZzv=poi^)f_VapbCejo%{~{bXk$#>xX)VZA+pm6+Vd(Au2(+ysmQJ z-1o-aRaE!_hKf3ZoDEX?jGM(iJbn!HJYZa`@+u}}fG{(2cRo9MtDv2;Knf`@BH{YR zV02XE7tX>2o<$(JZr^XXD(>5KNPyv~gce&3yiS==jt@BRH4r#@M4Y11Zlf}Dk!Un= z8j2%kwmm@6{$x=s=;PTx_{+613c|AVO$SeH24Bgve!d##ZWI*S)h=n!i9F=9-y51VVEz5#(+2_InO)Li?V}nc9Z^qZ zcjS`t?18zkk8SU2mIUQ-3^i%)Q%7PAzC)hXL$MUQI=VSvvD@tb29&n zZ~eU3k?4kGtX6iak~wIaOrAz3g(k6l!A>ISnyMcUe|zfwbYNPzFEwiSX%|Vi6^f?+ znGA1`l4CI>w+51p*$*#|`(pp%w8BQf&F8FuU-4^3Ug#XKQE+(VG^En(XwoHQsf&{V zF65K}Fd>X_*oyw-((J{I>#5jKV^B&%#iq8k4M$HsT z-l~By^&9q)#!frb`4ZzfN1)(LIDNtl>n=Dbl_G%=;WB*B`tOW(?sk7^Ey zS-L>+pX%{nZgxQ`KDwS4tHgX;xwE$e=U*t~fGh zY^qYPYLAEliQNa~A0B|S;XWXCk9N5Lr1oP^{)9w`gH-94E4fMtga8V}m>A_;gAwS{ zt_qVZdjCT>kA+K^mi4Qhogx3YgOkrm{z}lvy_4~HE1X45iZxIN+XX~vm{>3|!zv3Z zTkSv>0|8P992?RXpF-Z|l9DFuVW5KB9$QC*QXs9SMYHT<6?rYM)x@>oO>SiV#;0O#i{1+YQ$ ztxxfU+yf`s$Ro7>w~okgM23!?xkN}iso$C;GqSI0g~ytwUCz?6^&5HQPRM`Attn~x zA)3D^!WrK{`5g5k#?K<_3xsrIGVLuE;jf%hLX}xjbKq4nGXsIAtoFhoIPR^jsm#wB z!BfnrcOm5;#^tAjD!^7M=03K2sFxZ0brvNT=eI{j@y2D(Pq++I{2lMkypVR`FpnQ7ec7R}bLef;4U7fXN6$ZPqKYxitV zZ{O;=aRVwd&S@CT$EUOHz3Vi^zX@A>)dX;Mb}2zIID8+FHvxv3b6-ocXL>f9aT=jlFb zN2trKbmT3=#K$WySO02XNW*Wp$pBa&7f)ZK9wsYVJ7C1@N0TcI9_ssl>qSL9voHC@ zeCL&?w5U~<{HKp~K=K$@giW`~b`RpIXE~jYhH)z{1zZW2ImuP&zHz0*;>Gsc;-gMQ zsBfQSV$eEpduOBY5$S5Fy&=n3SO?ceSi-zic9r&f;B4mk@{eJk!Fzc2kzTJT;|DY^ zjHZ{-=XGPv*lV2XLG8fv80*I>VISSLoH#Oru;8-tTyfwvnPO|X!x^hzr#nDbyrDY0NG3zlr7lpvwgER5(5C8z9t6xZSdQE_NqN03Ukx z@Ly}Glwg{&58xf&8t+HGk9#(;Jk~ihlL=WK%(R{Y6!C*IglqrkCh0$yK>>^Yl(QbqXKSCF1eIT6(#G0VVFa9$jI4pyP;H)y`?`xZ!;3ik+K* z>*{I3Uk{1(nx8F$%2d_+S0s?Rz0P?l6aF4uNlAX8=$(i-{W{erDE!D*1Ncj0_6o~F zg-joRo4GuCro=|q(aJ&2rEd>Zb?hrTfdoZKpW_k=`cI-+Ov@S>Nw1nvH8Q>^iBY{hqwxKQJbSR=QENl-aA2-S;CgcmK=StT563sq;ye zAymWVh%F>8`Gp}8=S2}|>8)pdTrguD6nNR-Inz%IVZ(Q0h*{OpWUJanQ}Xya8;n%f zH+#Dr?-%*3+IGWvFV0JvC=f~jLI38})UjfO z-)z%=Q2%?R-VWw@^syW-z&6RFEr)~mcGZX8*H-v6i=OgXO=(iNKZG}$e_s5$xog;0 z>TQuT5n|-;u~GQX0p?R)&~bjhaEo9j-yAq_x9`I1gqlYoZ5v|jzZrJxQ6_7U7Ij?F zbelp?`Kd9chS0?RSr<^w~*JfR>X!+y zlQ^27a0iF4o_8;v%g=%?c`5k1sP2i1SRK?Gx^%3*PVjL!VO~@G zq#rH&G^jY36d-5;EK;IuJO)4yu{%l&r$>g?rDvCaZ1@fjif5yL(V`lZ8n|gT3*;{& znn1MON4*?0S56W^{ntwmVkPtfh9f4xn(J&TfrJ_)H0WI6!*Q(HE70w2@n#|dpjB>L z+x1blrCn?Em<%ri09sc9qyp53LY(Sgr+4= zO@m4|fZ>&k1`>YMfI|E#4_(GRS)2iHmKQZUN}^9IcG3WQK5in04+&h-3YW8>v#&@Gi+cgtZziF?1 z+ezjy?Rc}FBgzS_{PwC-D1iM#9_e(X)1mf&M9~H;WpAhnY># zr;G3P#XmHeSYQiGicS2n`=pGDC^7tT^ZDkRv2zR1az!QSd4(L~B~Eo4bo-86&|ZJ4 zeDk8f+UGWfR->V(Z8{DPPV0QdRdsEPsx+G57TviAxVG_eaJ0tw9v=Jvboh*K4oN;Ua-cn#bYem`fYeqVFt@0N;o4wz!x$aJOtIt{!4%q>yO{pC;b0KLI^51Iey?-uvuQGtro7-1jV>qg5vjBc?hK zFnG`iV)|)?_Ocy)as1m(Zaec`+mdUa(QidL%#+*I7pMw^>I*RUvNj`U+aJ}4xcx?G zM0it4mMunZNaOKsx3I6~l~wuJ38CP}(fxZY9Mdt@o$aW*yb|6$ef&4J}AYiSB^&Uy$50PY@jwu|^!aeV*?8ZXe4%HP(uqG>I` zpstU)+H{0Y@x73vF;k682< zs0T!(UetMQ2=)XA-pZPa($N;@ADEpMnimR^v?6_)!7V6fgBR`R*NqPOn#0B5y1eIiQR7afPaimQ6X-92Xqf{5aUUu5`=o85T;)(YUl455^`PZ&C8SUt&KxaRPxgjvY^EKiVnUuLBJ-ja@Q z=vh@LFy~u-?ya9jWUFX3d5e1VC&bAu_0^=73KdS_PfXGyoS97D7__ojN#(jJ3U~EA z5?Ah{m4C4u1#e5O&Z7{hA88>8xjDxY7jr~RJ)uY@C{3v97mWR|#^zji$8guIn$8+s z;e|HtN0sos*#2gMbm(!dx9#r{Nhm&?E@(SQk+ZNmJ|mkmSV`HEnkb;$VUb+s$0y0K zgPC<>@|FpT2^;EFC_OBP5u->;Bk%a6=>p=bt(_j&zDUWb$I+`L6}L8>#$FuuZFDpo z(Kb3-U*-~19!)n(qA^jAAEpvK*VJLkv0SbE5=iY*LBJL}35-lu3;g|v+RsEjz4Yv4 zX{UkayW@y$bbyry=AzjY&He9d>Uci_@{y;5ve_=+=x()dj2OiC!&ZDq5lZi*j693r z?z$UvT2y6d>t!J=_%mAm@c}_}L zd)>Dt^eomAg#8Fa_H#MHhF#lBp3DNlR6fWkmKecyf=9{_r#nWI=IP% zhbDdwB<@2uxB6He33xgcvCY8Oq+@fZY>sGQS$m4cTapj(6|ot+i9IxbPDP|<~AhnhX>$a80>t22vP zN#p>7N$ufYgWtc-@21J#PY-pV+sMDd6);c9SS!^Q&4pSTRuI9=bE!Pm>+iBm4xPu? z(5)2U#!Rx(k0d9wyAAv2Mhs8yH}IZp1k^4j#oivDp$8qG?gk^qOi(hoyptF7M}Fyz z8)~A6d9xeh?lTW9IePmuO^+HbzS5dELX7y^*?`>NHdWH_c)^>UdMsThcGlOc1|Ow{ z+`6{#SJ>m+4gR?z1`cvzn2mL0Q>oxf%M|UahxUr|jx+Fc-q}Ah%sn_88Fmm441oLH z^PdcTm!{-*-G`J?VycX)QX|J|^n6*P1cqG-r~j}hI?88-*{G@ zcJ$DH{AJm$VCe9@CoAx%a_|#}9GUUfozKwr^n~(@M(7WZ(zq#&cNwoPB)`bUir_m< z7@Oa!D%NBBOf0v(Aid3dR4&iU+_UZ@tF-M7jgt?xZf`)u^b#l1K6vzws?xx+)-wxCLcnR{Pmesw`}Cpv z6ZBJj-M~ySN1d`xw^QqZwpJyt1M%kU4u+)&%I)tLyC3%a&WwRS_CwP+tyBs(7Sqwgm<8HN`*7N~=pKeT*!isWP8yw*Du7`42=!Rz2A0s}nvnNZBWS ziBsbhM1IejJKdU$d1JSC5>cU*XZxL|MrQ8*-Bewg;1o`c2~D0iHaMdrbhJ2fYHb++ zjWj>;WbYLE%-3Vjhd4P5^ZqA{E?j5JSNbtftMG3@`Dg7{^X|vIh`CJo%cy&~0 zeIPlqDTi*w(YWkwz31Vd zXuL*S8yuV}_JXh~bbloVe+3SC4Z>7uZ=Emm&*QZ55fJTi?Nb={XAtspu5@*vTXdtE?;|@B2)i8g}>(?rIVpG3wC$a1>Dkc$o$EtY#DZ}d8yiPw}to;@Je$_XM&OdRh8|m=@Ak#OFyRA<*bjpi1z5Lc~ZtR*8+g473hv2g+y7W1ie_}AE*a9 zqys~9`?7*FxqwuIQjS8ZnK7#ceU7AUUFHk-82ZJ)Ks0Vi!M9Skx2)YB zzF9TD7~1<$gN;9Tzp}P0QjObDauvf?-Lh&%#TJ44U#j2#(-bTWc;u6wE>>xgW_s{f z))SoMF;zVFBGL%@gBL3)psC)!xYgv(6Si)hZb^Nilua}-&T)05$z}%Hra&N$WPTC0 ztKXz#LVuZLv3=%+&}2{H8dEi^SngOK2_DEna$Fri=?M|b%RWyubAf5UtH6R}GYb0~ zUnX8z79DQS)s773aqi27_%=;uZR@BtdHI&h?;lfI_&s>Jx|E;l6j<^x<5n7YBMO7;%%)Vk2A{;G-D4@ck=SeFcQpQfI#7rqb_&wK&CV@82ekj@8NY;%Z_W{w zJO6m6-WUJzkv8`iec5Jd{|P(b-AaM~k!yS(bI3YVAAc6Vs4{zI{AA$FU!pRtoVmK3 zwx;b{otARD{e^f6W3PUWmVuS{WTTbc0FK~+u%caft{Y+VXYFRa1J_@L`beXM={V=f z0l{pUq=m(2DevB zy$n5Eq?8wJuA*m?$+u=D5&KE9b)507jy0@xWbTIq8uMBQY&Zr#)~kRgr5Qc&1_t+O zumt0+j6BACW(PeKp6EtJ4t(fBy9rL+xwk<@r4$#M0SaZEullah8%R{%Tu(;KE&KvQc!E`5C|WaFRQyY*S+Qy>wRAd#-y1C-M3Cmu6|mr zBuK5>8h$fLfYhU7&S3~w(I`LO6iZx`Jz((xMq_%@G$_KB4%rqzt-QP^i~-${8_)Y%iw#W*TGd(pKhl(&n)h>eGpH&1O1JW%{}PLEM}f8*<&^Cqb1Ez@GL zq7%ny$srlm_KcgpDXglOJ%C7+tICWer0+{dRS)UX%~duU?j9&42D(*LjjL+(!UeBA zHTjId+{53LU|buda;*vLVG?Ync>!V+t2>hmwlivHPtFEGsCrcN&|eI~1=jdy31!)U z5M>!ofvj{Lbi?Uh!duL+Yld;x*56PoVI)6XfBIz<*lQywG4ocxU-HAiBuBrta`DAJ zH?7m#)y#rxhUDqRNl)n*(3a&ygpj=F{^F^!=3eRUhKCP77aa_!`ia5suOPHVwmD&V zq23U6k4C!I;NA*=JYkM$9 zq^aG5EH;F<&0eJWhKoDL!3=o+{id6BbOoG$2OoV~=Z~*K z9y+~8f~)}d@LGQ4$tjnd`EZhz3+Qh@iT0_-7e&w_`(oN99X6K;r!(>SN-RzhO zHTT=77$s_i=K1c~5NWj8J7^0{>hjWJSV)}7j=XR+^}1I*C*Dyo>8LF z2svKF6Z_)Gom^5wp@*%($p~~VlCgy>8Fmn=MIoC*zc}JSYR)5bE;)xXhaKYHuhx(f zl8NEXXS;nBO@1g;8_bT~J&+h} zE^;)oy<%)MR3t0>ZgFat{K~N7v$$NSUuOpZw0=Nj5;VuVmMsw+dh;o{pHrT^5?fAz zkwPwTIof!mRN<pE7JlQnPCl-tS++XyN?_%qN3V5Jm~~3U!pL_@IFON ziDrs4*b}O*`FmUy`Ls+-h^(L1RcYa6%N8bbd%q5mRgJN`dNmK$`BGEkh%0`|RB{+E zW@uSF@chx84lVz6)jrs()yqwL(Rn=$H}ks6-*E$}ayp^=7%@hOWd8{Y+(L|$o)0Dd zj9z0tt6XL5%-k@yQB?d;N74A1g;O9pR8<7#tp+NaW?LGAz5vjcT4By?EvBLx?EOiq ziOSG34@jmumE_yIcdA2oZ=;(}hntF}eblbfLLm6<3`}!x!E14~x%l2?u8ePVX5`!H!G_qXer*sgcFegULs=wooJ?mC(ve07gMG{T+RgAjJl8t*)L$yJ~Qy+TABgQ|i#0;FDyYub4{XdGC{~OrsYtb(dbO{?{H+T3_ z-t=wcNi3^uARnDc)wd?^^8Gp2ZqVX#bx(PiRBGXmI^!P|7_ZP)U?KPQ&uJTeHMeivh zt9GnFtV2PDSA(wzIRGwF*lL1U#e4frFSo|niMfh}_o!7I@n@z!Deh<+)`N0g?F#aZ z%;R=>)nC=;u(5mx-?dk`K9BVZ3RCI&qE;-hd)XR3k>$8!jm%Rmxo(jC;UuJ2k^cH) z=sQo?+xI>2qb^kfw^g0VP2Kk0Yh9?KD%Qaj-M%;AYKALiMlof&qRuAYt?CJ;DY{5GC;PB1EWu>qIPM*q=`{3O0>G*9F!xNlgwQTW z_)*yB7c_2!k6|N68Zn5GSB9888$Hhms0Acs(WCht3t$POpYmr$8fTpy7h54)itav} z*ow7$iB=)9uB<*V)Y<(D*2(goBVKpn70?ivmUm~h+vhP^iQ*})kdi++I78UZgR%L4 zrt%{6pwjPh+afc6hgsx!8cyMJ-@WXQb%-!zd4Eo30Kh{($ikVlT7TLkYb=`~Z;Edm zt({MalQkNosJfviT>o|!A;Bz4K%VH}4bRJ^1h7MF?j?D)jegN2&O9!41pQGvRO5>9-woyQcVE66O-1Z9k2>T*hX9mQG}vNPZ}gWfi`=X2)y4J z@N*&L*^MCYl6t!~rGP;2!>&LQMlfp$X^O zmqXWmRL!|)wrYm#l#mD4FUYH)+Bw+zcc`895L@USlSP^X9Gr`Mu}G&}Tv@o^Ox(nV zlegJY^mU`HaR?>e=hPfW2l?z2!!0QoIe%G{l`234ehXZ(FZVX{cBZPy`TZ>5?DdA~ z7Kix8-79)?fs@PwKqJp~K$;_hvti?c7`VJR{R{MEVj;fbt0j|V`(cGvk~5l*o!Ye!QZ*6 z9?LcLp2!7tInGVR>Ve(|D@6q^=`T#3GPc(Kq3v3!7}n$lB$bK%;$NOUpdwO6Oq3!m z7E)u|C`BKvi07XO2(8s7xKjLp;DI8&wHy0ZF&_}5LmiqAG8GK%KAgR!C%;}yg%-V z``(p?p;v=HmxoQil<6q864Q8p6A|cmzdmnGE)>^!J?54*mX7|tLauplgfJzgP%uU6 z+W>e`0=|q;5&nfXCkLZXIM4yDpa`vo-D4|yLZ<~swN0nDePfOssr`2AhQ)EHq8nbBt#MsNB)a+V(qD?3CK z&g>x$=3&WeOLJwjHm|-fFt;lEV@`Je$5{5Cheqkk*kxU}?plvP&)l5By?J}Q)#CtZ zWb$DlcZKL;B*#5AB^8|a82fCEN?TuO8U@93O?w^p*vir@&CfW|9teKt*3g`GGIKsj z`ziEdWq*Jx%#Dq{_c_Hv{6bDyZ%*crDpoZ+_g$R~gKf8x`z&qJ*gCBfgl#uNi|T<^ zG@se5nZ04Wj&#u{Wl^T^jbB?FLVHukcCJVE7djSl=`(}U3Fq(|2EUvJ3?2zWP9kZ0 zTY*D`1~t+a9jnzw@=4pumQ~kzTdZnP5(RxOWn&uKqccHcAej_V;>bs{7KP8MFW!Q0 z@>2QidKbzNrh0}*5sw@v>=E|dQ5rpZE1q!ZQCy$8$X(XkSGq`wbEcU_E(KnHqx}pb!OYtF^2v@ zPU%CyH8r<=m5TsccKwe7H4VLHm9IBneroKmV9TF|U>LIq_lBvcI}IaJQ}I8k6{McI zqDLV!UQdQDqFO+3xe_BvPcz6-1ShWzoT5e`Eu=)F9)evwC-%veY`<6Z4g78}H$&W= z_8=EHN|iJp`!3MfxILCZah@%o%{Me2y={Vs0;G|b6xzha6x!NH!}j^(nG!tzDR}Hh z$oLiHLQ2`LvqvC(rFk*f8WiBNiGQ$MscU12Fj%Ym^Q^Q$-XDqb6^LyvK?sWyM&%#V zzx5&N^}UcYZrgP1^_x;nVTT?kJa|kuK5RE;F}eQ9Bel&Wsz^rNh-HfEoHleoqGvUj zC4p51b40$)+9R!M2yMQpN%I}29cKD_;P=MZz6J2C&vC;Mzxe>QNNL{Rnk+5_XNAw~f*>LnP#>B4}0|(eV5gKC4Jc-oHF~&wB z3%V|Pv#6HtZcFzrci`DbGfL8z5;OAII^LSp);G4_h*9D=Q6gW=ttjz2&w?czJb>jM zlS9Nam~UOa5w}o+#o#KUEYZNQ_|2c2iA|vQB7W2K!wlOjqf)OW9#g0>%^qI^L54D) z(Od_3u^e>;%xv^|7)Xj%JEY_~vcHmP69zfxKkQOqj2!YHg?Cd0)spswIt9a_pSvAN zy)h49sKbrF`xZ!C*5Yfa-PcJQewlZ_h4!*RAM;zdILo@)>;$z%d%aw;HNN7y@GQdN z3xi#dd3C`mf9x$7F2(~+ks$v{rCCGvNyRR0d#2T^W#cTRmEWW6 zkTC9|RX?V`^(hN-Dp0|*_C`3)wSe~OG2K-?(%nHkl@+O?#MVF{aI6^~HzEq;^91Sr z8d(_XH5YqO+Mm!8-~z~3Uo~WQLcMT}q)GJJ(AXVs#CQWb?2w;F>x2Fw%$n+U7Psc) zZf3aUGx)@Rl_Hg8Tc3`;><5k|U6GO0Un;%(2O=-FQ8*=7^onUqO#|8yBWS&)%qWdC ziSeMyp`io)*v&*^i?V2CZ0j7p38IYdZ#q3#^(^x)D<2iBj0m^PQo&a&PTE%A(O39I zBc2b=$drEqEeL0&ez0f&HLwt z3Ean-1MkxCGKj4{qm$=-V1=&4-Ll9lYMC}8qMa7A&{LD54fBrc4c@Tp@r z@PCK>MgoBsS?4#mXX{xq_+;}(nqoa(LR#1(g-h!*{5PqbBvO&N)Rk*Uz43uDg$;vtA{u3Y^^Z$}YU`&aLU4 zG;tTb4%;r5NLPkjd9&2mFiZjE?`-$Pnh_0u2{A7WI!Dt@J~ zSW96$AbETO;!x3xr$whH_AeVx+JCCRHz-ZA1h~7l&vA>JeYyAfHqraqX^V6skHDuM zz+jN?yw@|y?*3CRr_zhhOqQYv)2}$K8p7T*P)%Dn9(D;=)Bd<#b?+-I!HXDfUPAlR zntgb!DoypE>lCN&?Z@)8;AyQM=x2`FLldH$AI?Oe`%L;_xKj>$=^)5f^3V0`6sK2P zRvFgwo+aBA;I6Fv^so8}Z=8R=nYBa&AFQ8esAt3*AjW=pqb#VAf?%>Z6L5VW$<_`< zQjTGMM(k-~FWTjsSKg=7nzSLUK!sjwBS?yhA=7h3%!rb^?KATuyUP@+6t^lwJV-iD zag<3kSqktY>SvnT?m7f&9X1)pu_Sl#M-0{Zc3vO*fv2w7RY_yN^V zk`*w*Nc~LdPQ2WgBWQqpJ#h;>S+$RC%(1~b0)j}+2BW{j?w340ef(W^D0Y)(TlO=N$^_hSdtl&fK*&b@+D(%Sqz zDN?U)hVxTD4S5n#vd61w*|>x-RVki`3uFMD9BYNH5v8rHR+Pv*3(=hzPW?qyIecC3WBJ|!k`+_tG2n!+Xwm+ism55`0P4_WUS)l~GY zd(#A^Du^ImktSVwOHdS0DFO;oLs4325wiN=JGLz4sP+=mF`37Sb;N z_niBVd(Zv0_Shfx7<-Jp*P8Qr=JT`qi4F)Qx~b2NpJwkED%OzoAal+=(f(1b6(xxNsqy$zn6KX^ zZ__^o;cUr6xa2X~Pjf_Rt^u|KH;u=k{I6~z2=-^0Vm0+~81F0!*P(BflI~T6{+w-2 zerbM(XF%>_WqEXX#n^UZ_AK1?X%O*U@t5BMA;z|RU*hg^-HU@*)$$uJ1?_kf4^va;oCkm5JVeF+P`GytVYbN(tbp$Gu74&c!$VH}0D(Lohm5t}inQQ_1@=Pxxs4> zUup(_ii~w(R?+lfec#h^>g_(&j2?%UoXU5n?d(GSkfCbj&a5COV*%ij^D*?o&R{cg z4(GL~_SX%6@m8TbhA}?KN~`h4w71QDb*jH<)vhJ_S+|+|%OR>5GS90n9}C!iM^xIm zD!HxxMN$F?zL6OU4?#h=MNkz=UZRPtjK5awGRrhRt2XjPC~OXbhJJnrRY)D5ie1CK zYX1dWbM~_eG;W684_JX`RI&^#pl^-DG63p_mAgK;)a-Grzf(d>Fj@z%LP?uit8Of>SHsIr!oNd9}O2jgGU6>&q7ZRGkO#wK3Nh& z8K*k%74u9Ubx(M)rdc7Bq4hpWX*Pr2*H)pQLlhi7?+A%)&NWNi(MxcaG09i#nSLC8 znOw8-)!9z4Qkx5EH&}8NiRQws9L-el2*5DSqrTVnt?vB&i1NB@cqe@MBZHYdFmbx@ zFNdFzBNaVWq5$Ulcd%r{br%|dyEXcG0wBHoxMM@Nvc6QtTr!Mb%FjL``Oj&gl*uCw z^Z1#s($&(sP?nC4!H*jOdxu>3s%v%y)U)*xpU`?sI4QuXpd>m`b8imUOo98q5y$_XHzaWOrWI-vWbKH_5rlr%?IX#tl>rvcZCLR%V8$GExqMQHmmgTFr3%_Ui zrM~!e7Pfu~VKQ#HzING`t*GB@u~pareogmZ-yk4QBA$XTYAt^AwS$Ee?O{44RGU6)rYEML$NKG@0;CkKo&~BK z+y(`;Pz!2?q?|sUDtsGhbdi%iaP3QRy7yU_=Gpwt_}l&-;LIeT3l8w~ehWJj;Jqc2 zCHmbU4KGqnJ6h2w0TlTctLJf45#P6NJ-xM_A)V69{;kSoaPk{r6>XMVFqT*jmkofW4ry z(o|B^t|gYhn(V=?t@#gDsue?we>dH+nJhd#@q|_LTG%lV8+)3GYm#V!M)Pte_#!Yp zK+k}KygVUf6Lgm?{GyBk{|Sh&R^>vd3oR5vkM`!ZprSyXT)`JV?JpgYzsbj1GSxh~ zVgC6J*acO?yqhr_IHXostk0Xah1(T`Vf^%TjSkCo&Ac}jw7(^9j#|{NUiG#CQh|zv zt4pGOI`ICcl%T=1X_`lD5kbngr!fdvK;vj^Zp&!03Wx6+oaJUj*!zdIV_C1ezor29 z;AsOC*Lv8-VFi_%1-~5Xstk_rlLtOH^jw3*1IhaX6C6|e#YMU37z^}*Sy*D zu9e!Rp;hl}VtMQ&`h2-E1e9c@ub`1KC#lCBdkK5^syk<~R}(apqacdWvhGHomd+sJ zwGX7Aq;vO6NnWA_8TKXF_x)h<4YWku-* zd}rCeH=Yv|umgVgKh9G0UqGwTw@W`qd?4osUKl8 zINe}5DTsi$%pme62NLQfup2qjAk<_lCdrNqlKlytF?jk|+|LCSBt~dN7p4yJ=$b{w znTyPBI-{Pyj8A%brt~z!XnB_XvM2;qqGrG3tML_eb{fDJ0=3B?bgRto+UHu5Sg1=*GUi$6+t^2Em!Ky>T4-qhRdK5W3$5K}NOkCgl z^U|rgLMC&jaJ%86uxGn*`)N9&5BRfZIYtW~jtm2{Y}3uP&g!~iP301bXveF80e!6e zCl{4D3&+^dH2?M8Hi#8TMJ4xRfw%k`HDu;hJ5 z7p%cowHSdae0ww)dXLc(aw%OeWRruSN~=cSy7}m75)%qwgY`IXt-N0b*i9{~Ka}Qz zFy`&OZ+47YPi|&N-~o_u`rW zm_T<5_OpzR^~v`WpC=0`14Oh)Z&gTx)gi@1)0#jmQ!(e0{*4X*&+i_Aq1~ISM!$7u z(?h%LWvLbC?;GIVT(V|mxMaDd2EEI9ae|xsx)cX*x|k2F>{MRXY;xt&G0%b)VH!KCpLd1V46vF=L zh$})$L#wB+``%B5@T@%D<_~?=jRnkS{V`BpMb>A^RwPBM7L>aJ&Zl2DZ zkHj7o%r)iSJH<-gdpr?p@h1@1tN*krj{7KqX-C=2{dV(^9n-A)+gVO|(=kuRsf1gv zZGG2;3NFX?Khm`U;^G-ql@GUC^C*l=P-Hxk0bat(X8< zVB9b{6{~M=#JobOBv$u&+?p6Nh_Cd>n`bIaTzOUud0 zJ*v?qJH@OhB(+UA1?w;gIQyuLim1bPnr?v!cftd2jtJCT;4Ui;BV&DvtdTQ%aNre= zzRUp)cW)|4v7C75{N{9AGr|Z_6-#_bu0cNO`}aOl3T#$|w`!&g6tJklt#S<)tpCufx9n?&hu9`>2BCxZFq!8>A#or zAHi6B81Pw)UJI1%uEzwpH2vi8G-?9!)yyDX6o2dLn=D;W5{)B zQ|hvN9>=|zSt%9t0_V&{2;R1%aR_4U@)86v>4LvEAM=u-S^H&(^RWo3!!Svr)73Q2 zwi8L^nyqG?-YwaPkiXMaY=QbMAIL)N(jc{GnURNy9Za(&V?@Xx^U<_D-CllI-;$QUIzh=mIqcqP*BarM9 zAlz|gEfVn+owKJ)K`Mz;%_4$kE#b z?LCYH^2w^K?)JDc zrI3!puHvAo2P}j2xX|)Pdq80$qn#te!0FR${KfUSYWeCQevzKVI_p0mos;EbYi}#y z_ka3S`o!jrPvxxtA|0lb)%KyvyzkEAb{-(L9tuk!^_flm*0T{b?p8F`ln+V%1nv0` zrSVCate_l#Z7h6*CHj$h$tQEw*nXa6{-m8px(^#6vx64Ej4auvY4{F}4*u3q!;Aey zssc#2)rCmw>omv<7x}M%9@gbwjpavwT6`A|mBkh2KXMJ4n(qxqi)#f9HF2O=M#ZZ3 zTXuPP)m}iUjO;!<&9cLHCX;#xdHjOMLVx$eS*redv3I`oDiu+}PFfHFFyrjSgaP>Q z#vP;ALDRjL>rAuBe5p3EnuAR3&`d@0Ep-X=qm9dZNlZQVq2~?!w(@n3KcqOzL!asu zoK3l(B-7kf(qBhR8vr|>hF*;Wwan@VrTWQd?p@EWq~8uciWEDvOcg z-xqcT70W5*>JA6Eme}U683^ag$_BT3EC7OOYx}pl%u$XgHZ$PgVqt zp912Yf=!ft{VokZJ^xzWJ&N?-6E@MuUwglVznY`eoY{5qXB+UWhx%w1e|^yWqLg8> zCy;t9Y!=%f;_Q`^OMa^4Rk|%F&HQh|MV(vGcbStUK=3K6G>g9qw2O3hb6yX_bb1w| za-LgfCj5EQNl|nwwk;O%Iv_;T>jKX?$B^KT*_-B;ig^>5WpMM(rq}z|wZzkgrfD}_ zncp_K-rBL}S**rNMbQxCzs7^%KS^hHZ-lvPK4+bGAj?i-_(z+tbe~mrI{g24ZSvnm z3Lu!ViNLxz?4c#|Q4WIm#>u*vTAuUj0B6iva7(h=w@Cxt(mk*@;F>Vqf*#Xxbo+9+ zaYkz*Rlm~DpwhCWlY&wl?7TUsyJ@v%_ux)rPlz}(Ud%M!oWg9X#dCsoi{1Y4?NBDh^H8F7Aqe|K7n!&f84(S~oQfuYridRNo zSz=yx6r~7H>sG>G?hylbIU!NMHd6N?dhuwTC%T3xYb28*UB?&~*03`IJgx1HyvVI_=-vto@h zOBptd^S(%O`y(To9mvxFRfiZneOu2QE`gKxMQh3`d*`K;Cb;`r*lO)bMhj}zcq3jAx4>oEOtJVO@_exn=*`CeD7#TOUK zL=AWqK9HeUV@K7N1*W7qpxE>;@4YV0Lk;NL>XN&1E$5-~r=%ro{0hgVlN7@}kDn|s z5l_pO07rm<>nEJo(*y`}=8|r} zLpqdkPM+I=#$$nk^H2STx7H4@WJk@^3vo_w&IE-jHofD%Da3S}ir{1^mvX;2`VF%D z^X|#wYKA`2l929fE*yJax?ZIR@pa=)SOzmZ?$*<1Y?NiPcMSQ&uxTinbV;@r;=?Pr z`t0pQF;*A0wt+!LhGurtorlv+B4}Hq$Ex1kIHEX}A#`K!kG4@U+uzcD-7jg5j z7PfPii#UWWSmCZbgB#u!BYXwjXvE>^{0?c>gdiC4?r}P=s##e3>l*(Qy}JIHqi5l< zevlseD$4HeIxX64Ww)*i3r>$Oqb_GBS(awB#er6ouKx62lrI?bWYQ9kmFJM`SR-?< zR@^0fOH}(|^*@ChN=wUoXZ)mp=jYVHAY3D=t{GP&tF1ny+_|6bu_2&>!J*cTLhBT2z|j-VgVeJ=ux`Q@R-v8s-YZl@b^U23q7dB5_qv)B(rl9Al*Y_ z=lTTAk(uk4KQjIwv`pC6ri0p3zqSpmT`3zC)~oUhSU$|V?nL;sKufbO@Z(5ev8qBi zytx29J#o)ZOxgP>>KQu~G#pIpQz<&y&_?yLm}zvweb`4{a70wgx#^#;r0rXX!kaj+ zZmwD4oaf@_0^@1b<=kbzaZb@#N;~scBLIiaFka9w2-_AGFZ(^#TVh(3o%tcv<3?}A z@p+&8W6qbVyKiU)s$*9;4e!%w7t4(caC#2Otr&hJmFvJ=c15c1->x{L8v6hEGL-Ck zRfV@bbqqrJ+yTNSfeI?cVb7L)??$)8{G@%L_HeqYeUwV8+dH0zac~MYe*RPAVdxh6sViZ6pa3A+p5__XRPES3qrXE$=;DgN#X#oiraq8JsQI;XbB9NX1D z0r%wW@^NW^DwUI9bsJ9h%kO_?lpek#z2z>X36vh%X&%_Q9u=!?-?KYV-Fhv7N!|K% ztN8lIi}<7equTgS*%A1i+jr*=remyc)%+f#zX!+`GQ9wwLYwZeg5InqqGlH8u?0Qq z_b;w9UT0grd<*tS{>o`&+DYiseSHyo*9rQdBkqa&;1j*Ly-a06wlO0cw7z(=6Q(&M zvA!+znM-VkR}p!!2hRT7+94n`iUsc8zVV*)(ue97An0Y&S)`&pz@n2qZ@b#7c>dyr z)GKU9e2dbSB5AUlg9k%zzNWIHph?U%513GZZPQPKXSKelpKZTn@SXT-n56M%l7}4) zcPofn_vV79tL=hah4{LHY$tPmp_DvhsS@o1#+7@Gi3Tmr660hi$sOMF>-bx*pLVBx zm`Sx_c^f3CyaBH-uA+KK3lheZ0nVdu`i)$?qtO)$lxnN*oh6${kQreVOb*(9bJ4Y$ z+%q?wZK1cPJ3EIJVmy0f(dx^gf~Bp0J!D@=6IkV@^D?zNaMaYATG9d(hc{+c9JFPvw5Ae0YWfFq;TR#$)cWT{<7ZG>{TmbJFC)rZMZ=%Qs=f$rf zv3(}IKB{HAtUj4_*CDig|mg1^KOOpxt_v8n-ma+7kr4tngV8E81 zuG^zTO*x=K?w2>R=(|Udj5_XIhyBdq=d7_#>=tv^uHla+`@v`u{3_}gh}VJ* zzxjDPgsh5u6CiJETWIH^sQ+J>nTwsBg+O&MYR&3}k)@}Up5@t1cOzeSMTS2!gBQE- zdO4R$iV-(=d>T9Uyj~7ERhPaT_5L72Ik`r#n}dYX=K}lP*wWGZ6{JoZ%NezD^2wmYB}p?fds7 z@TdQIXRpP?Qe=fRybf&NE2O0gRb%?@1a8l;QL3KiXJRa z@@^*&G`o@_b;%t@@>~uNBiP8F50m;txp&OE8wbMqmkBknK44mu!e;)C_VUweUK5c2 z_VKfODSw3VJVysyG(T_(<^2XqmQu?ywZMTw|MSzTwG!l;kPi|?{;)n9_ynyQP7l@# z6~4ZP&zNvH)`^Z!>xV2Hjl>dG6yGDo44Y@K@W_6$g< z*gc7L*(=#S%&)yT-sTT<7Nt%M{=Jt`$Y`s_QfS=Pt`!y{^sr4ZDUBQ=W&iIn^q#+- z{-IN?&~ZI7qY>fwuuQ5n@2yaz`}2@{$j;T&Cqcq#z-H5HpJGO^8$xhk%I2i~UZ+hp zXl8ofDpq4lX9Un17VpPsD>+84tIy4ug>A|UJ(+|$azj*4|Ety7I#`NkIO=(q9 zx4%S3>j)s11bK9MA&TXPP2{@otfN-at7HCyo|(pW)RGx!=Xl|7KTcR|DaEq1|eHmxgVOvuhGo_YRo zh<0#2QY%Q&h^DRE)g>ypng>yEXc+7kt!aW|PB~PngsHO7Xe`YNG+Unk4azH4u=sW| zLOa>6VWtM|O_<_cm09cK*LwJVW?qG{d*c`f5tBYl%C{ z11A;GzeF*5o}4N{zbCEsf3>ypC=nmIFHl5$t=m;!_TZvsP(g&t>*E?{mP)2dau_+a zBZEw!Bn!|wS2B&<{ArCXF8pDw&y{A-@mx$He&Lm?#MtX^PwS6d#>tm#d@SGSq>G4h z-L`5=f!T=-<$k6EKZDC!^fHwgir!zGbqq~UFVGs3B*&{1l^kz(sPZG9VwF-_?zprf!vd;ajEQ2}Tk3}BK11(mOK$uogJLq2my8D0*wBk?2TMx?LK&*%GWkk1 zIX5a((G%xhp1)!e9-!)*aTN}=?xYD`<(FcU7$y=9R3EgOdcsI{Pq7Co{i>`}32qvq zQcw*>2simZrfbq=^=^iC11FurOcrSus_SPb+r5+Ri^a^o>5i-;h5UlVg*&T195HEr z?_(w?|A zG-)_@WnXm>Co1(fcvo0(ud^L;ayz{pZS}AqLKkf1OaXda=yq@w`?gMSkT-`wq({Op z@p4`-F&cdvY&AX*GBbperK=3Y099e^BsF!>O6i$Vq&vep3IO;vxb%oLvW z$GY<`q*Do3Y zYHTxrZ-#ITRoeH3Xd|GLa*CvqFiYxALLz=m#>eMJ&MgQio5L2zl=vRe5Oq{kJ@Nh4 zAmYUR>ZgV#o}y6BR!Rt5Hd`&?Op-Ldx9FZrmugwv)09qW!}dt)XX{odZ+J8&M+)2a zXhf-P`jKXgmAM4Vwc{-V;BWodLaE=6Of_9fHp&+3Gm1^T_GEH4BriH8;AbL<(;W+K zJe5A@i=nR9HoT)V(yd%!Dl)&j^ni;FVcIGiRpT18rQkC|T(3dQw-H%XneLsFui&W| zx$2n%$TmGho7{B*FrxdresiPvu|BBxeT?dcB&{&o%VzUc58*oXL0tZ$K!f?6?-`-k zPTxM8>s{icb1DC9FNvldV_)NM9NI;{F#R$@fg146Bui#1eJz_(&0ix77c=;I%2y|p#R07igkX(^_Rs^qrkU3QXD0uZ^*LF zWwE`!ik%ldwS#GcHybd}1S2N_Cczaj& zjqn7;u6;Yp(6PFd6bXKA7@RFsEuPbkmD`^XQ?6Q{(-3zy#irvWR8+8YN{Ps9spMg8Y|cK2>DdWi^yk{-qF=Oa32ejH)0Fi*K1;P0rxb8DpRyrtPb+<31Mr;uSEn0e{izj9x~MW z{ClL7(NUJ=P)nJgC=^SzyYh+=n&;o_n}~lR`Sj$imWDBg^UZ-~ ztMHr)TyzEBcQ5PpO++XKnOtCH2{Cct?>0Od9yBF6_;ulSo{$v#nr3g{^`2Kvr^>0| zM6GLb3R_vEBB-p|8#qG@nFZS|a^%gH&%YiM#|5Lnj`2uhL_7jN$yyUMlz3lBxfYy| z&XF8HSwyF?w%kzcI{|F3vUls6{)Gt62|lXo%Labm-D{U`VD_qcV;fQC2#~CH6JlAQs#UBf(?`i>r98&nM^RIFMlMs6{ixCthIr}^&W#7jP>MZ@x2 zN}iY>S&!?U{nJt!93f;9LmqF2u_FdoNfDU{YW1=cboFT}xfO2jqZ_FcM9`{5w&3o= zxhoX>z;d+39xHv2P0qDjdh*nXGmpG?V8&5J^vhIlnuX~fK??K%|63tva z?d@V<;`{XH6KPbQgoO|eHufne_+Az)>)nVB$@ok*N8A74GaqEH_2c3dZk4l=RcQ8C zbT=j}tKFBhRUscY+x_5ANj|=pT7uM8%SHb1F0IP1pd)kjR}2Sge-%3|vo?B0JzgNV zwhWIhbJ^&hJJn$)(-o3mM=NnN4CJ>buFxExOA-grwq)+@HBlhyH;%GS#*hbPn%>T# z-XB;-B?>%Q1n?jF{W8kNfQbk1!yG-JnVMoi5VqHFx18XPd3Kp-vE0Z)HOfxp<4S z;mr}%K<}-N5g_JM8MF!^xei1lq)d6gvtZ~tlKP^t{!7dfur8`Ssn(0KytJ|(zrZ=L zUVZ&9KaJ;0C2NkjZuec!tHIU(?c#C!7IB*jd%{N(ieYZK<2kF()b=4#rYg=ScK&5l zuEWe%2j!MJt)82>EcopXZ{kY$U$#^PHCY7H5p*4dBNFi>;N`J`JBqN0FP|q#B!-~# zE!c(^Ki%&0%fep-5PF}*xPDmt+cO(l_TV!)HlyvqG`L2F2vH<$Cp7!OPCQilcy*j@ z7V%1dhTd>(?Jvo%?&2e#kIe4SS# zvp2brC<>%B80NFzoqV*x^uj2_ci+Vj?(2e-%#xAP=ha4Kh`kpV6{BC6)E~XC@#LcS z;82w$GRl*R@G1OUZIqha5O-PBRqy5HCR8~=jD1ONyp^-e{w*EylqpF7lG~NLpm;{m zW@x9E4p4b@x|RX0?j9iiH@T$`_@>U<<(_6dwZIj+C5xL;YipXV0bc+|$EzM|MGlK) zUWZRo@n$AoQdZH;bV_*Hq>{?VJV|%3^tL~p-%>}rkZ~0kMf9-55U9&UIIJsfZ+luF5+4v`PG?UmP-mAae zO)@_6bM@!u3RO)u?yLFezFThCoAmHxyRZszdrMQQFG?87B!u^?`O5r2p=)#16QObo z!KO+hGedxhyZ9TvJfO;C%Hzjv^DZlz zwz&5_-yQZiZ~kgonXnKxzt*9Qa~PfrFiuFDFqX3RlS>J92Dm&qoTznG0oL6e-lmX8 z5JZu$r05H}P+U*?fK`TyK=N4UY_G!GvxxX{MV0u1`{!!iz-Z!EEmU516}Z zCsei;KC8Y!x-8UHSn?ZMJ#d?~4D@VmbMWIe#5CRDJ4IhED_COMUmjNY`RSmXqaT)8 zO`>}n53b;h$H(>|Or(DETHcFzs9p0RibVY#wu*usgE)fh$WToRXF8-}TiE4G)B^Tf z0wg_N1Rh9C_@HozaQ-XsOsdgmXa~a45D?NxKhK*OfetDTQoD_Ps$5r zZKrzThnTM5RbRo1RW53zNSiEv=q)%}sA74TlN|q}1@yGL9|p30zcSiimEm%>MGy#u z?+j)tXTh^>XXjZ=_bO+m_g+NFR6ajpV~bYX>G)E^nN3W;L;sN9Zo;qA6yT!i;3-hD zXyvS1H$q+ze_;FP{$Y>->b+5Zb_#?h5YU%9T7&T(v?49@Vz>6z+yjL_AAG=XAWjR` zF{uv>>Dp7y{En3DHK;gSbv_J_q+`(IgqPozxW3XUtGzdSADdHFJ7 zPQ0w49DHuEMu{l<=IYK{{KzJ9uQ@y_!Yof@+J=+CXKVlS#^&X>&u@f%E``X^y~G}O zDBe-7Irp``9@f-dMa83}^VPFLCN7Q~uBnNrG^#fL}>%gLzk< zE54`#{9;lq*-3mV_RbsW7~QobN^_>3X06ut2H~NZCpA!cP$~`*Oz0hUa9Qka{y?56b0MkL!7(c^CH)*}YZ+OoeHiv5X>|iE3C$iQ|{QS+i^I zQfam)BX@aieO9tAKE$;;i}Yo9)a~C`AeUaV1GpMy5zOWNHz?Xm4~DI>BK<@|YBYvK z?!FwuOx_VO*1a_!$D{M_zG7Jcz*BsBCQHk)Em1+qwCpz(Su&*M_U`N#gBvvT#&4&# zPk%3udzQs^%;P&gE>1@14M#r){A4`)`tMO0B-|uWw1fa=H9M}F?6ArANcpy44zR8Qtqns`={8J3i0irsFIF ziEbyvxZbU)eygBxEtCvh%{U+_bbrg*np1iBCKtL@H$jx0Td_Wu7O0TQ$4>>2Z#lHv zNE1_g6v4)nU;Ko7e&>j8rum7Q>mxCIQeuV6O6K)b6;5`h#;XV;wGSTe|F$L_MyXpz z>b@ZTo7i2_wcVY1i3xS3{yX&T-J53grY(=vmmIt&P5fBgJ52~WM%VA+?jPej1^SzB z)bT7mD~<=W!Bq}3^NjMt*}$dZ)C{a{1|W+{ z@9K5kmHLb`>mudF8@FB}?&BIt6_D z8Ifq*f<4Bx!(9C_6>u2ltdDd?I*Z0bKft;C4_9HJU34vpb8U$1%0+o;GzurGpbnK@ zDP2MGY#Vvv{-pTJaC&|WMj7CEh8i-g334(&=QedncVPdd{?=?3mch5i3%`LsH(3R; zNpaXU(orOXj4l=#0J24&tgXAAd{Dc3G_T@C^X*qoYP5d7BN2fU0n}}Ms;f<}(l7@n z{)w>WLCG}0*O;aY-P*mulob*u6J%ujo+B1t6naHrf%qShUQ!9GLgGgk`LT^{-O3#w zbRgL5=xqy^qnF7~IZ{um$c&aK=$Eqkn40`jheQ4V{LeG~FsgsFvpM3A*~~RZrh_6C zpt}RLlK6c1D9B_KwsVhx^xR+yjgiW@5LQC!%b~IQ9O$>`k!^22csOBSe_BEp9N~Qk z_jk9_xUvT%&0PBxR1%TTFL^c+eR`BA4D|T?DV_;>bDIrMpd4#D8L?Vsq1pUmV=orKdu92RA-2Ni!r;Fk7y@#i2^WkNG@s|*~j zy5&nry-qW0)&o~ew1Uk~SJO|O%sg7l41Y^msEIY*NQP^e*i+LFoGk_CkQ>Lc&xKY4J-ZDF1(kO$!$Y(~U<=mcs z2m(4;#$1@0_;fu)!CULE}EvIa1v;2XA@a^IKW#@KXqv zkVJ!$rN?$#dbax$ToK8s}Z_akO(K>R7&!uOTaWZ16%;577R zah&V7DT1Cd`HFql0+{;RxgpOF1BRNruM|E;E9tK7*Z)~*`reynk#i|`3vn*U6^L%C zx+1DP6WpoLNSa>v9G;MeTLdIPocgnOw8HV#i)%{p-DZ#^W%hY@+Xq+|9}sZN^St4? z;ntEoN?!;b$Ftex$)M(N`xzsf!Ux;oedVt-FbryT`4`OW$s~BhYQv+ucHTw23c1(A z!mD*&{Mbx7X8%U#hO%*-Y!$sNedw6QxQSp6e zbhyCTzbN-G;B#g}1tPKu6-NeqEq90I*)Nh8Wt0@uxN6G5 zHyS*Lv<7_d zC8kGkt0WQmEWhXWO=#yiQT)5c1>ioP1m573K7yv@*u?VKJ4+g85h2DV|Er_40K#1G zG*$)(USKgZEDHM-9z6x9dIZy<3D`f%Mh-d!05ui^=n>&N3&FJfWI%EJ==0){buu+rR?Kp2DYS=dfoUFW2G8RNp;4=uqGUy3(-z@>3+6P?Gr)CnR6Vxrfd z#;_FtNzbhCr25ZXdg4pMJ4Jpa`h(4T6bDxb71`l)5}^2655fgYa7e(15QV>fhf-9`1j@R-Jdx z8IRL$ZQIf!%4zFhp`LmsiURR(2}VWF-^7`*%9Ul6C{;}Is-U9@TOFtLpqlf|rV5c1 zVdC6ieSf<`u-fuRqIEV)CB^)-v&T{+leO$FTwJW=vzRF8Oq7?wx>8pTlwLARx%~sz*Kqm)>AWUz+kxJHI;x}(_2EBEB+*%(z`BWSHGOwqtraB;t*sajP3xP8n4p%;tkH>?XSrC?R6%~%b)t9mj;U!$AS7?-k zW7i`25y-CJ`*eI1SU^AN=cnt|`pi2V-LZcC z<|(X1fx?69Zb_)C+H~o)3T>U?T?y>Bh0|^YDb}wF6hF^g!rv-YN297cLph8`Q0;xG zZGL1^T7<(daf__b;|tu!8P^97BlZX}7ROqNIuxFx8oy`w-H2JgsvWNJx|4l(`X8GI z?^~Ls)e+Kp%e%$2h5TeV=hvkJ-#eWO;tM0K$yEwgnmFWtz-wQ}R;+mHAah#)MB8v8+05Li#@C}>5+z=7IVz_G z4Z5`c{kToJ)ju%Yl<%U7c=iZMt9=qcnA{h8eB3~m`8``OmUq7X^J$+o<*rD^a)o8% ztTH=?PQ`J57O_!jLxaP|p~uG2+GGJ=_knf#u>ICVURrmwkftoer7`gB*2X_MmZ8pO zm`M2xQh)S*3zUA8eB?LnxQjaE+)~)_KrUn3`?j&whgPX9)T_Urzz@-064A;$!&bc8 z&AhAHNcV>6)Axdi;GbOIUnX?Cx%)XOeC>KniBiC$@v}>Dsw2OO*ydS>;+8H=u1xnm zzg##kz$;c?={TIM3vVCdP^(YuLHOZ%QMhmz2JSwNbjRB5j3LNc2iMj}m|8bD@t{Rw zN73kap2^21Jy9J4dDOX7K4<9AAu+wD8=V_8%If(om8f^NT}?$rQDg)98Y=MA1^3o` z;&R+Rr#YSFmxytg`|cLlNf-TM5ZeXT>rFH$2q|Zw2BTTNS8OT8N~@){k&6vSG8%xD z`mhxD+ABkRVP~JwdOXUM`cUb!=y2mGYTtqItqf2=1!)&JN;?*vx_gK2RR>|5zEmEH z*)Jb{`3hS8dBBOMy*jFKunmPKqYM8p01EL=a84l9BLSiGfk#Tld`Fdp+Tg z0DPj&)rLig8k%TMLs^I(mhOg+;|qeYH>`HvfryP?034+s9E^}i{Ue9-r0q&0gXM?D zSBcwnX;&8M)3vJFT1g4s$u7>}H2&v7+6U=@+_MqJ!75GLrd-5bdFU>V{4a4hx9|?@ z21f^_!E1C$!f^Q#;WVd->C$L8rH?0h;As1XU-RSRkM0)_S4`_88RY9d#*D^_G$6>M zmH0?e?#l*yt?`>=>JCfzhu_t7zS{T~K?csP+7f^}#1He*M79Le(YmS7*Jn z#TP9X^c}MS4utlU|0!@VsVcfKJovXA&R6UD}^8Ga$D?xnyF>p(tZF;jA;sD z3eI&R^ItjNH}RiJ8cxsJ;O~?Acwrt9+>rxu?X0*I3b_bbHw#&7UQJ{_(yoPdBzo;c zI=`Y0;4kheR8oFyTYEP64vq)A>89TcJ`%oLxOb!?9MF}oR1;u!`6XJaCZJg0CgdG^ zsqbbpjPmyw)t$&HB<<64|4j@1HAsolcNCaGCF=xL|9kO%CQGrvCprD+*)S(#6`4a_ zUik(+)wF#EphmJ~l?%HAK?C%5T3n%G5s^cfOxzjhTzTr9G{gw<{$Fgp^+S~5*RM+m zNFyn&q)1EWfG8aTN_Tg6%zy}pq#zw5q9D>B9Ycr2h{VuC58W{X!_48k-?QJn&p!LN z`yY7j`&sL=)^**zVY9ae)J~46c}gY^EllCSR>;K%JD8^Tc^e=_`Xcd_FXE0n{{*oj zxi%uM2o{3k@U8nI#trilO({zb|!{z0tFvv9d^-RB66ChLmbkQPdIWRfsS zbZgcGBcXJkZCN$_KATR*o#s=HmM4A_IpMI2=VmKnd2#%J2DU;&(TX1C{KkU87jR0L z%)|@RZL7S9kyv39aA)1tRM9%FlA>?!P?6L9>f!aTKdkV`FMYvhxc|3(z3ApHSxDz^ zuQNaP!N`#|<zS)R5g zOqVl4R{O2QiygF7k}duRf!9!S_L9Ys-l1!SFO<*jzVuth{7WnEn3w?azL8&| z&w3s&ERX)-Te|oEse(<{8b^as(3H$7R*K! zK{;N5cb3#n<336jZFcg-f1NWjtXuUdvOjDJoD*?l5gG0G78i=#4wiU1w$S!jLX3#? zkAn&^{jv6jqHDQA`C&Fb{I3{$y^t@lI8|4Qd(LshVNL*|gSrCaq1AyuMAE&Q@I#k0 zt}^70dVj*k31R(lE0CCi3{bnA&B~doCe$$}D9)htC{B`fVU%Lj-5{&$jQzAeg;hI1 zZ`o1)_U7D7W3+SqjV`nvx(ulvg_C6X6W5nqcynN=wXq)^hhiH%$Pt125uZ@9L>)h4 zs+BhLo<|xcVI-!f?7)SxUs5k{3JDj{()bPbGa@G=<(Z1fav{V#-OV$**8Z->=%^kT zp}v(sA7WWEk-_!vTL&Q3>49AHA}=-uyMHwaIZyS5!Xv#qSK)9Z0)kt6HxYjSa3sS! z?^Z!b3GT(vv&yvnC#I!NXDt+E7V%f#pN$;X#Z(NDzb|1}uDRvVgUz;nie<847DwX1 zVA#)9;nEhf8bu?#ZH|V2UG&Z}Da}ZkitMTw2p0OXP|5Jac!tkSF?3B>$g!{09vAs3 z>iq7R$lu@pHrGg?YU@y1qP}GV2VOUW&l4$m8j&i>vFG{NAy;eUii-Ps zL~zol(JAH8EM=jM-^Rw@V_{}hHP^-0OgiRGJeW&WoYuPn$40cz3&7V+Y2h0hPWS}_ zw@1;?aA)=OrBh6Qd;Zvy>+{$42fT8BlVmuZSl4%BI(kZ8>4ZlHL8D2O?ULT2j6~Rz zm82)=8M+?X=jnxv`aOB$*@a@%72L_I_6lMXvT-T2L_5Xa2bmQ2L2!2*iBL)j^^|ozD zy|GCzxlx~-DA~&)Fq~K~1EmZjfS>kLxo7~?+DOI$ z+herud!lC5$+=`tQreYd5<(Dr=7I;o@sMemT@}&XfRK0feMSd5qa$@T&RjODB*`6T zj%c>%viH@M-F<1Ugm^m3bbZN52Cf>-haBU)8ev7x5+ACA0)XhhV2Q;jAG_T z)=gpuo3lPy9eicT%&AaN_Pgld4oorXs&Nb%lq%(MupAO2~~#YRHpKbSX?z zTf3W|dFg2lI^Ay5B>!YRMd~Megc7nT1l1m9pK~c|2CS3^MgPMQJ~l8%X(t=~gI>N^ z$GeFTs7(42_?C@Gx@&tD)$pnYfG%m}k=awhQ>u}|JKGw=!Dse~%qrjc(|!v-29KJH zy&_Q{3Uyw->1h!_G5hOZQAcOAN^|)&b{6#3&5qg;S`f-RJ5>0F>L^qmx_6&CX})`M z#VkuStXL>Uaw^HmaW-ZEcUROeq*0*wKX#2oXcEBw_|=S zM$(I^)?Y?sQq0_4|6#(zN>4AN%9pZIM+blAy=x;DgO?8IuQhFPR}0V!iQzW70;hrb z^92Xi_{r1jbV>zcsi_*kXq%|qh0^bNaHz5 zP=oPa-go@quFmuM)a8}i9$2Wv(bYl4{e(U`5#APg;S323*J-l;Tl_5)U)k(sEOiSr zI_-Pw@yp|O`Gv|mmmiVeRu+>cJA7b0& zXJ`1`h#KUnZMd-AHj1~S1NX@dvgG%*ilvsduTeuopJJq6U)ug%7shb(a{reiZ4i^U zO<90Q{H8RE{SCR~gtY|&Lf3#3A`6G$DNU-j#Mi3}CR|^jdsoL*%K4?k?!3`epzSMP z1q7(()E#i0ya+m{fk;MR^#Ag%hXHwo5j}VR2zv5A;hcOX{lF*5avLb_RxJ#kYRx$j zTRqv4h%V4bQS_BwFMsklD8IlE^X5K&8Q4sPr60sESTS9Xk$-hMHWh*i%Ss^8+7bg6 z5m{-~KX}W|X?!G9ZL%Tx>C$hJe4#hNBLM1{+^NPH!6#!C|G>cc>%%%W1#nR)mfAjd z&Luk}J9PmjBj!B89x50m`Z%GDl6F4?O;}l=;nSK$VkMUJs5Yn>?4Ok+N5M1`Mm@v~ zs!U)oL0pR-`|~RthFxrJXSd6|hjd8qa+heg7du;di#(6K+x_?S6($AYN2zu0XtV!6wzc7;^HfE%sZDf?~biYfq5s7|Id4!2o~K8 zc_H;wr1aE@Q%0fU4(wr_Wb)mpVQ!i zug!}b#GRU7?Ql&(F1@*T^46r_%)#W#{R>^gy*uF}yHgmDO0w{xQpfso-zww!V6bdmf`$b?9+EBf%^J zzoH_{SSoqbb+tUD#$U8c`a{qc`yd#QBK-Ag=vBrW`gs{qQE_!Rn>CW(!{vM^{4d`- z{MPebxidebMN3h?sNE;6sIOK|sYhz0*Qs+INCPEnWHUVf8}GAC?gobD;B2;`tgTkDqH`V2wz&=zTltFgE7>-0j$zrKX^iJHHtm@d0J`Z}lD)$Lli z&my8u!d#o~5i{sKN-HF6kx7NJXbE{~3Up)YOyE`hZtvH?VtH1@d$RXvR&7F1=4_os z++8Sazszo+g~GnA$x)8vtMdGc2%>BE#};L`%<;&g!lQxvGyuXK>ibAnbw58-`X316 z1w6;5qFE{|hvxAgI!9JoZXkQw=5iUDfDf5?32`G;VR29So|mT1G8JwqN^v^}nhiZ# z3G=H)`#fX1Z`r+QbDMzSP0U41$YC!Un?kpSlM@Z zsc+FI`CRW(ubaa--`I{GL)ev2{B*NTS=@#hc1Gp$Hf~T{&OYdC6jM^)liXIGhJm?F zU!C&@nhHtdHjSX4yJ3d0`j#bGJ@Nz#b%zDLmJAln!-1KFHBY(BnEyFFja@!}9&R7R z))L1=%Cj&+32FV6&FK5}9?-z@pnbwKb{rNhZ9q3DN#uQ_RR!8fjl8%GJ7vES#_HT% zL0*?++Lb?_nKxthA<9@${66_#bdW6)qoTYvk|5S-Xn^uL7VQF-<<%=0Z_2qPpK4{EO1NcU;O+ z`5`2uM+V@#Ko@BF87b6H1hjRK7q6);c!nN(mZP6Z6=7S1BP|#f|*T^(|m!*nbeXaVIuxLF+2fG=}itGAXyitdj=bz_6%cxX|3{M%&aA_^^ ze1EK>7Z~*94+w=}s2}`08czdHxn^Ot2F@y?{83-J!eRk1%Ep{EnNIl{iLTPed^P~A zHnvUl$&QQX_g9_G^HGtH@)USotHE>SykC#V=lQyMZj=$^=@{Vi*F>^STAz96-pJgK zWt9yYf;5*tT-W(6Z_d41)5DfJfBq_5^}MreEu@|E>R_DX{kYYEoX*;zk(Ek68`-a0 zue(SR(1-sG|Mx!-8`zrr)n}({{m)c(b^ML)U!9fPV9|ej2Pd2F zMNG8qWj}+?sw2O1^+>XZYjz@4cxy7R59DQ&=uZoHsfh>&){5;BdFj!eXQTfY$p&{( zMHviQG;R+qR!w}B4xN$WQ2l=96Q|U2+5UYOJ~#WBTnr)HVZa1;!!b|x2nd;$2=bSW z_>@~Dn~*z(`M&EJ9T?)I@?Idq60{K{G#titJcbmfZgy=)&#H5wVyznqk4xM?(fbON zWsQ&Z>7S)8n~o-OVN#|BrM7fK)WVD8{EJHQwnm5EBHn!)k`R;N^ms=-V!}8FmZ)gI zbxGOaMp(qMJnG%QVLg~%ETZ{c&^XZav9v6%F8?1{#8AtX2JTtn-ha#*xsC4nf9K|T zO=OmgExrTxhstc>^}ch5=Xu_Bk92?q>KEqTSeZk_4XEjI5O;;TJL!w@#;7^LH_>Nz zS2z&Uf`!$zblJa!1}r+ikgvTtUUDQ%q3d*k))VhAO@N--i4du8hR zK=6l(f%N*lKSMEwWuub2-09B8JM!*^D3Zzvn_nNnxk|j!01G|ELN}opDMtUp#@3xY z}Jer199a1OQh-0^?yqz*$Ez}^aOUC6xt_qP@E+u{d} zy}*QR6Pg(O1F=7>ow$|j094o1LA&@|Eg=e=Z$?C$@QNar|416CsT!)*uvNJ%zqE;# z{}hy@Qhj+)!>IKBhfo;D7o1bpCa&?vp^M+wifz$zm!i!K%b=o zqS|r~(DJs?{de22&?&a35>x1L#|`$qTl)l@yP>6ky9J5}b;mbXYj zz)W}UDM&pO&a~s!k_pZw6~Y>Nwi+)x6vsyN$V(~VIW5{cRwWjS?yAjS2!=G$JflC3 z9!Z-spKGC<@%c#Q6=3nmwPeL|aUt~m((}fDxi9Mf%Y6}S9T?<=B|MUqlIVPqg(%#e z82kQ=^`k4NO@3e6+$Emyza#MJ`^}q?Pb()U60Tt$w|}QvnwMSBDNIo=Y=)!-vG?JC zYUKEg87mz;kWp^&BrY9t;a3n=+tkx0Y<0NsTi*7;z59Zz$X6{pn5Z)wPa+;JZA=y< z?(R&n>t^UwM_0HHV=CGDW{%iAn?A>v`lDnxg$Z^)G_7j@KGsbIw_WbW8<@sOl$_hb zw$2^WZ2V-g`oHvI3O4*ObALV#(^7Q`QZ>&$`uZfb0l4ReH7mi|6-wXUxU%!`H(LCj zwF~Ou0xO}ca^+^<74BPi+gs0%xmlkHuS$OV4Rg2m^QEX}?^)ZQ3#vSTSovJY8h1ar z;5pv-5iYeXqE)K*4uLLK)(e8~$-R|av;F_=9UK1#Z?V+B6-T1u9xmqfX7l{} zA`3whLHD>8qT44AFgTYM}tPc*^*_Lo6D<&ps|NSu3gIvM{J1?Tah&uRv1(?^iw;rI}T?pXZqK zU1htTy%RJFyw4nP3{Ut=sPTe#R_df-TkX+CiEqTtAr3HF(DnR1v!dd^r8xz&408A1 zrIqRX?}n~=J7&KQs5ed@r~sc3X(v`j$RE!BdypN<|2^BVSp;=Iy1lXl@RKZ+VUb}} z=gSV)qtF`HCP!9^NoQTTR=YlKyE0*S+iA@j>05X>zw0}@DGrN3sSY*T@MG*Sls;KD zmNmr|0OZM7JnHOB6$h0OjIn45P!g4e_R8Gv5UgLdLN1)o*CF^g8X@v0=Cp+_foEh{ z-yXZZ^!Q&&i!8KRNpeV?75q^arG?C9m!4vs-LG8^-ykxE8~$_S@Y*+@e>Pov;c_sQ zq*mliWTT;8U{sy(vLf~v!`Dgt1R;VAjCno#6p|@EdejiMkd2L@sWZR9XwfSgK2x$7}h4%+YC? zT#~y7-zhzfyawb;8S&G3LHf zo;Q-n2?Ik+RK5&!Z9a8V*w*6UYw{C?a8`pe z`6kC$g?T3L26bO;Nx*If%j?^a^GN_|zIt{gnl(meRuo5ExAJ3$oI1iqW` z{%o^jc{iJv{i|!8WM{RJm=Aiw6S+6-_@m|jhW;B1{y))s-4qcBcQoM_>P;)2IFH-S zv4X~9=MTdL%p5dpVzjj*xXG1%F)@1A_x7X=$0*nmi;O&R?P%uiq-=d2GfxzoEmHNs zgm)=l$LO}y`#harpJB)B-g)wjjWpCqA%1bIrW-fUPwm+|+Ok$BZ;E98oX{KUZ0diA zr(4W1w2!*<`HSAA2$o1U1pHLJ3;6Jj`dS}vOa`*LPRqbg z&*t}hl2Ypu6*?jcGTArj?EL#|kE~kXll8u#SbIz~UowAs@A;b3dI~{VI172m<2|Oa z5qU>45rw~TgKzwj(Z0;O;lGR(uHk6zaW;7gLDJgq>;_QQVl8Z?Om8;D<~~EQk~oyu z1i@ZM|1M!dG+qZIi zxc46%|Lqsgmv(kk5BAhjU7 zO0U)li5GoY@ZN37zP@b)*r#|OMm{GhkGM{5?2@_J>1>?6-SMvs+*aI&=Q?-8_7AWQ zJwr0#Q5CBgBDRi#jJ2icO*K<5j%|u{i5sRXg6zP*4`vx|ahVc9{U=H8W3{trM!?JE zTH@0uhF#7cowI-#A*6$3O_91wS-f5`H_x2oUfgk)dbdApA60I>gldyOm_)9w0>W3p zOJQr-Qws>*yIV)#ohlB&nG{~^Y0V7`i(|We=sW>f?1O^w)H|;}_8nQpbMURV9B&<@ z%GWS|*9kwg@LVP*=>f`(m4GipQVP4sezvAvjz2;zAqM}Buyy%hC~)y#2Crk}a$fwj zZSyrhU(&nH`rGXK^HVK&QTTebhz9fzjvz{y&g6eEq1^E~`rdfat%&ON^~r4y9xCb8 zV+0|bZ``ri7mzD!eBArlg6l#uI?5FHWoIj{*B+Ov=~t)rk^K}gLE%MaT~V>vd6zpd z9rx<*$Lc6_2G=+jK!6MGN$x(q4O)Xx0>e7AHy60|3CiPK5 z2$IMMC9@>6y6-iGA}eS@LZM6koY*FaNpVq88(6_(5$9tA+r4|nYQ^}q!i+BDflV!? zSJd@X;~`Q_**EAYd%kNa6sMKYwVCZM%x%c)>ffkt}KFo0{ei7Lo8j}7XED#KQAGQYnk3gaW%2~v~uc&c! zFOaBQ^in`tMA}!1h8AK1lcQ{#E2D8(Ml8;^3UvC~9G2!}h+UnB0xt)tQD}5h4N8kh z2@iUg(fbbEz#IMA%E!2R1G2+gfwHV(U-d!N*SEFcGZ2a`Q+>^O5mv1f!J>!tQ@cUw ziOhCttr?GX{SfgA&25M-^?u8LDdEY<5sO<;^m_e-!QP6X4D@dLdrsWc>FJ|*Z!o?o z(Zy=iTKJVCv~}}J?FmB7L@*mXyl0N9%xP=ml%>lBUcQj1Cg}%&rA{{M%oF^KYR(a* zCgpb8x;O;U+q)Eo2jzgTr|oCn)8=Jj;l~CG*;jm5rahpUkN>7=@;O!t5>Z<=-f?9s z9^l(ya?d0bW*w`M0C)HR?Y=HxA8m1)4#KX$aeNjoC0AHOf>)QLgNgpfLGK$r0O=gY zGKo(jTy#He@=pSFfG8fI6eW1n5}CL*Mw4<9bY;s+DFyU-k*V#n{uJc&D)eVe!jOin znz!N{-|EP}culku;1R%LEhEvzDl#ntI*)H$iE8Je>AQ?LnYRWvawlD(=g#r%DHDYW zyQvBODN@$x+=q~OKZwrgHoKx#RBF)nPw>p)V$y(0(sjjrb4!n(6LdPWCy2iOAj0u} zpHRYW5zHA2Gwb)bk=&~Iny1=Bs>8j_(Vy;iIVBLe{rEu^Jj;Re@N2Crj4r>8?$l)x6akg@(H>01prOz^fgJ$j1DY zx=miCyKf1>&9=~ci?1yf9ey8Zl-KSno!Fn2BRyNP-`@<*TmhJc zKPutP*Q>s%Dw76QdnFYX7GG@8NZ}M=#EmjUxX?=^8y3D}dt%K|bksLyet;n#?_64X<_XRz@i?~Dk9CfEN z3;Uqj*a+n@X~@z<#oRV!x@V8nrnkcOa1e$>`uZXpgq+Zx7_DTGD)iON^!G(KW4@3iFWgx~>)wZ1|c|Bau+6z`o1cK#WhJ=+|& zoDG)m7XviqTt59-82Sl00q2XdAy~rqNH-3Tv<H6JcG}*N>ux78~YoXM{=E{>>$9QZ3 zaqq>)+_}46R2Y!VPk)vZ@JjW8uH}S%u(Xxb(4>Ii#q{8^}PI!SdvFGqd&y}bgM*@m;q{8Z;^z$HfQSfQFU#c63Zl& zk=CM+tI}Z!p7W#Kz1q<`f1pshAG`dhK8CMH>G%5vxP<(Ee5&3he;0#jL_YDR)sVNs z`!g|=UF56!QUJ0lndWq_4fII?!7F(=5nrhM9$7d!`Ty!IAm<|Oyaa8JG zM%Zqep>hW2{t_HWk;6y%KVC&FV*Q*tWu^HEvkL_(Ch2OeujWa<<%>~6{@Tz|-fp1g zJ1-6G&pXQg-)G~$-;c7TXaEKg_6)V55b_EwKjgBDU>pY`eM2aP&sfUXoY6}eLwTs= z0Cfi2p$DTeG~TDalzN(Ga z!ZlZDs1)iwLN(@F5N}Tqx_h=)FsehL6~~#7`Vy7pA9mXq(G8EUyA?XM_OHh0-H$u} zfp1kkF3SWy3v=A_Z!1Qis5+m4Uy=4b;qtn002mx(-I@WwJ~I={FWfI7k-A}HXIk~x zS$XUsV{>Mf6k3BoJ7|$uss$$TUcc}lgwEaM9tI@coot)9%ZFP^{_t!1;UKXX4*f6N z1N*P#`Qf6GKyqb2Y*C&rCcEpC#JZ!90$;vl!zK$eLX)wO@IjalUDIQ{3RjMNcF|*f zybGwedP~|t#di5}t3lL$KnFp$)SHQO0%qVuRwIT>3D}17z`DhkW4vx?YY`7U+uscS z6<#I+HR<$^SlXHu_P_K8wkf~_!|OP6o=+s_g6G4H-}#I#7Mycx(?G2oe|`j?bEf%D z?P57^kK_L6SthS2;%c`bdXJ#Nb534A#cBvbd_pMJx{qjEWq-oNRI zs4l)NtEW04`mh}rVNTsNEOxvUap7z!g1W5NW7wX`cjfo}d*{uOleG$8#ibCk!V7Dy zp{F>J16Gb*nB`*s_IofM4S4p{=2 z27OHUfi|zhIrDyo{uI)(O$wt3iIW6zgoLfw8+ps9|0T;0_YVe0mKfHDe>tb=a(@Ou z@S5=7zC3f6?i4EKe-gWOjA`hn)N{Vv+4Pqbx&2iaqNtm(|Hj0MwCpQkODh*-Hic2H zciUzAmt~%ww(yF1)OkKNB*rFVB;Z;d?}*uBHfiazNY{!q5%{DI}|IR+^qrNcxZb2e4z_jo5Aplj9(Tnp; zSIE3)8~wd2KrcuNsSiWfgNb9kx(5tcg~P-k+14FV!;zXn)fM)@kIm4RLe|+w&RyB9 zJsxT#e4}ZW&nDkdZ>%_;c>ua^a=`&~a(LbAi}ELKV363qi;vlno4f9!elPOIuOdu$ zG|5kVl4@R0Ky&iJsUzjvitlu4OUWQdLyYk=0lt8RFODHdPIs%5mhIu)*0+>7o{=M< z#Mtqog?5wDEwnbLKUe0hMh(siD(Cn~n~xOu+d+vcf{*;?aq)Hr*yM7&sR)ORr9-

U@WzcygouLNPJ&_f)-%fO;w`|5>F=rv zqAFvPFNUchZ>P5aI+;GW;5aw?HR5JR@4z$4jW%(|Vb#9UMqy9<6E3OM=~iecn|cXw zrj~RsPH8T`8Na(P3gTxU(9N|fO0$! zNLRN#$t$~4g@!h}Atzui044reb&aO;t$7&ojHm-^zgB;R^)@F&2t%BA#oEQnu-O0s zfr*p)#&6n2$LkcbYj~%7$cz|QCo{XN7y*K}-d+a4Ro{1V@ymJHu+~Dv)GgN$m_4&% z@r!#^qDz9!l3Oa`aKcRO###ttqP?WvxXk>c0dRvkHVKd-1uQ}&qD|69PG0-7(ZV!288RO`*>|5EYz?Pyk}oDB#(H3 z0jNtim^^xQ>z{=`z2-B&C+k5YBJ}9e2#BZ&`naZ1SDp*kfh*{RLu{2F_Bks1@+1*- z53{GnKg{Ob@EaUjH@R&mG!h8GWolE4U=RxhCq`l%hVivXlDxOOfg*SsnTQTaFLlqTl z2n+2dZm9OTRBe=^hYcAH`FJEp88!?PHSK)mRqqAr6tG8U%rN3s)vJa<{q*;UPxyMUW+r2(t0w0oSBC$x*tdP}AQbzShCj6@fblD+_WQK_IQMXlwNBrJF{`)pr3fPN_Qq{~6oz#JpnP zIZP34+nCe%(Tp4bQ7q}hkqRH@CyWFt<}h`T?`hQ=JT%Ypi+aYzH%$Jv{tuyD->z`B zfdPsbomC;h28-*0a z_+6TLsXNf$2mTwD%VISl#pFAAxudyNO(jhG0zBE4kn3y}P}af1U?yYXZ5O zFxCg}nK6;41bgy&bneGmm+f=5J0n*1Eq+hn%LHYrp!f(VsS8b!A?N0Dk=}O%gV!lAh4L6@eFl)`QQJ2_n6#?2V!rJhZ z^B)81i$z-&M+}NyeF0B%=Us=9_MVb7DQMUSxbc0YYeLwcX^D+9KS}-^@gCMGUQxzX zmK#gKoD+S#LPbBrGo(TVH(Eho&px_)C zx}GfHM`vIcudo)o78z22ruln-E<>*Q`mNKj*5!@|C7mt(4+0g>{9@eLb%fq34+=j%DtM05gj5Wq|2*Z2$ zg4vpuIF){~Z~LfKs#{RE6y&!Ww{zIVW?+^=OCXK7Mf-jFSWn8N@j!^(YYX0(7F$<} zEP+P#m&Xi~ze_65n7>`qdZY)j;&7XdV_k?ca}N{Ri%Gd{-sUH9e!{*#0vB`zPKL#b z1;z32?ZJN#j-bvvnA$<5!W&w6Ckti9QSKgb{6>^=+cEbXxgVzi?CFeqIyb7=FnEA9 zE=oVaX=;B=|29;O1i2=|_`-kAZ4D;pIb^amwD-TeSUMlRiTR@)Hu>q21xyV?8l$fYT5 zlb3Hej@H)N_A@Mz3$?E+KQ71C}`fBITf^`QhJWvQdgL^0SA`Rq)9=PFt2PSCVlYkafO zM+^2}(bg8;zZ^Fg`L1W3RtICC{i1o(QAnq+2j- zf0JLmZABO_u@TPboj7c(Iow4Fp`J;}hk%`LG+L&s=sQTs%dHfqgPojh7^DTQ^A{JV{g%7YA2kI4JbLjv_@ENR?z z!jMqp2uYqSat14heEhK5_$GHSN4386WTZ8rR5O(AcD{$A=cK~| zw{6u$;b+o-W0cx;7UQDDxZFkd5vR{md1uyN!IJk1`@iF~ycQ^rxo+92-lA9@c{^W8 zUl%`YnzP;IleSfM>urV9!ecw4Z#j8q?)b>addtutzJnyBy!N+t3*Qn< zLtQ?<8TUMRiQtMYufzPtMzgoj(aeD3{&LKpPQ1(gm~-pn>*TOIPW0t{ZE^l%9=6zD zM&w;dNk_9q)tc)5TU~GA`MaI9tAqHzM&eWN>L?-7KT7#;nqw_&tA_pXcFV5X>zRb; zp4RfzsNQkx=hgUjZ-w{(se%B}NmHMF0&1i6+xzr6#GFd-h{2VHJpl_K)(p^g;&b|+ z>)vQ~^-p2sy%K$F#HTNyvjcx$8+4uELMUe6_ur%99nrZ&pTvXKpaH_Yk53DG6c@m4 zMt)26?MXNbD25?i#~<09OPiasaW)o#~?AadnxlDUEg)(nzcdmXm zw9^ivPFJI9a`k*aQ02_bmxw7sPc(MM+*$fy~eUPnU^kVhl zoBL{G5?|Tqnn?n(H0(Pu@H03JAMl!2HP7|cW0aIvZWdQ_`bbnCzx{WA>#74x5JWsx z(|x&hCHs3V0jCP&5r|J+Kwu27c|RXkBSd5a%u-3lV99GP2cHf6e!y(&7VYF;1cOR} z+Xv^6vk7Bn*6rqmW-+QOQ9MmotG?Q@x5MNOw^68vF6gadh#(_E1-I47TFM87=JPz|P7WB)WGRg% zT7G>maDb1I!QVI`(iHSkKl?sJPg+`!ZBvQL^Y$L zN>0?pt7Z2O{Efb-8G+c{lqciA*V~K|D%z3)m8{d2=b+ZJh{1KUzU6QJ4YVnc;}Dq# zqSjgg{t28r`XU&lKxOlEZr1iyb$m_eE_71Oaw7AlCCwAL8Y8_9F$57tFAHZ`i%4h& zu@rt<`v5y*Sj;RBJ!XEaqzNQaDGQqR+dl*T8gf*K*$TW|x>M@NdaxycLe1-MT{!v& z8sP`_PC^y40jnaF#%%5J-L3z`wxUGG6$DDlqaJ7-%``LWu<@x5w_QywBwY#YMONl^ z!!f!u%pU)}7i(L~FK>0-$VM@8L~EpL0*~J)K{dMNi)U5Y`IV=emKB)AXU0lCGSNH>x$wJYujVW#>sw#hl6B`ld`}X?zfC~Fs*sDh z%83vG5rFR$>@S!`{L|pq9f^Y_S;4WZ2#+C|6TDnS68$9_6YJm38b%B1lqGEx3=|eE zl0tsVG|&TTNr0Rms*ooSKoRcfFMy`n`yBE zpzv0ByH%mI&H0{VVL5*-@G2@^@9MZQ+dPUQQfVABuZ3iyFDHTA%;RIl~S{|t8 zd|*MieEnxGadreVI?c-IJ^vTGrf_GYbGcCrW|=ARV>AWs=j1%{Fa^Gw1+;Bo+Oxtx zjAV#XM?uOk4J;ziE7RFFMn9`8b@h+PznsZJa^VbTaeyzL#>2&uPlO29Z@Ng23MvhN6VB^>~zF#e8+x-p%O%9M#Ny&QgldqQ7olt@_0V{)kwa$e3Tc(JY-ya@rLb!5fE|!XntTYhr)7&YHu0to^0F{NauQ=F;bB9 zgR>Qdddx5w_Rr$LgF58;Uo`#qET@IkTfEh)f!}_ zRNi(2+vuz+TlaOaoV{^w1m8gr+0rQyI>zc z-UqZ)kF^E>D|1{wmhr(=+wi;SH51vwa5sG7^M0pDBXA+JsgCJ&gT+TI@E|}eaBNi@ z@L9T!mR(|TEsa&BRZo-lz1MqAj^hZCaoD5FOLMu3=bQq+{6Y!n&UH5UO(pM<{;$)f zlG8u+$+vw!E~iV|n<3tDsX#8xd)U~2&M>1{5|;Cac-pj`lhn!K{ZP(MNAnStNXn(D zD|4E$p9q>qjkF!N1WQ-?b2Ut)wdGdA^LR9$@i8_2b?qyUV12m3#oS4Xg~iY=w59qK zJvvh{vM#W@<$SHGOuO69(cKbAUaMbaObb0z(qrNP_@SkSnZTb<_5CG7*nTU-|0^CN0&Iv)Ow_T2`#tzkLEe;=GDqr zXXC0F-A}45TvPef3iI7lSS@qSESK=Rb81AdxR3V zO!u7aklR}@6btP#P4M9Rc;fQ=shfAT`2{eG?3m z4+W#%4J+RCH${-Ro|zN6o?jZ=g{_+*SnkN7NUvE==^Xo)vg@fC;1TI_W_q8@5WO%MA4|47%2^TGs)f8 zXrYRYIv;Ap`wV%dkyqv}vaA%e>=qqK=&#U~EO?Mdu9e{yUSq7}cw{~u2cVe_2Ko0A z^sAx%^(V}YH^`&mKo4M_CARh2DcPq7H#-tiW&4ipkVS$*tS6hJ_Cl3|HBII)A;;K# zStCu3-pNhDi0t#zP3+T%#?58S2PXQ@u)^qf$c;vT?eoAj7T&V%LEak~rv7cRYUci8 z58O2vyN72V7C$PP(0yD$xD1`f_OJ%2NvAJfd^7^B2})TSXE~L5bgHWXts?$vI{vQr z*}3lNSDkO~kx2r+8o9Ew)~AQTvLuyvWV7c%@*VlZ`xZ^bt=|L6>7Ic;4ly>_~x)qkk2 zo>_g9b=wE@4<;k_SourJ`vM0q+V0h;kB|+kQPfkXX;@3N5IM>OKPn_=_@oNvq8hwh z9Pxqb2f@+YISQ-+H7@Xp1PycHl)GGCO%Y)HIjaHN;^`%I0Ae}4>FAB~fR1B+ zzi46kg2Jlr!PfXBOu@l05;f;8m&1Db&!HxCbwA^YNSJHxeJ+)`qhm|aFKbicb(2fr zAgSsHGv-E8SsBs!Yk=nJRCYb0PTeJ~*m88LwXRFPV5^y^pH=kme4(PL6b~NlVUFmnHa@dfnwSk;SjOym7iZ!LX3B4;REQ+nG!lQ zul!By6NBTtY(_@6u*E&ikq7S@t_q*^v!l62F2h^|*ZwGt8l3;K|2}zjq%G?On>ASM+RYeb{96vV3CXqH`AiJ)rm_`s79Dp+>K4+la>qT#gow^005_g3_6dYqmEJU*db4*m6}eGFe(){VTL zh30G+j*gb_12sf}uN|&gw!at=U@-y4S_{cHwCysfzYcgp14sFs?(;*Kw`2qY@~_x& zRlv*^8+2D5aGM4O?zC>G121MhtoIIbd7OJ80q|r7xDL$ldR&JCeM$(ZeQxlv|LZ>z z`_{L;5!l2Q;*9aR$D`ewH|gTpDbt4RxA0Ypf5kFbs*y+3e2@|{%)d>!=(LE&Q=-Og zJF|P=bS+o8Vp{p=0wcfc@Lh(nQXu(u4 z5=Q0YX3~w7Q$^<6NHzT1v+0vA_Nvm3>x0z>3CA(oEx?h7Fm^_aQqKKSK3gwNq}1Km z+%)EUwe<9do-hO#^V$o#d=rGQ^A&#kei|jWXkIWGg6wFXW^q%!6TdmbU2gOH zz1)PjhQ~E#-Fwu4P4#~X#_|11 z>7d)^Oif3i?-`jdxSz05CrF;}NGgJ)64q0(vfPS ztx1N~R@p6h~J>rYa_Y~|sx-Mp0EDRy5~qqrPDOUt-`!cUVYPHF3%_nhV%yqc9C z`ZYPdF3jw?P_3+gp)_3AnZfmF=|^eat4oS9h82-m&MYl{-n@WBN*x%2gbhOnDd$+Y z2E?+WxNj9)Q#pAfH}16b=Cj-0LSuYB4xWZ=W^qBfeij(=bm;WfVokLCiB9-NVRP=$ z;LOtj{i?+@Y-cQ8pSO6nrCRVY3RxSvUxt@J4GdI{ob=R<0m#?(R=|F&bI-Wflns@o zLd5)Ca?@p_AFa6I!xISDtO0bO{o)5+&7wV!3LguYGF`eo=C3JrN z@3-lZDre`YCXUj`4K<0$>vIvQnp(VJ zYd5&^AtfEtFnRD|J%G*c{%VC#*E8j+>{vRcdfMi-8t6*TuvU&0@Akgd*v?or2{#r~ zpun#JBi&Z}Qftm(yy^CBI9o&Kf-W_e({cO{v^8d7Dtia}i00&Xm*&Ke^2NC|nJe1= zwJn}q+HEaw!2JHXf7YY6;qt~egEYg;h8P25`9ujjM|wA8?Z-opbL zZh^g%;;>}EOW#whq3JyUv0}s{&k$ZC5%&qEc4lP|$4f(yH9WvH=jF_KLWanXjPKolA;xtl&i_UNn8{ zedm}@pXA@$liYE?a=x{2i5YMqqO?Ho`&ILlyy{L(?>P?DcI9F{3SV|9T^Y|ge^vbD zlO6x=?~1k);s1`ZWptfme#Aycg+ub{SEbf~SI0+3NrYdKlPV)D zYs>z{U>4PJbH=r9SRU7dBC~3;R@L67}x+~BwN zKV@&dwi|S7k`Tl$6{AR<%-@18!U9vz5H9Yvcb*C|@PT??_dRtzDr~jmP#-8xAc-qf zom?|6k<&|C`n}$O6Gvd51z`LYfd*BQb&Pqg_TJFqd5Q6NUHrXi z`M}F_-GxqT)d!ih_ks6?Z_!{%q$8`8bnUEEi{L!6Co^V^KiQgc$m=#AVE%*y$kJc8 z1J@_P3H_MHFJJ5Z`tM_YiwmE9Jk9;#XM506pOa~9y`TSih+VQQ1!3+!dARWhiU~k{ zaH{j7M!4_co>W!k*ao`~c*3_vWa-v2=NmjsU*g?5J=XPo$~y1VkIfC`8gK<~O0s@i z$3zpbc$4l4=Dh5J9Du4w2%7FusEu>Gnmtr3t!=cz>~`PQ_tG=mUD5{SU^|NvJ_DuB z*yL44JU5TqnGgNGz)fCPxs9%^_iV}REZvBd&QysKPaigE7i+4z3$=%>b?c(SYD0&( zrcU^>06rfNi2l{L6bV3E+P)AN4!zmZeDrqa0G&jt*~hShRfwynWO@nUN%M(o#Q_N& z4~$?(^FV^`AEL+@_}glTvNCEa^aqlB)PGnY(J^EpOAYuXUz+0oIh+#FNNh2|K7Bmc zw6u5How7e=KfTGgaQ$!4_n$)n{lyBWR5t2!Oj9|N$F+7X>EoHyx38{^WNGv;Ua4#P zT3&xmBS(0v|<}dDZ_49(5t9z`#g)*S!?%nSh zD!mKPrpi@mJ{7Rm$=2`|TwOKN-8Jz!b~>8PymjiJ#n0NAW+-{j>Dx^45P-po{;PfD zkk_LP)0x<+3h^%{k1q-%u`ckkoQw#Xic?2ql)27MpZoP~r_fFjW2<^PTuHilxhuGz zF+b>&lx{aunAD}=KMEqa_2BVbf8E=sia#4&&Y&3n<^)|DS+H<2rfLq+?k(h+tCg*V z&3Xy^2d%`$(rgO1HRLx|XUPf7go`tq4_#EH!RKx2*>j@Xz^Q2506Sgq6xfOPR#wj7z7#Zj zpT*F-I<4u@JAx?ortsYtr_LuAH`a-_AaKNoXt?@+Ner<8FWcR-v5#_>U;j|JGpn7p z&ttBcYHK*ipqJRI9>Sir^RH)0aKCBtYWdto$5II*J#V$Xg6&+j`}59~+kcd-KV$LY z8k6vy)kK&kxq3wN`DQlU1W_Qm@Cq%XIT1CrzqN&g|ST@`#xP~s4fmOC| z$XenVg}3NA@1B4(2t%xVt>uvmGhThBZ2x(o|C_|inAa+6quC#eOlOKE+Vm)A_`3;> z3F9C%0DHNps$8t?$2jkiz=4`nFSR`UNL5aBfaO)DI@A#Z5f&dGIN&DAj9IeWGR|Gz z%kVav$lS;eJWsHao$M-XG)VTi(KeHxf&ZpI8c0nv_lj?#i9YctuRruM5J>t1#CN_n z$W`}UX7A(AVz|M^mvCeLKYibI_v6NTTm!yvEh!g@1~uq(OajA=??>8ul3%J=YSaVQ zUuspKI*MzO_@27%ggj93fD1&jr#oIzz$6@7h>+ulw#@Q-#CmJlmsbp!=K9T^SRKYW zE)qRGr<7lOSddlHU{qN;Z}hf>dCVizQxcn5SXUR5*l-G z-cW5UeAVZX67LwdXXRY4Su%Q_dsoYN9!%lTw#+bA!NbJptJp#9k6H3@ZMfI$wiLlf9 zXlH(E)SC{+QpZGCV%puPtrLPu-X0$zUCG(WVNUYME2r)B1UoMfv-u}s0C+i@TP}RF=A-$OJMP0R$aWI+^r08kIODDyi5EnQ%{3!G&<%806 z&maOn6}B>{YoJ}ByYwEQ>3h9*i{kVr+y)KJ!p^{qy-vx))5d#=+$uAS?)%4`?^fl46BIL>w(9g zEc`}%@eMl-F7BZu4Rc#eXY*nhc8m);Q$qmm0qn;1d;ix0pxBv~-pR;XX{y37{TN<~ zlN$0A)zrONlSZz7aO>nXc|Vn}W3=q8H9pz)k^u9Db~^ig_p-amQrkwN=(myh8A#LP zNf-*oqIqfxiw>?`H~vz5VK*~=ep~w2$md&-=_0oFEk9qEekAYAw?NxBn+q?rm10}L zXDm~hu)0GT$eM2xue`N$wi@Em=KdmQ9upj`H%_n}0oUQ?l_f6Lc&6_EZs!{&ORZHv z$;*SNHUsCVg`3SCmo!wOE6&yTnK;K*J%e{IMBEB$rmHgw`*-#RMw{NrCa1Osw@;r+ zR3+_BT%D7=Ne9#DjZ$ySOv%8VsFq%opS*YqZ7tf52sdI?LBH8eNp_WYm1(5L;}MOZ zy9_Zk@2{hX(h6x$U&)gm(Ev5ZP)KAw9H3wY?i0t?phT=fCdsvuk}pX7%! z>A{obW2KISto!XMMPY}2%e+6&JSkt8FXbP<5rRZ0xwGX*yC0|pAWH!ElqxAQC&?7Z zWzRb+t$IrN&v&nhLJtsN!}n%Oaph0B6M<@j5*LVassbM2tq8b< zLQtraC9Em=cdfyL^w`fMKjxc-N4P>@t-y3afK~nca<)4Lk>Go>Dl{m z?cLdsCu{>fy>YepRyNAo@di`a#QnGOj8Q^8ME=Myrr%eQJ_YXDi2SzZ(e)PLc;?B0 z&$wI{8TP&Yb(rY7;)|P$@MKk(Y&-@7k80g%3fL>p1a5z_oPnHebGjOp*Mm$ydAyxx z;Vl|e?7{tuJnu9W_G*`lOi8&;s7i_mkK;+pw7I^t*XZ-Yd|{!)n9E@bf0R5vAT#3q zSp)yGiQvO``&dWd7aTZCFLERj>y(O|7SWzm;bv}ft*nQO;r^=7XHkJ(6(uMEPYcHm zV${vl2%sG-Jc5R81Y^6Y!i%-+4`DkIcD{08LV0Btkr|;Dq(~X^6@Vp`8;LATl(O@7 zyz%fq>yMd>aALE5jp8=Z_n#o#WPcmHLH@yD;1kHE=!l(LeF$j$?=CV&zF>Frd&FkK zWhq32oZ28V+P&7%UGsiSZV<6JpU)lF5S|GNE&h(55e;(cJpjmN0G~VC>iWyv^$J~U|}F0yn)rg(UQ)&qJ?qqzhTsb}cvi}Wnj z!v1^{QfXqj>>?tBDmV;hSD#K0&nQkdiKc-vC0?T`Df0=J=h_M@2BcMkO%_k}e1sg3 z2QIUeLu=di%<@x7FYfF(VKLW;b1=RAvHsxiUzk3V((GEW5oZVam1bQ0%Hb=YC>cp`hDC+_lW}JBuLwt# zx}$FeX{PGw)Rp7LcBEV`p#C?cf4Wy2PYqE+l5em8B`^Jhi4TnW@fK~9_~qzxQdjrC zk15wPYD5s!GqmLa5T7pzKX2J6rjCLw;f0`8n~?K!YMbLv4{ejzq|iD4`gCrPd`z6_ zYVSSNyY8z^zS7)9SLYNRau^mTd(l=yLT6Qcngr)n+v!rht}aQr%35E*pZJmg5=v}Y zw3rQ0BQP43ay&^zt-=N5utDOggilW{)??}S+X?JB#7LhJocSz)Jq!dJ2Blp%sUI4j z&QUb=b7i}ZlhC^{5!c&lft>&8=Yb>xHpV$P zfZx(|+S0Fawnz_wN8bKi20iG#G$l?&t>MBOMj)aM$9wJa|Ge_jz`goqYp!c?u}3fz zU7~;Szv|!Nre-F$T|@UDN>3j#jy-=VV`N|pS7LKHPKo4{4o6C9Pj5+#qtDp9stTqQJn(MGT>z535&*MjYuvSSjaLjmZ9z#R$``aluW0Y1@_8CRy-9H= zIYthf}W|VjyKym)%mNILd`b(~z(NFL{%} z3H;V?Rnt;#B~UN@>ll**t^_dDd*uD%_pclv#jzXQd2n`e9kA*UL7EhMx*gTy19H{a z@PN79cL9aUDo>r`dLK)h9hf|o&7YZRWmJmUIk34WLWU5FK9BYz50YhsPITmPQP&Uu z4_Wv9&vxLh4ct~$RB7#^cB@705z$tuDq3pRUQv70j>J~GXl;pAs&UP~(Dg7}u%k|8yqDM_69^9nG z`7d6a-62lJ{P$w4ib(qG*JRRKrp0dW@btgksa8ldqAj-#PUZG{6YhIEwR(f$j-2l6 z`z||exytX)#E|DEEIz@p{w4w*Y$Uc{v!eI>&=lb=RCRve3T2iEZTvt^8ceK9`F(MU zpcOxu+_`aFx3osQhm`00UR4O0Eus&JHUPgZ@1rx}Z^pD~-2FxMT*>8|q!s&NS?xg9{?GQd;cP!%<{5m@bi79b}k9|^{vE; zHIQ?aDbDbuLsX7>eY!)@B=x4o*Z0vPS^K-*i&WNS&DeNXgq=o(Yi$g9cj>C8RA_%;@%zg}gah>1Ua_XI| z(inOC@UYbT<8^H40c!(6Pvy;QA#;g%rfJH^1`y{^{wRVo-EWV@Uy<;lN18SE8c#fK z&_B@rw1A?n-Wp*fZ)-W5MZdj_?M0D@hIrtQ&g62&%6HHFZD&gcpeT4-EUUGB zZ}0Rzd?#X^`8==dumpE4O)%`=q@;W^d`_bVeRwuN7?@@JspBV0re-Vx^yf?jc4=0UH{ zBA`c5yfIrd?ACc743`r)hNt!RM zL8*cvUAGomz&Xa_-5pxqsAA^YEO*`aiqI8e6)|X#`J7?iU7>%XZkK{7@dJW6IwzZd zdQdfbM7s*kol{5mGIo^!&d%&Uxt~er0liUp&t}=JAk^@~jy~sn=>TyUzHdXWMBZ)w z=5WkoYM3e5=w-Zk;Jq7tuXL#Tbk6;5cS@)5(=8+6x>WUrOeLkf*EeXjc87UPkH1B; zf+CYU>s`y}P+;Q@%fq?jC-&jHVXd#j@@{Cp9>&&8BbvLu|GKvCPe-<~5TBTo zfU69>K*^FFoV6$Qw4&`1a5;meJhAJ2=6aUkc+YcgX~plxxwi2M{8JHP3=nhuAIq_~ z>n`BBd+3rBuL&1C`tKM1%A)Mk&8xz<^Jr|n+;y&|R^uSMq8!>o*nf}plkrbU+c9)W z!}2<3j8dT?_ft5t6J>iv*@Hm^cAi_CrZ;r;(qCD+2P`=o7BTTgU3;iRILfY$_Vrh$ zHI#DiHQe}KkVR&s@W}c5!84kJ?p%R)k5)v6<|2Q-6! z0hRpJv^}=wP2{@|pyi!U!*oW!wxwa1&A*$pV9>|H`pEo3gSJft?T2_I3L> zf}VS8r!rvx9(D-W-DxtJ>9Aj}CQTyE2zbRb(AHx-V`fJYO&)#A#A;RS(%c87-aqU3b6tsvkwy@FlUS zsW^0~fS}oRL=3((LNq7$ma&K3{))6=^vO$D%AjX(;%w+oAaVO4oFsu~uxXdzg5N`2 zuLuy%Ib|MxD?`0MR&XR@j29#|t~{6i<|>*JOBF|aAl4m!5NC*JWuhGzGJ7aT_WPoJ z78|^Kw-y4H-pIp>G-zy8n|z6zQH7E$#Gqb`Ic zt$*Lf5JQ(fnkgd6ZvVC`U`;C>!!bilngM@$ZY#B$8CCys?v%@|FeP?h?Puay{6!Fd_LyOyrHF2~it<4!?k9!& zx0g?1HM(gz9dggeq6P9w{w-9|Gb(nRIp97JD3Y2MiaUh<`dc0dC;)zR$bW7<)e8@1 z_tSz5=9zI`YoT_zvSe@iS67xq^y7yUJfElRze{rFuCo1&tl|(#@l!g zD{J-GX^C-Z9@?d2XSvVW%$8luMm)cE(agUDU{uG=X1(gy;k?Lc=v4fNIvj6c^f^`) zV0%M3vc{(eEm_jWzlG8+tK)eBjaYO941F#R6|K|u+xbNqgrYUBswgZ`1CHR;{sR9#w~7j2hvwMYYfD&YwjMre)@u*k_%e zm;AyHc6TzdztIybFB2Ukz6}6k^E?|K2H%l>RIptowQB)46={L;MYqzMp+$W3dxDWa z^t-nj^z_{?JKf`N=fxcg^_^~n0E};>YFuIiRRP)7TqtKt>E5Uc_a`>*ChLK|Bg3fnsZ(9-0l>MTMvKLD_H|t1wPlc*Rm5stL!zmH!QSo!R zfZO{7yVNA3m7JicYuURUM|6wg6>*!7{K?pTVVw1YNZ$s@2B61SY*X(fX^^;8RkM zEXA~k@HbDulI|NG5TC{AuQ6BU2-~R2BYI2bJ>xk5b!>jY?OR?OB<543_uIV(s;*U) zm^IZbf3ZuPeoC~{{3x2UGlydhupEecA{*+tS4Hd)gY@i$BKxGT-5=|c^`+awPuKsN zjSqI5hPtS~ehFs+3M|RY7K;t~`R^}kTFLShYS|6fa|1{^ptpLRG~6wm0+Qh1r^9li zHK`&G-aKQBYrV4W1j~A`woPXX}N-UTeI68bdzM;f|TE$ zB-&3wM&JQ{ zVO|=XoJ@d~LbrY5ka~J=srrAWB~$hlHHKC zn@sm6wCIMp+gOTkISI7>XuR2>WoN0$e+_eS#Pv>k8ME`+%XhP8clQEUBe#t1@@E7L zAzGD6`4%iA2O<%e;>hYFa|zZ9c75fZ+RbI79$lD?0AY=iNao|gQnte@;LVeJhWio@ zhCeL?;tnIAmk~=@ht%Kj%6Mu~xL@i?iU8*YC{HV38sT@nw)E`+DT(mAzyPXH0 z!M_tOplC{>V|FnuqndAdNHd1Plcq~-i74{=O#)$d;6x^DLL%>THxkzSQAIT6pTCEFfo#fMUs5D8%m2?Z3jHu`w&umK?xV4f= z$NH+l8-Kktc5=`+VH><_$nWXS;EuNzJ03o9@~W2~k6vKk$$s~=eC@oR_nbfTqP3;s zsT^c>oR6h1q2Y_okSJWpP26#qcJPxN*?6r>{7I5gX4RL+tQjI#V6$+m9KAQP0||!y z{prtR+-@m!h+kyl3Wv`-#JZ?Wjt_sG;N=_k%a4wCo{rTR@==1M0{A#5MGMe-4$>h} zVq11~y~}ybe3t9VJ)V7EASP>)%kA0p)j@%@&-u$7>I$oBYoBc!#uQ6nst6NY_rk%N z9b?40tUp$PaTVM>375|f;kh@Cd zQ6$Rv9;N6HgyCaJq(;4y&nwl8_i@iJeu1p8Mj5}U8Rrd}91?2m;Z-jJ|6X-G;)V&{ z1zMfcsNPkCbi}{h=RDu=zOqX#J;bzSQiIxTqaGGl@AoYsw!hXAO?p1b3i$HP4PWwi zuh)h&PX4hYGHkk?jKsid3Y8K4mNRQ8=sSq%$W6$s1z(8aA zA;iU4n8L;?cl+^%94FzjkR-)JpP})SNZizl2emB1NSR6AbN%Kat(1!4sf>)o(vT|& zMs=E9Da38Y;U*GJw}QXmfm}VW`%Wh(zaaUjNEQjzK82Kt6Trr4Prq(IHCM!!cH%d* z1l61~8s2UG0sq#zkH+#AUi{oze6;lH-*ak~8I}osXh0g>=DC22MDLJveao0j!& z*@3_+hNtTtwlW1bsdYg;TFJiQ8R58iaZlD{7&mwrIbNGAx$(Ev)%u{&?6JG%POrmis%wCIujVjdNG+pA+$h_BTkik<0U zc2A`g7i4C)i|xr6d)2d;YlWT1py9MvPoTFRc_uiii;8+q9_*5QlPl!8EY->UXtx&h z!l#yQYmRMZ(@ooD?mFXVeZwVWgm=Zmg>0mu_B!ID*bk3D?CrQ%6(@8e!Q=jxi&j4> z(Rvs2f>onu2k3coa<8_~kd7XV(t`B6JqzX8r%Iz}^%)$LIDK#Tt9!L6@!)sYs=w6N zZSI^*fk4w?H0NHQv|2?Qvn$m-VBrRD@aLaz`iJKv84^a(z&=IXiDoiKdfh-l9K^9d z4b@QBR`3$-MLT5yg1e?e9l1g#t*@!^95&pdjw)Bb7xe;rPwBLWwJOy56vOv2_5LCO z9-71PlSAlTYZ@f^yW7+TnRPtOI?+SCPB|S9$YZ);OT2H4#n2LuQda-D$46MfcRv